Code cleanup [skip ci]

This commit is contained in:
James Cole
2015-06-27 08:06:24 +02:00
parent b8ed489b14
commit 9e5484937e
97 changed files with 2048 additions and 1777 deletions

View File

@@ -180,12 +180,12 @@ class TagController extends Controller
$helpHidden = $helpHiddenPref->data; $helpHidden = $helpHiddenPref->data;
// group years. // group years.
$types = ['nothing','balancingAct', 'advancePayment']; $types = ['nothing', 'balancingAct', 'advancePayment'];
// loop each types and get the tags, group them by year. // loop each types and get the tags, group them by year.
$collection = []; $collection = [];
foreach ($types as $type) { foreach ($types as $type) {
$tags = Auth::user()->tags()->where('tagMode', $type)->orderBy('date','ASC')->get(); $tags = Auth::user()->tags()->where('tagMode', $type)->orderBy('date', 'ASC')->get();
/** @var Tag $tag */ /** @var Tag $tag */
foreach ($tags as $tag) { foreach ($tags as $tag) {
$year = is_null($tag->date) ? trans('firefly.no_year') : $tag->date->year; $year = is_null($tag->date) ? trans('firefly.no_year') : $tag->date->year;
@@ -195,7 +195,7 @@ class TagController extends Controller
} }
return view('tags.index', compact('title', 'mainTitleIcon','types', 'helpHidden', 'collection')); return view('tags.index', compact('title', 'mainTitleIcon', 'types', 'helpHidden', 'collection'));
} }
/** /**
@@ -208,7 +208,7 @@ class TagController extends Controller
$subTitle = $tag->tag; $subTitle = $tag->tag;
$subTitleIcon = 'fa-tag'; $subTitleIcon = 'fa-tag';
return view('tags.show', compact('tag', 'subTitle','types', 'subTitleIcon')); return view('tags.show', compact('tag', 'subTitle', 'subTitleIcon'));
} }
/** /**

View File

@@ -6,7 +6,7 @@ use Watson\Validating\ValidatingTrait;
/** /**
* Class AccountMeta * Class AccountMeta
* *
* @codeCoverageIgnore * @codeCoverageIgnore
* @package FireflyIII\Models * @package FireflyIII\Models
* @property integer $id * @property integer $id
* @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $created_at

View File

@@ -5,7 +5,7 @@ use Illuminate\Database\Eloquent\Model;
/** /**
* Class AccountType * Class AccountType
* *
* @codeCoverageIgnore * @codeCoverageIgnore
* @package FireflyIII\Models * @package FireflyIII\Models
* @property integer $id * @property integer $id
* @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $created_at

View File

@@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\Model;
* FireflyIII\Models\Bill * FireflyIII\Models\Bill
* *
* @codeCoverageIgnore Class Bill * @codeCoverageIgnore Class Bill
* @package FireflyIII\Models * @package FireflyIII\Models
* @property integer $id * @property integer $id
* @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $created_at
* @property \Carbon\Carbon $updated_at * @property \Carbon\Carbon $updated_at

View File

@@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
/** /**
* Class Budget * Class Budget
* *
* @codeCoverageIgnore * @codeCoverageIgnore
* @package FireflyIII\Models * @package FireflyIII\Models
* @property integer $id * @property integer $id
* @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $created_at

View File

@@ -5,7 +5,7 @@ use Illuminate\Database\Eloquent\Model;
/** /**
* Class BudgetLimit * Class BudgetLimit
* *
* @codeCoverageIgnore * @codeCoverageIgnore
* @package FireflyIII\Models * @package FireflyIII\Models
* @property integer $id * @property integer $id
* @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $created_at

View File

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
/** /**
* Class Component * Class Component
* *
* @codeCoverageIgnore * @codeCoverageIgnore
* @package FireflyIII\Models * @package FireflyIII\Models
* @property integer $id * @property integer $id
* @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $created_at

View File

@@ -5,7 +5,7 @@ use Illuminate\Database\Eloquent\Model;
/** /**
* Class LimitRepetition * Class LimitRepetition
* *
* @codeCoverageIgnore * @codeCoverageIgnore
* @package FireflyIII\Models * @package FireflyIII\Models
* @property integer $id * @property integer $id
* @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $created_at

View File

@@ -5,7 +5,7 @@ use Illuminate\Database\Eloquent\Model;
/** /**
* Class PiggyBankEvent * Class PiggyBankEvent
* *
* @codeCoverageIgnore * @codeCoverageIgnore
* @package FireflyIII\Models * @package FireflyIII\Models
* @property integer $id * @property integer $id
* @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $created_at

View File

@@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\Model;
/** /**
* Class PiggyBankRepetition * Class PiggyBankRepetition
* *
* @codeCoverageIgnore * @codeCoverageIgnore
* @package FireflyIII\Models * @package FireflyIII\Models
* @property integer $id * @property integer $id
* @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $created_at

View File

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model;
/** /**
* Class Preference * Class Preference
* *
* @codeCoverageIgnore * @codeCoverageIgnore
* @package FireflyIII\Models * @package FireflyIII\Models
* @property integer $id * @property integer $id
* @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $created_at

View File

@@ -9,7 +9,7 @@ use Watson\Validating\ValidatingTrait;
/** /**
* Class Transaction * Class Transaction
* *
* @codeCoverageIgnore * @codeCoverageIgnore
* @package FireflyIII\Models * @package FireflyIII\Models
* @property integer $id * @property integer $id
* @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $created_at

View File

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
/** /**
* Class TransactionCurrency * Class TransactionCurrency
* *
* @codeCoverageIgnore * @codeCoverageIgnore
* @package FireflyIII\Models * @package FireflyIII\Models
* @property integer $id * @property integer $id
* @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $created_at

View File

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
/** /**
* Class TransactionGroup * Class TransactionGroup
* *
* @codeCoverageIgnore * @codeCoverageIgnore
* @package FireflyIII\Models * @package FireflyIII\Models
* @property integer $id * @property integer $id
* @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $created_at

View File

@@ -5,7 +5,7 @@ use Illuminate\Database\Eloquent\Model;
/** /**
* Class TransactionRelation * Class TransactionRelation
* *
* @codeCoverageIgnore * @codeCoverageIgnore
* @package FireflyIII\Models * @package FireflyIII\Models
*/ */
class TransactionRelation extends Model class TransactionRelation extends Model

View File

@@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
/** /**
* Class TransactionType * Class TransactionType
* *
* @codeCoverageIgnore * @codeCoverageIgnore
* @package FireflyIII\Models * @package FireflyIII\Models
* @property integer $id * @property integer $id
* @property \Carbon\Carbon $created_at * @property \Carbon\Carbon $created_at

View File

@@ -52,8 +52,6 @@ class EventServiceProvider extends ServiceProvider
$this->registerCreateEvents(); $this->registerCreateEvents();
BudgetLimit::saved( BudgetLimit::saved(
function (BudgetLimit $budgetLimit) { function (BudgetLimit $budgetLimit) {
Log::debug('Saved!');
$end = Navigation::addPeriod(clone $budgetLimit->startdate, $budgetLimit->repeat_freq, 0); $end = Navigation::addPeriod(clone $budgetLimit->startdate, $budgetLimit->repeat_freq, 0);
$end->subDay(); $end->subDay();
$set = $budgetLimit->limitrepetitions() $set = $budgetLimit->limitrepetitions()

View File

@@ -225,6 +225,7 @@ class AccountRepository implements AccountRepositoryInterface
$accountIds = DB::table('piggy_banks')->distinct()->get(['piggy_banks.account_id']); $accountIds = DB::table('piggy_banks')->distinct()->get(['piggy_banks.account_id']);
$accounts = new Collection; $accounts = new Collection;
/** @var PiggyBank $id */
foreach ($accountIds as $id) { foreach ($accountIds as $id) {
$ids[] = intval($id->account_id); $ids[] = intval($id->account_id);
} }

View File

@@ -119,7 +119,7 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface
$data['remind_me'] = false; $data['remind_me'] = false;
$data['reminder_skip'] = 0; $data['reminder_skip'] = 0;
$piggyBank = PiggyBank::create($data); $piggyBank = PiggyBank::create($data);
return $piggyBank; return $piggyBank;
} }

View File

@@ -29,6 +29,22 @@ class PiggyBankPart
/** @var Carbon */ /** @var Carbon */
public $targetdate; public $targetdate;
/**
* @return PiggyBankRepetition
*/
public function getRepetition()
{
return $this->repetition;
}
/**
* @param PiggyBankRepetition $repetition
*/
public function setRepetition($repetition)
{
$this->repetition = $repetition;
}
/** /**
* @return Carbon * @return Carbon
*/ */
@@ -61,22 +77,6 @@ class PiggyBankPart
$this->targetdate = $targetdate; $this->targetdate = $targetdate;
} }
/**
* @return PiggyBankRepetition
*/
public function getRepetition()
{
return $this->repetition;
}
/**
* @param PiggyBankRepetition $repetition
*/
public function setRepetition($repetition)
{
$this->repetition = $repetition;
}
/** /**
* @return float|int * @return float|int
*/ */

View File

@@ -40,7 +40,7 @@ class ExpandedForm
$currencies = Amt::getAllCurrencies(); $currencies = Amt::getAllCurrencies();
unset($options['currency']); unset($options['currency']);
unset($options['placeholder']); unset($options['placeholder']);
$html = View::make('form.amount', compact('defaultCurrency', 'currencies', 'classes', 'name', 'label', 'value', 'options'))->render(); $html = View::make('form.amount', compact('defaultCurrency', 'currencies', 'classes', 'name', 'label', 'value', 'options'))->render();
return $html; return $html;
@@ -144,7 +144,7 @@ class ExpandedForm
$currencies = Amt::getAllCurrencies(); $currencies = Amt::getAllCurrencies();
unset($options['currency']); unset($options['currency']);
unset($options['placeholder']); unset($options['placeholder']);
$html = View::make('form.balance', compact('defaultCurrency', 'currencies', 'classes', 'name', 'label', 'value', 'options'))->render(); $html = View::make('form.balance', compact('defaultCurrency', 'currencies', 'classes', 'name', 'label', 'value', 'options'))->render();
return $html; return $html;
} }
@@ -186,7 +186,7 @@ class ExpandedForm
$classes = $this->getHolderClasses($name); $classes = $this->getHolderClasses($name);
$value = $this->fillFieldValue($name, $value); $value = $this->fillFieldValue($name, $value);
unset($options['placeholder']); unset($options['placeholder']);
$html = View::make('form.date', compact('classes', 'name', 'label', 'value', 'options'))->render(); $html = View::make('form.date', compact('classes', 'name', 'label', 'value', 'options'))->render();
return $html; return $html;
} }
@@ -323,7 +323,7 @@ class ExpandedForm
$selected = $this->fillFieldValue($name, $selected); $selected = $this->fillFieldValue($name, $selected);
unset($options['autocomplete']); unset($options['autocomplete']);
unset($options['placeholder']); unset($options['placeholder']);
$html = View::make('form.select', compact('classes', 'name', 'label', 'selected', 'options', 'list'))->render(); $html = View::make('form.select', compact('classes', 'name', 'label', 'selected', 'options', 'list'))->render();
return $html; return $html;
} }

View File

@@ -142,7 +142,7 @@ class Navigation
} }
/** /**
* @param Carbon $date * @param \Carbon\Carbon $date
* @param $repeatFrequency * @param $repeatFrequency
* *
* @return string * @return string

View File

@@ -35,7 +35,7 @@ class Steam
bcscale(2); bcscale(2);
$balance = $account->transactions()->leftJoin( $balance = $account->transactions()->leftJoin(
'transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id' 'transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id'
)->where('transaction_journals.date', '<=', $date->format('Y-m-d'))->sum('transactions.amount'); )->where('transaction_journals.date', '<=', $date->format('Y-m-d'))->sum('transactions.amount');

View File

@@ -9,6 +9,7 @@ use Zizaco\Entrust\Traits\EntrustUserTrait;
/** /**
* Class User * Class User
*
* @codeCoverageIgnore * @codeCoverageIgnore
* *
* @package FireflyIII * @package FireflyIII

View File

@@ -3,16 +3,15 @@
namespace FireflyIII\Validation; namespace FireflyIII\Validation;
use Auth; use Auth;
use Carbon\Carbon;
use Config; use Config;
use Crypt; use Crypt;
use DB; use DB;
use FireflyIII\Models\Account; use FireflyIII\Models\Account;
use FireflyIII\Models\AccountType; use FireflyIII\Models\AccountType;
use FireflyIII\Models\PiggyBank;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Contracts\Encryption\DecryptException; use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Validation\Validator; use Illuminate\Validation\Validator;
use Navigation;
use Symfony\Component\Translation\TranslatorInterface; use Symfony\Component\Translation\TranslatorInterface;
/** /**
@@ -244,6 +243,7 @@ class FireflyValidator extends Validator
} }
$set = $query->get(['piggy_banks.*']); $set = $query->get(['piggy_banks.*']);
/** @var PiggyBank $entry */
foreach ($set as $entry) { foreach ($set as $entry) {
$fieldValue = $this->tryDecrypt($entry->name); $fieldValue = $this->tryDecrypt($entry->name);
if ($fieldValue == $value) { if ($fieldValue == $value) {

View File

@@ -28,7 +28,6 @@ $app = new Illuminate\Foundation\Application(
*/ */
$app->singleton( $app->singleton(
'Illuminate\Contracts\Http\Kernel', 'Illuminate\Contracts\Http\Kernel',
'FireflyIII\Http\Kernel' 'FireflyIII\Http\Kernel'
@@ -45,8 +44,6 @@ $app->singleton(
); );
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Return The Application | Return The Application

View File

@@ -14,7 +14,7 @@ define('LARAVEL_START', microtime(true));
| |
*/ */
require __DIR__.'/../vendor/autoload.php'; require __DIR__ . '/../vendor/autoload.php';
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -27,9 +27,8 @@ require __DIR__.'/../vendor/autoload.php';
| |
*/ */
$compiledPath = __DIR__.'/cache/compiled.php'; $compiledPath = __DIR__ . '/cache/compiled.php';
if (file_exists($compiledPath)) if (file_exists($compiledPath)) {
{ require $compiledPath;
require $compiledPath;
} }

View File

@@ -2,67 +2,67 @@
return [ return [
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Default Authentication Driver | Default Authentication Driver
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| This option controls the authentication driver that will be utilized. | This option controls the authentication driver that will be utilized.
| This driver manages the retrieval and authentication of the users | This driver manages the retrieval and authentication of the users
| attempting to get access to protected areas of your application. | attempting to get access to protected areas of your application.
| |
| Supported: "database", "eloquent" | Supported: "database", "eloquent"
| |
*/ */
'driver' => 'eloquent', 'driver' => 'eloquent',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Authentication Model | Authentication Model
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| When using the "Eloquent" authentication driver, we need to know which | When using the "Eloquent" authentication driver, we need to know which
| Eloquent model should be used to retrieve your users. Of course, it | Eloquent model should be used to retrieve your users. Of course, it
| is often just the "User" model but you may use whatever you like. | is often just the "User" model but you may use whatever you like.
| |
*/ */
'model' => 'FireflyIII\User', 'model' => 'FireflyIII\User',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Authentication Table | Authentication Table
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| When using the "Database" authentication driver, we need to know which | When using the "Database" authentication driver, we need to know which
| table should be used to retrieve your users. We have chosen a basic | table should be used to retrieve your users. We have chosen a basic
| default value but you may easily change it to any table you like. | default value but you may easily change it to any table you like.
| |
*/ */
'table' => 'users', 'table' => 'users',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Password Reset Settings | Password Reset Settings
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Here you may set the options for resetting passwords including the view | Here you may set the options for resetting passwords including the view
| that is your password reset e-mail. You can also set the name of the | that is your password reset e-mail. You can also set the name of the
| table that maintains all of the reset tokens for your application. | table that maintains all of the reset tokens for your application.
| |
| The expire time is the number of minutes that the reset token should be | The expire time is the number of minutes that the reset token should be
| considered valid. This security feature keeps tokens short-lived so | considered valid. This security feature keeps tokens short-lived so
| they have less time to be guessed. You may change this as needed. | they have less time to be guessed. You may change this as needed.
| |
*/ */
'password' => [ 'password' => [
'email' => 'emails.password', 'email' => 'emails.password',
'table' => 'password_resets', 'table' => 'password_resets',
'expire' => 60, 'expire' => 60,
], ],
'allow_register' => true 'allow_register' => true
]; ];

View File

@@ -2,6 +2,6 @@
return [ return [
'view' => 'breadcrumbs::bootstrap3', 'view' => 'breadcrumbs::bootstrap3',
]; ];

View File

@@ -2,78 +2,78 @@
return [ return [
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Default Cache Store | Default Cache Store
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| This option controls the default cache connection that gets used while | This option controls the default cache connection that gets used while
| using this caching library. This connection is used when another is | using this caching library. This connection is used when another is
| not explicitly specified when executing a given caching function. | not explicitly specified when executing a given caching function.
| |
*/ */
'default' => env('CACHE_DRIVER', 'file'), 'default' => env('CACHE_DRIVER', 'file'),
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Cache Stores | Cache Stores
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Here you may define all of the cache "stores" for your application as | Here you may define all of the cache "stores" for your application as
| well as their drivers. You may even define multiple stores for the | well as their drivers. You may even define multiple stores for the
| same cache driver to group types of items stored in your caches. | same cache driver to group types of items stored in your caches.
| |
*/ */
'stores' => [ 'stores' => [
'apc' => [ 'apc' => [
'driver' => 'apc' 'driver' => 'apc'
], ],
'array' => [ 'array' => [
'driver' => 'array' 'driver' => 'array'
], ],
'database' => [ 'database' => [
'driver' => 'database', 'driver' => 'database',
'table' => 'cache', 'table' => 'cache',
'connection' => null, 'connection' => null,
], ],
'file' => [ 'file' => [
'driver' => 'file', 'driver' => 'file',
'path' => storage_path().'/framework/cache', 'path' => storage_path() . '/framework/cache',
], ],
'memcached' => [ 'memcached' => [
'driver' => 'memcached', 'driver' => 'memcached',
'servers' => [ 'servers' => [
[ [
'host' => '127.0.0.1', 'port' => 11211, 'weight' => 100 'host' => '127.0.0.1', 'port' => 11211, 'weight' => 100
], ],
], ],
], ],
'redis' => [ 'redis' => [
'driver' => 'redis', 'driver' => 'redis',
'connection' => 'default', 'connection' => 'default',
], ],
], ],
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Cache Key Prefix | Cache Key Prefix
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| When utilizing a RAM based store such as APC or Memcached, there might | When utilizing a RAM based store such as APC or Memcached, there might
| be other applications utilizing the same cache. So, we'll specify a | be other applications utilizing the same cache. So, we'll specify a
| value to get prefixed to all our keys so we can avoid collisions. | value to get prefixed to all our keys so we can avoid collisions.
| |
*/ */
'prefix' => 'laravel', 'prefix' => 'laravel',
]; ];

View File

@@ -2,40 +2,40 @@
return [ return [
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Additional Compiled Classes | Additional Compiled Classes
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Here you may specify additional classes to include in the compiled file | Here you may specify additional classes to include in the compiled file
| generated by the `artisan optimize` command. These should be classes | generated by the `artisan optimize` command. These should be classes
| that are included on basically every request into the application. | that are included on basically every request into the application.
| |
*/ */
'files' => [ 'files' => [
realpath(__DIR__.'/../app/Providers/AppServiceProvider.php'), realpath(__DIR__ . '/../app/Providers/AppServiceProvider.php'),
realpath(__DIR__.'/../app/Providers/BusServiceProvider.php'), realpath(__DIR__ . '/../app/Providers/BusServiceProvider.php'),
realpath(__DIR__.'/../app/Providers/ConfigServiceProvider.php'), realpath(__DIR__ . '/../app/Providers/ConfigServiceProvider.php'),
realpath(__DIR__.'/../app/Providers/EventServiceProvider.php'), realpath(__DIR__ . '/../app/Providers/EventServiceProvider.php'),
realpath(__DIR__.'/../app/Providers/RouteServiceProvider.php'), realpath(__DIR__ . '/../app/Providers/RouteServiceProvider.php'),
], ],
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Compiled File Providers | Compiled File Providers
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Here you may list service providers which define a "compiles" function | Here you may list service providers which define a "compiles" function
| that returns additional files that should be compiled, providing an | that returns additional files that should be compiled, providing an
| easy way to get common files from any packages you are utilizing. | easy way to get common files from any packages you are utilizing.
| |
*/ */
'providers' => [ 'providers' => [
// //
], ],
]; ];

View File

@@ -48,7 +48,7 @@ return [
'sqlite' => [ 'sqlite' => [
'driver' => 'sqlite', 'driver' => 'sqlite',
'database' => __DIR__.'/../storage/database/testing.db', 'database' => __DIR__ . '/../storage/database/testing.db',
'prefix' => '', 'prefix' => '',
], ],

View File

@@ -19,7 +19,7 @@ return [
| the role if it is in a different namespace. | the role if it is in a different namespace.
| |
*/ */
'role' => 'FireflyIII\Models\Role', 'role' => 'FireflyIII\Models\Role',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -29,7 +29,7 @@ return [
| This is the roles table used by Entrust to save roles to the database. | This is the roles table used by Entrust to save roles to the database.
| |
*/ */
'roles_table' => 'roles', 'roles_table' => 'roles',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -40,7 +40,7 @@ return [
| Update the permission if it is in a different namespace. | Update the permission if it is in a different namespace.
| |
*/ */
'permission' => 'FireflyIII\Models\Permission', 'permission' => 'FireflyIII\Models\Permission',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -51,7 +51,7 @@ return [
| database. | database.
| |
*/ */
'permissions_table' => 'permissions', 'permissions_table' => 'permissions',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -73,6 +73,6 @@ return [
| database. | database.
| |
*/ */
'role_user_table' => 'role_user', 'role_user_table' => 'role_user',
]; ];

View File

@@ -2,69 +2,69 @@
return [ return [
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Default Filesystem Disk | Default Filesystem Disk
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Here you may specify the default filesystem disk that should be used | Here you may specify the default filesystem disk that should be used
| by the framework. A "local" driver, as well as a variety of cloud | by the framework. A "local" driver, as well as a variety of cloud
| based drivers are available for your choosing. Just store away! | based drivers are available for your choosing. Just store away!
| |
| Supported: "local", "s3", "rackspace" | Supported: "local", "s3", "rackspace"
| |
*/ */
'default' => 'local', 'default' => 'local',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Default Cloud Filesystem Disk | Default Cloud Filesystem Disk
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Many applications store files both locally and in the cloud. For this | Many applications store files both locally and in the cloud. For this
| reason, you may specify a default "cloud" driver here. This driver | reason, you may specify a default "cloud" driver here. This driver
| will be bound as the Cloud disk implementation in the container. | will be bound as the Cloud disk implementation in the container.
| |
*/ */
'cloud' => 's3', 'cloud' => 's3',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Filesystem Disks | Filesystem Disks
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Here you may configure as many filesystem "disks" as you wish, and you | Here you may configure as many filesystem "disks" as you wish, and you
| may even configure multiple disks of the same driver. Defaults have | may even configure multiple disks of the same driver. Defaults have
| been setup for each driver as an example of the required options. | been setup for each driver as an example of the required options.
| |
*/ */
'disks' => [ 'disks' => [
'local' => [ 'local' => [
'driver' => 'local', 'driver' => 'local',
'root' => storage_path().'/app', 'root' => storage_path() . '/app',
], ],
's3' => [ 's3' => [
'driver' => 's3', 'driver' => 's3',
'key' => 'your-key', 'key' => 'your-key',
'secret' => 'your-secret', 'secret' => 'your-secret',
'region' => 'your-region', 'region' => 'your-region',
'bucket' => 'your-bucket', 'bucket' => 'your-bucket',
], ],
'rackspace' => [ 'rackspace' => [
'driver' => 'rackspace', 'driver' => 'rackspace',
'username' => 'your-username', 'username' => 'your-username',
'key' => 'your-key', 'key' => 'your-key',
'container' => 'your-container', 'container' => 'your-container',
'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/', 'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/',
'region' => 'IAD', 'region' => 'IAD',
], ],
], ],
]; ];

View File

@@ -1,7 +1,7 @@
<?php <?php
return [ return [
'version' => '3.4.5', 'version' => '3.4.5',
'index_periods' => ['1D', '1W', '1M', '3M', '6M', '1Y', 'custom'], 'index_periods' => ['1D', '1W', '1M', '3M', '6M', '1Y', 'custom'],
'budget_periods' => ['daily', 'weekly', 'monthly', 'quarterly', 'half-year', 'yearly'], 'budget_periods' => ['daily', 'weekly', 'monthly', 'quarterly', 'half-year', 'yearly'],
'piggy_bank_periods' => [ 'piggy_bank_periods' => [
@@ -57,7 +57,7 @@ return [
'asset' => 'Asset accounts', 'asset' => 'Asset accounts',
'expense' => 'Expense accounts', 'expense' => 'Expense accounts',
'revenue' => 'Revenue accounts', 'revenue' => 'Revenue accounts',
'cash' => 'Cash accounts', 'cash' => 'Cash accounts',
], ],
'subIconsByIdentifier' => 'subIconsByIdentifier' =>
[ [

View File

@@ -2,91 +2,91 @@
return [ return [
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Default Queue Driver | Default Queue Driver
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| The Laravel queue API supports a variety of back-ends via an unified | The Laravel queue API supports a variety of back-ends via an unified
| API, giving you convenient access to each back-end using the same | API, giving you convenient access to each back-end using the same
| syntax for each one. Here you may set the default queue driver. | syntax for each one. Here you may set the default queue driver.
| |
| Supported: "null", "sync", "database", "beanstalkd", | Supported: "null", "sync", "database", "beanstalkd",
| "sqs", "iron", "redis" | "sqs", "iron", "redis"
| |
*/ */
'default' => env('QUEUE_DRIVER', 'sync'), 'default' => env('QUEUE_DRIVER', 'sync'),
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Queue Connections | Queue Connections
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Here you may configure the connection information for each server that | Here you may configure the connection information for each server that
| is used by your application. A default configuration has been added | is used by your application. A default configuration has been added
| for each back-end shipped with Laravel. You are free to add more. | for each back-end shipped with Laravel. You are free to add more.
| |
*/ */
'connections' => [ 'connections' => [
'sync' => [ 'sync' => [
'driver' => 'sync', 'driver' => 'sync',
], ],
'database' => [ 'database' => [
'driver' => 'database', 'driver' => 'database',
'table' => 'jobs', 'table' => 'jobs',
'queue' => 'default', 'queue' => 'default',
'expire' => 60, 'expire' => 60,
], ],
'beanstalkd' => [ 'beanstalkd' => [
'driver' => 'beanstalkd', 'driver' => 'beanstalkd',
'host' => 'localhost', 'host' => 'localhost',
'queue' => 'default', 'queue' => 'default',
'ttr' => 60, 'ttr' => 60,
], ],
'sqs' => [ 'sqs' => [
'driver' => 'sqs', 'driver' => 'sqs',
'key' => 'your-public-key', 'key' => 'your-public-key',
'secret' => 'your-secret-key', 'secret' => 'your-secret-key',
'queue' => 'your-queue-url', 'queue' => 'your-queue-url',
'region' => 'us-east-1', 'region' => 'us-east-1',
], ],
'iron' => [ 'iron' => [
'driver' => 'iron', 'driver' => 'iron',
'host' => 'mq-aws-us-east-1.iron.io', 'host' => 'mq-aws-us-east-1.iron.io',
'token' => 'your-token', 'token' => 'your-token',
'project' => 'your-project-id', 'project' => 'your-project-id',
'queue' => 'your-queue-name', 'queue' => 'your-queue-name',
'encrypt' => true, 'encrypt' => true,
], ],
'redis' => [ 'redis' => [
'driver' => 'redis', 'driver' => 'redis',
'queue' => 'default', 'queue' => 'default',
'expire' => 60, 'expire' => 60,
], ],
], ],
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Failed Queue Jobs | Failed Queue Jobs
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| These options configure the behavior of failed queue job logging so you | These options configure the behavior of failed queue job logging so you
| can control which database and table are used to store the jobs that | can control which database and table are used to store the jobs that
| have failed. You may change them to any database / table you wish. | have failed. You may change them to any database / table you wish.
| |
*/ */
'failed' => [ 'failed' => [
'database' => 'mysql', 'table' => 'failed_jobs', 'database' => 'mysql', 'table' => 'failed_jobs',
], ],
]; ];

View File

@@ -2,36 +2,36 @@
return [ return [
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Third Party Services | Third Party Services
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| This file is for storing the credentials for third party services such | This file is for storing the credentials for third party services such
| as Stripe, Mailgun, Mandrill, and others. This file provides a sane | as Stripe, Mailgun, Mandrill, and others. This file provides a sane
| default location for this type of information, allowing packages | default location for this type of information, allowing packages
| to have a conventional place to find your various credentials. | to have a conventional place to find your various credentials.
| |
*/ */
'mailgun' => [ 'mailgun' => [
'domain' => '', 'domain' => '',
'secret' => '', 'secret' => '',
], ],
'mandrill' => [ 'mandrill' => [
'secret' => '', 'secret' => '',
], ],
'ses' => [ 'ses' => [
'key' => '', 'key' => '',
'secret' => '', 'secret' => '',
'region' => 'us-east-1', 'region' => 'us-east-1',
], ],
'stripe' => [ 'stripe' => [
'model' => 'User', 'model' => 'User',
'secret' => '', 'secret' => '',
], ],
]; ];

View File

@@ -2,152 +2,152 @@
return [ return [
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Default Session Driver | Default Session Driver
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| This option controls the default session "driver" that will be used on | This option controls the default session "driver" that will be used on
| requests. By default, we will use the lightweight native driver but | requests. By default, we will use the lightweight native driver but
| you may specify any of the other wonderful drivers provided here. | you may specify any of the other wonderful drivers provided here.
| |
| Supported: "file", "cookie", "database", "apc", | Supported: "file", "cookie", "database", "apc",
| "memcached", "redis", "array" | "memcached", "redis", "array"
| |
*/ */
'driver' => env('SESSION_DRIVER', 'file'), 'driver' => env('SESSION_DRIVER', 'file'),
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Session Lifetime | Session Lifetime
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Here you may specify the number of minutes that you wish the session | Here you may specify the number of minutes that you wish the session
| to be allowed to remain idle before it expires. If you want them | to be allowed to remain idle before it expires. If you want them
| to immediately expire on the browser closing, set that option. | to immediately expire on the browser closing, set that option.
| |
*/ */
'lifetime' => 120, 'lifetime' => 120,
'expire_on_close' => false, 'expire_on_close' => false,
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Session Encryption | Session Encryption
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| This option allows you to easily specify that all of your session data | This option allows you to easily specify that all of your session data
| should be encrypted before it is stored. All encryption will be run | should be encrypted before it is stored. All encryption will be run
| automatically by Laravel and you can use the Session like normal. | automatically by Laravel and you can use the Session like normal.
| |
*/ */
'encrypt' => false, 'encrypt' => false,
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Session File Location | Session File Location
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| When using the native session driver, we need a location where session | When using the native session driver, we need a location where session
| files may be stored. A default has been set for you but a different | files may be stored. A default has been set for you but a different
| location may be specified. This is only needed for file sessions. | location may be specified. This is only needed for file sessions.
| |
*/ */
'files' => storage_path().'/framework/sessions', 'files' => storage_path() . '/framework/sessions',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Session Database Connection | Session Database Connection
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| When using the "database" or "redis" session drivers, you may specify a | When using the "database" or "redis" session drivers, you may specify a
| connection that should be used to manage these sessions. This should | connection that should be used to manage these sessions. This should
| correspond to a connection in your database configuration options. | correspond to a connection in your database configuration options.
| |
*/ */
'connection' => null, 'connection' => null,
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Session Database Table | Session Database Table
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| When using the "database" session driver, you may specify the table we | When using the "database" session driver, you may specify the table we
| should use to manage the sessions. Of course, a sensible default is | should use to manage the sessions. Of course, a sensible default is
| provided for you; however, you are free to change this as needed. | provided for you; however, you are free to change this as needed.
| |
*/ */
'table' => 'sessions', 'table' => 'sessions',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Session Sweeping Lottery | Session Sweeping Lottery
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Some session drivers must manually sweep their storage location to get | Some session drivers must manually sweep their storage location to get
| rid of old sessions from storage. Here are the chances that it will | rid of old sessions from storage. Here are the chances that it will
| happen on a given request. By default, the odds are 2 out of 100. | happen on a given request. By default, the odds are 2 out of 100.
| |
*/ */
'lottery' => [2, 100], 'lottery' => [2, 100],
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Session Cookie Name | Session Cookie Name
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Here you may change the name of the cookie used to identify a session | Here you may change the name of the cookie used to identify a session
| instance by ID. The name specified here will get used every time a | instance by ID. The name specified here will get used every time a
| new session cookie is created by the framework for every driver. | new session cookie is created by the framework for every driver.
| |
*/ */
'cookie' => 'laravel_session', 'cookie' => 'laravel_session',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Session Cookie Path | Session Cookie Path
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| The session cookie path determines the path for which the cookie will | The session cookie path determines the path for which the cookie will
| be regarded as available. Typically, this will be the root path of | be regarded as available. Typically, this will be the root path of
| your application but you are free to change this when necessary. | your application but you are free to change this when necessary.
| |
*/ */
'path' => '/', 'path' => '/',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Session Cookie Domain | Session Cookie Domain
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Here you may change the domain of the cookie used to identify a session | Here you may change the domain of the cookie used to identify a session
| in your application. This will determine which domains the cookie is | in your application. This will determine which domains the cookie is
| available to in your application. A sensible default has been set. | available to in your application. A sensible default has been set.
| |
*/ */
'domain' => null, 'domain' => null,
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| HTTPS Only Cookies | HTTPS Only Cookies
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| By setting this option to true, session cookies will only be sent back | By setting this option to true, session cookies will only be sent back
| to the server if the browser has a HTTPS connection. This will keep | to the server if the browser has a HTTPS connection. This will keep
| the cookie from being sent to you if it can not be done securely. | the cookie from being sent to you if it can not be done securely.
| |
*/ */
'secure' => false, 'secure' => false,
]; ];

View File

@@ -2,32 +2,32 @@
return [ return [
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| View Storage Paths | View Storage Paths
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Most templating systems load templates from disk. Here you may specify | Most templating systems load templates from disk. Here you may specify
| an array of paths that should be checked for your views. Of course | an array of paths that should be checked for your views. Of course
| the usual Laravel view path has already been registered for you. | the usual Laravel view path has already been registered for you.
| |
*/ */
'paths' => [ 'paths' => [
realpath(base_path('resources/twig')) realpath(base_path('resources/twig'))
], ],
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Compiled View Path | Compiled View Path
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| This option determines where all the compiled Blade templates will be | This option determines where all the compiled Blade templates will be
| stored for your application. Typically, this is within the storage | stored for your application. Typically, this is within the storage
| directory. However, as usual, you are free to change this value. | directory. However, as usual, you are free to change this value.
| |
*/ */
'compiled' => realpath(storage_path().'/framework/views'), 'compiled' => realpath(storage_path() . '/framework/views'),
]; ];

View File

@@ -7,58 +7,6 @@ use Illuminate\Database\Schema\Blueprint;
*/ */
class EntrustSetupTables extends Migration class EntrustSetupTables extends Migration
{ {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
// Create table for storing roles
Schema::create('roles', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->string('display_name')->nullable();
$table->string('description')->nullable();
$table->timestamps();
});
// Create table for associating roles to users (Many-to-Many)
Schema::create('role_user', function (Blueprint $table) {
$table->integer('user_id')->unsigned();
$table->integer('role_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')
->onUpdate('cascade')->onDelete('cascade');
$table->foreign('role_id')->references('id')->on('roles')
->onUpdate('cascade')->onDelete('cascade');
$table->primary(['user_id', 'role_id']);
});
// Create table for storing permissions
Schema::create('permissions', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->string('display_name')->nullable();
$table->string('description')->nullable();
$table->timestamps();
});
// Create table for associating permissions to roles (Many-to-Many)
Schema::create('permission_role', function (Blueprint $table) {
$table->integer('permission_id')->unsigned();
$table->integer('role_id')->unsigned();
$table->foreign('permission_id')->references('id')->on('permissions')
->onUpdate('cascade')->onDelete('cascade');
$table->foreign('role_id')->references('id')->on('roles')
->onUpdate('cascade')->onDelete('cascade');
$table->primary(['permission_id', 'role_id']);
});
}
/** /**
* Reverse the migrations. * Reverse the migrations.
* *
@@ -71,4 +19,64 @@ class EntrustSetupTables extends Migration
Schema::drop('role_user'); Schema::drop('role_user');
Schema::drop('roles'); Schema::drop('roles');
} }
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
// Create table for storing roles
Schema::create(
'roles', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->string('display_name')->nullable();
$table->string('description')->nullable();
$table->timestamps();
}
);
// Create table for associating roles to users (Many-to-Many)
Schema::create(
'role_user', function (Blueprint $table) {
$table->integer('user_id')->unsigned();
$table->integer('role_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')
->onUpdate('cascade')->onDelete('cascade');
$table->foreign('role_id')->references('id')->on('roles')
->onUpdate('cascade')->onDelete('cascade');
$table->primary(['user_id', 'role_id']);
}
);
// Create table for storing permissions
Schema::create(
'permissions', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->string('display_name')->nullable();
$table->string('description')->nullable();
$table->timestamps();
}
);
// Create table for associating permissions to roles (Many-to-Many)
Schema::create(
'permission_role', function (Blueprint $table) {
$table->integer('permission_id')->unsigned();
$table->integer('role_id')->unsigned();
$table->foreign('permission_id')->references('id')->on('permissions')
->onUpdate('cascade')->onDelete('cascade');
$table->foreign('role_id')->references('id')->on('roles')
->onUpdate('cascade')->onDelete('cascade');
$table->primary(['permission_id', 'role_id']);
}
);
}
} }

View File

@@ -1,7 +1,6 @@
<?php <?php
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
/** /**
* Class ChangesForV3451 * Class ChangesForV3451

View File

@@ -10,7 +10,7 @@ class PermissionSeeder extends Seeder
{ {
public function run() public function run()
{ {
$owner = new Role; $owner = new Role;
$owner->name = 'owner'; $owner->name = 'owner';
$owner->display_name = 'Site Owner'; $owner->display_name = 'Site Owner';
$owner->description = 'User runs this instance of FF3'; // optional $owner->description = 'User runs this instance of FF3'; // optional

View File

@@ -1,58 +1,59 @@
{% extends "./layout/default.twig" %} {% extends "./layout/default.twig" %}
{% block breadcrumbs %} {% block breadcrumbs %}
{{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, what) }} {{ Breadcrumbs.renderIfExists(Route.getCurrentRoute.getName, what) }}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="col-lg-6 col-md-8 col-sm-12 col-xs-12"> <div class="col-lg-6 col-md-8 col-sm-12 col-xs-12">
<p> <p>
{{ ('accountExtraHelp_'~what)|_ }} {{ ('accountExtraHelp_'~what)|_ }}
</p> </p>
</div>
</div> </div>
</div> <div class="row">
<div class="row"> <div class="col-lg-12 col-md-12 col-sm-12">
<div class="col-lg-12 col-md-12 col-sm-12"> <div class="box">
<div class="box"> <div class="box-header with-border">
<div class="box-header with-border"> <h3 class="box-title">{{ subTitle }}</h3>
<h3 class="box-title">{{ subTitle}}</h3>
<!-- ACTIONS MENU --> <!-- ACTIONS MENU -->
<div class="box-tools pull-right"> <div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button> <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
<div class="btn-group"> <div class="btn-group">
<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button> <button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button>
<ul class="dropdown-menu" role="menu"> <ul class="dropdown-menu" role="menu">
<li><a href="{{route('accounts.create', what)}}"><i class="fa fa-plus fa-fw"></i> {{ ('make_new_' ~ what ~ '_account')|_ }}</a></li> <li><a href="{{ route('accounts.create', what) }}"><i class="fa fa-plus fa-fw"></i> {{ ('make_new_' ~ what ~ '_account')|_ }}
</ul> </a></li>
</ul>
</div>
</div> </div>
</div>
<div class="box-body table-responsive no-padding">
{% include 'list/accounts.twig' %}
</div> </div>
</div>
<div class="box-body table-responsive no-padding">
{% include 'list/accounts.twig' %}
</div> </div>
</div> </div>
</div> </div>
</div>
{% endblock %} {% endblock %}
{% block styles %} {% block styles %}
<link rel="stylesheet" href="css/bootstrap-sortable.css" type="text/css" media="all" /> <link rel="stylesheet" href="css/bootstrap-sortable.css" type="text/css" media="all"/>
{% endblock %} {% endblock %}
{% block scripts %} {% block scripts %}
<script type="text/javascript"> <script type="text/javascript">
var what = '{{ what }}'; var what = '{{ what }}';
</script> </script>
<!-- load the libraries and scripts necessary for Google Charts: --> <!-- load the libraries and scripts necessary for Google Charts: -->
<script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="js/gcharts.options.js"></script> <script type="text/javascript" src="js/gcharts.options.js"></script>
<script type="text/javascript" src="js/gcharts.js"></script> <script type="text/javascript" src="js/gcharts.js"></script>
<script type="text/javascript" src="js/bootstrap-sortable.js"></script> <script type="text/javascript" src="js/bootstrap-sortable.js"></script>
<script type="text/javascript" src="js/accounts.js"></script> <script type="text/javascript" src="js/accounts.js"></script>
{% endblock %} {% endblock %}

View File

@@ -23,7 +23,7 @@
</div> </div>
</div> </div>
<div class="box-body table-responsive no-padding"> <div class="box-body table-responsive no-padding">
{% include 'list/bills.twig' %} {% include 'list/bills.twig' %}
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,16 +1,18 @@
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span></button> <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span>
<h4 class="modal-title" id="myModalLabel">Update (expected) available amount for {{Session.get('start').format('F Y')}}</h4> </button>
<h4 class="modal-title" id="myModalLabel">Update (expected) available amount for {{ Session.get('start').format('F Y') }}</h4>
</div> </div>
<form style="display: inline;" id="income" action="{{route('budgets.postIncome')}}" method="POST"> <form style="display: inline;" id="income" action="{{ route('budgets.postIncome') }}" method="POST">
<div class="modal-body"> <div class="modal-body">
<input type="hidden" name="_token" value="{{ csrf_token() }}" /> <input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<div class="input-group"> <div class="input-group">
<div class="input-group-addon">{{ getCurrencySymbol()|raw }}</div> <div class="input-group-addon">{{ getCurrencySymbol()|raw }}</div>
<input step="any" class="form-control" id="amount" value="{{ amount.data }}" autocomplete="off" name="amount" type="number" /> <input step="any" class="form-control" id="amount" value="{{ amount.data }}" autocomplete="off" name="amount" type="number"/>
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">

View File

@@ -5,17 +5,17 @@
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="col-lg-12 col-md-12 col-sm-12"> <div class="col-lg-12 col-md-12 col-sm-12">
<div class="box"> <div class="box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">{{ subTitle }}</h3> <h3 class="box-title">{{ subTitle }}</h3>
</div> </div>
<div class="box-body"> <div class="box-body">
{% include 'list/journals.twig' with {'journals': list} %} {% include 'list/journals.twig' with {'journals': list} %}
</div>
</div> </div>
</div> </div>
</div> </div>
</div>
{% endblock %} {% endblock %}

View File

@@ -5,107 +5,111 @@
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="col-lg-9 col-md-9 col-sm-7"> <div class="col-lg-9 col-md-9 col-sm-7">
<div class="box"> <div class="box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">{{ 'overview'|_ }}</h3> <h3 class="box-title">{{ 'overview'|_ }}</h3>
<!-- ACTIONS MENU --> <!-- ACTIONS MENU -->
<div class="pull-right"> <div class="pull-right">
<div class="btn-group"> <div class="btn-group">
<button type="button" class="btn btn-default btn-xs dropdown-toggle" data-toggle="dropdown"> <button type="button" class="btn btn-default btn-xs dropdown-toggle" data-toggle="dropdown">
{{ 'actions'|_ }} {{ 'actions'|_ }}
<span class="caret"></span> <span class="caret"></span>
</button> </button>
<ul class="dropdown-menu pull-right" role="menu"> <ul class="dropdown-menu pull-right" role="menu">
<li><a href="{{ route('budgets.edit',budget.id) }}"><i class="fa fa-pencil fa-fw"></i> {{ 'edit'|_ }}</a></li> <li><a href="{{ route('budgets.edit',budget.id) }}"><i class="fa fa-pencil fa-fw"></i> {{ 'edit'|_ }}</a></li>
<li><a href="{{ route('budgets.delete',budget.id) }}"><i class="fa fa-trash fa-fw"></i> {{ 'delete'|_ }}</a></li> <li><a href="{{ route('budgets.delete',budget.id) }}"><i class="fa fa-trash fa-fw"></i> {{ 'delete'|_ }}</a></li>
</ul> </ul>
</div>
</div>
</div>
<div class="box-body">
<div id="budgetOverview"></div>
</div>
</div>
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'transactions'|_ }}</h3>
</div>
{% include 'list/journals.twig' %}
</div>
</div>
<div class="col-lg-3 col-md-3 col-sm-5">
{% if limits|length == 1 %}
<p class="small text-center"><a href="{{ route('budgets.show',budget.id) }}">{{ 'showEverything'|_ }}</a></p>
{% endif %}
{% for limit in limits %}
{% for rep in limit.limitRepetitions %}
<div class="box">
<div class="box-header with-border">
<h3 class="box-title"><a href="{{route('budgets.show',[budget.id,rep.id])}}">{{rep.startdate.formatLocalized(monthFormat)}}</a></h3>
</div>
<div class="box-body">
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-6">
{{ 'amount'|_ }}: {{ rep.amount|formatAmount }}
</div>
<div class="col-lg-6 col-md-6 col-sm-6">
{{ 'spent'|_ }}: {{ spentInRepetitionCorrected(rep)|formatAmount }}
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
{% set overspent = spentInRepetitionCorrected(rep) > rep.amount %}
{% if overspent %}
{% set spent = spentInRepetitionCorrected(rep) %}
{% set pct = (spent != 0 ? (rep.amount / spent)*100 : 0) %}
<div class="progress progress-striped">
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="{{pct|round}}" aria-valuemin="0" aria-valuemax="100" style="width: {{pct|round}}%;"></div>
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="{{(100-pct)|round}}" aria-valuemin="0" aria-valuemax="100" style="width: {{(100-pct)|round}}%;"></div>
</div>
{% else %}
{% set amount = rep.amount %}
{% set pct = (amount != 0 ? (spentInRepetitionCorrected(rep) / amount)*100 : 0) %}
<div class="progress progress-striped">
<div class="progress-bar progress-bar-info" role="progressbar" aria-valuenow="{{pct|round}}" aria-valuemin="0" aria-valuemax="100" style="width: {{pct|round}}%;"></div>
</div>
{% endif %}
</div>
</div> </div>
</div> </div>
</div> </div>
<div class="box-body">
<div id="budgetOverview"></div>
</div>
</div>
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'transactions'|_ }}</h3>
</div>
{% include 'list/journals.twig' %}
</div>
</div>
<div class="col-lg-3 col-md-3 col-sm-5">
{% if limits|length == 1 %}
<p class="small text-center"><a href="{{ route('budgets.show',budget.id) }}">{{ 'showEverything'|_ }}</a></p>
{% endif %}
{% for limit in limits %}
{% for rep in limit.limitRepetitions %}
<div class="box">
<div class="box-header with-border">
<h3 class="box-title"><a href="{{ route('budgets.show',[budget.id,rep.id]) }}">{{ rep.startdate.formatLocalized(monthFormat) }}</a>
</h3>
</div>
<div class="box-body">
<div class="row">
<div class="col-lg-6 col-md-6 col-sm-6">
{{ 'amount'|_ }}: {{ rep.amount|formatAmount }}
</div>
<div class="col-lg-6 col-md-6 col-sm-6">
{{ 'spent'|_ }}: {{ spentInRepetitionCorrected(rep)|formatAmount }}
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
{% set overspent = spentInRepetitionCorrected(rep) > rep.amount %}
{% if overspent %}
{% set spent = spentInRepetitionCorrected(rep) %}
{% set pct = (spent != 0 ? (rep.amount / spent)*100 : 0) %}
<div class="progress progress-striped">
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="{{ pct|round }}" aria-valuemin="0"
aria-valuemax="100" style="width: {{ pct|round }}%;"></div>
<div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="{{ (100-pct)|round }}"
aria-valuemin="0" aria-valuemax="100" style="width: {{ (100-pct)|round }}%;"></div>
</div>
{% else %}
{% set amount = rep.amount %}
{% set pct = (amount != 0 ? (spentInRepetitionCorrected(rep) / amount)*100 : 0) %}
<div class="progress progress-striped">
<div class="progress-bar progress-bar-info" role="progressbar" aria-valuenow="{{ pct|round }}" aria-valuemin="0"
aria-valuemax="100" style="width: {{ pct|round }}%;"></div>
</div>
{% endif %}
</div>
</div>
</div>
</div>
{% endfor %}
{% endfor %} {% endfor %}
{% endfor %}
{% if limits|length == 1 %} {% if limits|length == 1 %}
<p class="small text-center"><a href="{{route('budgets.show',budget.id)}}">{{ 'showEverything'|_ }}</a></p> <p class="small text-center"><a href="{{ route('budgets.show',budget.id) }}">{{ 'showEverything'|_ }}</a></p>
{% endif %} {% endif %}
</div>
</div> </div>
</div>
{% endblock %} {% endblock %}
{% block scripts %} {% block scripts %}
<script type="text/javascript"> <script type="text/javascript">
var budgetID = {{budget.id}}; var budgetID = {{budget.id}};
{% if repetition.id %} {% if repetition.id %}
var repetitionID = {{repetition.id}}; var repetitionID = {{repetition.id}};
var year = {{repetition.startdate.format('Y')}}; var year = {{repetition.startdate.format('Y')}};
{% else %} {% else %}
var year = {{Session.get('start').format('Y')}}; var year = {{Session.get('start').format('Y')}};
{% endif %} {% endif %}
</script> </script>
<!-- load the libraries and scripts necessary for Google Charts: --> <!-- load the libraries and scripts necessary for Google Charts: -->
<script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="js/gcharts.options.js"></script> <script type="text/javascript" src="js/gcharts.options.js"></script>
<script type="text/javascript" src="js/gcharts.js"></script> <script type="text/javascript" src="js/gcharts.js"></script>
<script type="text/javascript" src="js/budgets.js"></script> <script type="text/javascript" src="js/budgets.js"></script>
{% endblock %} {% endblock %}

View File

@@ -29,14 +29,14 @@
<div class="box-body"> <div class="box-body">
{{ ExpandedForm.optionsList('create','category') }} {{ ExpandedForm.optionsList('create','category') }}
</div> </div>
<div class="box-footer"> <div class="box-footer">
<button type="submit" class="btn pull-right btn-success"> <button type="submit" class="btn pull-right btn-success">
Store new category Store new category
</button> </button>
</div>
</div> </div>
</div> </div>
</div> </div>
</div>
{{ Form.close|raw }} {{ Form.close|raw }}
{% endblock %} {% endblock %}

View File

@@ -16,9 +16,11 @@
<p class="text-danger"> <p class="text-danger">
{{ trans('form.permDeleteWarning') }} {{ trans('form.permDeleteWarning') }}
</p> </p>
<p> <p>
{{ trans('form.category_areYouSure', {'name': category.name}) }} {{ trans('form.category_areYouSure', {'name': category.name}) }}
</p> </p>
<p> <p>
{% if category.transactionjournals|length > 0 %} {% if category.transactionjournals|length > 0 %}
{{ Lang.choice('form.category_keep_transactions', category.transactionjournals|length, {count: category.transactionjournals|length}) }} {{ Lang.choice('form.category_keep_transactions', category.transactionjournals|length, {count: category.transactionjournals|length}) }}

View File

@@ -5,39 +5,39 @@
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="col-lg-12 col-md-12 col-sm-12"> <div class="col-lg-12 col-md-12 col-sm-12">
<div class="box"> <div class="box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">{{ 'categories'|_ }}</h3> <h3 class="box-title">{{ 'categories'|_ }}</h3>
<!-- ACTIONS MENU --> <!-- ACTIONS MENU -->
<div class="box-tools pull-right"> <div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button> <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
<div class="btn-group"> <div class="btn-group">
<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button> <button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button>
<ul class="dropdown-menu" role="menu"> <ul class="dropdown-menu" role="menu">
<li><a href="{{ route('categories.create') }}"><i class="fa fa-plus fa-fw"></i> {{ 'new_category'|_ }}</a></li> <li><a href="{{ route('categories.create') }}"><i class="fa fa-plus fa-fw"></i> {{ 'new_category'|_ }}</a></li>
</ul> </ul>
</div>
</div> </div>
</div>
</div> </div>
<div class="box-body no-padding"> <div class="box-body no-padding">
{% include 'list/categories.twig' %} {% include 'list/categories.twig' %}
</div>
</div> </div>
</div> </div>
</div> </div>
</div>
{% endblock %} {% endblock %}
{% block styles %} {% block styles %}
<link rel="stylesheet" href="css/bootstrap-sortable.css" type="text/css" media="all" /> <link rel="stylesheet" href="css/bootstrap-sortable.css" type="text/css" media="all"/>
{% endblock %} {% endblock %}
{% block scripts %} {% block scripts %}
<script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="js/gcharts.options.js"></script> <script type="text/javascript" src="js/gcharts.options.js"></script>
<script type="text/javascript" src="js/gcharts.js"></script> <script type="text/javascript" src="js/gcharts.js"></script>
<script type="text/javascript" src="js/bootstrap-sortable.js"></script> <script type="text/javascript" src="js/bootstrap-sortable.js"></script>
<script type="text/javascript" src="js/categories.js"></script> <script type="text/javascript" src="js/categories.js"></script>
{% endblock %} {% endblock %}

View File

@@ -5,18 +5,18 @@
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="col-lg-12 col-md-12 col-sm-12"> <div class="col-lg-12 col-md-12 col-sm-12">
<div class="box"> <div class="box">
<div class="box-header with-border"> <div class="box-header with-border">
{{ subTitle }} {{ subTitle }}
</div> </div>
<div class="box-body no-padding"> <div class="box-body no-padding">
{% include 'list/journals.twig' with {'journals': list} %} {% include 'list/journals.twig' with {'journals': list} %}
</div>
</div> </div>
</div> </div>
</div> </div>
</div>
{% endblock %} {% endblock %}

View File

@@ -5,51 +5,51 @@
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="col-lg-6 col-md-6 col-sm-12"> <div class="col-lg-6 col-md-6 col-sm-12">
<div class="box"> <div class="box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">{{ 'overview'|_ }} (month)</h3> <h3 class="box-title">{{ 'overview'|_ }} (month)</h3>
</div>
<div class="box-body">
<div id="month"></div>
</div>
</div> </div>
<div class="box-body"> </div>
<div id="month"></div> <div class="col-lg-6 col-md-6 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'overview'|_ }} (all)</h3>
</div>
<div class="box-body">
<div id="all"></div>
</div>
</div> </div>
</div> </div>
</div> </div>
<div class="col-lg-6 col-md-6 col-sm-12"> <div class="row">
<div class="box"> <div class="col-lg-12 col-md-12">
<div class="box-header with-border">
<h3 class="box-title">{{ 'overview'|_ }} (all)</h3>
</div>
<div class="box-body">
<div id="all"></div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12">
<div class="box"> <div class="box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">{{ 'transactions'|_ }}</h3> <h3 class="box-title">{{ 'transactions'|_ }}</h3>
</div> </div>
<div class="box-body no-padding"> <div class="box-body no-padding">
{% include 'list/journals' %} {% include 'list/journals' %}
</div>
</div> </div>
</div> </div>
</div> </div>
</div>
{% endblock %} {% endblock %}
{% block scripts %} {% block scripts %}
<script type="text/javascript"> <script type="text/javascript">
var categoryID = {{ category.id }}; var categoryID = {{ category.id }};
</script> </script>
<!-- load the libraries and scripts necessary for Google Charts: --> <!-- load the libraries and scripts necessary for Google Charts: -->
<script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="js/gcharts.options.js"></script> <script type="text/javascript" src="js/gcharts.options.js"></script>
<script type="text/javascript" src="js/gcharts.js"></script> <script type="text/javascript" src="js/gcharts.js"></script>
<script type="text/javascript" src="js/categories.js"></script> <script type="text/javascript" src="js/categories.js"></script>
{% endblock %} {% endblock %}

View File

@@ -6,29 +6,30 @@
{% block content %} {% block content %}
{{ Form.open({'class' : 'form-horizontal','id' : 'destroy','url' : route('currency.destroy',currency.id)}) }} {{ Form.open({'class' : 'form-horizontal','id' : 'destroy','url' : route('currency.destroy',currency.id)}) }}
<div class="row"> <div class="row">
<div class="col-lg-6 col-lg-offset-3 col-md-12 col-sm-12"> <div class="col-lg-6 col-lg-offset-3 col-md-12 col-sm-12">
<div class="box box-danger"> <div class="box box-danger">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">{{ trans('form.delete_currency', {'name': currency.name}) }}</h3> <h3 class="box-title">{{ trans('form.delete_currency', {'name': currency.name}) }}</h3>
</div> </div>
<div class="box-body"> <div class="box-body">
<p class="text-danger"> <p class="text-danger">
{{ trans('form.permDeleteWarning') }} {{ trans('form.permDeleteWarning') }}
</p> </p>
<p>
{{ trans('form.currency_areYouSure', {'name': currency.name}) }} <p>
</p> {{ trans('form.currency_areYouSure', {'name': currency.name}) }}
</div> </p>
<div class="box-footer"> </div>
<input type="submit" name="submit" value="{{ trans('form.deletePermanently') }}" class="btn btn-danger pull-right" /> <div class="box-footer">
<a href="{{ URL.previous }}" class="btn-default btn">{{ trans('form.cancel') }}</a > <input type="submit" name="submit" value="{{ trans('form.deletePermanently') }}" class="btn btn-danger pull-right"/>
<a href="{{ URL.previous }}" class="btn-default btn">{{ trans('form.cancel') }}</a>
</div>
</div> </div>
</div> </div>
</div> </div>
</div>
{{ Form.close|raw }} {{ Form.close|raw }}
{% endblock %} {% endblock %}

View File

@@ -5,39 +5,39 @@
</head> </head>
<body> <body>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;"> <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
Hey there, Hey there,
</p> </p>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
Welkome to <a style="color:#337ab7" href="{{ address }}">Firefly III</a>. Your registration has made it, and this email is here to confirm it. Yay! <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
Welkome to <a style="color:#337ab7" href="{{ address }}">Firefly III</a>. Your registration has made it, and this email is here to confirm it. Yay!
</p>
</p>
<ul> <ul>
<li style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;"> <li style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
If you have forgotten your password already, please reset it using If you have forgotten your password already, please reset it using
<a style="color:#337ab7" href="{{ address }}password/email">the password reset tool</a>. <a style="color:#337ab7" href="{{ address }}password/email">the password reset tool</a>.
</li> </li>
<li style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;"> <li style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
There is a help-icon in the top right corner of each page. If you need help, click it! There is a help-icon in the top right corner of each page. If you need help, click it!
</li> </li>
<li style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;"> <li style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
If you haven't already, please read the If you haven't already, please read the
<a style="color:#337ab7" href="https://github.com/JC5/firefly-iii/wiki/First-use">first use guide</a> and the <a style="color:#337ab7" href="https://github.com/JC5/firefly-iii/wiki/First-use">first use guide</a> and the
<a style="color:#337ab7" href="https://github.com/JC5/firefly-iii/wiki/full-description">full description</a>. <a style="color:#337ab7" href="https://github.com/JC5/firefly-iii/wiki/full-description">full description</a>.
</li> </li>
</ul> </ul>
<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;"> <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;">
Enjoy! Enjoy!
</p> </p>
<script type="application/ld+json"> <script type="application/ld+json">
{ {
"@context": "http://schema.org", "@context": "http://schema.org",
"@type": "EmailMessage", "@type": "EmailMessage",
@@ -53,6 +53,7 @@
"url": "https://geld.nder.be" "url": "https://geld.nder.be"
} }
} }
</script> </script>
</body> </body>

View File

@@ -2,17 +2,17 @@
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="col-lg-12 col-md-12 col-sm-12"> <div class="col-lg-12 col-md-12 col-sm-12">
<h1 class="text-danger">Firefly<br/> <h1 class="text-danger">Firefly<br/>
<small>Error</small> <small>Error</small>
</h1> </h1>
</div>
</div> </div>
</div>
<div class="row"> <div class="row">
<div class="col-lg-12 col-md-12 col-sm-12"> <div class="col-lg-12 col-md-12 col-sm-12">
{{ message |default('General unknown errror') }} {{ message |default('General unknown errror') }}
</div>
</div> </div>
</div>
{% endblock %} {% endblock %}

View File

@@ -1,63 +1,244 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8"/>
<meta name="robots" content="noindex,nofollow" /> <meta name="robots" content="noindex,nofollow"/>
<style> <style>
/* Copyright (c) 2010, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://developer.yahoo.com/yui/license.html */ /* Copyright (c) 2010, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://developer.yahoo.com/yui/license.html */
html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}input,textarea,select{*font-size:100%;}legend{color:#000;} html {
color: #000;
background: #FFF;
}
html { background: #eee; padding: 10px } body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, textarea, p, blockquote, th, td {
img { border: 0; } margin: 0;
#sf-resetcontent { width:970px; margin:0 auto; } padding: 0;
.sf-reset { font: 11px Verdana, Arial, sans-serif; color: #333 } }
.sf-reset .clear { clear:both; height:0; font-size:0; line-height:0; }
.sf-reset .clear_fix:after { display:block; height:0; clear:both; visibility:hidden; } table {
.sf-reset .clear_fix { display:inline-block; } border-collapse: collapse;
.sf-reset * html .clear_fix { height:1%; } border-spacing: 0;
.sf-reset .clear_fix { display:block; } }
.sf-reset, .sf-reset .block { margin: auto }
.sf-reset abbr { border-bottom: 1px dotted #000; cursor: help; } fieldset, img {
.sf-reset p { font-size:14px; line-height:20px; color:#868686; padding-bottom:20px } border: 0;
.sf-reset strong { font-weight:bold; } }
.sf-reset a { color:#6c6159; cursor: default; }
.sf-reset a img { border:none; } address, caption, cite, code, dfn, em, strong, th, var {
.sf-reset a:hover { text-decoration:underline; } font-style: normal;
.sf-reset em { font-style:italic; } font-weight: normal;
.sf-reset h1, .sf-reset h2 { font: 20px Georgia, "Times New Roman", Times, serif } }
.sf-reset .exception_counter { background-color: #fff; color: #333; padding: 6px; float: left; margin-right: 10px; float: left; display: block; }
.sf-reset .exception_title { margin-left: 3em; margin-bottom: 0.7em; display: block; } li {
.sf-reset .exception_message { margin-left: 3em; display: block; } list-style: none;
.sf-reset .traces li { font-size:12px; padding: 2px 4px; list-style-type:decimal; margin-left:20px; } }
.sf-reset .block { background-color:#FFFFFF; padding:10px 28px; margin-bottom:20px;
caption, th {
text-align: left;
}
h1, h2, h3, h4, h5, h6 {
font-size: 100%;
font-weight: normal;
}
q:before, q:after {
content: '';
}
abbr, acronym {
border: 0;
font-variant: normal;
}
sup {
vertical-align: text-top;
}
sub {
vertical-align: text-bottom;
}
input, textarea, select {
font-family: inherit;
font-size: inherit;
font-weight: inherit;
}
input, textarea, select {
*font-size: 100%;
}
legend {
color: #000;
}
html {
background: #eee;
padding: 10px
}
img {
border: 0;
}
#sf-resetcontent {
width: 970px;
margin: 0 auto;
}
.sf-reset {
font: 11px Verdana, Arial, sans-serif;
color: #333
}
.sf-reset .clear {
clear: both;
height: 0;
font-size: 0;
line-height: 0;
}
.sf-reset .clear_fix:after {
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.sf-reset .clear_fix {
display: inline-block;
}
.sf-reset * html .clear_fix {
height: 1%;
}
.sf-reset .clear_fix {
display: block;
}
.sf-reset, .sf-reset .block {
margin: auto
}
.sf-reset abbr {
border-bottom: 1px dotted #000;
cursor: help;
}
.sf-reset p {
font-size: 14px;
line-height: 20px;
color: #868686;
padding-bottom: 20px
}
.sf-reset strong {
font-weight: bold;
}
.sf-reset a {
color: #6c6159;
cursor: default;
}
.sf-reset a img {
border: none;
}
.sf-reset a:hover {
text-decoration: underline;
}
.sf-reset em {
font-style: italic;
}
.sf-reset h1, .sf-reset h2 {
font: 20px Georgia, "Times New Roman", Times, serif
}
.sf-reset .exception_counter {
background-color: #fff;
color: #333;
padding: 6px;
float: left;
margin-right: 10px;
float: left;
display: block;
}
.sf-reset .exception_title {
margin-left: 3em;
margin-bottom: 0.7em;
display: block;
}
.sf-reset .exception_message {
margin-left: 3em;
display: block;
}
.sf-reset .traces li {
font-size: 12px;
padding: 2px 4px;
list-style-type: decimal;
margin-left: 20px;
}
.sf-reset .block {
background-color: #FFFFFF;
padding: 10px 28px;
margin-bottom: 20px;
-webkit-border-bottom-right-radius: 16px; -webkit-border-bottom-right-radius: 16px;
-webkit-border-bottom-left-radius: 16px; -webkit-border-bottom-left-radius: 16px;
-moz-border-radius-bottomright: 16px; -moz-border-radius-bottomright: 16px;
-moz-border-radius-bottomleft: 16px; -moz-border-radius-bottomleft: 16px;
border-bottom-right-radius: 16px; border-bottom-right-radius: 16px;
border-bottom-left-radius: 16px; border-bottom-left-radius: 16px;
border-bottom:1px solid #ccc; border-bottom: 1px solid #ccc;
border-right:1px solid #ccc; border-right: 1px solid #ccc;
border-left:1px solid #ccc; border-left: 1px solid #ccc;
} }
.sf-reset .block_exception { background-color:#ddd; color: #333; padding:20px;
.sf-reset .block_exception {
background-color: #ddd;
color: #333;
padding: 20px;
-webkit-border-top-left-radius: 16px; -webkit-border-top-left-radius: 16px;
-webkit-border-top-right-radius: 16px; -webkit-border-top-right-radius: 16px;
-moz-border-radius-topleft: 16px; -moz-border-radius-topleft: 16px;
-moz-border-radius-topright: 16px; -moz-border-radius-topright: 16px;
border-top-left-radius: 16px; border-top-left-radius: 16px;
border-top-right-radius: 16px; border-top-right-radius: 16px;
border-top:1px solid #ccc; border-top: 1px solid #ccc;
border-right:1px solid #ccc; border-right: 1px solid #ccc;
border-left:1px solid #ccc; border-left: 1px solid #ccc;
overflow: hidden; overflow: hidden;
word-wrap: break-word; word-wrap: break-word;
} }
.sf-reset a { background:none; color:#868686; text-decoration:none; }
.sf-reset a:hover { background:none; color:#313131; text-decoration:underline; } .sf-reset a {
.sf-reset ol { padding: 10px 0; } background: none;
.sf-reset h1 { background-color:#FFFFFF; padding: 15px 28px; margin-bottom: 20px; color: #868686;
text-decoration: none;
}
.sf-reset a:hover {
background: none;
color: #313131;
text-decoration: underline;
}
.sf-reset ol {
padding: 10px 0;
}
.sf-reset h1 {
background-color: #FFFFFF;
padding: 15px 28px;
margin-bottom: 20px;
-webkit-border-radius: 10px; -webkit-border-radius: 10px;
-moz-border-radius: 10px; -moz-border-radius: 10px;
border-radius: 10px; border-radius: 10px;

View File

@@ -1,54 +1,61 @@
<html> <html>
<head> <head>
<link href='https://fonts.googleapis.com/css?family=Lato:100' rel='stylesheet' type='text/css'> <link href='https://fonts.googleapis.com/css?family=Lato:100' rel='stylesheet' type='text/css'>
<style> <style>
body { body {
margin: 0; margin: 0;
padding: 0; padding: 0;
width: 100%; width: 100%;
height: 100%; height: 100%;
color: #B0BEC5; color: #B0BEC5;
display: table; display: table;
font-weight: 100; font-weight: 100;
font-family: 'Lato'; font-family: 'Lato';
} }
.container { .container {
text-align: center; text-align: center;
display: table-cell; display: table-cell;
vertical-align: middle; vertical-align: middle;
} }
.content { .content {
text-align: center; text-align: center;
display: inline-block; display: inline-block;
} }
.title { .title {
font-size: 72px; font-size: 72px;
margin-bottom: 40px; margin-bottom: 40px;
} }
</style> </style>
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<div class="content"> <div class="content">
<div class="title">Be right back.</div> <div class="title">Be right back.</div>
</div> </div>
</div> </div>
<script> <script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (function (i, s, o, g, r, a, m) {
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), i['GoogleAnalyticsObject'] = r;
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) i[r] = i[r] || function () {
})(window,document,'script','//www.google-analytics.com/analytics.js','ga'); (i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', '{{ env('ANALYTICS_ID', 'XXX-XX-X') }}', 'auto'); ga('create', '{{ env('ANALYTICS_ID', 'XXX-XX-X') }}', 'auto');
ga('send', 'pageview'); ga('send', 'pageview');
</script> </script>
</body> </body>
</html> </html>

View File

@@ -1,5 +1,6 @@
<div class="{{ classes }}" id="{{ name}}_holder"> <div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label> <label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8"> <div class="col-sm-8">
<div class="input-group"> <div class="input-group">
<div class="input-group-btn"> <div class="input-group-btn">
@@ -8,16 +9,17 @@
</button> </button>
<ul class="dropdown-menu" role="menu"> <ul class="dropdown-menu" role="menu">
{% for currency in currencies %} {% for currency in currencies %}
<li><a href="#" class="currencySelect" data-id="{{ currency.id }}" data-field="amount" data-currency="{{ currency.code }}" data-symbol="{{ currency.symbol|raw }}">{{ currency.name }}</a></li> <li><a href="#" class="currencySelect" data-id="{{ currency.id }}" data-field="amount" data-currency="{{ currency.code }}"
data-symbol="{{ currency.symbol|raw }}">{{ currency.name }}</a></li>
{% endfor %} {% endfor %}
</ul> </ul>
</div> </div>
{{ Form.input('number', name, value, options) }} {{ Form.input('number', name, value, options) }}
</div> </div>
{% include 'form/feedback.twig' %} {% include 'form/feedback.twig' %}
</div> </div>
<input type="hidden" name="amount_currency_id" value="{{ defaultCurrency.id }}" /> <input type="hidden" name="amount_currency_id" value="{{ defaultCurrency.id }}"/>
</div> </div>

View File

@@ -1,5 +1,6 @@
<div class="{{ classes }}" id="{{ name}}_holder"> <div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label> <label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8"> <div class="col-sm-8">
<div class="input-group"> <div class="input-group">
<div class="input-group-btn"> <div class="input-group-btn">
@@ -8,15 +9,16 @@
</button> </button>
<ul class="dropdown-menu" role="menu"> <ul class="dropdown-menu" role="menu">
{% for currency in currencies %} {% for currency in currencies %}
<li><a href="#" class="currencySelect" data-id="{{ currency.id }}" data-field="balance" data-currency="{{ currency.code }}" data-symbol="{{ currency.symbol }}">{{ currency.name }}</a></li> <li><a href="#" class="currencySelect" data-id="{{ currency.id }}" data-field="balance" data-currency="{{ currency.code }}"
data-symbol="{{ currency.symbol }}">{{ currency.name }}</a></li>
{% endfor %} {% endfor %}
</ul> </ul>
</div> </div>
{{ Form.input('number', name, value, options) }} {{ Form.input('number', name, value, options) }}
</div> </div>
{% include 'form/feedback.twig' %} {% include 'form/feedback.twig' %}
</div> </div>
<input type="hidden" name="balance_currency_id" value="{{ defaultCurrency.id }}" /> <input type="hidden" name="balance_currency_id" value="{{ defaultCurrency.id }}"/>
</div> </div>

View File

@@ -1,5 +1,6 @@
<div class="{{ classes }}" id="{{ name}}_holder"> <div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label> <label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8"> <div class="col-sm-8">
<div class="checkbox"> <div class="checkbox">
<label> <label>

View File

@@ -1,7 +1,8 @@
<div class="{{ classes }}" id="{{ name}}_holder"> <div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label> <label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8"> <div class="col-sm-8">
{{ Form.input('date', name, value, options) }} {{ Form.input('date', name, value, options) }}
{% include 'form/help.twig' %} {% include 'form/help.twig' %}
{% include 'form/feedback.twig' %} {% include 'form/feedback.twig' %}
</div> </div>

View File

@@ -1,9 +1,10 @@
<div class="{{ classes }}" id="{{ name}}_holder"> <div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label> <label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8"> <div class="col-sm-8">
<div class="input-group"> <div class="input-group">
{{ Form.input('number', name, value, options) }} {{ Form.input('number', name, value, options) }}
{% include 'form/feedback.twig' %} {% include 'form/feedback.twig' %}
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,14 +1,15 @@
<div class="{{ classes }}" id="{{ name}}_holder"> <div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label> <label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8"> <div class="col-sm-8">
<div id="map-canvas" style="width:100%;height:300px;"></div> <div id="map-canvas" style="width:100%;height:300px;"></div>
<p class="help-block">Right-click to set the tag's location. <p class="help-block">Right-click to set the tag's location.
<a href="#" id="clearLocation">Clear location</a> <a href="#" id="clearLocation">Clear location</a>
</p> </p>
<input type="hidden" name="latitude" value="" /> <input type="hidden" name="latitude" value=""/>
<input type="hidden" name="longitude" value="" /> <input type="hidden" name="longitude" value=""/>
<input type="hidden" name="zoomLevel" value="6" /> <input type="hidden" name="zoomLevel" value="6"/>
<input type="hidden" name="setTag" value="" /> <input type="hidden" name="setTag" value=""/>
{% include 'form/feedback.twig' %} {% include 'form/feedback.twig' %}
</div> </div>
</div> </div>

View File

@@ -1,13 +1,14 @@
<div class="{{ classes }}" id="{{ name}}_holder"> <div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label> <label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8"> <div class="col-sm-8">
{% for value,description in list %} {% for value,description in list %}
<div class="radio"> <div class="radio">
<label> <label>
{{ Form.radio(name, value, (selected == value), options) }} {{ Form.radio(name, value, (selected == value), options) }}
{{ description }} {{ description }}
</label> </label>
</div> </div>
{% endfor %} {% endfor %}
{% include 'form/help.twig' %} {% include 'form/help.twig' %}
{% include 'form/feedback.twig' %} {% include 'form/feedback.twig' %}

View File

@@ -3,6 +3,7 @@
<label for="{{ name }}_return_to_form" class="col-sm-4 control-label"> <label for="{{ name }}_return_to_form" class="col-sm-4 control-label">
{{ trans('form.returnHere') }} {{ trans('form.returnHere') }}
</label> </label>
<div class="col-sm-8"> <div class="col-sm-8">
<div class="radio"> <div class="radio">
<label> <label>
@@ -20,6 +21,7 @@
<label for="{{ name }}_return_to_edit" class="col-sm-4 control-label"> <label for="{{ name }}_return_to_edit" class="col-sm-4 control-label">
{{ trans('form.returnHere') }} {{ trans('form.returnHere') }}
</label> </label>
<div class="col-sm-8"> <div class="col-sm-8">
<div class="radio"><label> <div class="radio"><label>
{{ Form.checkbox(name ~ '_return_to_edit', '1', Input.old('return_to_edit') == '1', {'id': name ~ '_return_to_edit'}) }} {{ Form.checkbox(name ~ '_return_to_edit', '1', Input.old('return_to_edit') == '1', {'id': name ~ '_return_to_edit'}) }}

View File

@@ -1,7 +1,8 @@
<div class="{{ classes }}" id="{{ name}}_holder"> <div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label> <label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8"> <div class="col-sm-8">
{{ Form.select(name, list, selected , options ) }} {{ Form.select(name, list, selected , options ) }}
{% include 'form/help.twig' %} {% include 'form/help.twig' %}
{% include 'form/feedback.twig' %} {% include 'form/feedback.twig' %}

View File

@@ -1,5 +1,6 @@
<div class="{{ classes }}" id="{{ name}}_holder"> <div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label> <label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8"> <div class="col-sm-8">
{{ Form.input('text', name, value, options) }} {{ Form.input('text', name, value, options) }}
{% include 'form/feedback.twig' %} {% include 'form/feedback.twig' %}

View File

@@ -1,7 +1,8 @@
<div class="{{ classes }}" id="{{ name}}_holder"> <div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label> <label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8"> <div class="col-sm-8">
{{ Form.input('text', name, value, options) }} {{ Form.input('text', name, value, options) }}
{% include 'form/feedback.twig' %} {% include 'form/feedback.twig' %}
</div> </div>
</div> </div>

View File

@@ -1,5 +1,6 @@
<div class="{{ classes }}" id="{{ name}}_holder"> <div class="{{ classes }}" id="{{ name }}_holder">
<label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label> <label for="{{ options.id }}" class="col-sm-4 control-label">{{ label }}</label>
<div class="col-sm-8"> <div class="col-sm-8">
{{ Form.textarea(name, value, options) }} {{ Form.textarea(name, value, options) }}
{% include 'form/feedback.twig' %} {% include 'form/feedback.twig' %}

View File

@@ -6,205 +6,215 @@
{% block content %} {% block content %}
{% include 'partials/boxes.twig' %} {% include 'partials/boxes.twig' %}
<div class="row"> <div class="row">
<div class="col-lg-8 col-md-12 col-sm-12"> <div class="col-lg-8 col-md-12 col-sm-12">
<!-- ACCOUNTS --> <!-- ACCOUNTS -->
<div class="box box-primary"> <div class="box box-primary">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">{{ 'yourAccounts'|_ }}</h3> <h3 class="box-title">{{ 'yourAccounts'|_ }}</h3>
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<div id="accounts-chart"></div>
</div>
</div>
<!-- BUDGETS --> <div class="box-tools pull-right">
<div class="box"> <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
<div class="box-header with-border">
<h3 class="box-title">{{ 'budgetsAndSpending'|_ }}</h3>
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<div id="budgets-chart"></div>
</div>
</div>
<!-- CATEGORIES -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'categories'|_ }}</h3>
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<div id="categories-chart"></div>
</div>
</div>
<!-- SAVINGS -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'savings'|_ }}</h3>
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
{% if savings|length == 0 %}
<p class="small"><em>{{ 'markAsSavingsToContinue'|_ }}</em></p>
{% else %}
{% for account in savings %}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12"><h5><a href="{{ route('accounts.show') }}">{{ account.name }}</a></h5></div>
</div>
<div class="row">
<!-- start -->
<div class="col-lg-2 col-md-2 col-sm-3 col-xs-4">{{ account.startBalance|formatAmount }}</div>
<!-- bar -->
<div class="col-lg-8 col-md-8 col-sm-6 col-xs-4">
{% if account.difference < 0 %}
<!-- green (100-pct), then red (pct) -->
<div class="progress">
<div class="progress-bar progress-bar-success" style="width: {{ 100 - account.percentage }}%">
{% if account.percentage <= 50 %}
{{account.difference|formatAmountPlain}}
{% endif %}
</div>
<div class="progress-bar progress-bar-danger" style="width: {{ account.percentage }}%">
{% if account.percentage > 50 %}
{{account.difference|formatAmountPlain}}
{% endif %}
</div>
</div>
{% else %}
<!-- green (pct), then blue (100-pct) -->
<div class="progress">
<div class="progress-bar progress-bar-success" style="width: {{account.percentage}}%">
{% if account.percentage <= 50 %}
{{account.difference|formatAmountPlain}}
{{account.difference|formatAmountPlain}}
{% endif %}
</div>
<div class="progress-bar progress-bar-info" style="width: {{100 - account.percentage}}%">
{% if account.percentage > 50 %}
{{account.difference|formatAmountPlain}}
{% endif %}
</div>
</div>
{% endif %}
</div>
<!-- end -->
<div class="col-lg-2 col-md-2 col-sm-3 col-xs-4">{{ account.endBalance|formatAmount }}</div>
</div>
{% endfor %}
{% endif %}
</div>
<div class="box-footer clearfix">
<span class="pull-right">{{ 'sum'|_ }}: {{ savingsTotal|formatAmount }}</span>
</div>
</div>
<!-- PIGGY BANKS -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'piggyBanks'|_ }}</h3>
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
{% if piggyBankAccounts|length == 0%}
<p class="small"><em>{{ 'createPiggyToContinue'|_ }}</em></p>
{% else %}
{% for account in piggyBankAccounts %}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12"><h5><a href="{{route('accounts.show')}}">{{account.name}}</a></h5></div>
</div>
<div class="row">
<!-- start -->
<div class="col-lg-2 col-md-2 col-sm-3 col-xs-4">{{ account.startBalance|formatAmount }}</div>
<!-- bar -->
<div class="col-lg-8 col-md-8 col-sm-6 col-xs-4">
<div class="progress">
<div class="progress-bar progress-bar-info progress-bar" style="width: {{100 - account.percentage}}%">
{% if account.percentage <= 50 %}
{{account.piggyBalance|formatAmountPlain}} {{ 'divided'|_}}
{% endif %}
</div>
<div class="progress-bar progress-bar-success progress-bar" style="width: {{account.percentage}}%">
{% if account.percentage > 50 %}
{{account.difference|formatAmountPlain}} {{ 'toDivide'|_}}
{% endif %}
</div>
</div>
</div>
<!-- end -->
<div class="col-lg-2 col-md-2 col-sm-3 col-xs-4">{{ account.piggyBalance|formatAmount }}</div>
</div>
{% endfor %}
{% endif %}
</div>
</div>
</div>
<div class="col-lg-4 col-md-6 col-sm-12">
<!-- BILLS -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'bills'|_ }}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<div id="bills-chart"></div>
</div>
</div>
<!-- TRANSACTIONS -->
{% for data in transactions %}
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{data[1].name}}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
<div class="btn-group">
<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button>
<ul class="dropdown-menu" role="menu">
<li><a href="{{route('transactions.create','withdrawal')}}?account_id={{data[1].id}}"><i class="fa fa-long-arrow-left fa-fw"></i> {{ 'newWithdrawal'|_ }}</a></li>
<li><a href="{{route('transactions.create','deposit')}}?account_id={{data[1].id}}"><i class="fa fa-long-arrow-right fa-fw"></i> {{ 'newDeposit'|_ }}</a></li>
<li><a href="{{route('transactions.create','transfer')}}?account_from_id={{data[1].id}}"><i class="fa fa-fw fa-exchange"></i> {{ 'newTransfer'|_ }}</a></li>
</ul>
</div> </div>
</div> </div>
<div class="box-body">
<div id="accounts-chart"></div>
</div>
</div>
<!-- BUDGETS -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'budgetsAndSpending'|_ }}</h3>
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<div id="budgets-chart"></div>
</div>
</div>
<!-- CATEGORIES -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'categories'|_ }}</h3>
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<div id="categories-chart"></div>
</div>
</div>
<!-- SAVINGS -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'savings'|_ }}</h3>
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
{% if savings|length == 0 %}
<p class="small"><em>{{ 'markAsSavingsToContinue'|_ }}</em></p>
{% else %}
{% for account in savings %}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12"><h5><a href="{{ route('accounts.show') }}">{{ account.name }}</a></h5>
</div>
</div>
<div class="row">
<!-- start -->
<div class="col-lg-2 col-md-2 col-sm-3 col-xs-4">{{ account.startBalance|formatAmount }}</div>
<!-- bar -->
<div class="col-lg-8 col-md-8 col-sm-6 col-xs-4">
{% if account.difference < 0 %}
<!-- green (100-pct), then red (pct) -->
<div class="progress">
<div class="progress-bar progress-bar-success" style="width: {{ 100 - account.percentage }}%">
{% if account.percentage <= 50 %}
{{ account.difference|formatAmountPlain }}
{% endif %}
</div>
<div class="progress-bar progress-bar-danger" style="width: {{ account.percentage }}%">
{% if account.percentage > 50 %}
{{ account.difference|formatAmountPlain }}
{% endif %}
</div>
</div>
{% else %}
<!-- green (pct), then blue (100-pct) -->
<div class="progress">
<div class="progress-bar progress-bar-success" style="width: {{ account.percentage }}%">
{% if account.percentage <= 50 %}
{{ account.difference|formatAmountPlain }}
{{ account.difference|formatAmountPlain }}
{% endif %}
</div>
<div class="progress-bar progress-bar-info" style="width: {{ 100 - account.percentage }}%">
{% if account.percentage > 50 %}
{{ account.difference|formatAmountPlain }}
{% endif %}
</div>
</div>
{% endif %}
</div>
<!-- end -->
<div class="col-lg-2 col-md-2 col-sm-3 col-xs-4">{{ account.endBalance|formatAmount }}</div>
</div>
{% endfor %}
{% endif %}
</div>
<div class="box-footer clearfix">
<span class="pull-right">{{ 'sum'|_ }}: {{ savingsTotal|formatAmount }}</span>
</div>
</div>
<!-- PIGGY BANKS -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'piggyBanks'|_ }}</h3>
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
{% if piggyBankAccounts|length == 0 %}
<p class="small"><em>{{ 'createPiggyToContinue'|_ }}</em></p>
{% else %}
{% for account in piggyBankAccounts %}
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12"><h5><a href="{{ route('accounts.show') }}">{{ account.name }}</a></h5>
</div>
</div>
<div class="row">
<!-- start -->
<div class="col-lg-2 col-md-2 col-sm-3 col-xs-4">{{ account.startBalance|formatAmount }}</div>
<!-- bar -->
<div class="col-lg-8 col-md-8 col-sm-6 col-xs-4">
<div class="progress">
<div class="progress-bar progress-bar-info progress-bar" style="width: {{ 100 - account.percentage }}%">
{% if account.percentage <= 50 %}
{{ account.piggyBalance|formatAmountPlain }} {{ 'divided'|_ }}
{% endif %}
</div>
<div class="progress-bar progress-bar-success progress-bar" style="width: {{ account.percentage }}%">
{% if account.percentage > 50 %}
{{ account.difference|formatAmountPlain }} {{ 'toDivide'|_ }}
{% endif %}
</div>
</div>
</div>
<!-- end -->
<div class="col-lg-2 col-md-2 col-sm-3 col-xs-4">{{ account.piggyBalance|formatAmount }}</div>
</div>
{% endfor %}
{% endif %}
</div>
</div>
</div>
<div class="box-body no-padding">
{% include 'list/journals-tiny.twig' with {'transactions': data[0],'account': data[1]} %}
</div>
<div class="box-footer clearfix">
<a class="btn btn-sm btn-default btn-flat pull-right" href="{{route('accounts.show',data[1].id)}}">{{ (data[1]|balance)|formatAmountPlain }}</a>
</div>
</div> </div>
{% endfor %} <div class="col-lg-4 col-md-6 col-sm-12">
<!-- BILLS -->
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ 'bills'|_ }}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<div id="bills-chart"></div>
</div>
</div>
<!-- TRANSACTIONS -->
{% for data in transactions %}
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">{{ data[1].name }}</h3>
<!-- ACTIONS MENU -->
<div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
<div class="btn-group">
<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button>
<ul class="dropdown-menu" role="menu">
<li><a href="{{ route('transactions.create','withdrawal') }}?account_id={{ data[1].id }}"><i
class="fa fa-long-arrow-left fa-fw"></i> {{ 'newWithdrawal'|_ }}</a></li>
<li><a href="{{ route('transactions.create','deposit') }}?account_id={{ data[1].id }}"><i
class="fa fa-long-arrow-right fa-fw"></i> {{ 'newDeposit'|_ }}</a></li>
<li><a href="{{ route('transactions.create','transfer') }}?account_from_id={{ data[1].id }}"><i
class="fa fa-fw fa-exchange"></i> {{ 'newTransfer'|_ }}</a></li>
</ul>
</div>
</div>
</div>
<div class="box-body no-padding">
{% include 'list/journals-tiny.twig' with {'transactions': data[0],'account': data[1]} %}
</div>
<div class="box-footer clearfix">
<a class="btn btn-sm btn-default btn-flat pull-right"
href="{{ route('accounts.show',data[1].id) }}">{{ (data[1]|balance)|formatAmountPlain }}</a>
</div>
</div>
{% endfor %}
</div>
</div> </div>
</div>
{% endblock %} {% endblock %}

View File

@@ -66,7 +66,7 @@
ga('send', 'event', '{{Session.get('gaEventCategory')}}', '{{Session.get('gaEventAction')}}'); ga('send', 'event', '{{Session.get('gaEventCategory')}}', '{{Session.get('gaEventAction')}}');
{% endif %} {% endif %}
{% if Session.has('gaEventCategory') and Session.has('gaEventAction') and Session.has('gaEventLabel') %} {% if Session.has('gaEventCategory') and Session.has('gaEventAction') and Session.has('gaEventLabel') %}
ga('send', 'event', '{{Session.get('gaEventCategory')}}', '{{Session.get('gaEventAction')}}','{{ Session.get('gaEventLabel') }}'); ga('send', 'event', '{{Session.get('gaEventCategory')}}', '{{Session.get('gaEventAction')}}', '{{ Session.get('gaEventLabel') }}');
{% endif %} {% endif %}
</script> </script>
</body> </body>

View File

@@ -4,7 +4,7 @@
<th data-defaultsort="disabled">&nbsp;</th> <th data-defaultsort="disabled">&nbsp;</th>
<th>{{ trans('list.name') }}</th> <th>{{ trans('list.name') }}</th>
{% if what == 'asset' %} {% if what == 'asset' %}
<th class="hidden-sm hidden-xs">{{ trans('list.role') }}</th> <th class="hidden-sm hidden-xs">{{ trans('list.role') }}</th>
{% endif %} {% endif %}
<th>{{ trans('list.currentBalance') }}</th> <th>{{ trans('list.currentBalance') }}</th>
<th class="hidden-sm hidden-xs">{{ trans('list.active') }}</th> <th class="hidden-sm hidden-xs">{{ trans('list.active') }}</th>
@@ -17,11 +17,11 @@
<tr> <tr>
<td> <td>
<div class="btn-group btn-group-xs"> <div class="btn-group btn-group-xs">
<a class="btn btn-default btn-xs" href="{{route('accounts.edit',account.id)}}"><i class="fa fa-fw fa-pencil"></i></a> <a class="btn btn-default btn-xs" href="{{ route('accounts.edit',account.id) }}"><i class="fa fa-fw fa-pencil"></i></a>
<a class="btn btn-danger btn-xs" href="{{route('accounts.delete',account.id)}}"><i class="fa fa-fw fa-trash-o"></i></a> <a class="btn btn-danger btn-xs" href="{{ route('accounts.delete',account.id) }}"><i class="fa fa-fw fa-trash-o"></i></a>
</div> </div>
</td> </td>
<td><a href="{{route('accounts.show',account.id)}}">{{ account.name }}</a></td> <td><a href="{{ route('accounts.show',account.id) }}">{{ account.name }}</a></td>
{% if what == "asset" %} {% if what == "asset" %}
<td class="hidden-sm hidden-xs"> <td class="hidden-sm hidden-xs">
{% for entry in account.accountmeta %} {% for entry in account.accountmeta %}
@@ -32,7 +32,7 @@
</td> </td>
{% endif %} {% endif %}
<td data-value="{{ account|balance }}">{{ account|balance|formatAmount }}</td> <td data-value="{{ account|balance }}">{{ account|balance|formatAmount }}</td>
<td class="hidden-sm hidden-xs" data-value="{{account.active}}"> <td class="hidden-sm hidden-xs" data-value="{{ account.active }}">
{% if account.active %} {% if account.active %}
<i class="fa fa-fw fa-check"></i> <i class="fa fa-fw fa-check"></i>
{% else %} {% else %}
@@ -48,7 +48,7 @@
<em>Never</em> <em>Never</em>
</td> </td>
{% endif %} {% endif %}
<td class="hidden-sm hidden-xs" data-value="{{account.endBalance - account.startBalance}}"> <td class="hidden-sm hidden-xs" data-value="{{ account.endBalance - account.startBalance }}">
{{ (account.endBalance - account.startBalance)|formatAmount }} {{ (account.endBalance - account.startBalance)|formatAmount }}
</td> </td>

View File

@@ -10,71 +10,72 @@
<th class="hidden-sm hidden-xs">{{ trans('list.active') }}</th> <th class="hidden-sm hidden-xs">{{ trans('list.active') }}</th>
<th class="hidden-sm hidden-xs">{{ trans('list.automatch') }}</th> <th class="hidden-sm hidden-xs">{{ trans('list.automatch') }}</th>
<th class="hidden-sm hidden-xs">{{ trans('list.repeat_freq') }}</th> <th class="hidden-sm hidden-xs">{{ trans('list.repeat_freq') }}</th>
</tr></thead> </tr>
</thead>
<tbody> <tbody>
{% for entry in bills %} {% for entry in bills %}
<tr> <tr>
<td> <td>
<div class="btn-group btn-group-xs"> <div class="btn-group btn-group-xs">
<a href="{{route('bills.edit',entry.id)}}" class="btn btn-default btn-xs"><i class="fa fa-fw fa-pencil"></i></a> <a href="{{ route('bills.edit',entry.id) }}" class="btn btn-default btn-xs"><i class="fa fa-fw fa-pencil"></i></a>
<a href="{{route('bills.delete',entry.id)}}" class="btn btn-danger btn-xs"><i class="fa fa-fw fa-trash-o"></i></a> <a href="{{ route('bills.delete',entry.id) }}" class="btn btn-danger btn-xs"><i class="fa fa-fw fa-trash-o"></i></a>
</div> </div>
</td> </td>
<td> <td>
<a href="{{route('bills.show',entry.id)}}" title="{{ entry.name }}">{{ entry.name }}</a> <a href="{{ route('bills.show',entry.id) }}" title="{{ entry.name }}">{{ entry.name }}</a>
</td> </td>
<td class="hidden-sm hidden-xs" data-value="{{ entry.match }}"> <td class="hidden-sm hidden-xs" data-value="{{ entry.match }}">
{% for match in entry.match|split(',') %} {% for match in entry.match|split(',') %}
<span class="label label-info">{{ match }}</span> <span class="label label-info">{{ match }}</span>
{% endfor %} {% endfor %}
</td> </td>
<td data-value="{{ entry.amount_min }}"> <td data-value="{{ entry.amount_min }}">
{{ entry.amount_min|formatAmount }} {{ entry.amount_min|formatAmount }}
</td> </td>
<td data-value="{{ entry.amount_max }}"> <td data-value="{{ entry.amount_max }}">
{{ entry.amount_max|formatAmount }} {{ entry.amount_max|formatAmount }}
</td> </td>
{% if entry.lastFoundMatch %} {% if entry.lastFoundMatch %}
<td class="hidden-sm hidden-xs" data-value="{{ entry.lastFoundMatch.format('U') }}"> <td class="hidden-sm hidden-xs" data-value="{{ entry.lastFoundMatch.format('U') }}">
{{entry.lastFoundMatch.formatLocalized(monthAndDayFormat)}} {{ entry.lastFoundMatch.formatLocalized(monthAndDayFormat) }}
</td> </td>
{% else %} {% else %}
<td class="hidden-sm hidden-xs" data-value="0"> <td class="hidden-sm hidden-xs" data-value="0">
<em>{{ 'unknown'|_ }}</em> <em>{{ 'unknown'|_ }}</em>
</td> </td>
{% endif %} {% endif %}
{% if entry.nextExpectedMatch%} {% if entry.nextExpectedMatch %}
<td class="hidden-sm hidden-xs" data-value="{{entry.nextExpectedMatch.format('U')}}"> <td class="hidden-sm hidden-xs" data-value="{{ entry.nextExpectedMatch.format('U') }}">
{{entry.nextExpectedMatch.formatLocalized(monthAndDayFormat)}} {{ entry.nextExpectedMatch.formatLocalized(monthAndDayFormat) }}
</td> </td>
{% else %} {% else %}
<td class="hidden-sm hidden-xs" data-value="0"> <td class="hidden-sm hidden-xs" data-value="0">
<em>{{ 'unknown'|_ }}</em> <em>{{ 'unknown'|_ }}</em>
</td> </td>
{% endif %} {% endif %}
<td class="hidden-sm hidden-xs" data-value="{{ entry.active }}"> <td class="hidden-sm hidden-xs" data-value="{{ entry.active }}">
{% if entry.active %} {% if entry.active %}
<i class="fa fa-fw fa-check"></i> <i class="fa fa-fw fa-check"></i>
{% else %} {% else %}
<i class="fa fa-fw fa-ban"></i> <i class="fa fa-fw fa-ban"></i>
{% endif %} {% endif %}
</td> </td>
<td class="hidden-sm hidden-xs" data-value="{{ entry.automatch }}"> <td class="hidden-sm hidden-xs" data-value="{{ entry.automatch }}">
{% if entry.automatch %} {% if entry.automatch %}
<i class="fa fa-fw fa-check"></i> <i class="fa fa-fw fa-check"></i>
{% else %} {% else %}
<i class="fa fa-fw fa-ban"></i> <i class="fa fa-fw fa-ban"></i>
{% endif %} {% endif %}
</td> </td>
<td class="hidden-sm hidden-xs" data-value="{{ entry.repeat_freq }}{{ entry.skip }}"> <td class="hidden-sm hidden-xs" data-value="{{ entry.repeat_freq }}{{ entry.skip }}">
{{ entry.repeat_freq|_ }} {{ entry.repeat_freq|_ }}
{% if entry.skip > 0 %} {% if entry.skip > 0 %}
skips over {{entry.skip}} skips over {{ entry.skip }}
{% endif %} {% endif %}
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>

View File

@@ -1,10 +1,10 @@
<table class="table table-hover sortable"> <table class="table table-hover sortable">
<thead> <thead>
<tr> <tr>
<th data-defaultsort="disabled">&nbsp;</th> <th data-defaultsort="disabled">&nbsp;</th>
<th>{{ trans('list.name') }}</th> <th>{{ trans('list.name') }}</th>
<th class="hidden-sm hidden-xs">{{ trans('list.lastActivity') }}</th> <th class="hidden-sm hidden-xs">{{ trans('list.lastActivity') }}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
@@ -13,26 +13,26 @@
<td class="hidden-sm hidden-xs">&nbsp;</td> <td class="hidden-sm hidden-xs">&nbsp;</td>
</tr> </tr>
{% for category in categories %} {% for category in categories %}
<tr> <tr>
<td> <td>
<div class="btn-group btn-group-xs"> <div class="btn-group btn-group-xs">
<a href="{{ route('categories.edit', category.id) }}" class="btn btn-default btn-xs"><i class="fa fa-fw fa-pencil"></i></a> <a href="{{ route('categories.edit', category.id) }}" class="btn btn-default btn-xs"><i class="fa fa-fw fa-pencil"></i></a>
<a href="{{ route('categories.delete', category.id) }}" class="btn btn-danger btn-xs"><i class="fa fa-fw fa-trash-o"></i></a> <a href="{{ route('categories.delete', category.id) }}" class="btn btn-danger btn-xs"><i class="fa fa-fw fa-trash-o"></i></a>
</div> </div>
</td>
<td>
<a href="{{ route('categories.show', category.id) }}" title="{{ category.name }}">{{ category.name }}</a>
</td>
{% if category.lastActivity %}
<td class="hidden-sm hidden-xs" data-value="{{ category.lastActivity.format('U') }}">
{{category.lastActivity.formatLocalized(monthAndDayFormat) }}
</td> </td>
{% else %} <td>
<td class="hidden-sm hidden-xs" data-value="0"> <a href="{{ route('categories.show', category.id) }}" title="{{ category.name }}">{{ category.name }}</a>
<em>{{ 'never'|_ }}</em>
</td> </td>
{% endif %} {% if category.lastActivity %}
</tr> <td class="hidden-sm hidden-xs" data-value="{{ category.lastActivity.format('U') }}">
{{ category.lastActivity.formatLocalized(monthAndDayFormat) }}
</td>
{% else %}
<td class="hidden-sm hidden-xs" data-value="0">
<em>{{ 'never'|_ }}</em>
</td>
{% endif %}
</tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>

View File

@@ -1,17 +1,17 @@
<div class="list-group"> <div class="list-group">
{% for journal in transactions %} {% for journal in transactions %}
<a class="list-group-item" title="{{journal.date.format('jS M Y')}}" href="{{route('transactions.show',journal.id)}}"> <a class="list-group-item" title="{{ journal.date.format('jS M Y') }}" href="{{ route('transactions.show',journal.id) }}">
{{ journal|typeIcon }} {{ journal|typeIcon }}
{{ journal.description }} {{ journal.description }}
<span class="pull-right small"> <span class="pull-right small">
{{ journal|formatJournal }} {{ journal|formatJournal }}
</span> </span>
</a> </a>
{% endfor %} {% endfor %}
</div> </div>

View File

@@ -33,17 +33,17 @@
</td> </td>
<td>&nbsp;</td> <td>&nbsp;</td>
<td>{{ journal.description }}</td> <td>{{ journal.description }}</td>
<td colspan="7"><em>Invalid journal: Found {{journal.transactions|length }} transaction(s)</em></td> <td colspan="7"><em>Invalid journal: Found {{ journal.transactions|length }} transaction(s)</em></td>
</tr> </tr>
{% else %} {% else %}
<tr class="drag" data-date="{{journal.date.format('Y-m-d')}}" data-id="{{journal.id}}"> <tr class="drag" data-date="{{ journal.date.format('Y-m-d') }}" data-id="{{ journal.id }}">
<td class="hidden-xs"> <td class="hidden-xs">
<div class="btn-group btn-group-xs"> <div class="btn-group btn-group-xs">
{% if sorting %} {% if sorting %}
<a href="#" class="handle btn btn-default btn-xs"><i class="fa fa-fw fa-arrows-v"></i></a> <a href="#" class="handle btn btn-default btn-xs"><i class="fa fa-fw fa-arrows-v"></i></a>
{% endif %} {% endif %}
<a href="{{ route('transactions.edit',journal.id)}}" class="btn btn-xs btn-default"><i class="fa fa-fw fa-pencil"></i></a> <a href="{{ route('transactions.edit',journal.id) }}" class="btn btn-xs btn-default"><i class="fa fa-fw fa-pencil"></i></a>
<a href="{{ route('transactions.delete',journal.id)}}" class="btn btn-xs btn-danger"><i class="fa fa-fw fa-trash-o"></i></a> <a href="{{ route('transactions.delete',journal.id) }}" class="btn btn-xs btn-danger"><i class="fa fa-fw fa-trash-o"></i></a>
</div> </div>
</td> </td>
@@ -51,7 +51,7 @@
{{ journal|typeIcon }} {{ journal|typeIcon }}
</td> </td>
<td> <td>
<a href="{{route('transactions.show',journal.id)}}" title="{{journal.description}}">{{journal.description}}</a> <a href="{{ route('transactions.show',journal.id) }}" title="{{ journal.description }}">{{ journal.description }}</a>
</td> </td>
<td> <td>
{% if not hideTags %} {% if not hideTags %}
@@ -61,20 +61,20 @@
{% endif %} {% endif %}
</td> </td>
<td class="hidden-sm hidden-xs"> <td class="hidden-sm hidden-xs">
{{journal.date.formatLocalized(monthAndDayFormat)}} {{ journal.date.formatLocalized(monthAndDayFormat) }}
</td> </td>
<td class="hidden-xs"> <td class="hidden-xs">
{% if journal.source_account.accountType.type == 'Cash account' %} {% if journal.source_account.accountType.type == 'Cash account' %}
<span class="text-success">(cash)</span> <span class="text-success">(cash)</span>
{% else %} {% else %}
<a href="{{route('accounts.show',journal.source_account.id)}}">{{journal.source_account.name}}</a> <a href="{{ route('accounts.show',journal.source_account.id) }}">{{ journal.source_account.name }}</a>
{% endif %} {% endif %}
</td> </td>
<td class="hidden-xs"> <td class="hidden-xs">
{% if journal.destination_account.accountType.type == 'Cash account' %} {% if journal.destination_account.accountType.type == 'Cash account' %}
<span class="text-success">(cash)</span> <span class="text-success">(cash)</span>
{% else %} {% else %}
<a href="{{route('accounts.show',journal.destination_account.id)}}">{{journal.destination_account.name}}</a> <a href="{{ route('accounts.show',journal.destination_account.id) }}">{{ journal.destination_account.name }}</a>
{% endif %} {% endif %}
</td> </td>
@@ -82,7 +82,7 @@
{% if not hideBudgets %} {% if not hideBudgets %}
<td class="hidden-xs"> <td class="hidden-xs">
{% if journal.budgets[0] %} {% if journal.budgets[0] %}
<a href="{{route('budgets.show',journal.budgets[0].id)}}">{{journal.budgets[0].name}}</a> <a href="{{ route('budgets.show',journal.budgets[0].id) }}">{{ journal.budgets[0].name }}</a>
{% endif %} {% endif %}
</td> </td>
{% endif %} {% endif %}
@@ -91,7 +91,7 @@
{% if not hideCategories %} {% if not hideCategories %}
<td class="hidden-xs"> <td class="hidden-xs">
{% if journal.categories[0] %} {% if journal.categories[0] %}
<a href="{{route('categories.show',journal.categories[0].id)}}">{{journal.categories[0].name}}</a> <a href="{{ route('categories.show',journal.categories[0].id) }}">{{ journal.categories[0].name }}</a>
{% endif %} {% endif %}
</td> </td>
{% endif %} {% endif %}
@@ -100,7 +100,7 @@
{% if not hideBills %} {% if not hideBills %}
<td class="hidden-xs"> <td class="hidden-xs">
{% if journal.bill %} {% if journal.bill %}
<a href="{{ route('bills.show',journal.bill_id) }}">{{journal.bill.name}}</a> <a href="{{ route('bills.show',journal.bill_id) }}">{{ journal.bill.name }}</a>
{% endif %} {% endif %}
</td> </td>
{% endif %} {% endif %}

View File

@@ -7,27 +7,28 @@
<th>{{ trans('list.amount') }}</th> <th>{{ trans('list.amount') }}</th>
</tr> </tr>
{% for event in events %} {% for event in events %}
<tr> <tr>
{% if showPiggyBank %} {% if showPiggyBank %}
<td> <td>
<a href="{{ route('piggy-banks.show',event.piggyBank_id) }}">{{ event.piggyBank.name }}</a> <a href="{{ route('piggy-banks.show',event.piggyBank_id) }}">{{ event.piggyBank.name }}</a>
</td> </td>
{% endif %}
<td>
{% if event.transaction_journal_id %}
<a href="{{ route('transactions.show',event.transaction_journal_id) }}" title="{{ event.transactionJournal.description }}">{{ event.date.format('j F Y') }}</a>
{% else %}
{{ event.date.format('j F Y') }}
{% endif %} {% endif %}
<td>
{% if event.transaction_journal_id %}
<a href="{{ route('transactions.show',event.transaction_journal_id) }}"
title="{{ event.transactionJournal.description }}">{{ event.date.format('j F Y') }}</a>
{% else %}
{{ event.date.format('j F Y') }}
{% endif %}
</td> </td>
<td> <td>
{% if event.amount < 0 %} {% if event.amount < 0 %}
<span class="text-danger">Removed {{ event.amount*-1|formatAmountPlain }}</span> <span class="text-danger">Removed {{ event.amount*-1|formatAmountPlain }}</span>
{% else %} {% else %}
<span class="text-success">Added {{ event.amount|formatAmountPlain }}</span> <span class="text-success">Added {{ event.amount|formatAmountPlain }}</span>
{% endif %} {% endif %}
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>

View File

@@ -5,23 +5,31 @@
<span class="info-box-icon bg-red"> <span class="info-box-icon bg-red">
<i class="fa fa-upload fa-fw"></i> <i class="fa fa-upload fa-fw"></i>
</span> </span>
<div class="info-box-content"> <div class="info-box-content">
<span class="info-box-text">{{ 'moneyOut'|_ }}</span> <span class="info-box-text">{{ 'moneyOut'|_ }}</span>
<span class="info-box-number" id="box-out"></span> <span class="info-box-number" id="box-out"></span>
</div><!-- /.info-box-content --> </div>
</div><!-- /.info-box --> <!-- /.info-box-content -->
</div><!-- /.col --> </div>
<!-- /.info-box -->
</div>
<!-- /.col -->
<div class="col-md-3 col-sm-6 col-xs-12"> <div class="col-md-3 col-sm-6 col-xs-12">
<div class="info-box"> <div class="info-box">
<span class="info-box-icon bg-green"> <span class="info-box-icon bg-green">
<i class="fa fa-download faw-fw"></i> <i class="fa fa-download faw-fw"></i>
</span> </span>
<div class="info-box-content"> <div class="info-box-content">
<span class="info-box-text">{{ 'moneyIn'|_ }}</span> <span class="info-box-text">{{ 'moneyIn'|_ }}</span>
<span class="info-box-number" id="box-in"></span> <span class="info-box-number" id="box-in"></span>
</div><!-- /.info-box-content --> </div>
</div><!-- /.info-box --> <!-- /.info-box-content -->
</div><!-- /.col --> </div>
<!-- /.info-box -->
</div>
<!-- /.col -->
<!-- fix for small devices only --> <!-- fix for small devices only -->
<div class="clearfix visible-sm-block"></div> <div class="clearfix visible-sm-block"></div>
@@ -31,21 +39,29 @@
<span class="info-box-icon bg-blue"> <span class="info-box-icon bg-blue">
<i class="fa fa-calendar fa-fw"></i> <i class="fa fa-calendar fa-fw"></i>
</span> </span>
<div class="info-box-content"> <div class="info-box-content">
<span class="info-box-text">{{ 'billsToPay'|_ }}</span> <span class="info-box-text">{{ 'billsToPay'|_ }}</span>
<span class="info-box-number" id="box-bills-unpaid"></span> <span class="info-box-number" id="box-bills-unpaid"></span>
</div><!-- /.info-box-content --> </div>
</div><!-- /.info-box --> <!-- /.info-box-content -->
</div><!-- /.col --> </div>
<!-- /.info-box -->
</div>
<!-- /.col -->
<div class="col-md-3 col-sm-6 col-xs-12"> <div class="col-md-3 col-sm-6 col-xs-12">
<div class="info-box"> <div class="info-box">
<span class="info-box-icon bg-aqua"> <span class="info-box-icon bg-aqua">
<i class="fa fa-line-chart fa-fw"></i> <i class="fa fa-line-chart fa-fw"></i>
</span> </span>
<div class="info-box-content"> <div class="info-box-content">
<span class="info-box-text">{{ 'billsPaid'|_ }}</span> <span class="info-box-text">{{ 'billsPaid'|_ }}</span>
<span class="info-box-number" id="box-bills-paid"></span> <span class="info-box-number" id="box-bills-paid"></span>
</div><!-- /.info-box-content --> </div>
</div><!-- /.info-box --> <!-- /.info-box-content -->
</div><!-- /.col --> </div>
<!-- /.info-box -->
</div>
<!-- /.col -->
</div><!-- /.row --> </div><!-- /.row -->

View File

@@ -1,4 +1,3 @@
<!-- Control Sidebar --> <!-- Control Sidebar -->
<aside class="control-sidebar control-sidebar-dark"> <aside class="control-sidebar control-sidebar-dark">
<!-- Tab panes --> <!-- Tab panes -->
@@ -10,6 +9,7 @@
<li> <li>
<a href="{{ route('transactions.create', 'withdrawal') }}"> <a href="{{ route('transactions.create', 'withdrawal') }}">
<i class="menu-icon fa fa-long-arrow-left bg-red"></i> <i class="menu-icon fa fa-long-arrow-left bg-red"></i>
<div class="menu-info"> <div class="menu-info">
<h4 class="control-sidebar-subheading">New withdrawal</h4> <h4 class="control-sidebar-subheading">New withdrawal</h4>
</div> </div>
@@ -18,6 +18,7 @@
<li> <li>
<a href="{{ route('transactions.create', 'deposit') }}"> <a href="{{ route('transactions.create', 'deposit') }}">
<i class="menu-icon fa fa-long-arrow-right bg-green"></i> <i class="menu-icon fa fa-long-arrow-right bg-green"></i>
<div class="menu-info"> <div class="menu-info">
<h4 class="control-sidebar-subheading">New deposit</h4> <h4 class="control-sidebar-subheading">New deposit</h4>
</div> </div>
@@ -26,6 +27,7 @@
<li> <li>
<a href="{{ route('transactions.create', 'transfer') }}"> <a href="{{ route('transactions.create', 'transfer') }}">
<i class="menu-icon fa fa-exchange bg-blue"></i> <i class="menu-icon fa fa-exchange bg-blue"></i>
<div class="menu-info"> <div class="menu-info">
<h4 class="control-sidebar-subheading">New transfer</h4> <h4 class="control-sidebar-subheading">New transfer</h4>
</div> </div>
@@ -34,6 +36,7 @@
<li> <li>
<a href="{{ route('accounts.create', 'asset') }}"> <a href="{{ route('accounts.create', 'asset') }}">
<i class="menu-icon fa fa-money bg-maroon"></i> <i class="menu-icon fa fa-money bg-maroon"></i>
<div class="menu-info"> <div class="menu-info">
<h4 class="control-sidebar-subheading">New asset account</h4> <h4 class="control-sidebar-subheading">New asset account</h4>
</div> </div>
@@ -42,6 +45,7 @@
<li> <li>
<a href="{{ route('accounts.create', 'expense') }}"> <a href="{{ route('accounts.create', 'expense') }}">
<i class="menu-icon fa fa-shopping-cart bg-maroon"></i> <i class="menu-icon fa fa-shopping-cart bg-maroon"></i>
<div class="menu-info"> <div class="menu-info">
<h4 class="control-sidebar-subheading">New expense account</h4> <h4 class="control-sidebar-subheading">New expense account</h4>
</div> </div>
@@ -50,6 +54,7 @@
<li> <li>
<a href="{{ route('accounts.create', 'revenue') }}"> <a href="{{ route('accounts.create', 'revenue') }}">
<i class="menu-icon fa fa-download bg-maroon"></i> <i class="menu-icon fa fa-download bg-maroon"></i>
<div class="menu-info"> <div class="menu-info">
<h4 class="control-sidebar-subheading">New revenue</h4> <h4 class="control-sidebar-subheading">New revenue</h4>
</div> </div>
@@ -58,6 +63,7 @@
<li> <li>
<a href="{{ route('piggy-banks.create') }}"> <a href="{{ route('piggy-banks.create') }}">
<i class="menu-icon fa fa-sort-amount-asc bg-teal"></i> <i class="menu-icon fa fa-sort-amount-asc bg-teal"></i>
<div class="menu-info"> <div class="menu-info">
<h4 class="control-sidebar-subheading">New piggy bank</h4> <h4 class="control-sidebar-subheading">New piggy bank</h4>
</div> </div>
@@ -66,15 +72,18 @@
<li> <li>
<a href="{{ route('bills.create') }}"> <a href="{{ route('bills.create') }}">
<i class="menu-icon fa fa-download bg-purple"></i> <i class="menu-icon fa fa-download bg-purple"></i>
<div class="menu-info"> <div class="menu-info">
<h4 class="control-sidebar-subheading">New bill</h4> <h4 class="control-sidebar-subheading">New bill</h4>
</div> </div>
</a> </a>
</li> </li>
</ul><!-- /.control-sidebar-menu --> </ul>
<!-- /.control-sidebar-menu -->
</div><!-- /.tab-pane --> </div>
<!-- /.tab-pane -->
</div> </div>
</aside><!-- /.control-sidebar --> </aside><!-- /.control-sidebar -->
<!-- Add the sidebar's background. This div must be placed <!-- Add the sidebar's background. This div must be placed

View File

@@ -1,27 +1,27 @@
{% if Session.has('success') %} {% if Session.has('success') %}
<div class="alert alert-success alert-dismissible" role="alert"> <div class="alert alert-success alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span></button> <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span></button>
<strong>Success!</strong> {{Session.get('success')}} <strong>Success!</strong> {{ Session.get('success') }}
</div> </div>
{% endif %} {% endif %}
{% if Session.has('info') %} {% if Session.has('info') %}
<div class="alert alert-info alert-dismissible" role="alert"> <div class="alert alert-info alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span></button> <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span></button>
<strong>Info:</strong> {{Session.get('info')}} <strong>Info:</strong> {{ Session.get('info') }}
</div> </div>
{% endif %} {% endif %}
{% if Session.has('warning') %} {% if Session.has('warning') %}
<div class="alert alert-warning alert-dismissible" role="alert"> <div class="alert alert-warning alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span></button> <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span></button>
<strong>Warning!</strong> {{Session.get('warning')}} <strong>Warning!</strong> {{ Session.get('warning') }}
</div> </div>
{% endif %} {% endif %}
{% if Session.has('error') %} {% if Session.has('error') %}
<div class="alert alert-danger alert-dismissible" role="alert"> <div class="alert alert-danger alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span></button> <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span></button>
<strong>Error!</strong> {{Session.get('error')}} <strong>Error!</strong> {{ Session.get('error') }}
</div> </div>
{% endif %} {% endif %}

View File

@@ -87,11 +87,11 @@
</li> </li>
<!-- money management --> <!-- money management -->
<li class="{{ activeRoutePartial('bills') }} {{ activeRoutePartial('piggy-banks') }} treeview"> <li class="{{ activeRoutePartial('bills') }} {{ activeRoutePartial('piggy-banks') }} treeview">
<a href="#"> <a href="#">
<i class="fa fa-euro fa-fw"></i> <i class="fa fa-euro fa-fw"></i>
<span>{{ 'moneyManagement'|_ }}</span> <span>{{ 'moneyManagement'|_ }}</span>
<i class="fa fa-angle-left pull-right"></i> <i class="fa fa-angle-left pull-right"></i>
</a> </a>
<ul class="treeview-menu"> <ul class="treeview-menu">
<li class="{{ activeRoutePartial('piggy-banks') }}"> <li class="{{ activeRoutePartial('piggy-banks') }}">
<a href="{{ route('piggy-banks.index') }}"> <a href="{{ route('piggy-banks.index') }}">
@@ -132,7 +132,6 @@
<!-- other options --> <!-- other options -->
<li> <li>
<a href="{{ route('logout') }}"> <a href="{{ route('logout') }}">
<i class="fa fa-sign-out fa-fw"></i> <i class="fa fa-sign-out fa-fw"></i>

View File

@@ -17,10 +17,11 @@
<!-- new stuff create button --> <!-- new stuff create button -->
<li class="dropdown"> <li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-plus-circle fa-fw"></i> <i class="fa fa-caret-down"></i> <i class="fa fa-plus-circle fa-fw"></i> <i class="fa fa-caret-down"></i>
</a> </a>
<ul class="dropdown-menu" role="menu"> <ul class="dropdown-menu" role="menu">
<li><a href="{{ route('transactions.create','withdrawal') }}"><i class="fa fa-long-arrow-left fa-fw"></i> {{ 'create_new_withdrawal'|_ }}</a></li> <li><a href="{{ route('transactions.create','withdrawal') }}"><i class="fa fa-long-arrow-left fa-fw"></i> {{ 'create_new_withdrawal'|_ }}</a>
</li>
<li><a href="{{ route('transactions.create','deposit') }}"><i class="fa fa-long-arrow-right fa-fw"></i> {{ 'create_new_deposit'|_ }}</a></li> <li><a href="{{ route('transactions.create','deposit') }}"><i class="fa fa-long-arrow-right fa-fw"></i> {{ 'create_new_deposit'|_ }}</a></li>
<li><a href="{{ route('transactions.create','transfer') }}"><i class="fa fa-exchange fa-fw"></i> {{ 'create_new_transfer'|_ }}</a></li> <li><a href="{{ route('transactions.create','transfer') }}"><i class="fa fa-exchange fa-fw"></i> {{ 'create_new_transfer'|_ }}</a></li>
<li class="divider"></li> <li class="divider"></li>
@@ -97,13 +98,15 @@
<a class="{{ activeRoutePartial('budgets') }}" href="{{ route('budgets.index') }}"><i class="fa fa-tasks fa-fw"></i> {{ 'budgets'|_ }}</a> <a class="{{ activeRoutePartial('budgets') }}" href="{{ route('budgets.index') }}"><i class="fa fa-tasks fa-fw"></i> {{ 'budgets'|_ }}</a>
</li> </li>
<li> <li>
<a class="{{ activeRoutePartial('categories') }}" href="{{ route('categories.index') }}"><i class="fa fa-bar-chart fa-fw"></i> {{ 'categories'|_ }}</a> <a class="{{ activeRoutePartial('categories') }}" href="{{ route('categories.index') }}"><i
class="fa fa-bar-chart fa-fw"></i> {{ 'categories'|_ }}</a>
</li> </li>
<li> <li>
<a class="{{ activeRoutePartial('tags') }}" href="{{ route('tags.index') }}"><i class="fa fa-tags fa-fw"></i> {{ 'tags'|_ }}</a> <a class="{{ activeRoutePartial('tags') }}" href="{{ route('tags.index') }}"><i class="fa fa-tags fa-fw"></i> {{ 'tags'|_ }}</a>
</li> </li>
<li> <li>
<a class="{{ activeRoutePartial('reports') }}" href="{{ route('reports.index') }}"><i class="fa fa-line-chart fa-fw"></i> {{ 'reports'|_ }}</a> <a class="{{ activeRoutePartial('reports') }}" href="{{ route('reports.index') }}"><i class="fa fa-line-chart fa-fw"></i> {{ 'reports'|_ }}
</a>
</li> </li>
<li class="{{ activeRoutePartial('transactions') }}"> <li class="{{ activeRoutePartial('transactions') }}">
<a href="#"><i class="fa fa-repeat fa-fw"></i> {{ 'transactions'|_ }}<span class="fa arrow"></span></a> <a href="#"><i class="fa fa-repeat fa-fw"></i> {{ 'transactions'|_ }}<span class="fa arrow"></span></a>
@@ -159,7 +162,8 @@
</li> </li>
<li class="hidden-sm hidden-md hidden-lg"> <li class="hidden-sm hidden-md hidden-lg">
<a class="{{ activeRouteStrict('preferences') }}" href="{{ route('preferences') }}"><i class="fa fa-gear fa-fw"></i> {{ 'preferences'|_ }}</a> <a class="{{ activeRouteStrict('preferences') }}" href="{{ route('preferences') }}"><i class="fa fa-gear fa-fw"></i> {{ 'preferences'|_ }}
</a>
</li> </li>
<li class="hidden-sm hidden-md hidden-lg"> <li class="hidden-sm hidden-md hidden-lg">
<a class="{{ activeRoutePartial('currency') }}" href="{{ route('currency.index') }}"><i class="fa fa-usd fa-fw"></i> {{ 'currency'|_ }}</a> <a class="{{ activeRoutePartial('currency') }}" href="{{ route('currency.index') }}"><i class="fa fa-usd fa-fw"></i> {{ 'currency'|_ }}</a>

View File

@@ -1,18 +1,21 @@
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span></button> <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span>
</button>
<h4 class="modal-title" id="myModalLabel">{{ trans('firefly.add_money_to_piggy_title', {name: piggyBank.name}) }}</h4> <h4 class="modal-title" id="myModalLabel">{{ trans('firefly.add_money_to_piggy_title', {name: piggyBank.name}) }}</h4>
</div> </div>
<form style="display: inline;" id="add" action="{{ route('piggy-banks.add', piggyBank.id) }}" method="POST"> <form style="display: inline;" id="add" action="{{ route('piggy-banks.add', piggyBank.id) }}" method="POST">
<div class="modal-body"> <div class="modal-body">
<input type="hidden" name="_token" value="{{ csrf_token() }}" /> <input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<p> <p>
{{ 'max_amount_add'|_ }}: {{ maxAmount|formatAmount }}. {{ 'max_amount_add'|_ }}: {{ maxAmount|formatAmount }}.
</p> </p>
<div class="input-group"> <div class="input-group">
<div class="input-group-addon">{{ getCurrencySymbol()|raw }}</div> <div class="input-group-addon">{{ getCurrencySymbol()|raw }}</div>
<input step="any" class="form-control" id="amount" autocomplete="off" name="amount" max="{{ maxAmount|round(2) }}" type="number" /> <input step="any" class="form-control" id="amount" autocomplete="off" name="amount" max="{{ maxAmount|round(2) }}" type="number"/>
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">

View File

@@ -1,9 +1,11 @@
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content"> <div class="modal-content">
<form style="display: inline;" id="remove" action="{{ route('piggy-banks.remove', piggyBank.id) }}" method="POST"> <form style="display: inline;" id="remove" action="{{ route('piggy-banks.remove', piggyBank.id) }}" method="POST">
<input type="hidden" name="_token" value="{{ csrf_token() }}" /> <input type="hidden" name="_token" value="{{ csrf_token() }}"/>
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span></button> <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">{{ 'close'|_ }}</span>
</button>
<h4 class="modal-title" id="myModalLabel">{{ trans('firefly.remove_money_from_piggy_title', {name: piggyBank.name}) }}</h4> <h4 class="modal-title" id="myModalLabel">{{ trans('firefly.remove_money_from_piggy_title', {name: piggyBank.name}) }}</h4>
</div> </div>
@@ -11,9 +13,11 @@
<p> <p>
{{ 'max_amount_remove'|_ }}: {{ currentRelevantRepAmount(piggyBank)|formatAmount }}. {{ 'max_amount_remove'|_ }}: {{ currentRelevantRepAmount(piggyBank)|formatAmount }}.
</p> </p>
<div class="input-group"> <div class="input-group">
<div class="input-group-addon">{{ getCurrencySymbol()|raw }}</div> <div class="input-group-addon">{{ getCurrencySymbol()|raw }}</div>
<input step="any" class="form-control" id="amount" autocomplete="off" name="amount" max="{{ currentRelevantRepAmount(piggyBank)|round(2) }}" type="number"> <input step="any" class="form-control" id="amount" autocomplete="off" name="amount" max="{{ currentRelevantRepAmount(piggyBank)|round(2) }}"
type="number">
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
@@ -21,6 +25,6 @@
<button type="submit" class="btn btn-primary">{{ 'remove'|_ }}</button> <button type="submit" class="btn btn-primary">{{ 'remove'|_ }}</button>
</div> </div>
</form> </form>
</div>
</div> </div>
</div>

View File

@@ -5,19 +5,19 @@
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="col-lg-6 col-lg-offset-3 col-md-6 col-sm-12"> <div class="col-lg-6 col-lg-offset-3 col-md-6 col-sm-12">
<div class="box box-primary"> <div class="box box-primary">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">Options</h3> <h3 class="box-title">Options</h3>
</div> </div>
<div class="box-body"> <div class="box-body">
<ul> <ul>
<li><a href="{{route('profile.change-password')}}">Change your password</a></li> <li><a href="{{ route('profile.change-password') }}">Change your password</a></li>
<li><a class="text-danger" href="{{route('profile.delete-account')}}">Delete account</a></li> <li><a class="text-danger" href="{{ route('profile.delete-account') }}">Delete account</a></li>
</ul> </ul>
</div>
</div> </div>
</div> </div>
</div> </div>
</div>
{% endblock %} {% endblock %}

View File

@@ -14,11 +14,11 @@
<div class="box-body"> <div class="box-body">
{% for year, entries in months %} {% for year, entries in months %}
<h4><a href="{{route('reports.year',year)}}">{{ year }}</a></h4> <h4><a href="{{ route('reports.year',year) }}">{{ year }}</a></h4>
<ul class="list-inline"> <ul class="list-inline">
{% for month in entries %} {% for month in entries %}
<li><a href="{{route('reports.month',[month.year, month.month])}}">{{ month.formatted}}</a></li> <li><a href="{{ route('reports.month',[month.year, month.month]) }}">{{ month.formatted }}</a></li>
{% endfor %} {% endfor %}
</ul> </ul>
{% endfor %} {% endfor %}
</div> </div>
@@ -35,10 +35,10 @@
<div class="box-body"> <div class="box-body">
{% for year, entries in months %} {% for year, entries in months %}
<h4><a href="{{route('reports.year',[year, 'shared'])}}">{{ year }}</a></h4> <h4><a href="{{ route('reports.year',[year, 'shared']) }}">{{ year }}</a></h4>
<ul class="list-inline"> <ul class="list-inline">
{% for month in entries %} {% for month in entries %}
<li><a href="{{route('reports.month',[month.year, month.month,'shared'])}}">{{ month.formatted}}</a></li> <li><a href="{{ route('reports.month',[month.year, month.month,'shared']) }}">{{ month.formatted }}</a></li>
{% endfor %} {% endfor %}
</ul> </ul>
{% endfor %} {% endfor %}

View File

@@ -33,35 +33,35 @@
{% include 'partials/reports/expenses.twig' %} {% include 'partials/reports/expenses.twig' %}
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-lg-8 col-md-8 col-sm-12"> <div class="col-lg-8 col-md-8 col-sm-12">
<!-- budgets --> <!-- budgets -->
{% include 'partials/reports/budgets.twig' %} {% include 'partials/reports/budgets.twig' %}
</div>
<div class="col-lg-4 col-md-4 col-sm-12">
<!-- categories -->
{% include 'partials/reports/categories.twig' %}
</div>
</div> </div>
<div class="col-lg-4 col-md-4 col-sm-12"> <div class="row">
<!-- categories --> <div class="col-lg-12 col-md-12 col-sm-12">
{% include 'partials/reports/categories.twig' %}
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
</div>
</div> </div>
</div> <div class="row">
<div class="row"> <div class="col-lg-12 col-md-12 col-sm-12">
<div class="col-lg-12 col-md-12 col-sm-12"> {% include 'partials/reports/balance.twig' %}
{% include 'partials/reports/balance.twig' %} </div>
</div> </div>
</div> <div class="row">
<div class="row"> <div class="col-lg-12 col-md-12 col-sm-12">
<div class="col-lg-12 col-md-12 col-sm-12"> {% include 'partials/reports/bills.twig' %}
{% include 'partials/reports/bills.twig' %}
</div>
</div> </div>
</div>
{% endblock %} {% endblock %}
{% block styles %} {% block styles %}
<link rel="stylesheet" href="css/bootstrap-sortable.css" type="text/css" media="all" /> <link rel="stylesheet" href="css/bootstrap-sortable.css" type="text/css" media="all"/>
{% endblock %} {% endblock %}
{% block scripts %} {% block scripts %}
@@ -75,7 +75,8 @@
<script type="text/javascript"> <script type="text/javascript">
var year = {{ start.year }}; var year = {{ start.year }};
var month = {{ start.month }}; var month = {{ start.month }};
var shared = {% if shared %}'/shared'{% else %}''{% endif %}; var shared = {% if shared %}'/shared'
{% else %}''{% endif %};
var incomeTopLength = {{ incomeTopLength }}; var incomeTopLength = {{ incomeTopLength }};
var expenseTopLength = {{ expenseTopLength }}; var expenseTopLength = {{ expenseTopLength }};
var incomeRestShow = false; // starts hidden. var incomeRestShow = false; // starts hidden.

View File

@@ -76,7 +76,8 @@
<script type="text/javascript"> <script type="text/javascript">
var year = '{{start.year}}'; var year = '{{start.year}}';
var shared = {% if shared %}'/shared'{% else %}''{% endif %}; var shared = {% if shared %}'/shared'
{% else %}''{% endif %};
var incomeTopLength = {{ incomeTopLength }}; var incomeTopLength = {{ incomeTopLength }};
var expenseTopLength = {{ expenseTopLength }}; var expenseTopLength = {{ expenseTopLength }};
var incomeRestShow = false; // starts hidden. var incomeRestShow = false; // starts hidden.

View File

@@ -5,109 +5,109 @@
{% endblock %} {% endblock %}
{% block content %} {% block content %}
{% if query %} {% if query %}
<div class="row"> <div class="row">
{% if result.transactions|length > 0 %} {% if result.transactions|length > 0 %}
<div class="col-lg-6 col-md-12 col-sm-12"> <div class="col-lg-6 col-md-12 col-sm-12">
<div class="box"> <div class="box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">Transactions</h3> <h3 class="box-title">Transactions</h3>
</div> </div>
<div class="box-body no-padding"> <div class="box-body no-padding">
{% include 'list/journals-tiny' with {'transactions' : result.transactions} %} {% include 'list/journals-tiny' with {'transactions' : result.transactions} %}
</div> </div>
<div class="box-footer"> <div class="box-footer">
<span class="pull-right">Results: {{ result.transactions|length }}</span> <span class="pull-right">Results: {{ result.transactions|length }}</span>
</div> </div>
</div> </div>
</div>
{% endif %}
{% if result.categories|length > 0 %}
<div class="col-lg-6 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">Categories</h3>
</div>
<div class="box-body no-padding">
<div class="list-group">
{% for category in result.categories %}
<a class="list-group-item" title="{{category.name}}" href="{{route('categories.show',category.id)}}">
{{ category.name }}
</a>
{% endfor %}
</div> </div>
</div> {% endif %}
<div class="box-footer"> {% if result.categories|length > 0 %}
<span class="pull-right">Results: {{ result['categories']|length }}</span> <div class="col-lg-6 col-md-12 col-sm-12">
</div> <div class="box">
</div> <div class="box-header with-border">
</div> <h3 class="box-title">Categories</h3>
{% endif %} </div>
{% if result.tags|length > 0 %} <div class="box-body no-padding">
<div class="col-lg-6 col-md-12 col-sm-12"> <div class="list-group">
<div class="box"> {% for category in result.categories %}
<div class="box-header with-border"> <a class="list-group-item" title="{{ category.name }}" href="{{ route('categories.show',category.id) }}">
<h3 class="box-title">Tags</h3> {{ category.name }}
</div> </a>
<div class="box-body no-padding"> {% endfor %}
<p>Bla bla</p> </div>
</div> </div>
<div class="box-footer"> <div class="box-footer">
<span class="pull-right">Results: {{result['tags']|length}}</span> <span class="pull-right">Results: {{ result['categories']|length }}</span>
</div> </div>
</div> </div>
</div>
{% endif %}
{% if result.accounts|length > 0 %}
<div class="col-lg-6 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">Accounts</h3>
</div>
<div class="box-body no-padding">
<div class="list-group">
{% for account in result.accounts %}
<a class="list-group-item" title="{{account.name}}" href="{{route('accounts.show',account.id)}}">
{{ account.name }}
</a>
{% endfor %}
</div> </div>
</div> {% endif %}
<div class="box-footer"> {% if result.tags|length > 0 %}
<span class="pull-right">Results: {{result['accounts'].count()}}</span> <div class="col-lg-6 col-md-12 col-sm-12">
</div> <div class="box">
</div> <div class="box-header with-border">
</div> <h3 class="box-title">Tags</h3>
{% endif %} </div>
{% if result.budgets|length > 0 %} <div class="box-body no-padding">
<div class="col-lg-6 col-md-12 col-sm-12"> <p>Bla bla</p>
<div class="box"> </div>
<div class="box-header with-border"> <div class="box-footer">
<h3 class="box-title">Budgets</h3> <span class="pull-right">Results: {{ result['tags']|length }}</span>
</div> </div>
<div class="box-body"> </div>
<div class="list-group">
{% for budget in result.budgets %}
<a class="list-group-item" title="{{budget.name}}" href="{{route('budgets.show',budget.id)}}">
{{ budget.name }}
</a>
{% endfor %}
</div> </div>
</div> {% endif %}
<div class="box-footer"> {% if result.accounts|length > 0 %}
<span class="pull-right">Results: {{result['budgets'].count()}}</span> <div class="col-lg-6 col-md-12 col-sm-12">
</div> <div class="box">
<div class="box-header with-border">
<h3 class="box-title">Accounts</h3>
</div>
<div class="box-body no-padding">
<div class="list-group">
{% for account in result.accounts %}
<a class="list-group-item" title="{{ account.name }}" href="{{ route('accounts.show',account.id) }}">
{{ account.name }}
</a>
{% endfor %}
</div>
</div>
<div class="box-footer">
<span class="pull-right">Results: {{ result['accounts'].count() }}</span>
</div>
</div>
</div>
{% endif %}
{% if result.budgets|length > 0 %}
<div class="col-lg-6 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">Budgets</h3>
</div>
<div class="box-body">
<div class="list-group">
{% for budget in result.budgets %}
<a class="list-group-item" title="{{ budget.name }}" href="{{ route('budgets.show',budget.id) }}">
{{ budget.name }}
</a>
{% endfor %}
</div>
</div>
<div class="box-footer">
<span class="pull-right">Results: {{ result['budgets'].count() }}</span>
</div>
</div>
</div>
{% endif %}
</div> </div>
</div>
{% endif %} {% endif %}
</div>
{% endif %}
{% endblock %} {% endblock %}
{% block scripts %} {% block scripts %}
<script type="text/javascript"> <script type="text/javascript">
var query = '{{ query }}'; var query = '{{ query }}';
</script> </script>
{% endblock %} {% endblock %}

View File

@@ -7,75 +7,75 @@
{% block content %} {% block content %}
{{ Form.open({'class' : 'form-horizontal','id' : 'store','route' : 'tags.store'}) }} {{ Form.open({'class' : 'form-horizontal','id' : 'store','route' : 'tags.store'}) }}
<div class="row"> <div class="row">
<div class="col-lg-5 col-md-5 col-sm-12"> <div class="col-lg-5 col-md-5 col-sm-12">
<div class="box box-primary"> <div class="box box-primary">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">{{ 'mandatoryFields'|_ }}</h3> <h3 class="box-title">{{ 'mandatoryFields'|_ }}</h3>
</div> </div>
<div class="box-body"> <div class="box-body">
{{ ExpandedForm.text('tag') }} {{ ExpandedForm.text('tag') }}
{{ ExpandedForm.multiRadio('tagMode',tagOptions) }} {{ ExpandedForm.multiRadio('tagMode',tagOptions) }}
</div>
</div> </div>
</div> </div>
</div>
<div class="col-lg-7 col-md-7 col-sm-12"> <div class="col-lg-7 col-md-7 col-sm-12">
<div class="box"> <div class="box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">{{ 'optionalFields'|_ }}</h3> <h3 class="box-title">{{ 'optionalFields'|_ }}</h3>
</div> </div>
<div class="box-body"> <div class="box-body">
{{ ExpandedForm.date('date') }} {{ ExpandedForm.date('date') }}
{{ ExpandedForm.textarea('description') }} {{ ExpandedForm.textarea('description') }}
{{ ExpandedForm.location('tagPosition') }} {{ ExpandedForm.location('tagPosition') }}
</div>
</div> </div>
</div>
<!-- panel for options --> <!-- panel for options -->
<div class="box"> <div class="box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">{{ 'options'|_ }}</h3> <h3 class="box-title">{{ 'options'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.optionsList('create','tag') }}
</div>
<div class="box-footer">
<button type="submit" class="btn btn-success pull-right">
Store new tag
</button>
</div>
</div> </div>
<div class="box-body">
{{ ExpandedForm.optionsList('create','tag') }}
</div>
<div class="box-footer">
<button type="submit" class="btn btn-success pull-right">
Store new tag
</button>
</div>
</div>
</div>
</div> </div>
</div> {{ Form.close|raw }}
{{ Form.close|raw }}
{% endblock %} {% endblock %}
{% block scripts %} {% block scripts %}
<script type="text/javascript"> <script type="text/javascript">
{% if Input.old('latitude') %} {% if Input.old('latitude') %}
var latitude = "{{Input.old('latitude')}}"; var latitude = "{{Input.old('latitude')}}";
{% else %} {% else %}
var latitude = "52.3167"; var latitude = "52.3167";
{% endif %} {% endif %}
{% if Input.old('latitude') and Input.old('longitude') and Input.old('zoomLevel') %} {% if Input.old('latitude') and Input.old('longitude') and Input.old('zoomLevel') %}
var doPlaceMarker = true; var doPlaceMarker = true;
{% else %} {% else %}
var doPlaceMarker = false; var doPlaceMarker = false;
{% endif %} {% endif %}
{% if Input.old('longitude') %} {% if Input.old('longitude') %}
var longitude = "{{Input.old('longitude')}}"; var longitude = "{{Input.old('longitude')}}";
{% else %} {% else %}
var longitude = "5.5500"; var longitude = "5.5500";
{% endif %} {% endif %}
{% if Input.old('zoomLevel') %} {% if Input.old('zoomLevel') %}
var zoomLevel = {{Input.old('zoomLevel')}}; var zoomLevel = {{Input.old('zoomLevel')}};
{% else %} {% else %}
var zoomLevel = 6; var zoomLevel = 6;
{% endif %} {% endif %}
</script> </script>

View File

@@ -7,51 +7,51 @@
{% block content %} {% block content %}
{{ Form.model(tag, {'class' : 'form-horizontal','id' : 'update','url' : route('tags.update',tag.id)}) }} {{ Form.model(tag, {'class' : 'form-horizontal','id' : 'update','url' : route('tags.update',tag.id)}) }}
<input type="hidden" name="id" value="{{ tag.id }}" /> <input type="hidden" name="id" value="{{ tag.id }}"/>
<div class="row"> <div class="row">
<div class="col-lg-5 col-md-5 col-sm-12"> <div class="col-lg-5 col-md-5 col-sm-12">
<div class="box box-primary"> <div class="box box-primary">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">{{ 'mandatoryFields'|_ }}</h3> <h3 class="box-title">{{ 'mandatoryFields'|_ }}</h3>
</div> </div>
<div class="box-body"> <div class="box-body">
{{ ExpandedForm.text('tag') }} {{ ExpandedForm.text('tag') }}
{{ ExpandedForm.multiRadio('tagMode',tagOptions) }} {{ ExpandedForm.multiRadio('tagMode',tagOptions) }}
</div>
</div> </div>
</div> </div>
</div>
<div class="col-lg-7 col-md-7 col-sm-12"> <div class="col-lg-7 col-md-7 col-sm-12">
<div class="box"> <div class="box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">{{ 'optionalFields'|_ }}</h3> <h3 class="box-title">{{ 'optionalFields'|_ }}</h3>
</div> </div>
<div class="box-body"> <div class="box-body">
{{ ExpandedForm.date('date', tag.date.format('Y-m-d')) }} {{ ExpandedForm.date('date', tag.date.format('Y-m-d')) }}
{{ ExpandedForm.textarea('description') }} {{ ExpandedForm.textarea('description') }}
{{ ExpandedForm.location('tagPosition') }} {{ ExpandedForm.location('tagPosition') }}
</div>
</div> </div>
</div>
<!-- panel for options --> <!-- panel for options -->
<div class="box"> <div class="box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">{{ 'options'|_ }}</h3> <h3 class="box-title">{{ 'options'|_ }}</h3>
</div>
<div class="box-body">
{{ ExpandedForm.optionsList('update','tag') }}
</div>
<div class="box-footer">
<button type="submit" class="btn pull-right btn-success">
Update tag
</button>
</div>
</div> </div>
<div class="box-body">
{{ ExpandedForm.optionsList('update','tag') }}
</div>
<div class="box-footer">
<button type="submit" class="btn pull-right btn-success">
Update tag
</button>
</div>
</div>
</div>
</div> </div>
</div>
{{ Form.close|raw }} {{ Form.close|raw }}
@@ -59,27 +59,27 @@
{% block scripts %} {% block scripts %}
<script type="text/javascript"> <script type="text/javascript">
{% if Input.old('latitude') %} {% if Input.old('latitude') %}
var latitude = "{{Input.old('latitude')}}"; var latitude = "{{Input.old('latitude')}}";
{% else %} {% else %}
var latitude = "52.3167"; var latitude = "52.3167";
{% endif %} {% endif %}
{% if Input.old('latitude') and Input.old('longitude') and Input.old('zoomLevel') %} {% if Input.old('latitude') and Input.old('longitude') and Input.old('zoomLevel') %}
var doPlaceMarker = true; var doPlaceMarker = true;
{% else %} {% else %}
var doPlaceMarker = false; var doPlaceMarker = false;
{% endif %} {% endif %}
{% if Input.old('longitude') %} {% if Input.old('longitude') %}
var longitude = "{{Input.old('longitude')}}"; var longitude = "{{Input.old('longitude')}}";
{% else %} {% else %}
var longitude = "5.5500"; var longitude = "5.5500";
{% endif %} {% endif %}
{% if Input.old('zoomLevel') %} {% if Input.old('zoomLevel') %}
var zoomLevel = {{Input.old('zoomLevel')}}; var zoomLevel = {{Input.old('zoomLevel')}};
{% else %} {% else %}
var zoomLevel = 6; var zoomLevel = 6;
{% endif %} {% endif %}
</script> </script>

View File

@@ -5,89 +5,92 @@
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="col-lg-12"> <div class="col-lg-12">
<div class="box"> <div class="box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">Tags</h3> <h3 class="box-title">Tags</h3>
<!-- ACTIONS MENU --> <!-- ACTIONS MENU -->
<div class="box-tools pull-right"> <div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button> <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<div class="box-body">
<p>
Usually tags are singular words, designed to quickly band items together
using things like <span class="label label-info">expensive</span>,
<span class="label label-info">bill</span> or
<span class="label label-info">for-party</span>. In Firefly III, tags can have more properties
such as a date, description and location. This allows you to join transactions together in a more meaningful
way. For example, you could make a tag called <span class="label label-success">Christmas dinner with friends</span>
and add information about the restaurant. Such tags are "singular", you would only use them for a single occasion,
perhaps with multiple transactions.
</p>
<p>
Tags group transactions together, which makes it possible to store reimbursements
(in case you front money for others) and other "balancing acts" where expenses
are summed up (the payments on your new TV) or where expenses and deposits
are cancelling each other out (buying something with saved money). It's all up to you.
Using tags the old-fashioned way is of course always possible.
</p>
<p>
Create a tag to get started or enter tags when creating new transactions.
</p>
</div>
<div class="box-footer">
<a href="{{ route('tags.create') }}" title="New tag" class="btn btn-info pull-right">Create new tag</a>
</div> </div>
</div>
<div class="box-body">
<p>
Usually tags are singular words, designed to quickly band items together
using things like <span class="label label-info">expensive</span>,
<span class="label label-info">bill</span> or
<span class="label label-info">for-party</span>. In Firefly III, tags can have more properties
such as a date, description and location. This allows you to join transactions together in a more meaningful
way. For example, you could make a tag called <span class="label label-success">Christmas dinner with friends</span>
and add information about the restaurant. Such tags are "singular", you would only use them for a single occasion,
perhaps with multiple transactions.
</p>
<p>
Tags group transactions together, which makes it possible to store reimbursements
(in case you front money for others) and other "balancing acts" where expenses
are summed up (the payments on your new TV) or where expenses and deposits
are cancelling each other out (buying something with saved money). It's all up to you.
Using tags the old-fashioned way is of course always possible.
</p>
<p>
Create a tag to get started or enter tags when creating new transactions.
</p>
</div>
<div class="box-footer">
<a href="{{route('tags.create')}}" title="New tag" class="btn btn-info pull-right">Create new tag</a>
</div> </div>
</div> </div>
</div> </div>
</div> <div class="row">
<div class="row"> {% for type in types %}
{% for type in types %} <div class="col-lg-4">
<div class="col-lg-4"> <div class="box">
<div class="box"> <div class="box-header with-border">
<div class="box-header with-border"> <h3 class="box-title">{{ ('tag_title_'~type)|_ }}</h3>
<h3 class="box-title">{{ ('tag_title_'~type)|_ }}</h3> <!-- ACTIONS MENU -->
<!-- ACTIONS MENU --> <div class="box-tools pull-right">
<div class="box-tools pull-right"> <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button> </div>
</div> </div>
</div> <div class="box-body">
<div class="box-body"> {% for year,months in collection[type] %}
{% for year,months in collection[type] %} <h4>{{ year }}</h4>
<h4>{{ year }}</h4>
{% for month,tags in months %} {% for month,tags in months %}
<h5>{{ month }}</h5> <h5>{{ month }}</h5>
<p style="line-height: 200%;"> <p style="line-height: 200%;">
{% for tag in tags %} {% for tag in tags %}
<span style="display: inline;"><a style="font-size:100%;font-weight:normal;" class="label label-success" href="{{route('tags.show',tag.id)}}"> <span style="display: inline;"><a style="font-size:100%;font-weight:normal;" class="label label-success"
{% if tag.tagMode == 'nothing' %} href="{{ route('tags.show',tag.id) }}">
<i class="fa fa-fw fa-tag"></i> {% if tag.tagMode == 'nothing' %}
{% endif %} <i class="fa fa-fw fa-tag"></i>
{% if tag.tagMode == 'balancingAct' %} {% endif %}
<i class="fa fa-fw fa-refresh"></i> {% if tag.tagMode == 'balancingAct' %}
{% endif %} <i class="fa fa-fw fa-refresh"></i>
{% if tag.tagMode == 'advancePayment' %} {% endif %}
<i class="fa fa-fw fa-sort-numeric-desc"></i> {% if tag.tagMode == 'advancePayment' %}
{% endif %} <i class="fa fa-fw fa-sort-numeric-desc"></i>
{{tag.tag}}</a> {% endif %}
{{ tag.tag }}</a>
</span> </span>
{% endfor %}
</p>
{% endfor %} {% endfor %}
</p> {% endfor %}
{% endfor %}
{% endfor %}
</div>
</div>
</div> </div>
</div> {% endfor %}
</div>
{% endfor %}
</div> </div>
{% endblock %} {% endblock %}
{% block scripts %} {% block scripts %}
<script type="text/javascript" src="js/tags.js"></script> <script type="text/javascript" src="js/tags.js"></script>
{% endblock %} {% endblock %}

View File

@@ -19,8 +19,8 @@
<div class="btn-group"> <div class="btn-group">
<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button> <button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button>
<ul class="dropdown-menu" role="menu"> <ul class="dropdown-menu" role="menu">
<li><a href="{{route('tags.edit',tag.id)}}"><i class="fa fa-pencil fa-fw"></i> Edit tag</a></li> <li><a href="{{ route('tags.edit',tag.id) }}"><i class="fa fa-pencil fa-fw"></i> Edit tag</a></li>
<li><a href="{{route('tags.delete',tag.id)}}"><i class="fa fa-trash fa-fw"></i> Delete tag</a></li> <li><a href="{{ route('tags.delete',tag.id) }}"><i class="fa fa-trash fa-fw"></i> Delete tag</a></li>
</ul> </ul>
</div> </div>
</div> </div>
@@ -29,12 +29,12 @@
{% if tag.description %} {% if tag.description %}
<p class="text-info"> <p class="text-info">
{{tag.description}} {{ tag.description }}
</p> </p>
{% endif %} {% endif %}
{% if tag.date %} {% if tag.date %}
<p>Date: {{tag.date.formatLocalized(monthAndDayFormat)}}</p> <p>Date: {{ tag.date.formatLocalized(monthAndDayFormat) }}</p>
{% endif %} {% endif %}
</div> </div>
</div> </div>
@@ -50,8 +50,8 @@
<div class="btn-group"> <div class="btn-group">
<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button> <button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button>
<ul class="dropdown-menu" role="menu"> <ul class="dropdown-menu" role="menu">
<li><a href="{{route('tags.edit',tag.id)}}"><i class="fa fa-pencil fa-fw"></i> Edit tag</a></li> <li><a href="{{ route('tags.edit',tag.id) }}"><i class="fa fa-pencil fa-fw"></i> Edit tag</a></li>
<li><a href="{{route('tags.delete',tag.id)}}"><i class="fa fa-trash fa-fw"></i> Delete tag</a></li> <li><a href="{{ route('tags.delete',tag.id) }}"><i class="fa fa-trash fa-fw"></i> Delete tag</a></li>
</ul> </ul>
</div> </div>
</div> </div>
@@ -59,7 +59,7 @@
<div class="box-body"> <div class="box-body">
{% if tag.latitude and tag.longitude and tag.zoomLevel %} {% if tag.latitude and tag.longitude and tag.zoomLevel %}
<p> <p>
<img src="https://maps.googleapis.com/maps/api/staticmap?center={{tag.latitude}},{{tag.longitude}}&zoom={{tag.zoomLevel}}&size=600x300"> <img src="https://maps.googleapis.com/maps/api/staticmap?center={{ tag.latitude }},{{ tag.longitude }}&zoom={{ tag.zoomLevel }}&size=600x300">
</p> </p>
{% else %} {% else %}
<p>No location set.</p> <p>No location set.</p>
@@ -68,34 +68,34 @@
</div> </div>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col-lg-612 col-md-12 col-sm-12 col-xs-12"> <div class="col-lg-612 col-md-12 col-sm-12 col-xs-12">
<div class="box"> <div class="box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">{{ 'transactions'|_ }}</h3> <h3 class="box-title">{{ 'transactions'|_ }}</h3>
<!-- ACTIONS MENU --> <!-- ACTIONS MENU -->
<div class="box-tools pull-right"> <div class="box-tools pull-right">
<button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button> <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
<div class="btn-group"> <div class="btn-group">
<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button> <button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"><i class="fa fa-ellipsis-v"></i></button>
<ul class="dropdown-menu" role="menu"> <ul class="dropdown-menu" role="menu">
<li><a href="{{route('tags.edit',tag.id)}}"><i class="fa fa-pencil fa-fw"></i> Edit tag</a></li> <li><a href="{{ route('tags.edit',tag.id) }}"><i class="fa fa-pencil fa-fw"></i> Edit tag</a></li>
<li><a href="{{route('tags.delete',tag.id)}}"><i class="fa fa-trash fa-fw"></i> Delete tag</a></li> <li><a href="{{ route('tags.delete',tag.id) }}"><i class="fa fa-trash fa-fw"></i> Delete tag</a></li>
</ul> </ul>
</div>
</div> </div>
</div> </div>
</div> <div class="box-body table-responsive no-padding">
<div class="box-body table-responsive no-padding"> {% include 'list/journals.twig' with {'journals': tag.transactionjournals} %}
{% include 'list/journals.twig' with {'journals': tag.transactionjournals} %} </div>
</div> </div>
</div> </div>
</div> </div>
</div>
{% endblock %} {% endblock %}
{% block scripts %} {% block scripts %}
<script type="text/javascript"> <script type="text/javascript">
var tagID = {{tag.id}}; var tagID = {{tag.id}};
</script> </script>
{% endblock %} {% endblock %}

View File

@@ -6,7 +6,7 @@
{% block content %} {% block content %}
{{ Form.open({'class' : 'form-horizontal','id' : 'store','url' : route('transactions.store',what)}) }} {{ Form.open({'class' : 'form-horizontal','id' : 'store','url' : route('transactions.store',what)}) }}
<input type="hidden" name="what" value="{{ what }}" /> <input type="hidden" name="what" value="{{ what }}"/>
<div class="row"> <div class="row">
<div class="col-lg-6 col-md-12 col-sm-12"> <div class="col-lg-6 col-md-12 col-sm-12">
<div class="box box-primary"> <div class="box box-primary">
@@ -16,13 +16,14 @@
<div class="box-body"> <div class="box-body">
<div class="form-group"> <div class="form-group">
<label class="col-sm-4 control-label">Quickswitch</label> <label class="col-sm-4 control-label">Quickswitch</label>
<div class="col-sm-8">
<div class="btn-group btn-group-justified"> <div class="col-sm-8">
<a href="#" data-what="withdrawal" class="switch btn btn-default"> {{ 'withdrawal'|_ }}</a> <div class="btn-group btn-group-justified">
<a href="#" data-what="deposit" class="switch btn btn-default"> {{ 'deposit'|_ }}</a> <a href="#" data-what="withdrawal" class="switch btn btn-default"> {{ 'withdrawal'|_ }}</a>
<a href="#" data-what="transfer" class="switch btn btn-default">{{ 'transfer'|_ }}</a> <a href="#" data-what="deposit" class="switch btn btn-default"> {{ 'deposit'|_ }}</a>
</div> <a href="#" data-what="transfer" class="switch btn btn-default">{{ 'transfer'|_ }}</a>
</div> </div>
</div>
</div> </div>

View File

@@ -7,35 +7,36 @@
{% block content %} {% block content %}
{{ Form.open({'class' : 'form-horizontal','id' : 'destroy','url' : route('transactions.destroy',journal.id)}) }} {{ Form.open({'class' : 'form-horizontal','id' : 'destroy','url' : route('transactions.destroy',journal.id)}) }}
<div class="row"> <div class="row">
<div class="col-lg-6 col-lg-offset-3 col-md-6 col-sm-12"> <div class="col-lg-6 col-lg-offset-3 col-md-6 col-sm-12">
<div class="box box-danger"> <div class="box box-danger">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">{{ trans('form.delete_journal', {'description': journal.description}) }}</h3> <h3 class="box-title">{{ trans('form.delete_journal', {'description': journal.description}) }}</h3>
</div> </div>
<div class="box-body"> <div class="box-body">
<p class="text-danger"> <p class="text-danger">
{{ trans('form.permDeleteWarning') }} {{ trans('form.permDeleteWarning') }}
</p> </p>
<p>
{{ trans('form.journal_areYouSure', {'description': journal.description}) }} <p>
</p> {{ trans('form.journal_areYouSure', {'description': journal.description}) }}
</div> </p>
<div class="box-footer"> </div>
<input type="submit" name="submit" value="{{ trans('form.deletePermanently') }}" class="btn btn-danger pull-right" /> <div class="box-footer">
{% if journal.transactiontype.type == 'Withdrawal' %} <input type="submit" name="submit" value="{{ trans('form.deletePermanently') }}" class="btn btn-danger pull-right"/>
<a href="{{route('transactions.index','withdrawal')}}" class="btn-default btn">{{ trans('form.cancel') }}</a> {% if journal.transactiontype.type == 'Withdrawal' %}
{% endif %} <a href="{{ route('transactions.index','withdrawal') }}" class="btn-default btn">{{ trans('form.cancel') }}</a>
{% if journal.transactiontype.type == 'Deposit' %} {% endif %}
<a href="{{route('transactions.index','deposit')}}" class="btn-default btn">{{ trans('form.cancel') }}</a> {% if journal.transactiontype.type == 'Deposit' %}
{% endif %} <a href="{{ route('transactions.index','deposit') }}" class="btn-default btn">{{ trans('form.cancel') }}</a>
{% if journal.transactiontype.type == 'Transfer' %} {% endif %}
<a href="{{route('transactions.index','transfers')}}" class="btn-default btn">{{ trans('form.cancel') }}</a> {% if journal.transactiontype.type == 'Transfer' %}
{% endif %} <a href="{{ route('transactions.index','transfers') }}" class="btn-default btn">{{ trans('form.cancel') }}</a>
{% endif %}
</div>
</div> </div>
</div> </div>
</div> </div>
</div>
{{ Form.close|raw }} {{ Form.close|raw }}
{% endblock %} {% endblock %}

View File

@@ -5,18 +5,18 @@
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="col-lg-12 col-sm-12 col-md-12"> <div class="col-lg-12 col-sm-12 col-md-12">
<div class="box"> <div class="box">
<div class="box-header with-border"> <div class="box-header with-border">
<h3 class="box-title">{{ subTitle }}</h3> <h3 class="box-title">{{ subTitle }}</h3>
</div> </div>
<div class="box-body table-responsive no-padding"> <div class="box-body table-responsive no-padding">
{% include 'list.journals' %} {% include 'list.journals' %}
</div>
</div> </div>
</div> </div>
</div> </div>
</div>
{% endblock %} {% endblock %}
{% block scripts %} {% block scripts %}

View File

@@ -5,124 +5,124 @@
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="col-lg-6 col-md-6 col-sm-12"> <div class="col-lg-6 col-md-6 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">Metadata</h3>
</div>
<div class="box-body table-responsive no-padding">
<table class="table table-hover sortable">
<tr>
<td>{{ trans('list.date') }}</td>
<td>{{ journal.date.formatLocalized(monthAndDayFormat) }}</td>
</tr>
<tr>
<td>{{ trans('list.type') }}</td>
<td>{{ journal.transactiontype.type|_ }}</td>
</tr>
<tr>
<td>{{ trans('list.completed') }}</td>
<td>
{% if journal.completed %}
<span class="text-success">{{ 'yes'|_ }}</span>
{% else %}
<span class="text-danger">{{ 'no'|_ }}</span>
{% endif %}
</td>
</tr>
{% for budget in journal.budgets %}
<tr>
<td>{{ 'budget'|_ }}</td>
<td><a href="{{route('budgets.show',budget.id)}}">{{ budget.name }}</a></td>
</tr>
{% endfor %}
{% for category in journal.categories %}
<tr>
<td>{{ 'category'|_ }}</td>
<td><a href="{{route('categories.show',category.id)}}">{{ category.name }}</a></td>
</tr>
{% endfor %}
{% if journal.tags|length > 0 %}
<tr>
<td>{{ 'tags'|_ }}</td>
<td>
{% for tag in journal.tags %}
<h4 style="display: inline;"><a class="label label-success" href="{{route('tags.show',tag)}}">
{% if tag.tagMode == 'nothing' %}
<i class="fa fa-fw fa-tag"></i>
{% endif %}
{% if tag.tagMode == 'balancingAct' %}
<i class="fa fa-fw fa-refresh"></i>
{% endif %}
{% if tag.tagMode == 'advancePayment' %}
<i class="fa fa-fw fa-sort-numeric-desc"></i>
{% endif %}
{{tag.tag}}</a>
</h4>
{% endfor %}
</td>
</tr>
{% endif %}
</table>
</div>
<div class="box-footer">
<div class="pull-right">
<a class="btn btn-default" href="{{route('transactions.edit',journal.id)}}">{{ 'edit'|_ }}</a>
<a href="{{route('transactions.delete',journal.id)}}" class="btn btn-danger">{{ 'delete'|_ }}</a>
</div>
</div>
</div>
<!-- events, if present -->
{% if journal.piggyBankEvents|length > 0 %}
<div class="box"> <div class="box">
<div class="box-header with-border"> <div class="box-header with-border">
{{ 'piggyBanks'|_ }} <h3 class="box-title">Metadata</h3>
</div> </div>
<div class="box-body"> <div class="box-body table-responsive no-padding">
{% include 'list/piggy-bank-events' with {'events': journal.piggyBankEvents, 'showPiggyBank':true} %} <table class="table table-hover sortable">
</div> <tr>
</div> <td>{{ trans('list.date') }}</td>
{% endif %} <td>{{ journal.date.formatLocalized(monthAndDayFormat) }}</td>
</div> </tr>
<div class="col-lg-6 col-md-6 col-sm-12"> <tr>
<td>{{ trans('list.type') }}</td>
<td>{{ journal.transactiontype.type|_ }}</td>
</tr>
<tr>
<td>{{ trans('list.completed') }}</td>
<td>
{% if journal.completed %}
<span class="text-success">{{ 'yes'|_ }}</span>
{% else %}
<span class="text-danger">{{ 'no'|_ }}</span>
{% endif %}
</td>
</tr>
{% for budget in journal.budgets %}
<tr>
<td>{{ 'budget'|_ }}</td>
<td><a href="{{ route('budgets.show',budget.id) }}">{{ budget.name }}</a></td>
</tr>
{% endfor %}
{% for category in journal.categories %}
<tr>
<td>{{ 'category'|_ }}</td>
<td><a href="{{ route('categories.show',category.id) }}">{{ category.name }}</a></td>
</tr>
{% endfor %}
{% if journal.tags|length > 0 %}
<tr>
<td>{{ 'tags'|_ }}</td>
<td>
{% for tag in journal.tags %}
{% for t in journal.transactions %} <h4 style="display: inline;"><a class="label label-success" href="{{ route('tags.show',tag) }}">
<div class="box"> {% if tag.tagMode == 'nothing' %}
<div class="box-header with-border"> <i class="fa fa-fw fa-tag"></i>
<h3 class="box-title">{{ t.account.name }}</h3> {% endif %}
{% if tag.tagMode == 'balancingAct' %}
<i class="fa fa-fw fa-refresh"></i>
{% endif %}
{% if tag.tagMode == 'advancePayment' %}
<i class="fa fa-fw fa-sort-numeric-desc"></i>
{% endif %}
{{ tag.tag }}</a>
</h4>
{% endfor %}
</td>
</tr>
{% endif %}
</table>
</div>
<div class="box-footer">
<div class="pull-right">
<a class="btn btn-default" href="{{ route('transactions.edit',journal.id) }}">{{ 'edit'|_ }}</a>
<a href="{{ route('transactions.delete',journal.id) }}" class="btn btn-danger">{{ 'delete'|_ }}</a>
</div>
</div>
</div> </div>
<table class="table table-hover sortable"> <!-- events, if present -->
<tr> {% if journal.piggyBankEvents|length > 0 %}
<td>{{ 'account'|_ }}</td> <div class="box">
<td><a href="{{route('accounts.show',t.account.id)}}">{{ t.account.name }}</a></td> <div class="box-header with-border">
</tr> {{ 'piggyBanks'|_ }}
<tr> </div>
<td>{{ 'account_type'|_ }}</td> <div class="box-body">
<td>{{ t.account.accounttype.type|_ }}</td> {% include 'list/piggy-bank-events' with {'events': journal.piggyBankEvents, 'showPiggyBank':true} %}
</tr> </div>
<tr> </div>
<td>{{ 'amount'|_ }}</td> {% endif %}
<td>{{ t|formatTransaction }}</td> </div>
</tr> <div class="col-lg-6 col-md-6 col-sm-12">
<tr>
<td>{{ 'newBalance'|_ }}</td> {% for t in journal.transactions %}
<td>{{ t.before|formatAmount }} &rarr; {{ t.after|formatAmount }}</td> <div class="box">
</tr> <div class="box-header with-border">
{% if t.description %} <h3 class="box-title">{{ t.account.name }}</h3>
<tr> </div>
<td>Description</td> <table class="table table-hover sortable">
<td>{{ t.description }}</td> <tr>
</tr> <td>{{ 'account'|_ }}</td>
{% endif %} <td><a href="{{ route('accounts.show',t.account.id) }}">{{ t.account.name }}</a></td>
</table> </tr>
<tr>
<td>{{ 'account_type'|_ }}</td>
<td>{{ t.account.accounttype.type|_ }}</td>
</tr>
<tr>
<td>{{ 'amount'|_ }}</td>
<td>{{ t|formatTransaction }}</td>
</tr>
<tr>
<td>{{ 'newBalance'|_ }}</td>
<td>{{ t.before|formatAmount }} &rarr; {{ t.after|formatAmount }}</td>
</tr>
{% if t.description %}
<tr>
<td>Description</td>
<td>{{ t.description }}</td>
</tr>
{% endif %}
</table>
</div>
{% endfor %}
</div> </div>
{% endfor %}
</div> </div>
</div>
{% endblock %} {% endblock %}
{% block scripts %} {% block scripts %}
<script type="text/javascript" src="js/transactions.js"></script> <script type="text/javascript" src="js/transactions.js"></script>
{% endblock %} {% endblock %}