mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Working on OFX support
This commit is contained in:
parent
c96c91ec88
commit
efc9ab4f9e
@ -18,13 +18,15 @@ class TestOFX extends Command
|
|||||||
public function fire()
|
public function fire()
|
||||||
{
|
{
|
||||||
$this->info(date('Y-m-d').' Running TestOFX...');
|
$this->info(date('Y-m-d').' Running TestOFX...');
|
||||||
|
|
||||||
|
/*
|
||||||
$bankId = env('TEST_BANK_ID');
|
$bankId = env('TEST_BANK_ID');
|
||||||
$username = env('TEST_BANK_USERNAME');
|
$username = env('TEST_BANK_USERNAME');
|
||||||
$password = env('TEST_BANK_PASSWORD');
|
$password = env('TEST_BANK_PASSWORD');
|
||||||
|
|
||||||
$data = $this->bankAccountService->loadBankAccounts($bankId, $username, $password, false);
|
$data = $this->bankAccountService->loadBankAccounts($bankId, $username, $password, false);
|
||||||
|
|
||||||
print "<pre>".print_r($data, 1)."</pre>";
|
echo json_encode($data);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -247,6 +247,7 @@ class AppController extends BaseController
|
|||||||
Artisan::call('migrate', array('--force' => true));
|
Artisan::call('migrate', array('--force' => true));
|
||||||
Artisan::call('db:seed', array('--force' => true, '--class' => 'PaymentLibrariesSeeder'));
|
Artisan::call('db:seed', array('--force' => true, '--class' => 'PaymentLibrariesSeeder'));
|
||||||
Artisan::call('db:seed', array('--force' => true, '--class' => 'FontsSeeder'));
|
Artisan::call('db:seed', array('--force' => true, '--class' => 'FontsSeeder'));
|
||||||
|
Artisan::call('db:seed', array('--force' => true, '--class' => 'BanksSeeder'));
|
||||||
Event::fire(new UserSettingsChanged());
|
Event::fire(new UserSettingsChanged());
|
||||||
Session::flash('message', trans('texts.processed_updates'));
|
Session::flash('message', trans('texts.processed_updates'));
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
<?php namespace App\Http\Controllers;
|
<?php namespace App\Http\Controllers;
|
||||||
|
|
||||||
use Crypt;
|
|
||||||
use Cache;
|
use Cache;
|
||||||
use Auth;
|
use Auth;
|
||||||
use Datatable;
|
use Datatable;
|
||||||
@ -11,23 +10,27 @@ use Session;
|
|||||||
use View;
|
use View;
|
||||||
use Validator;
|
use Validator;
|
||||||
use stdClass;
|
use stdClass;
|
||||||
|
use Crypt;
|
||||||
use URL;
|
use URL;
|
||||||
use Utils;
|
use Utils;
|
||||||
use App\Models\Gateway;
|
use App\Models\Gateway;
|
||||||
use App\Models\Account;
|
use App\Models\Account;
|
||||||
use App\Models\BankAccount;
|
use App\Models\BankAccount;
|
||||||
use App\Ninja\Repositories\AccountRepository;
|
use App\Ninja\Repositories\BankAccountRepository;
|
||||||
use App\Services\BankAccountService;
|
use App\Services\BankAccountService;
|
||||||
|
use App\Http\Requests\CreateBankAccountRequest;
|
||||||
|
|
||||||
class BankAccountController extends BaseController
|
class BankAccountController extends BaseController
|
||||||
{
|
{
|
||||||
protected $bankAccountService;
|
protected $bankAccountService;
|
||||||
|
protected $bankAccountRepo;
|
||||||
|
|
||||||
public function __construct(BankAccountService $bankAccountService)
|
public function __construct(BankAccountService $bankAccountService, BankAccountRepository $bankAccountRepo)
|
||||||
{
|
{
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
|
|
||||||
$this->bankAccountService = $bankAccountService;
|
$this->bankAccountService = $bankAccountService;
|
||||||
|
$this->bankAccountRepo = $bankAccountRepo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function index()
|
public function index()
|
||||||
@ -43,11 +46,8 @@ class BankAccountController extends BaseController
|
|||||||
public function edit($publicId)
|
public function edit($publicId)
|
||||||
{
|
{
|
||||||
$bankAccount = BankAccount::scope($publicId)->firstOrFail();
|
$bankAccount = BankAccount::scope($publicId)->firstOrFail();
|
||||||
$bankAccount->username = str_repeat('*', 16);
|
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
'url' => 'bank_accounts/' . $publicId,
|
|
||||||
'method' => 'PUT',
|
|
||||||
'title' => trans('texts.edit_bank_account'),
|
'title' => trans('texts.edit_bank_account'),
|
||||||
'banks' => Cache::get('banks'),
|
'banks' => Cache::get('banks'),
|
||||||
'bankAccount' => $bankAccount,
|
'bankAccount' => $bankAccount,
|
||||||
@ -61,11 +61,6 @@ class BankAccountController extends BaseController
|
|||||||
return $this->save($publicId);
|
return $this->save($publicId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function store()
|
|
||||||
{
|
|
||||||
return $this->save();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Displays the form for account creation
|
* Displays the form for account creation
|
||||||
*
|
*
|
||||||
@ -73,9 +68,6 @@ class BankAccountController extends BaseController
|
|||||||
public function create()
|
public function create()
|
||||||
{
|
{
|
||||||
$data = [
|
$data = [
|
||||||
'url' => 'bank_accounts',
|
|
||||||
'method' => 'POST',
|
|
||||||
'title' => trans('texts.add_bank_account'),
|
|
||||||
'banks' => Cache::get('banks'),
|
'banks' => Cache::get('banks'),
|
||||||
'bankAccount' => null,
|
'bankAccount' => null,
|
||||||
];
|
];
|
||||||
@ -94,59 +86,40 @@ class BankAccountController extends BaseController
|
|||||||
return Redirect::to('settings/' . ACCOUNT_BANKS);
|
return Redirect::to('settings/' . ACCOUNT_BANKS);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function validateAccount()
|
||||||
* Stores new account
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public function save($bankAccountPublicId = false)
|
|
||||||
{
|
{
|
||||||
$account = Auth::user()->account;
|
$publicId = Input::get('public_id');
|
||||||
$bankId = Input::get('bank_id');
|
$username = trim(Input::get('bank_username'));
|
||||||
$username = Input::get('bank_username');
|
$password = trim(Input::get('bank_password'));
|
||||||
|
|
||||||
$rules = [
|
if ($publicId) {
|
||||||
'bank_id' => $bankAccountPublicId ? '' : 'required',
|
$bankAccount = BankAccount::scope($publicId)->firstOrFail();
|
||||||
'bank_username' => 'required',
|
if ($username != $bankAccount->username) {
|
||||||
];
|
// TODO update username
|
||||||
|
}
|
||||||
$validator = Validator::make(Input::all(), $rules);
|
$username = Crypt::decrypt($username);
|
||||||
|
$bankId = $bankAccount->bank_id;
|
||||||
if ($validator->fails()) {
|
|
||||||
return Redirect::to('bank_accounts/create')
|
|
||||||
->withErrors($validator)
|
|
||||||
->withInput();
|
|
||||||
} else {
|
} else {
|
||||||
if ($bankAccountPublicId) {
|
$bankId = Input::get('bank_id');
|
||||||
$bankAccount = BankAccount::scope($bankAccountPublicId)->firstOrFail();
|
|
||||||
} else {
|
|
||||||
$bankAccount = BankAccount::createNew();
|
|
||||||
$bankAccount->bank_id = $bankId;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($username != str_repeat('*', strlen($username))) {
|
|
||||||
$bankAccount->username = Crypt::encrypt(trim($username));
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($bankAccountPublicId) {
|
|
||||||
$bankAccount->save();
|
|
||||||
$message = trans('texts.updated_bank_account');
|
|
||||||
} else {
|
|
||||||
$account->bank_accounts()->save($bankAccount);
|
|
||||||
$message = trans('texts.created_bank_account');
|
|
||||||
}
|
|
||||||
|
|
||||||
Session::flash('message', $message);
|
|
||||||
return Redirect::to("bank_accounts/{$bankAccount->public_id}/edit");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return json_encode($this->bankAccountService->loadBankAccounts($bankId, $username, $password, $publicId));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test()
|
public function store(CreateBankAccountRequest $request)
|
||||||
{
|
{
|
||||||
$bankId = Input::get('bank_id');
|
$bankAccount = $this->bankAccountRepo->save(Input::all());
|
||||||
$username = Input::get('bank_username');
|
|
||||||
$password = Input::get('bank_password');
|
|
||||||
|
|
||||||
return json_encode($this->bankAccountService->loadBankAccounts($bankId, $username, $password, false));
|
$bankId = Input::get('bank_id');
|
||||||
|
$username = trim(Input::get('bank_username'));
|
||||||
|
$password = trim(Input::get('bank_password'));
|
||||||
|
|
||||||
|
return json_encode($this->bankAccountService->loadBankAccounts($bankId, $username, $password, true));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function importExpenses($bankId)
|
||||||
|
{
|
||||||
|
return $this->bankAccountService->importExpenses($bankId, Input::all());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -333,7 +333,7 @@ class InvoiceController extends BaseController
|
|||||||
{
|
{
|
||||||
$action = Input::get('action');
|
$action = Input::get('action');
|
||||||
$entityType = Input::get('entityType');
|
$entityType = Input::get('entityType');
|
||||||
|
|
||||||
$invoice = $this->invoiceService->save($request->input());
|
$invoice = $this->invoiceService->save($request->input());
|
||||||
$entityType = $invoice->getEntityType();
|
$entityType = $invoice->getEntityType();
|
||||||
$message = trans("texts.created_{$entityType}");
|
$message = trans("texts.created_{$entityType}");
|
||||||
|
@ -55,7 +55,8 @@ class VendorController extends BaseController
|
|||||||
'columns' => Utils::trans([
|
'columns' => Utils::trans([
|
||||||
'checkbox',
|
'checkbox',
|
||||||
'vendor',
|
'vendor',
|
||||||
'contact',
|
'city',
|
||||||
|
'phone',
|
||||||
'email',
|
'email',
|
||||||
'date_created',
|
'date_created',
|
||||||
''
|
''
|
||||||
|
32
app/Http/Requests/CreateBankAccountRequest.php
Normal file
32
app/Http/Requests/CreateBankAccountRequest.php
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<?php namespace app\Http\Requests;
|
||||||
|
|
||||||
|
use App\Http\Requests\Request;
|
||||||
|
use Illuminate\Validation\Factory;
|
||||||
|
|
||||||
|
class CreateBankAccountRequest extends Request
|
||||||
|
{
|
||||||
|
// Expenses
|
||||||
|
/**
|
||||||
|
* Determine if the user is authorized to make this request.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function authorize()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the validation rules that apply to the request.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'bank_id' => 'required',
|
||||||
|
'bank_username' => 'required',
|
||||||
|
'bank_password' => 'required',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Application Routes
|
| Application Routes
|
||||||
@ -140,7 +141,8 @@ Route::group(['middleware' => 'auth'], function() {
|
|||||||
Route::resource('bank_accounts', 'BankAccountController');
|
Route::resource('bank_accounts', 'BankAccountController');
|
||||||
Route::get('api/bank_accounts', array('as'=>'api.bank_accounts', 'uses'=>'BankAccountController@getDatatable'));
|
Route::get('api/bank_accounts', array('as'=>'api.bank_accounts', 'uses'=>'BankAccountController@getDatatable'));
|
||||||
Route::post('bank_accounts/bulk', 'BankAccountController@bulk');
|
Route::post('bank_accounts/bulk', 'BankAccountController@bulk');
|
||||||
Route::post('bank_accounts/test', 'BankAccountController@test');
|
Route::post('bank_accounts/validate', 'BankAccountController@validateAccount');
|
||||||
|
Route::post('bank_accounts/import_expenses/{bank_id}', 'BankAccountController@importExpenses');
|
||||||
|
|
||||||
Route::resource('clients', 'ClientController');
|
Route::resource('clients', 'ClientController');
|
||||||
Route::get('api/clients', array('as'=>'api.clients', 'uses'=>'ClientController@getDatatable'));
|
Route::get('api/clients', array('as'=>'api.clients', 'uses'=>'ClientController@getDatatable'));
|
||||||
@ -283,17 +285,18 @@ if (!defined('CONTACT_EMAIL')) {
|
|||||||
define('ENTITY_QUOTE', 'quote');
|
define('ENTITY_QUOTE', 'quote');
|
||||||
define('ENTITY_TASK', 'task');
|
define('ENTITY_TASK', 'task');
|
||||||
define('ENTITY_ACCOUNT_GATEWAY', 'account_gateway');
|
define('ENTITY_ACCOUNT_GATEWAY', 'account_gateway');
|
||||||
define('ENTITY_BANK_ACCOUNT', 'bank_account');
|
|
||||||
define('ENTITY_USER', 'user');
|
define('ENTITY_USER', 'user');
|
||||||
define('ENTITY_TOKEN', 'token');
|
define('ENTITY_TOKEN', 'token');
|
||||||
define('ENTITY_TAX_RATE', 'tax_rate');
|
define('ENTITY_TAX_RATE', 'tax_rate');
|
||||||
define('ENTITY_PRODUCT', 'product');
|
define('ENTITY_PRODUCT', 'product');
|
||||||
define('ENTITY_ACTIVITY', 'activity');
|
define('ENTITY_ACTIVITY', 'activity');
|
||||||
define('ENTITY_VENDOR','vendor');
|
define('ENTITY_VENDOR', 'vendor');
|
||||||
define('ENTITY_VENDOR_ACTIVITY','vendor_activity');
|
define('ENTITY_VENDOR_ACTIVITY', 'vendor_activity');
|
||||||
define('ENTITY_EXPENSE', 'expense');
|
define('ENTITY_EXPENSE', 'expense');
|
||||||
define('ENTITY_PAYMENT_TERM','payment_term');
|
define('ENTITY_PAYMENT_TERM', 'payment_term');
|
||||||
define('ENTITY_EXPENSE_ACTIVITY','expense_activity');
|
define('ENTITY_EXPENSE_ACTIVITY', 'expense_activity');
|
||||||
|
define('ENTITY_BANK_ACCOUNT', 'bank_account');
|
||||||
|
define('ENTITY_BANK_SUBACCOUNT', 'bank_subaccount');
|
||||||
|
|
||||||
define('PERSON_CONTACT', 'contact');
|
define('PERSON_CONTACT', 'contact');
|
||||||
define('PERSON_USER', 'user');
|
define('PERSON_USER', 'user');
|
||||||
@ -309,6 +312,7 @@ if (!defined('CONTACT_EMAIL')) {
|
|||||||
define('ACCOUNT_IMPORT_EXPORT', 'import_export');
|
define('ACCOUNT_IMPORT_EXPORT', 'import_export');
|
||||||
define('ACCOUNT_PAYMENTS', 'online_payments');
|
define('ACCOUNT_PAYMENTS', 'online_payments');
|
||||||
define('ACCOUNT_BANKS', 'bank_accounts');
|
define('ACCOUNT_BANKS', 'bank_accounts');
|
||||||
|
define('ACCOUNT_IMPORT_EXPENSES', 'import_expenses');
|
||||||
define('ACCOUNT_MAP', 'import_map');
|
define('ACCOUNT_MAP', 'import_map');
|
||||||
define('ACCOUNT_EXPORT', 'export');
|
define('ACCOUNT_EXPORT', 'export');
|
||||||
define('ACCOUNT_TAX_RATES', 'tax_rates');
|
define('ACCOUNT_TAX_RATES', 'tax_rates');
|
||||||
@ -512,6 +516,7 @@ if (!defined('CONTACT_EMAIL')) {
|
|||||||
define('PHP_DATE_FORMATS', 'http://php.net/manual/en/function.date.php');
|
define('PHP_DATE_FORMATS', 'http://php.net/manual/en/function.date.php');
|
||||||
define('REFERRAL_PROGRAM_URL', 'https://www.invoiceninja.com/referral-program/');
|
define('REFERRAL_PROGRAM_URL', 'https://www.invoiceninja.com/referral-program/');
|
||||||
define('EMAIL_MARKUP_URL', 'https://developers.google.com/gmail/markup');
|
define('EMAIL_MARKUP_URL', 'https://developers.google.com/gmail/markup');
|
||||||
|
define('OFX_HOME_URL', 'http://www.ofxhome.com/index.php/home/directory/all');
|
||||||
|
|
||||||
define('COUNT_FREE_DESIGNS', 4);
|
define('COUNT_FREE_DESIGNS', 4);
|
||||||
define('COUNT_FREE_DESIGNS_SELF_HOST', 5); // include the custom design
|
define('COUNT_FREE_DESIGNS_SELF_HOST', 5); // include the custom design
|
||||||
|
@ -24,8 +24,9 @@ class OFX
|
|||||||
curl_setopt($c, CURLOPT_HTTPHEADER, array('Content-Type: application/x-ofx'));
|
curl_setopt($c, CURLOPT_HTTPHEADER, array('Content-Type: application/x-ofx'));
|
||||||
curl_setopt($c, CURLOPT_POSTFIELDS, $this->request);
|
curl_setopt($c, CURLOPT_POSTFIELDS, $this->request);
|
||||||
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
|
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
|
||||||
//curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
|
|
||||||
$this->response = curl_exec($c);
|
$this->response = curl_exec($c);
|
||||||
|
//print_r($this->response);
|
||||||
|
//\Log::info(print_r($this->response, true));
|
||||||
curl_close($c);
|
curl_close($c);
|
||||||
$tmp = explode('<OFX>', $this->response);
|
$tmp = explode('<OFX>', $this->response);
|
||||||
$this->responseHeader = $tmp[0];
|
$this->responseHeader = $tmp[0];
|
||||||
|
@ -26,7 +26,7 @@ class Account extends Eloquent
|
|||||||
ACCOUNT_USER_DETAILS,
|
ACCOUNT_USER_DETAILS,
|
||||||
ACCOUNT_LOCALIZATION,
|
ACCOUNT_LOCALIZATION,
|
||||||
ACCOUNT_PAYMENTS,
|
ACCOUNT_PAYMENTS,
|
||||||
//ACCOUNT_BANKS,
|
ACCOUNT_BANKS,
|
||||||
ACCOUNT_TAX_RATES,
|
ACCOUNT_TAX_RATES,
|
||||||
ACCOUNT_PRODUCTS,
|
ACCOUNT_PRODUCTS,
|
||||||
ACCOUNT_NOTIFICATIONS,
|
ACCOUNT_NOTIFICATIONS,
|
||||||
|
@ -19,5 +19,9 @@ class BankAccount extends EntityModel
|
|||||||
return $this->belongsTo('App\Models\Bank');
|
return $this->belongsTo('App\Models\Bank');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function bank_subaccounts()
|
||||||
|
{
|
||||||
|
return $this->hasMany('App\Models\BankSubaccount');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
23
app/Models/BankSubaccount.php
Normal file
23
app/Models/BankSubaccount.php
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?php namespace App\Models;
|
||||||
|
|
||||||
|
use Crypt;
|
||||||
|
use App\Models\Bank;
|
||||||
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
|
||||||
|
class BankSubaccount extends EntityModel
|
||||||
|
{
|
||||||
|
use SoftDeletes;
|
||||||
|
protected $dates = ['deleted_at'];
|
||||||
|
|
||||||
|
public function getEntityType()
|
||||||
|
{
|
||||||
|
return ENTITY_BANK_SUBACCOUNT;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function bank_account()
|
||||||
|
{
|
||||||
|
return $this->belongsTo('App\Models\BankAccount');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -24,6 +24,8 @@ class Expense extends EntityModel
|
|||||||
'exchange_rate',
|
'exchange_rate',
|
||||||
'private_notes',
|
'private_notes',
|
||||||
'public_notes',
|
'public_notes',
|
||||||
|
'bank_id',
|
||||||
|
'transaction_id',
|
||||||
];
|
];
|
||||||
public function account()
|
public function account()
|
||||||
{
|
{
|
||||||
|
@ -29,6 +29,7 @@ class Vendor extends EntityModel
|
|||||||
'private_notes',
|
'private_notes',
|
||||||
'currency_id',
|
'currency_id',
|
||||||
'website',
|
'website',
|
||||||
|
'transaction_name',
|
||||||
];
|
];
|
||||||
|
|
||||||
public static $fieldName = 'name';
|
public static $fieldName = 'name';
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
<?php namespace App\Ninja\Repositories;
|
<?php namespace App\Ninja\Repositories;
|
||||||
|
|
||||||
use DB;
|
use DB;
|
||||||
|
use Crypt;
|
||||||
use Utils;
|
use Utils;
|
||||||
use Session;
|
use Session;
|
||||||
use App\Models\BankAccount;
|
use App\Models\BankAccount;
|
||||||
|
use App\Models\BankSubaccount;
|
||||||
use App\Ninja\Repositories\BaseRepository;
|
use App\Ninja\Repositories\BaseRepository;
|
||||||
|
|
||||||
class BankAccountRepository extends BaseRepository
|
class BankAccountRepository extends BaseRepository
|
||||||
@ -19,6 +21,34 @@ class BankAccountRepository extends BaseRepository
|
|||||||
->join('banks', 'banks.id', '=', 'bank_accounts.bank_id')
|
->join('banks', 'banks.id', '=', 'bank_accounts.bank_id')
|
||||||
->where('bank_accounts.deleted_at', '=', null)
|
->where('bank_accounts.deleted_at', '=', null)
|
||||||
->where('bank_accounts.account_id', '=', $accountId)
|
->where('bank_accounts.account_id', '=', $accountId)
|
||||||
->select('bank_accounts.public_id', 'banks.name as bank_name', 'bank_accounts.deleted_at', 'banks.bank_library_id');
|
->select(
|
||||||
|
'bank_accounts.public_id',
|
||||||
|
'banks.name as bank_name',
|
||||||
|
'bank_accounts.deleted_at',
|
||||||
|
'banks.bank_library_id'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function save($input)
|
||||||
|
{
|
||||||
|
$bankAccount = BankAccount::createNew();
|
||||||
|
$bankAccount->bank_id = $input['bank_id'];
|
||||||
|
$bankAccount->username = Crypt::encrypt(trim($input['bank_username']));
|
||||||
|
|
||||||
|
$account = \Auth::user()->account;
|
||||||
|
$account->bank_accounts()->save($bankAccount);
|
||||||
|
|
||||||
|
foreach ($input['bank_accounts'] as $data) {
|
||||||
|
if ( ! isset($data['include']) || ! filter_var($data['include'], FILTER_VALIDATE_BOOLEAN)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$subaccount = BankSubaccount::createNew();
|
||||||
|
$subaccount->account_name = trim($data['account_name']);
|
||||||
|
$subaccount->account_number = trim($data['hashed_account_number']);
|
||||||
|
$bankAccount->bank_subaccounts()->save($subaccount);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $bankAccount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,11 +26,12 @@ class ExpenseRepository extends BaseRepository
|
|||||||
|
|
||||||
public function findVendor($vendorPublicId)
|
public function findVendor($vendorPublicId)
|
||||||
{
|
{
|
||||||
|
$vendorId = Vendor::getPrivateId($vendorPublicId);
|
||||||
$accountid = \Auth::user()->account_id;
|
$accountid = \Auth::user()->account_id;
|
||||||
$query = DB::table('expenses')
|
$query = DB::table('expenses')
|
||||||
->join('accounts', 'accounts.id', '=', 'expenses.account_id')
|
->join('accounts', 'accounts.id', '=', 'expenses.account_id')
|
||||||
->where('expenses.account_id', '=', $accountid)
|
->where('expenses.account_id', '=', $accountid)
|
||||||
->where('expenses.vendor_id', '=', $vendorPublicId)
|
->where('expenses.vendor_id', '=', $vendorId)
|
||||||
->select(
|
->select(
|
||||||
'expenses.id',
|
'expenses.id',
|
||||||
'expenses.expense_date',
|
'expenses.expense_date',
|
||||||
@ -119,7 +120,10 @@ class ExpenseRepository extends BaseRepository
|
|||||||
$expense->fill($input);
|
$expense->fill($input);
|
||||||
|
|
||||||
$expense->expense_date = Utils::toSqlDate($input['expense_date']);
|
$expense->expense_date = Utils::toSqlDate($input['expense_date']);
|
||||||
$expense->private_notes = trim($input['private_notes']);
|
|
||||||
|
if (isset($input['private_notes'])) {
|
||||||
|
$expense->private_notes = trim($input['private_notes']);
|
||||||
|
}
|
||||||
$expense->public_notes = trim($input['public_notes']);
|
$expense->public_notes = trim($input['public_notes']);
|
||||||
$expense->should_be_invoiced = isset($input['should_be_invoiced']) || $expense->client_id ? true : false;
|
$expense->should_be_invoiced = isset($input['should_be_invoiced']) || $expense->client_id ? true : false;
|
||||||
|
|
||||||
|
@ -39,6 +39,7 @@ class VendorRepository extends BaseRepository
|
|||||||
'vendor_contacts.last_name',
|
'vendor_contacts.last_name',
|
||||||
'vendors.created_at',
|
'vendors.created_at',
|
||||||
'vendors.work_phone',
|
'vendors.work_phone',
|
||||||
|
'vendors.city',
|
||||||
'vendor_contacts.email',
|
'vendor_contacts.email',
|
||||||
'vendors.deleted_at',
|
'vendors.deleted_at',
|
||||||
'vendors.is_deleted'
|
'vendors.is_deleted'
|
||||||
@ -73,10 +74,6 @@ class VendorRepository extends BaseRepository
|
|||||||
$vendor->fill($data);
|
$vendor->fill($data);
|
||||||
$vendor->save();
|
$vendor->save();
|
||||||
|
|
||||||
if ( ! isset($data['vendorcontact']) && ! isset($data['vendorcontacts'])) {
|
|
||||||
return $vendor;
|
|
||||||
}
|
|
||||||
|
|
||||||
$first = true;
|
$first = true;
|
||||||
$vendorcontacts = isset($data['vendorcontact']) ? [$data['vendorcontact']] : $data['vendorcontacts'];
|
$vendorcontacts = isset($data['vendorcontact']) ? [$data['vendorcontact']] : $data['vendorcontacts'];
|
||||||
|
|
||||||
|
@ -3,21 +3,30 @@
|
|||||||
use stdClass;
|
use stdClass;
|
||||||
use Utils;
|
use Utils;
|
||||||
use URL;
|
use URL;
|
||||||
|
use Hash;
|
||||||
use App\Models\Gateway;
|
use App\Models\Gateway;
|
||||||
|
use App\Models\BankSubaccount;
|
||||||
|
use App\Models\Vendor;
|
||||||
|
use App\Models\Expense;
|
||||||
use App\Services\BaseService;
|
use App\Services\BaseService;
|
||||||
use App\Ninja\Repositories\BankAccountRepository;
|
use App\Ninja\Repositories\BankAccountRepository;
|
||||||
|
use App\Ninja\Repositories\ExpenseRepository;
|
||||||
|
use App\Ninja\Repositories\VendorRepository;
|
||||||
use App\Libraries\Finance;
|
use App\Libraries\Finance;
|
||||||
use App\Libraries\Login;
|
use App\Libraries\Login;
|
||||||
|
|
||||||
class BankAccountService extends BaseService
|
class BankAccountService extends BaseService
|
||||||
{
|
{
|
||||||
protected $bankAccountRepo;
|
protected $bankAccountRepo;
|
||||||
|
protected $expenseRepo;
|
||||||
|
protected $vendorRepo;
|
||||||
protected $datatableService;
|
protected $datatableService;
|
||||||
|
|
||||||
public function __construct(BankAccountRepository $bankAccountRepo, DatatableService $datatableService)
|
public function __construct(BankAccountRepository $bankAccountRepo, ExpenseRepository $expenseRepo, VendorRepository $vendorRepo, DatatableService $datatableService)
|
||||||
{
|
{
|
||||||
$this->bankAccountRepo = $bankAccountRepo;
|
$this->bankAccountRepo = $bankAccountRepo;
|
||||||
|
$this->vendorRepo = $vendorRepo;
|
||||||
|
$this->expenseRepo = $expenseRepo;
|
||||||
$this->datatableService = $datatableService;
|
$this->datatableService = $datatableService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -26,22 +35,31 @@ class BankAccountService extends BaseService
|
|||||||
return $this->bankAccountRepo;
|
return $this->bankAccountRepo;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
public function save()
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
public function loadBankAccounts($bankId, $username, $password, $includeTransactions = true)
|
public function loadBankAccounts($bankId, $username, $password, $includeTransactions = true)
|
||||||
{
|
{
|
||||||
if ( ! $bankId || ! $username || ! $password) {
|
if ( ! $bankId || ! $username || ! $password) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$expenses = Expense::scope()
|
||||||
|
->whereBankId($bankId)
|
||||||
|
->where('transaction_id', '!=', '')
|
||||||
|
->withTrashed()
|
||||||
|
->get(['transaction_id'])
|
||||||
|
->toArray();
|
||||||
|
$expenses = array_flip(array_map(function($val) {
|
||||||
|
return $val['transaction_id'];
|
||||||
|
}, $expenses));
|
||||||
|
|
||||||
|
$bankAccounts = BankSubaccount::scope()
|
||||||
|
->whereHas('bank_account', function($query) use ($bankId) {
|
||||||
|
$query->where('bank_id', '=', $bankId);
|
||||||
|
})
|
||||||
|
->get();
|
||||||
$bank = Utils::getFromCache($bankId, 'banks');
|
$bank = Utils::getFromCache($bankId, 'banks');
|
||||||
$data = [];
|
$data = [];
|
||||||
|
|
||||||
|
// load OFX trnansactions
|
||||||
try {
|
try {
|
||||||
$finance = new Finance();
|
$finance = new Finance();
|
||||||
$finance->banks[$bankId] = $bank->getOFXBank($finance);
|
$finance->banks[$bankId] = $bank->getOFXBank($finance);
|
||||||
@ -52,21 +70,137 @@ class BankAccountService extends BaseService
|
|||||||
$login->setup();
|
$login->setup();
|
||||||
foreach ($login->accounts as $account) {
|
foreach ($login->accounts as $account) {
|
||||||
$account->setup($includeTransactions);
|
$account->setup($includeTransactions);
|
||||||
$obj = new stdClass;
|
if ($account = $this->parseBankAccount($account, $bankAccounts, $expenses, $includeTransactions)) {
|
||||||
$obj->account_number = Utils::maskAccountNumber($account->id);
|
$data[] = $account;
|
||||||
$obj->type = $account->type;
|
}
|
||||||
$obj->balance = Utils::formatMoney($account->ledgerBalance, CURRENCY_DOLLAR);
|
|
||||||
$data[] = $obj;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function parseBankAccount($account, $bankAccounts, $expenses, $includeTransactions)
|
||||||
|
{
|
||||||
|
$obj = new stdClass;
|
||||||
|
$obj->account_name = '';
|
||||||
|
|
||||||
|
// look up bank account name
|
||||||
|
foreach ($bankAccounts as $bankAccount) {
|
||||||
|
if (Hash::check($account->id, $bankAccount->account_number)) {
|
||||||
|
$obj->account_name = $bankAccount->account_name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we can't find a match skip the account
|
||||||
|
if (count($bankAccounts) && ! $obj->account_name) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$obj->masked_account_number = Utils::maskAccountNumber($account->id);
|
||||||
|
$obj->hashed_account_number = bcrypt($account->id);
|
||||||
|
$obj->type = $account->type;
|
||||||
|
$obj->balance = Utils::formatMoney($account->ledgerBalance, CURRENCY_DOLLAR);
|
||||||
|
|
||||||
|
if ($includeTransactions) {
|
||||||
|
$ofxParser = new \OfxParser\Parser;
|
||||||
|
$ofx = $ofxParser->loadFromString($account->response);
|
||||||
|
|
||||||
|
$obj->start_date = $ofx->BankAccount->Statement->startDate;
|
||||||
|
$obj->end_date = $ofx->BankAccount->Statement->endDate;
|
||||||
|
$obj->transactions = [];
|
||||||
|
|
||||||
|
foreach ($ofx->BankAccount->Statement->transactions as $transaction) {
|
||||||
|
// ensure transactions aren't imported as expenses twice
|
||||||
|
if (isset($expenses[$transaction->uniqueId])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ($transaction->amount >= 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$transaction->vendor = $this->prepareValue(substr($transaction->name, 0, 20));
|
||||||
|
$transaction->info = $this->prepareValue(substr($transaction->name, 20));
|
||||||
|
$transaction->memo = $this->prepareValue($transaction->memo);
|
||||||
|
$transaction->date = \Auth::user()->account->formatDate($transaction->date);
|
||||||
|
$transaction->amount *= -1;
|
||||||
|
$obj->transactions[] = $transaction;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function prepareValue($value) {
|
||||||
|
return ucwords(strtolower(trim($value)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function importExpenses($bankId, $input) {
|
||||||
|
$countVendors = 0;
|
||||||
|
$countExpenses = 0;
|
||||||
|
|
||||||
|
// create a vendor map
|
||||||
|
$vendorMap = [];
|
||||||
|
$vendors = Vendor::scope()
|
||||||
|
->withTrashed()
|
||||||
|
->get(['id', 'name', 'transaction_name']);
|
||||||
|
foreach ($vendors as $vendor) {
|
||||||
|
$vendorMap[strtolower($vendor->name)] = $vendor;
|
||||||
|
$vendorMap[strtolower($vendor->transaction_name)] = $vendor;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($input as $transaction) {
|
||||||
|
$vendorName = $transaction['vendor'];
|
||||||
|
$key = strtolower($vendorName);
|
||||||
|
$info = $transaction['info'];
|
||||||
|
|
||||||
|
// find vendor otherwise create it
|
||||||
|
if (isset($vendorMap[$key])) {
|
||||||
|
$vendor = $vendorMap[$key];
|
||||||
|
} else {
|
||||||
|
$field = $this->determineInfoField($info);
|
||||||
|
$vendor = $this->vendorRepo->save([
|
||||||
|
$field => $info,
|
||||||
|
'name' => $vendorName,
|
||||||
|
'transaction_name' => $transaction['vendor_orig'],
|
||||||
|
'vendorcontact' => []
|
||||||
|
]);
|
||||||
|
$vendorMap[$key] = $vendor;
|
||||||
|
$vendorMap[$transaction['vendor_orig']] = $vendor;
|
||||||
|
$countVendors++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// create the expense record
|
||||||
|
$this->expenseRepo->save([
|
||||||
|
'vendor_id' => $vendor->id,
|
||||||
|
'amount' => $transaction['amount'],
|
||||||
|
'public_notes' => $transaction['memo'],
|
||||||
|
'expense_date' => $transaction['date'],
|
||||||
|
'transaction_id' => $transaction['id'],
|
||||||
|
'bank_id' => $bankId,
|
||||||
|
'should_be_invoiced' => true,
|
||||||
|
]);
|
||||||
|
$countExpenses++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return trans('texts.imported_expenses', [
|
||||||
|
'count_vendors' => $countVendors,
|
||||||
|
'count_expenses' => $countExpenses
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function determineInfoField($value) {
|
||||||
|
if (preg_match("/^[0-9\-\(\)\.]+$/", $value)) {
|
||||||
|
return 'work_phone';
|
||||||
|
} elseif (strpos($value, '.') !== false) {
|
||||||
|
return 'private_notes';
|
||||||
|
} else {
|
||||||
|
return 'city';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function getDatatable($accountId)
|
public function getDatatable($accountId)
|
||||||
{
|
{
|
||||||
$query = $this->bankAccountRepo->find($accountId);
|
$query = $this->bankAccountRepo->find($accountId);
|
||||||
|
@ -50,9 +50,15 @@ class VendorService extends BaseService
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'first_name',
|
'city',
|
||||||
function ($model) {
|
function ($model) {
|
||||||
return link_to("vendors/{$model->public_id}", $model->first_name.' '.$model->last_name);
|
return $model->city;
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'work_phone',
|
||||||
|
function ($model) {
|
||||||
|
return $model->work_phone;
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
|
@ -7,16 +7,13 @@
|
|||||||
{
|
{
|
||||||
"name": "Hillel Coren",
|
"name": "Hillel Coren",
|
||||||
"email": "hillelcoren@gmail.com"
|
"email": "hillelcoren@gmail.com"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Jeramy Simpson",
|
|
||||||
"email": "jeramy.n.simpson@gmail.com"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"omnipay/mollie": "dev-master#22956c1a62a9662afa5f5d119723b413770ac525",
|
"omnipay/mollie": "dev-master#22956c1a62a9662afa5f5d119723b413770ac525",
|
||||||
"omnipay/2checkout": "dev-master#e9c079c2dde0d7ba461903b3b7bd5caf6dee1248",
|
"omnipay/2checkout": "dev-master#e9c079c2dde0d7ba461903b3b7bd5caf6dee1248",
|
||||||
"omnipay/gocardless": "dev-master",
|
"omnipay/gocardless": "dev-master",
|
||||||
|
"omnipay/stripe": "2.3.0",
|
||||||
"laravel/framework": "5.0.*",
|
"laravel/framework": "5.0.*",
|
||||||
"patricktalmadge/bootstrapper": "5.5.x",
|
"patricktalmadge/bootstrapper": "5.5.x",
|
||||||
"anahkiasen/former": "4.0.*@dev",
|
"anahkiasen/former": "4.0.*@dev",
|
||||||
@ -25,7 +22,7 @@
|
|||||||
"omnipay/omnipay": "~2.3.0",
|
"omnipay/omnipay": "~2.3.0",
|
||||||
"intervention/image": "dev-master",
|
"intervention/image": "dev-master",
|
||||||
"webpatser/laravel-countries": "dev-master",
|
"webpatser/laravel-countries": "dev-master",
|
||||||
"barryvdh/laravel-ide-helper": "^2.1",
|
"barryvdh/laravel-ide-helper": "dev-master",
|
||||||
"doctrine/dbal": "2.5.x",
|
"doctrine/dbal": "2.5.x",
|
||||||
"jsanc623/phpbenchtime": "2.x",
|
"jsanc623/phpbenchtime": "2.x",
|
||||||
"lokielse/omnipay-alipay": "dev-master",
|
"lokielse/omnipay-alipay": "dev-master",
|
||||||
@ -66,7 +63,8 @@
|
|||||||
"jlapp/swaggervel": "master-dev",
|
"jlapp/swaggervel": "master-dev",
|
||||||
"maatwebsite/excel": "~2.0",
|
"maatwebsite/excel": "~2.0",
|
||||||
"ezyang/htmlpurifier": "~v4.7",
|
"ezyang/htmlpurifier": "~v4.7",
|
||||||
"cerdic/css-tidy": "~v1.5"
|
"cerdic/css-tidy": "~v1.5",
|
||||||
|
"asgrim/ofxparser": "^1.1"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "~4.0",
|
"phpunit/phpunit": "~4.0",
|
||||||
|
388
composer.lock
generated
388
composer.lock
generated
@ -4,8 +4,8 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"hash": "9ed916108c17ac2634ffc4b9676098d1",
|
"hash": "6e219bb4f5ffaf8423177bd6fccc89f8",
|
||||||
"content-hash": "e5177cc53f079158f3180a7e4ef0ded6",
|
"content-hash": "4778ab164bfb93c4af1bb51c4320ea4c",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "agmscode/omnipay-agms",
|
"name": "agmscode/omnipay-agms",
|
||||||
@ -123,12 +123,12 @@
|
|||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/alfaproject/omnipay-skrill.git",
|
"url": "https://github.com/alfaproject/omnipay-skrill.git",
|
||||||
"reference": "2fa2ba8083fd5289366660f8de1b46b5f49ac052"
|
"reference": "41a7a03c5b90d496720e288bebc157d898837ccd"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/alfaproject/omnipay-skrill/zipball/41a7a03c5b90d496720e288bebc157d898837ccd",
|
"url": "https://api.github.com/repos/alfaproject/omnipay-skrill/zipball/41a7a03c5b90d496720e288bebc157d898837ccd",
|
||||||
"reference": "2fa2ba8083fd5289366660f8de1b46b5f49ac052",
|
"reference": "41a7a03c5b90d496720e288bebc157d898837ccd",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -169,7 +169,7 @@
|
|||||||
"payment",
|
"payment",
|
||||||
"skrill"
|
"skrill"
|
||||||
],
|
],
|
||||||
"time": "2014-02-25 13:40:07"
|
"time": "2016-01-13 16:33:07"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "anahkiasen/former",
|
"name": "anahkiasen/former",
|
||||||
@ -323,6 +323,58 @@
|
|||||||
],
|
],
|
||||||
"time": "2015-03-19 21:32:19"
|
"time": "2015-03-19 21:32:19"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "asgrim/ofxparser",
|
||||||
|
"version": "1.1.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/asgrim/ofxparser.git",
|
||||||
|
"reference": "7652efea77a1c5dda007f9764d8061f870248ea1"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/asgrim/ofxparser/zipball/7652efea77a1c5dda007f9764d8061f870248ea1",
|
||||||
|
"reference": "7652efea77a1c5dda007f9764d8061f870248ea1",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.4"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-0": {
|
||||||
|
"OfxParser": "lib/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Guillaume Bailleul",
|
||||||
|
"email": "contact@guillaume-bailleul.fr",
|
||||||
|
"homepage": "http://www.guillaume-bailleul.fr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "James Titcumb",
|
||||||
|
"email": "hello@jamestitcumb.com",
|
||||||
|
"homepage": "http://www.jamestitcumb.com/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Oliver Lowe",
|
||||||
|
"email": "mrtriangle@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Simple OFX file parser",
|
||||||
|
"keywords": [
|
||||||
|
"finance",
|
||||||
|
"ofx",
|
||||||
|
"open financial exchange",
|
||||||
|
"parser"
|
||||||
|
],
|
||||||
|
"time": "2015-12-11 11:08:57"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "barryvdh/laravel-debugbar",
|
"name": "barryvdh/laravel-debugbar",
|
||||||
"version": "v2.0.6",
|
"version": "v2.0.6",
|
||||||
@ -379,25 +431,25 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "barryvdh/laravel-ide-helper",
|
"name": "barryvdh/laravel-ide-helper",
|
||||||
"version": "v2.0.6",
|
"version": "dev-master",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/barryvdh/laravel-ide-helper.git",
|
"url": "https://github.com/barryvdh/laravel-ide-helper.git",
|
||||||
"reference": "037386153630a7515a1542f29410d8c267651689"
|
"reference": "aa8f772a46c35ecdcb7119f38772ac2ec952a941"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/037386153630a7515a1542f29410d8c267651689",
|
"url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/aa8f772a46c35ecdcb7119f38772ac2ec952a941",
|
||||||
"reference": "037386153630a7515a1542f29410d8c267651689",
|
"reference": "aa8f772a46c35ecdcb7119f38772ac2ec952a941",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"illuminate/console": "5.0.x|5.1.x",
|
"illuminate/console": "5.0.x|5.1.x|5.2.x",
|
||||||
"illuminate/filesystem": "5.0.x|5.1.x",
|
"illuminate/filesystem": "5.0.x|5.1.x|5.2.x",
|
||||||
"illuminate/support": "5.0.x|5.1.x",
|
"illuminate/support": "5.0.x|5.1.x|5.2.x",
|
||||||
"php": ">=5.4.0",
|
"php": ">=5.4.0",
|
||||||
"phpdocumentor/reflection-docblock": "2.0.4",
|
"phpdocumentor/reflection-docblock": "2.0.4",
|
||||||
"symfony/class-loader": "~2.3"
|
"symfony/class-loader": "~2.3|~3.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"doctrine/dbal": "~2.3"
|
"doctrine/dbal": "~2.3"
|
||||||
@ -408,7 +460,7 @@
|
|||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "2.0-dev"
|
"dev-master": "2.1-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@ -438,7 +490,7 @@
|
|||||||
"phpstorm",
|
"phpstorm",
|
||||||
"sublime"
|
"sublime"
|
||||||
],
|
],
|
||||||
"time": "2015-06-25 08:58:59"
|
"time": "2016-01-22 13:33:15"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "cardgate/omnipay-cardgate",
|
"name": "cardgate/omnipay-cardgate",
|
||||||
@ -1272,33 +1324,33 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "doctrine/cache",
|
"name": "doctrine/cache",
|
||||||
"version": "v1.5.4",
|
"version": "v1.6.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/doctrine/cache.git",
|
"url": "https://github.com/doctrine/cache.git",
|
||||||
"reference": "47cdc76ceb95cc591d9c79a36dc3794975b5d136"
|
"reference": "f8af318d14bdb0eff0336795b428b547bd39ccb6"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/doctrine/cache/zipball/47cdc76ceb95cc591d9c79a36dc3794975b5d136",
|
"url": "https://api.github.com/repos/doctrine/cache/zipball/f8af318d14bdb0eff0336795b428b547bd39ccb6",
|
||||||
"reference": "47cdc76ceb95cc591d9c79a36dc3794975b5d136",
|
"reference": "f8af318d14bdb0eff0336795b428b547bd39ccb6",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.3.2"
|
"php": "~5.5|~7.0"
|
||||||
},
|
},
|
||||||
"conflict": {
|
"conflict": {
|
||||||
"doctrine/common": ">2.2,<2.4"
|
"doctrine/common": ">2.2,<2.4"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": ">=3.7",
|
"phpunit/phpunit": "~4.8|~5.0",
|
||||||
"predis/predis": "~1.0",
|
"predis/predis": "~1.0",
|
||||||
"satooshi/php-coveralls": "~0.6"
|
"satooshi/php-coveralls": "~0.6"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "1.5.x-dev"
|
"dev-master": "1.6.x-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@ -1338,7 +1390,7 @@
|
|||||||
"cache",
|
"cache",
|
||||||
"caching"
|
"caching"
|
||||||
],
|
],
|
||||||
"time": "2015-12-19 05:03:47"
|
"time": "2015-12-31 16:37:02"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "doctrine/collections",
|
"name": "doctrine/collections",
|
||||||
@ -1481,16 +1533,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "doctrine/dbal",
|
"name": "doctrine/dbal",
|
||||||
"version": "v2.5.3",
|
"version": "v2.5.4",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/doctrine/dbal.git",
|
"url": "https://github.com/doctrine/dbal.git",
|
||||||
"reference": "2fbcea96eae34a53183377cdbb0b9bec33974648"
|
"reference": "abbdfd1cff43a7b99d027af3be709bc8fc7d4769"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/doctrine/dbal/zipball/2fbcea96eae34a53183377cdbb0b9bec33974648",
|
"url": "https://api.github.com/repos/doctrine/dbal/zipball/abbdfd1cff43a7b99d027af3be709bc8fc7d4769",
|
||||||
"reference": "2fbcea96eae34a53183377cdbb0b9bec33974648",
|
"reference": "abbdfd1cff43a7b99d027af3be709bc8fc7d4769",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -1548,7 +1600,7 @@
|
|||||||
"persistence",
|
"persistence",
|
||||||
"queryobject"
|
"queryobject"
|
||||||
],
|
],
|
||||||
"time": "2015-12-25 16:28:24"
|
"time": "2016-01-05 22:11:12"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "doctrine/inflector",
|
"name": "doctrine/inflector",
|
||||||
@ -2091,16 +2143,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "guzzlehttp/psr7",
|
"name": "guzzlehttp/psr7",
|
||||||
"version": "1.2.1",
|
"version": "1.2.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/guzzle/psr7.git",
|
"url": "https://github.com/guzzle/psr7.git",
|
||||||
"reference": "4d0bdbe1206df7440219ce14c972aa57cc5e4982"
|
"reference": "f5d04bdd2881ac89abde1fb78cc234bce24327bb"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/4d0bdbe1206df7440219ce14c972aa57cc5e4982",
|
"url": "https://api.github.com/repos/guzzle/psr7/zipball/f5d04bdd2881ac89abde1fb78cc234bce24327bb",
|
||||||
"reference": "4d0bdbe1206df7440219ce14c972aa57cc5e4982",
|
"reference": "f5d04bdd2881ac89abde1fb78cc234bce24327bb",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -2145,7 +2197,7 @@
|
|||||||
"stream",
|
"stream",
|
||||||
"uri"
|
"uri"
|
||||||
],
|
],
|
||||||
"time": "2015-11-03 01:34:55"
|
"time": "2016-01-23 01:23:02"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "illuminate/html",
|
"name": "illuminate/html",
|
||||||
@ -2254,12 +2306,12 @@
|
|||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/Intervention/image.git",
|
"url": "https://github.com/Intervention/image.git",
|
||||||
"reference": "e6acb1609ce89f2c1ec7864fbbda0a20a3eeca70"
|
"reference": "86dfe2f2a95aa9eed58faf1cc1dae6534a6ce931"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/Intervention/image/zipball/86dfe2f2a95aa9eed58faf1cc1dae6534a6ce931",
|
"url": "https://api.github.com/repos/Intervention/image/zipball/86dfe2f2a95aa9eed58faf1cc1dae6534a6ce931",
|
||||||
"reference": "e6acb1609ce89f2c1ec7864fbbda0a20a3eeca70",
|
"reference": "86dfe2f2a95aa9eed58faf1cc1dae6534a6ce931",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -2308,7 +2360,7 @@
|
|||||||
"thumbnail",
|
"thumbnail",
|
||||||
"watermark"
|
"watermark"
|
||||||
],
|
],
|
||||||
"time": "2015-12-04 17:09:36"
|
"time": "2016-01-10 11:20:02"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "ircmaxell/password-compat",
|
"name": "ircmaxell/password-compat",
|
||||||
@ -3232,12 +3284,12 @@
|
|||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/lokielse/omnipay-alipay.git",
|
"url": "https://github.com/lokielse/omnipay-alipay.git",
|
||||||
"reference": "cbfbee089e0a84a58c73e9d3794894b81a6a82d6"
|
"reference": "f39ce21a5cbfe5c7cd4108d264b398dbd42be05b"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/lokielse/omnipay-alipay/zipball/cbfbee089e0a84a58c73e9d3794894b81a6a82d6",
|
"url": "https://api.github.com/repos/lokielse/omnipay-alipay/zipball/f39ce21a5cbfe5c7cd4108d264b398dbd42be05b",
|
||||||
"reference": "cbfbee089e0a84a58c73e9d3794894b81a6a82d6",
|
"reference": "f39ce21a5cbfe5c7cd4108d264b398dbd42be05b",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -3273,7 +3325,7 @@
|
|||||||
"payment",
|
"payment",
|
||||||
"purchase"
|
"purchase"
|
||||||
],
|
],
|
||||||
"time": "2015-10-07 09:33:48"
|
"time": "2016-01-19 15:08:12"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "maatwebsite/excel",
|
"name": "maatwebsite/excel",
|
||||||
@ -3463,12 +3515,12 @@
|
|||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/meebio/omnipay-secure-trading.git",
|
"url": "https://github.com/meebio/omnipay-secure-trading.git",
|
||||||
"reference": "42f97ee5ad1d28605550d816fc1893919e19e502"
|
"reference": "992224a3c8dd834ee18f6f253a77ecb4c87c1c1a"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/meebio/omnipay-secure-trading/zipball/992224a3c8dd834ee18f6f253a77ecb4c87c1c1a",
|
"url": "https://api.github.com/repos/meebio/omnipay-secure-trading/zipball/992224a3c8dd834ee18f6f253a77ecb4c87c1c1a",
|
||||||
"reference": "42f97ee5ad1d28605550d816fc1893919e19e502",
|
"reference": "992224a3c8dd834ee18f6f253a77ecb4c87c1c1a",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -3513,7 +3565,7 @@
|
|||||||
"secure trading",
|
"secure trading",
|
||||||
"securetrading"
|
"securetrading"
|
||||||
],
|
],
|
||||||
"time": "2015-12-01 10:03:20"
|
"time": "2016-01-05 09:26:36"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "mfauveau/omnipay-pacnet",
|
"name": "mfauveau/omnipay-pacnet",
|
||||||
@ -4363,16 +4415,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "omnipay/firstdata",
|
"name": "omnipay/firstdata",
|
||||||
"version": "v2.2.0",
|
"version": "v2.3.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/thephpleague/omnipay-firstdata.git",
|
"url": "https://github.com/thephpleague/omnipay-firstdata.git",
|
||||||
"reference": "0853bba0ee313f5557eb1c696d3ce5538dbd4aca"
|
"reference": "e33826821db88d90886cad6c81a29452d3cf91a2"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/thephpleague/omnipay-firstdata/zipball/0853bba0ee313f5557eb1c696d3ce5538dbd4aca",
|
"url": "https://api.github.com/repos/thephpleague/omnipay-firstdata/zipball/e33826821db88d90886cad6c81a29452d3cf91a2",
|
||||||
"reference": "0853bba0ee313f5557eb1c696d3ce5538dbd4aca",
|
"reference": "e33826821db88d90886cad6c81a29452d3cf91a2",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -4417,7 +4469,7 @@
|
|||||||
"pay",
|
"pay",
|
||||||
"payment"
|
"payment"
|
||||||
],
|
],
|
||||||
"time": "2015-07-28 17:50:44"
|
"time": "2016-01-14 06:24:28"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "omnipay/gocardless",
|
"name": "omnipay/gocardless",
|
||||||
@ -5112,16 +5164,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "omnipay/paypal",
|
"name": "omnipay/paypal",
|
||||||
"version": "2.5.0",
|
"version": "v2.5.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/thephpleague/omnipay-paypal.git",
|
"url": "https://github.com/thephpleague/omnipay-paypal.git",
|
||||||
"reference": "67efe5a927dec13fc7520e29bc44f15fd3a728e9"
|
"reference": "b546d24241725061d44e60516f0fbce202336963"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/thephpleague/omnipay-paypal/zipball/67efe5a927dec13fc7520e29bc44f15fd3a728e9",
|
"url": "https://api.github.com/repos/thephpleague/omnipay-paypal/zipball/b546d24241725061d44e60516f0fbce202336963",
|
||||||
"reference": "67efe5a927dec13fc7520e29bc44f15fd3a728e9",
|
"reference": "b546d24241725061d44e60516f0fbce202336963",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -5166,20 +5218,20 @@
|
|||||||
"paypal",
|
"paypal",
|
||||||
"purchase"
|
"purchase"
|
||||||
],
|
],
|
||||||
"time": "2015-11-11 21:48:00"
|
"time": "2016-01-13 07:03:27"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "omnipay/pin",
|
"name": "omnipay/pin",
|
||||||
"version": "v2.1.0",
|
"version": "v2.2.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/omnipay/pin.git",
|
"url": "https://github.com/thephpleague/omnipay-pin.git",
|
||||||
"reference": "04e778e9689882d4c40419263014068b69b93168"
|
"reference": "c2252e41f3674267b2bbe79eaeec73b6b1e4ee58"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/omnipay/pin/zipball/04e778e9689882d4c40419263014068b69b93168",
|
"url": "https://api.github.com/repos/thephpleague/omnipay-pin/zipball/c2252e41f3674267b2bbe79eaeec73b6b1e4ee58",
|
||||||
"reference": "04e778e9689882d4c40419263014068b69b93168",
|
"reference": "c2252e41f3674267b2bbe79eaeec73b6b1e4ee58",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -5210,11 +5262,11 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Omnipay Contributors",
|
"name": "Omnipay Contributors",
|
||||||
"homepage": "https://github.com/omnipay/pin/contributors"
|
"homepage": "https://github.com/thephpleague/omnipay-pin/contributors"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Pin Payments driver for the Omnipay payment processing library",
|
"description": "Pin Payments driver for the Omnipay payment processing library",
|
||||||
"homepage": "https://github.com/omnipay/pin",
|
"homepage": "https://github.com/thephpleague/omnipay-pin",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"gateway",
|
"gateway",
|
||||||
"merchant",
|
"merchant",
|
||||||
@ -5223,20 +5275,20 @@
|
|||||||
"payment",
|
"payment",
|
||||||
"pin"
|
"pin"
|
||||||
],
|
],
|
||||||
"time": "2014-04-14 11:26:15"
|
"time": "2016-01-13 07:00:17"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "omnipay/sagepay",
|
"name": "omnipay/sagepay",
|
||||||
"version": "v2.2.0",
|
"version": "2.3.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/thephpleague/omnipay-sagepay.git",
|
"url": "https://github.com/thephpleague/omnipay-sagepay.git",
|
||||||
"reference": "899507095428fa54276ba5ca89f11fd7f8fd78ab"
|
"reference": "4208d23b33b2f8a59176e44ad22d304c461ecb62"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/thephpleague/omnipay-sagepay/zipball/899507095428fa54276ba5ca89f11fd7f8fd78ab",
|
"url": "https://api.github.com/repos/thephpleague/omnipay-sagepay/zipball/4208d23b33b2f8a59176e44ad22d304c461ecb62",
|
||||||
"reference": "899507095428fa54276ba5ca89f11fd7f8fd78ab",
|
"reference": "4208d23b33b2f8a59176e44ad22d304c461ecb62",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -5282,7 +5334,7 @@
|
|||||||
"sage pay",
|
"sage pay",
|
||||||
"sagepay"
|
"sagepay"
|
||||||
],
|
],
|
||||||
"time": "2015-04-02 17:46:20"
|
"time": "2016-01-12 12:43:31"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "omnipay/securepay",
|
"name": "omnipay/securepay",
|
||||||
@ -5512,6 +5564,54 @@
|
|||||||
],
|
],
|
||||||
"time": "2014-09-17 00:37:18"
|
"time": "2014-09-17 00:37:18"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "paragonie/random_compat",
|
||||||
|
"version": "1.1.5",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/paragonie/random_compat.git",
|
||||||
|
"reference": "dd8998b7c846f6909f4e7a5f67fabebfc412a4f7"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/dd8998b7c846f6909f4e7a5f67fabebfc412a4f7",
|
||||||
|
"reference": "dd8998b7c846f6909f4e7a5f67fabebfc412a4f7",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.2.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "4.*|5.*"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"lib/random.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Paragon Initiative Enterprises",
|
||||||
|
"email": "security@paragonie.com",
|
||||||
|
"homepage": "https://paragonie.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
|
||||||
|
"keywords": [
|
||||||
|
"csprng",
|
||||||
|
"pseudorandom",
|
||||||
|
"random"
|
||||||
|
],
|
||||||
|
"time": "2016-01-06 13:31:20"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "patricktalmadge/bootstrapper",
|
"name": "patricktalmadge/bootstrapper",
|
||||||
"version": "5.5.3",
|
"version": "5.5.3",
|
||||||
@ -6058,28 +6158,28 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/class-loader",
|
"name": "symfony/class-loader",
|
||||||
"version": "v2.8.1",
|
"version": "v3.0.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/class-loader.git",
|
"url": "https://github.com/symfony/class-loader.git",
|
||||||
"reference": "ec74b0a279cf3a9bd36172b3e3061591d380ce6c"
|
"reference": "6294f616bb9888ba2e13c8bfdcc4d306c1c95da7"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/class-loader/zipball/ec74b0a279cf3a9bd36172b3e3061591d380ce6c",
|
"url": "https://api.github.com/repos/symfony/class-loader/zipball/6294f616bb9888ba2e13c8bfdcc4d306c1c95da7",
|
||||||
"reference": "ec74b0a279cf3a9bd36172b3e3061591d380ce6c",
|
"reference": "6294f616bb9888ba2e13c8bfdcc4d306c1c95da7",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.3.9"
|
"php": ">=5.5.9"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"symfony/finder": "~2.0,>=2.0.5|~3.0.0"
|
"symfony/finder": "~2.8|~3.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "2.8-dev"
|
"dev-master": "3.0-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@ -6106,11 +6206,11 @@
|
|||||||
],
|
],
|
||||||
"description": "Symfony ClassLoader Component",
|
"description": "Symfony ClassLoader Component",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"time": "2015-12-05 17:37:59"
|
"time": "2015-12-05 17:45:07"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/console",
|
"name": "symfony/console",
|
||||||
"version": "v2.6.12",
|
"version": "v2.6.13",
|
||||||
"target-dir": "Symfony/Component/Console",
|
"target-dir": "Symfony/Component/Console",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -6168,16 +6268,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/css-selector",
|
"name": "symfony/css-selector",
|
||||||
"version": "v2.8.1",
|
"version": "v2.8.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/css-selector.git",
|
"url": "https://github.com/symfony/css-selector.git",
|
||||||
"reference": "eaa3320e32f09a01dc432c6efbe8051aee59cfef"
|
"reference": "ac06d8173bd80790536c0a4a634a7d705b91f54f"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/css-selector/zipball/eaa3320e32f09a01dc432c6efbe8051aee59cfef",
|
"url": "https://api.github.com/repos/symfony/css-selector/zipball/ac06d8173bd80790536c0a4a634a7d705b91f54f",
|
||||||
"reference": "eaa3320e32f09a01dc432c6efbe8051aee59cfef",
|
"reference": "ac06d8173bd80790536c0a4a634a7d705b91f54f",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -6217,11 +6317,11 @@
|
|||||||
],
|
],
|
||||||
"description": "Symfony CssSelector Component",
|
"description": "Symfony CssSelector Component",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"time": "2015-12-05 17:37:59"
|
"time": "2016-01-03 15:33:41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/debug",
|
"name": "symfony/debug",
|
||||||
"version": "v2.6.12",
|
"version": "v2.6.13",
|
||||||
"target-dir": "Symfony/Component/Debug",
|
"target-dir": "Symfony/Component/Debug",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -6282,16 +6382,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/event-dispatcher",
|
"name": "symfony/event-dispatcher",
|
||||||
"version": "v2.8.1",
|
"version": "v2.8.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/event-dispatcher.git",
|
"url": "https://github.com/symfony/event-dispatcher.git",
|
||||||
"reference": "a5eb815363c0388e83247e7e9853e5dbc14999cc"
|
"reference": "ee278f7c851533e58ca307f66305ccb9188aceda"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a5eb815363c0388e83247e7e9853e5dbc14999cc",
|
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ee278f7c851533e58ca307f66305ccb9188aceda",
|
||||||
"reference": "a5eb815363c0388e83247e7e9853e5dbc14999cc",
|
"reference": "ee278f7c851533e58ca307f66305ccb9188aceda",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -6338,20 +6438,20 @@
|
|||||||
],
|
],
|
||||||
"description": "Symfony EventDispatcher Component",
|
"description": "Symfony EventDispatcher Component",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"time": "2015-10-30 20:15:42"
|
"time": "2016-01-13 10:28:07"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/filesystem",
|
"name": "symfony/filesystem",
|
||||||
"version": "v2.8.1",
|
"version": "v2.8.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/filesystem.git",
|
"url": "https://github.com/symfony/filesystem.git",
|
||||||
"reference": "a7ad724530a764d70c168d321ac226ba3d2f10fc"
|
"reference": "637b64d0ee10f44ae98dbad651b1ecdf35a11e8c"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/filesystem/zipball/a7ad724530a764d70c168d321ac226ba3d2f10fc",
|
"url": "https://api.github.com/repos/symfony/filesystem/zipball/637b64d0ee10f44ae98dbad651b1ecdf35a11e8c",
|
||||||
"reference": "a7ad724530a764d70c168d321ac226ba3d2f10fc",
|
"reference": "637b64d0ee10f44ae98dbad651b1ecdf35a11e8c",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -6387,11 +6487,11 @@
|
|||||||
],
|
],
|
||||||
"description": "Symfony Filesystem Component",
|
"description": "Symfony Filesystem Component",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"time": "2015-12-22 10:25:57"
|
"time": "2016-01-13 10:28:07"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/finder",
|
"name": "symfony/finder",
|
||||||
"version": "v2.6.12",
|
"version": "v2.6.13",
|
||||||
"target-dir": "Symfony/Component/Finder",
|
"target-dir": "Symfony/Component/Finder",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -6441,7 +6541,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/http-foundation",
|
"name": "symfony/http-foundation",
|
||||||
"version": "v2.6.12",
|
"version": "v2.6.13",
|
||||||
"target-dir": "Symfony/Component/HttpFoundation",
|
"target-dir": "Symfony/Component/HttpFoundation",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -6495,17 +6595,17 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/http-kernel",
|
"name": "symfony/http-kernel",
|
||||||
"version": "v2.6.12",
|
"version": "v2.6.13",
|
||||||
"target-dir": "Symfony/Component/HttpKernel",
|
"target-dir": "Symfony/Component/HttpKernel",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/http-kernel.git",
|
"url": "https://github.com/symfony/http-kernel.git",
|
||||||
"reference": "498866a8ca0bcbcd3f3824b1520fa568ff7ca3b6"
|
"reference": "cdd991d304fed833514dc44d6aafcf19397c26cb"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/498866a8ca0bcbcd3f3824b1520fa568ff7ca3b6",
|
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/cdd991d304fed833514dc44d6aafcf19397c26cb",
|
||||||
"reference": "498866a8ca0bcbcd3f3824b1520fa568ff7ca3b6",
|
"reference": "cdd991d304fed833514dc44d6aafcf19397c26cb",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -6569,7 +6669,7 @@
|
|||||||
],
|
],
|
||||||
"description": "Symfony HttpKernel Component",
|
"description": "Symfony HttpKernel Component",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"time": "2015-11-23 11:37:53"
|
"time": "2016-01-14 10:11:16"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-php56",
|
"name": "symfony/polyfill-php56",
|
||||||
@ -6681,7 +6781,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/process",
|
"name": "symfony/process",
|
||||||
"version": "v2.6.12",
|
"version": "v2.6.13",
|
||||||
"target-dir": "Symfony/Component/Process",
|
"target-dir": "Symfony/Component/Process",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -6731,7 +6831,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/routing",
|
"name": "symfony/routing",
|
||||||
"version": "v2.6.12",
|
"version": "v2.6.13",
|
||||||
"target-dir": "Symfony/Component/Routing",
|
"target-dir": "Symfony/Component/Routing",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -6800,20 +6900,21 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/security-core",
|
"name": "symfony/security-core",
|
||||||
"version": "v2.6.12",
|
"version": "v2.6.13",
|
||||||
"target-dir": "Symfony/Component/Security/Core",
|
"target-dir": "Symfony/Component/Security/Core",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/security-core.git",
|
"url": "https://github.com/symfony/security-core.git",
|
||||||
"reference": "05f58bb3814e8a853332dc448e3b7addaa87679c"
|
"reference": "813cf2aaacccbbe1a4705aef8d4ac0d79d993a76"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/security-core/zipball/05f58bb3814e8a853332dc448e3b7addaa87679c",
|
"url": "https://api.github.com/repos/symfony/security-core/zipball/813cf2aaacccbbe1a4705aef8d4ac0d79d993a76",
|
||||||
"reference": "05f58bb3814e8a853332dc448e3b7addaa87679c",
|
"reference": "813cf2aaacccbbe1a4705aef8d4ac0d79d993a76",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
"paragonie/random_compat": "~1.0",
|
||||||
"php": ">=5.3.3"
|
"php": ">=5.3.3"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
@ -6860,11 +6961,11 @@
|
|||||||
],
|
],
|
||||||
"description": "Symfony Security Component - Core Library",
|
"description": "Symfony Security Component - Core Library",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"time": "2015-07-22 10:08:40"
|
"time": "2016-01-14 09:04:34"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/translation",
|
"name": "symfony/translation",
|
||||||
"version": "v2.6.12",
|
"version": "v2.6.13",
|
||||||
"target-dir": "Symfony/Component/Translation",
|
"target-dir": "Symfony/Component/Translation",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -6923,7 +7024,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/var-dumper",
|
"name": "symfony/var-dumper",
|
||||||
"version": "v2.6.12",
|
"version": "v2.6.13",
|
||||||
"target-dir": "Symfony/Component/VarDumper",
|
"target-dir": "Symfony/Component/VarDumper",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -7030,16 +7131,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "true/punycode",
|
"name": "true/punycode",
|
||||||
"version": "v2.0.1",
|
"version": "v2.0.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/true/php-punycode.git",
|
"url": "https://github.com/true/php-punycode.git",
|
||||||
"reference": "b672918d992b84f8016bbe353a42516928393c63"
|
"reference": "74fa01d4de396c40e239794123b3874cb594a30c"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/true/php-punycode/zipball/b672918d992b84f8016bbe353a42516928393c63",
|
"url": "https://api.github.com/repos/true/php-punycode/zipball/74fa01d4de396c40e239794123b3874cb594a30c",
|
||||||
"reference": "b672918d992b84f8016bbe353a42516928393c63",
|
"reference": "74fa01d4de396c40e239794123b3874cb594a30c",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -7072,7 +7173,7 @@
|
|||||||
"idna",
|
"idna",
|
||||||
"punycode"
|
"punycode"
|
||||||
],
|
],
|
||||||
"time": "2015-09-01 14:53:31"
|
"time": "2016-01-07 17:12:58"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "twbs/bootstrap",
|
"name": "twbs/bootstrap",
|
||||||
@ -7347,16 +7448,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "zircote/swagger-php",
|
"name": "zircote/swagger-php",
|
||||||
"version": "2.0.4",
|
"version": "2.0.5",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/zircote/swagger-php.git",
|
"url": "https://github.com/zircote/swagger-php.git",
|
||||||
"reference": "be5d96e56c23cbe52c5bc5e267851323d95c57cd"
|
"reference": "c19af4edcc13c00e82fabeee926335b1fe1d92e9"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/zircote/swagger-php/zipball/be5d96e56c23cbe52c5bc5e267851323d95c57cd",
|
"url": "https://api.github.com/repos/zircote/swagger-php/zipball/c19af4edcc13c00e82fabeee926335b1fe1d92e9",
|
||||||
"reference": "be5d96e56c23cbe52c5bc5e267851323d95c57cd",
|
"reference": "c19af4edcc13c00e82fabeee926335b1fe1d92e9",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -7403,7 +7504,7 @@
|
|||||||
"rest",
|
"rest",
|
||||||
"service discovery"
|
"service discovery"
|
||||||
],
|
],
|
||||||
"time": "2015-11-13 13:50:11"
|
"time": "2016-01-15 09:39:28"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"packages-dev": [
|
"packages-dev": [
|
||||||
@ -7593,16 +7694,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "facebook/webdriver",
|
"name": "facebook/webdriver",
|
||||||
"version": "1.1.0",
|
"version": "1.1.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/facebook/php-webdriver.git",
|
"url": "https://github.com/facebook/php-webdriver.git",
|
||||||
"reference": "518a9e0635e69777f07e41619cdf5d82fae284b6"
|
"reference": "1c98108ba3eb435b681655764de11502a0653705"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/facebook/php-webdriver/zipball/518a9e0635e69777f07e41619cdf5d82fae284b6",
|
"url": "https://api.github.com/repos/facebook/php-webdriver/zipball/1c98108ba3eb435b681655764de11502a0653705",
|
||||||
"reference": "518a9e0635e69777f07e41619cdf5d82fae284b6",
|
"reference": "1c98108ba3eb435b681655764de11502a0653705",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -7632,7 +7733,7 @@
|
|||||||
"selenium",
|
"selenium",
|
||||||
"webdriver"
|
"webdriver"
|
||||||
],
|
],
|
||||||
"time": "2015-12-08 17:04:30"
|
"time": "2015-12-31 15:58:49"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "fzaninotto/faker",
|
"name": "fzaninotto/faker",
|
||||||
@ -7722,16 +7823,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpspec/phpspec",
|
"name": "phpspec/phpspec",
|
||||||
"version": "2.4.0",
|
"version": "2.4.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/phpspec/phpspec.git",
|
"url": "https://github.com/phpspec/phpspec.git",
|
||||||
"reference": "1d3938e6d9ffb1bd4805ea8ddac62ea48767f358"
|
"reference": "5528ce1e93a1efa090c9404aba3395c329b4e6ed"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/phpspec/phpspec/zipball/1d3938e6d9ffb1bd4805ea8ddac62ea48767f358",
|
"url": "https://api.github.com/repos/phpspec/phpspec/zipball/5528ce1e93a1efa090c9404aba3395c329b4e6ed",
|
||||||
"reference": "1d3938e6d9ffb1bd4805ea8ddac62ea48767f358",
|
"reference": "5528ce1e93a1efa090c9404aba3395c329b4e6ed",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -7796,7 +7897,7 @@
|
|||||||
"testing",
|
"testing",
|
||||||
"tests"
|
"tests"
|
||||||
],
|
],
|
||||||
"time": "2015-11-29 02:03:49"
|
"time": "2016-01-01 10:17:54"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpspec/prophecy",
|
"name": "phpspec/prophecy",
|
||||||
@ -8599,16 +8700,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/browser-kit",
|
"name": "symfony/browser-kit",
|
||||||
"version": "v2.8.1",
|
"version": "v2.8.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/browser-kit.git",
|
"url": "https://github.com/symfony/browser-kit.git",
|
||||||
"reference": "dd2cfb20fabd4efca14cf3b2345d40b3dd5e9aca"
|
"reference": "a93dffaf763182acad12a4c42c7efc372899891e"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/browser-kit/zipball/dd2cfb20fabd4efca14cf3b2345d40b3dd5e9aca",
|
"url": "https://api.github.com/repos/symfony/browser-kit/zipball/a93dffaf763182acad12a4c42c7efc372899891e",
|
||||||
"reference": "dd2cfb20fabd4efca14cf3b2345d40b3dd5e9aca",
|
"reference": "a93dffaf763182acad12a4c42c7efc372899891e",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -8652,20 +8753,20 @@
|
|||||||
],
|
],
|
||||||
"description": "Symfony BrowserKit Component",
|
"description": "Symfony BrowserKit Component",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"time": "2015-12-26 13:37:56"
|
"time": "2016-01-12 17:46:01"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/dom-crawler",
|
"name": "symfony/dom-crawler",
|
||||||
"version": "v2.8.1",
|
"version": "v2.8.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/dom-crawler.git",
|
"url": "https://github.com/symfony/dom-crawler.git",
|
||||||
"reference": "a2712aff8b250d9601ad6bd23a2ff82a12730e8e"
|
"reference": "650d37aacb1fa0dcc24cced483169852b3a0594e"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/a2712aff8b250d9601ad6bd23a2ff82a12730e8e",
|
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/650d37aacb1fa0dcc24cced483169852b3a0594e",
|
||||||
"reference": "a2712aff8b250d9601ad6bd23a2ff82a12730e8e",
|
"reference": "650d37aacb1fa0dcc24cced483169852b3a0594e",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -8708,7 +8809,7 @@
|
|||||||
],
|
],
|
||||||
"description": "Symfony DomCrawler Component",
|
"description": "Symfony DomCrawler Component",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"time": "2015-12-23 17:16:29"
|
"time": "2016-01-03 15:33:41"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-mbstring",
|
"name": "symfony/polyfill-mbstring",
|
||||||
@ -8771,16 +8872,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/yaml",
|
"name": "symfony/yaml",
|
||||||
"version": "v2.8.1",
|
"version": "v2.8.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/yaml.git",
|
"url": "https://github.com/symfony/yaml.git",
|
||||||
"reference": "ac84cbb98b68a6abbc9f5149eb96ccc7b07b8966"
|
"reference": "34c8a4b51e751e7ea869b8262f883d008a2b81b8"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/yaml/zipball/ac84cbb98b68a6abbc9f5149eb96ccc7b07b8966",
|
"url": "https://api.github.com/repos/symfony/yaml/zipball/34c8a4b51e751e7ea869b8262f883d008a2b81b8",
|
||||||
"reference": "ac84cbb98b68a6abbc9f5149eb96ccc7b07b8966",
|
"reference": "34c8a4b51e751e7ea869b8262f883d008a2b81b8",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -8816,7 +8917,7 @@
|
|||||||
],
|
],
|
||||||
"description": "Symfony Yaml Component",
|
"description": "Symfony Yaml Component",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"time": "2015-12-26 13:37:56"
|
"time": "2016-01-13 10:28:07"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"aliases": [],
|
"aliases": [],
|
||||||
@ -8829,6 +8930,7 @@
|
|||||||
"chumper/datatable": 20,
|
"chumper/datatable": 20,
|
||||||
"intervention/image": 20,
|
"intervention/image": 20,
|
||||||
"webpatser/laravel-countries": 20,
|
"webpatser/laravel-countries": 20,
|
||||||
|
"barryvdh/laravel-ide-helper": 20,
|
||||||
"lokielse/omnipay-alipay": 20,
|
"lokielse/omnipay-alipay": 20,
|
||||||
"alfaproject/omnipay-neteller": 20,
|
"alfaproject/omnipay-neteller": 20,
|
||||||
"alfaproject/omnipay-skrill": 20,
|
"alfaproject/omnipay-skrill": 20,
|
||||||
@ -8851,4 +8953,4 @@
|
|||||||
"prefer-lowest": false,
|
"prefer-lowest": false,
|
||||||
"platform": [],
|
"platform": [],
|
||||||
"platform-dev": []
|
"platform-dev": []
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,69 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
|
||||||
|
class AddBankSubaccounts extends Migration {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create('bank_subaccounts', function($table)
|
||||||
|
{
|
||||||
|
$table->increments('id');
|
||||||
|
$table->unsignedInteger('account_id');
|
||||||
|
$table->unsignedInteger('user_id');
|
||||||
|
$table->unsignedInteger('bank_account_id');
|
||||||
|
|
||||||
|
$table->string('account_name');
|
||||||
|
$table->string('account_number');
|
||||||
|
|
||||||
|
$table->timestamps();
|
||||||
|
$table->softDeletes();
|
||||||
|
|
||||||
|
$table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||||
|
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||||
|
$table->foreign('bank_account_id')->references('id')->on('bank_accounts')->onDelete('cascade');
|
||||||
|
|
||||||
|
$table->unsignedInteger('public_id')->index();
|
||||||
|
$table->unique(['account_id', 'public_id']);
|
||||||
|
});
|
||||||
|
|
||||||
|
Schema::table('expenses', function($table)
|
||||||
|
{
|
||||||
|
$table->string('transaction_id');
|
||||||
|
$table->unsignedInteger('bank_id');
|
||||||
|
});
|
||||||
|
|
||||||
|
Schema::table('vendors', function($table)
|
||||||
|
{
|
||||||
|
$table->string('transaction_name');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::drop('bank_subaccounts');
|
||||||
|
|
||||||
|
Schema::table('expenses', function($table)
|
||||||
|
{
|
||||||
|
$table->dropColumn('transaction_id');
|
||||||
|
$table->dropColumn('bank_id');
|
||||||
|
});
|
||||||
|
|
||||||
|
Schema::table('vendors', function($table)
|
||||||
|
{
|
||||||
|
$table->dropColumn('transaction_name');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
5
public/css/built.css
vendored
5
public/css/built.css
vendored
@ -3385,4 +3385,9 @@ ul.user-accounts a:hover div.remove {
|
|||||||
|
|
||||||
div.panel-body div.panel-body {
|
div.panel-body div.panel-body {
|
||||||
padding-bottom: 0px;
|
padding-bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vcenter {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
|
||||||
@ -17,4 +17,4 @@ return array(
|
|||||||
|
|
||||||
'next' => 'Næste »',
|
'next' => 'Næste »',
|
||||||
|
|
||||||
);
|
);
|
||||||
|
@ -989,5 +989,126 @@
|
|||||||
'email_designs' => 'Email Designs',
|
'email_designs' => 'Email Designs',
|
||||||
'assigned_when_sent' => 'Assigned when sent',
|
'assigned_when_sent' => 'Assigned when sent',
|
||||||
|
|
||||||
|
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.',
|
||||||
|
'white_label_purchase_link' => 'Purchase a white label license',
|
||||||
|
|
||||||
);
|
// Expense / vendor
|
||||||
|
'expense' => 'Expense',
|
||||||
|
'expenses' => 'Expenses',
|
||||||
|
'new_expense' => 'Enter Expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'vendors' => 'Vendors',
|
||||||
|
'new_vendor' => 'Create Vendor',
|
||||||
|
'payment_terms_net' => 'Net',
|
||||||
|
'vendor' => 'Vendor',
|
||||||
|
'edit_vendor' => 'Edit Vendor',
|
||||||
|
'archive_vendor' => 'Archive Vendor',
|
||||||
|
'delete_vendor' => 'Delete Vendor',
|
||||||
|
'view_vendor' => 'View Vendor',
|
||||||
|
'deleted_expense' => 'Successfully deleted expense',
|
||||||
|
'archived_expense' => 'Successfully archived expense',
|
||||||
|
'deleted_expenses' => 'Successfully deleted expenses',
|
||||||
|
'archived_expenses' => 'Successfully archived expenses',
|
||||||
|
|
||||||
|
// Expenses
|
||||||
|
'expense_amount' => 'Expense Amount',
|
||||||
|
'expense_balance' => 'Expense Balance',
|
||||||
|
'expense_date' => 'Expense Date',
|
||||||
|
'expense_should_be_invoiced' => 'Should this expense be invoiced?',
|
||||||
|
'public_notes' => 'Public Notes',
|
||||||
|
'invoice_amount' => 'Invoice Amount',
|
||||||
|
'exchange_rate' => 'Exchange Rate',
|
||||||
|
'yes' => 'Yes',
|
||||||
|
'no' => 'No',
|
||||||
|
'should_be_invoiced' => 'Should be invoiced',
|
||||||
|
'view_expense' => 'View expense # :expense',
|
||||||
|
'edit_expense' => 'Edit Expense',
|
||||||
|
'archive_expense' => 'Archive Expense',
|
||||||
|
'delete_expense' => 'Delete Expense',
|
||||||
|
'view_expense_num' => 'Expense # :expense',
|
||||||
|
'updated_expense' => 'Successfully updated expense',
|
||||||
|
'created_expense' => 'Successfully created expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'view' => 'View',
|
||||||
|
'restore_expense' => 'Restore Expense',
|
||||||
|
'invoice_expense' => 'Invoice Expense',
|
||||||
|
'expense_error_multiple_clients' =>'The expenses can\'t belong to different clients',
|
||||||
|
'expense_error_invoiced' => 'Expense has already been invoiced',
|
||||||
|
'convert_currency' => 'Convert currency',
|
||||||
|
|
||||||
|
// Payment terms
|
||||||
|
'num_days' => 'Number of days',
|
||||||
|
'create_payment_term' => 'Create Payment Term',
|
||||||
|
'edit_payment_terms' => 'Edit Payment Term',
|
||||||
|
'edit_payment_term' => 'Edit Payment Term',
|
||||||
|
'archive_payment_term' => 'Archive Payment Term',
|
||||||
|
|
||||||
|
// recurring due dates
|
||||||
|
'recurring_due_dates' => 'Recurring Invoice Due Dates',
|
||||||
|
'recurring_due_date_help' => '<p>Automatically sets a due date for the invoice.</p>
|
||||||
|
<p>Invoices on a monthly or yearly cycle set to be due on or before the day they are created will be due the next month. Invoices set to be due on the 29th or 30th in months that don\'t have that day will be due the last day of the month.</p>
|
||||||
|
<p>Invoices on a weekly cycle set to be due on the day of the week they are created will be due the next week.</p>
|
||||||
|
<p>For example:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Today is the 15th, due date is 1st of the month. The due date should likely be the 1st of the next month.</li>
|
||||||
|
<li>Today is the 15th, due date is the last day of the month. The due date will be the last day of the this month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the 15th, due date is the 15th day of the month. The due date will be the 15th day of <strong>next</strong> month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the Friday, due date is the 1st Friday after. The due date will be next Friday, not today.
|
||||||
|
</li>
|
||||||
|
</ul>',
|
||||||
|
'due' => 'Due',
|
||||||
|
'next_due_on' => 'Due Next: :date',
|
||||||
|
'use_client_terms' => 'Use client terms',
|
||||||
|
'day_of_month' => ':ordinal day of month',
|
||||||
|
'last_day_of_month' => 'Last day of month',
|
||||||
|
'day_of_week_after' => ':ordinal :day after',
|
||||||
|
'sunday' => 'Sunday',
|
||||||
|
'monday' => 'Monday',
|
||||||
|
'tuesday' => 'Tuesday',
|
||||||
|
'wednesday' => 'Wednesday',
|
||||||
|
'thursday' => 'Thursday',
|
||||||
|
'friday' => 'Friday',
|
||||||
|
'saturday' => 'Saturday',
|
||||||
|
|
||||||
|
// Fonts
|
||||||
|
'header_font_id' => 'Header Font',
|
||||||
|
'body_font_id' => 'Body Font',
|
||||||
|
'color_font_help' => 'Note: the primary color and fonts are also used in the client portal and custom email designs.',
|
||||||
|
|
||||||
|
'live_preview' => 'Live Preview',
|
||||||
|
'invalid_mail_config' => 'Unable to send email, please check that the mail settings are correct.',
|
||||||
|
|
||||||
|
'invoice_message_button' => 'To view your invoice for :amount, click the button below.',
|
||||||
|
'quote_message_button' => 'To view your quote for :amount, click the button below.',
|
||||||
|
'payment_message_button' => 'Thank you for your payment of :amount.',
|
||||||
|
'payment_type_direct_debit' => 'Direct Debit',
|
||||||
|
'bank_accounts' => 'Bank Accounts',
|
||||||
|
'add_bank_account' => 'Add Bank Account',
|
||||||
|
'setup_account' => 'Setup Account',
|
||||||
|
'import_expenses' => 'Import Expenses',
|
||||||
|
'bank_id' => 'bank',
|
||||||
|
'integration_type' => 'Integration Type',
|
||||||
|
'updated_bank_account' => 'Successfully updated bank account',
|
||||||
|
'edit_bank_account' => 'Edit Bank Account',
|
||||||
|
'archive_bank_account' => 'Archive Bank Account',
|
||||||
|
'archived_bank_account' => 'Successfully archived bank account',
|
||||||
|
'created_bank_account' => 'Successfully created bank account',
|
||||||
|
'validate_bank_account' => 'Validate Bank Account',
|
||||||
|
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>',
|
||||||
|
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
|
||||||
|
'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.',
|
||||||
|
'username' => 'Username',
|
||||||
|
'account_number' => 'Account Number',
|
||||||
|
'account_name' => 'Account Name',
|
||||||
|
'bank_account_error' => 'Failed to retreive account details, please check your credentials.',
|
||||||
|
'status_approved' => 'Approved',
|
||||||
|
'quote_settings' => 'Quote Settings',
|
||||||
|
'auto_convert_quote' => 'Auto convert quote',
|
||||||
|
'auto_convert_quote_help' => 'Automatically convert a quote to an invoice when approved by a client.',
|
||||||
|
'validate' => 'Validate',
|
||||||
|
'info' => 'Info',
|
||||||
|
'imported_expenses' => 'Successfully created :count_vendors vendor(s) and :count_expenses expense(s)',
|
||||||
|
|
||||||
|
);
|
@ -25,7 +25,7 @@ return array(
|
|||||||
"numeric" => ":attribute skal være imellem :min - :max.",
|
"numeric" => ":attribute skal være imellem :min - :max.",
|
||||||
"file" => ":attribute skal være imellem :min - :max kilobytes.",
|
"file" => ":attribute skal være imellem :min - :max kilobytes.",
|
||||||
"string" => ":attribute skal være imellem :min - :max tegn.",
|
"string" => ":attribute skal være imellem :min - :max tegn.",
|
||||||
"array" => ":attribute skal indeholde mellem :min - :max elementer."
|
"array" => ":attribute skal indeholde mellem :min - :max elementer.",
|
||||||
),
|
),
|
||||||
"boolean" => ":attribute skal være sandt eller falsk",
|
"boolean" => ":attribute skal være sandt eller falsk",
|
||||||
"confirmed" => ":attribute er ikke det samme som bekræftelsesfeltet.",
|
"confirmed" => ":attribute er ikke det samme som bekræftelsesfeltet.",
|
||||||
@ -44,14 +44,14 @@ return array(
|
|||||||
"numeric" => ":attribute skal være højest :max.",
|
"numeric" => ":attribute skal være højest :max.",
|
||||||
"file" => ":attribute skal være højest :max kilobytes.",
|
"file" => ":attribute skal være højest :max kilobytes.",
|
||||||
"string" => ":attribute skal være højest :max tegn.",
|
"string" => ":attribute skal være højest :max tegn.",
|
||||||
"array" => ":attribute må ikke indeholde mere end :max elementer."
|
"array" => ":attribute må ikke indeholde mere end :max elementer.",
|
||||||
),
|
),
|
||||||
"mimes" => ":attribute skal være en fil af typen: :values.",
|
"mimes" => ":attribute skal være en fil af typen: :values.",
|
||||||
"min" => array(
|
"min" => array(
|
||||||
"numeric" => ":attribute skal være mindst :min.",
|
"numeric" => ":attribute skal være mindst :min.",
|
||||||
"file" => ":attribute skal være mindst :min kilobytes.",
|
"file" => ":attribute skal være mindst :min kilobytes.",
|
||||||
"string" => ":attribute skal være mindst :min tegn.",
|
"string" => ":attribute skal være mindst :min tegn.",
|
||||||
"array" => ":attribute skal indeholde mindst :min elementer."
|
"array" => ":attribute skal indeholde mindst :min elementer.",
|
||||||
),
|
),
|
||||||
"not_in" => "Den valgte :attribute er ugyldig.",
|
"not_in" => "Den valgte :attribute er ugyldig.",
|
||||||
"numeric" => ":attribute skal være et tal.",
|
"numeric" => ":attribute skal være et tal.",
|
||||||
@ -67,7 +67,7 @@ return array(
|
|||||||
"numeric" => ":attribute skal være :size.",
|
"numeric" => ":attribute skal være :size.",
|
||||||
"file" => ":attribute skal være :size kilobytes.",
|
"file" => ":attribute skal være :size kilobytes.",
|
||||||
"string" => ":attribute skal være :size tegn lang.",
|
"string" => ":attribute skal være :size tegn lang.",
|
||||||
"array" => ":attribute skal indeholde :size elementer."
|
"array" => ":attribute skal indeholde :size elementer.",
|
||||||
),
|
),
|
||||||
"timezone" => "The :attribute must be a valid zone.",
|
"timezone" => "The :attribute must be a valid zone.",
|
||||||
"unique" => ":attribute er allerede taget.",
|
"unique" => ":attribute er allerede taget.",
|
||||||
@ -80,7 +80,7 @@ return array(
|
|||||||
"has_counter" => 'The value must contain {$counter}',
|
"has_counter" => 'The value must contain {$counter}',
|
||||||
"valid_contacts" => "All of the contacts must have either an email or name",
|
"valid_contacts" => "All of the contacts must have either an email or name",
|
||||||
"valid_invoice_items" => "The invoice exceeds the maximum amount",
|
"valid_invoice_items" => "The invoice exceeds the maximum amount",
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Custom Validation Language Lines
|
| Custom Validation Language Lines
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
|
||||||
|
@ -271,8 +271,7 @@ return array(
|
|||||||
'notification_invoice_sent' => 'Dem Kunden :client wurde die Rechnung :invoice über :amount versendet.',
|
'notification_invoice_sent' => 'Dem Kunden :client wurde die Rechnung :invoice über :amount versendet.',
|
||||||
'notification_invoice_viewed' => 'Der Kunde :client hat sich die Rechnung :invoice über :amount angesehen.',
|
'notification_invoice_viewed' => 'Der Kunde :client hat sich die Rechnung :invoice über :amount angesehen.',
|
||||||
'reset_password' => 'Du kannst dein Passwort zurücksetzen, indem du auf den folgenden Link klickst:',
|
'reset_password' => 'Du kannst dein Passwort zurücksetzen, indem du auf den folgenden Link klickst:',
|
||||||
'reset_password_footer' => 'Wenn du das Zurücksetzen des Passworts nicht beantragt hast, benachrichtige bitte unseren Support: ' . CONTACT_EMAIL,
|
'reset_password_footer' => 'Wenn du das Zurücksetzen des Passworts nicht beantragt hast, benachrichtige bitte unseren Support: '.CONTACT_EMAIL,
|
||||||
|
|
||||||
|
|
||||||
// Payment page
|
// Payment page
|
||||||
'secure_payment' => 'Sichere Zahlung',
|
'secure_payment' => 'Sichere Zahlung',
|
||||||
@ -300,7 +299,7 @@ return array(
|
|||||||
|
|
||||||
'logout' => 'Ausloggen',
|
'logout' => 'Ausloggen',
|
||||||
'sign_up_to_save' => 'Melde dich an, um deine Arbeit zu speichern',
|
'sign_up_to_save' => 'Melde dich an, um deine Arbeit zu speichern',
|
||||||
'agree_to_terms' =>'Ich akzeptiere die InvoiceNinja :terms',
|
'agree_to_terms' => 'Ich akzeptiere die InvoiceNinja :terms',
|
||||||
'terms_of_service' => 'Service-Bedingungen',
|
'terms_of_service' => 'Service-Bedingungen',
|
||||||
'email_taken' => 'Diese E-Mail-Adresse ist bereits registriert',
|
'email_taken' => 'Diese E-Mail-Adresse ist bereits registriert',
|
||||||
'working' => 'Wird bearbeitet',
|
'working' => 'Wird bearbeitet',
|
||||||
@ -420,7 +419,7 @@ return array(
|
|||||||
'active' => 'Aktiv',
|
'active' => 'Aktiv',
|
||||||
'pending' => 'Ausstehend',
|
'pending' => 'Ausstehend',
|
||||||
'deleted_user' => 'Benutzer erfolgreich gelöscht',
|
'deleted_user' => 'Benutzer erfolgreich gelöscht',
|
||||||
'limit_users' => 'Entschuldige, das würde das Limit von ' . MAX_NUM_USERS . ' Benutzern überschreiten',
|
'limit_users' => 'Entschuldige, das würde das Limit von '.MAX_NUM_USERS.' Benutzern überschreiten',
|
||||||
|
|
||||||
'confirm_email_invoice' => 'Bist du sicher, dass du diese Rechnung per E-Mail versenden möchtest?',
|
'confirm_email_invoice' => 'Bist du sicher, dass du diese Rechnung per E-Mail versenden möchtest?',
|
||||||
'confirm_email_quote' => 'Bist du sicher, dass du dieses Angebot per E-Mail versenden möchtest',
|
'confirm_email_quote' => 'Bist du sicher, dass du dieses Angebot per E-Mail versenden möchtest',
|
||||||
@ -990,5 +989,127 @@ return array(
|
|||||||
'schedule' => 'Schedule',
|
'schedule' => 'Schedule',
|
||||||
'email_designs' => 'Email Designs',
|
'email_designs' => 'Email Designs',
|
||||||
'assigned_when_sent' => 'Assigned when sent',
|
'assigned_when_sent' => 'Assigned when sent',
|
||||||
|
|
||||||
);
|
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.',
|
||||||
|
'white_label_purchase_link' => 'Purchase a white label license',
|
||||||
|
|
||||||
|
// Expense / vendor
|
||||||
|
'expense' => 'Expense',
|
||||||
|
'expenses' => 'Expenses',
|
||||||
|
'new_expense' => 'Enter Expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'vendors' => 'Vendors',
|
||||||
|
'new_vendor' => 'Create Vendor',
|
||||||
|
'payment_terms_net' => 'Net',
|
||||||
|
'vendor' => 'Vendor',
|
||||||
|
'edit_vendor' => 'Edit Vendor',
|
||||||
|
'archive_vendor' => 'Archive Vendor',
|
||||||
|
'delete_vendor' => 'Delete Vendor',
|
||||||
|
'view_vendor' => 'View Vendor',
|
||||||
|
'deleted_expense' => 'Successfully deleted expense',
|
||||||
|
'archived_expense' => 'Successfully archived expense',
|
||||||
|
'deleted_expenses' => 'Successfully deleted expenses',
|
||||||
|
'archived_expenses' => 'Successfully archived expenses',
|
||||||
|
|
||||||
|
// Expenses
|
||||||
|
'expense_amount' => 'Expense Amount',
|
||||||
|
'expense_balance' => 'Expense Balance',
|
||||||
|
'expense_date' => 'Expense Date',
|
||||||
|
'expense_should_be_invoiced' => 'Should this expense be invoiced?',
|
||||||
|
'public_notes' => 'Public Notes',
|
||||||
|
'invoice_amount' => 'Invoice Amount',
|
||||||
|
'exchange_rate' => 'Exchange Rate',
|
||||||
|
'yes' => 'Yes',
|
||||||
|
'no' => 'No',
|
||||||
|
'should_be_invoiced' => 'Should be invoiced',
|
||||||
|
'view_expense' => 'View expense # :expense',
|
||||||
|
'edit_expense' => 'Edit Expense',
|
||||||
|
'archive_expense' => 'Archive Expense',
|
||||||
|
'delete_expense' => 'Delete Expense',
|
||||||
|
'view_expense_num' => 'Expense # :expense',
|
||||||
|
'updated_expense' => 'Successfully updated expense',
|
||||||
|
'created_expense' => 'Successfully created expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'view' => 'View',
|
||||||
|
'restore_expense' => 'Restore Expense',
|
||||||
|
'invoice_expense' => 'Invoice Expense',
|
||||||
|
'expense_error_multiple_clients' => 'The expenses can\'t belong to different clients',
|
||||||
|
'expense_error_invoiced' => 'Expense has already been invoiced',
|
||||||
|
'convert_currency' => 'Convert currency',
|
||||||
|
|
||||||
|
// Payment terms
|
||||||
|
'num_days' => 'Number of days',
|
||||||
|
'create_payment_term' => 'Create Payment Term',
|
||||||
|
'edit_payment_terms' => 'Edit Payment Term',
|
||||||
|
'edit_payment_term' => 'Edit Payment Term',
|
||||||
|
'archive_payment_term' => 'Archive Payment Term',
|
||||||
|
|
||||||
|
// recurring due dates
|
||||||
|
'recurring_due_dates' => 'Recurring Invoice Due Dates',
|
||||||
|
'recurring_due_date_help' => '<p>Automatically sets a due date for the invoice.</p>
|
||||||
|
<p>Invoices on a monthly or yearly cycle set to be due on or before the day they are created will be due the next month. Invoices set to be due on the 29th or 30th in months that don\'t have that day will be due the last day of the month.</p>
|
||||||
|
<p>Invoices on a weekly cycle set to be due on the day of the week they are created will be due the next week.</p>
|
||||||
|
<p>For example:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Today is the 15th, due date is 1st of the month. The due date should likely be the 1st of the next month.</li>
|
||||||
|
<li>Today is the 15th, due date is the last day of the month. The due date will be the last day of the this month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the 15th, due date is the 15th day of the month. The due date will be the 15th day of <strong>next</strong> month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the Friday, due date is the 1st Friday after. The due date will be next Friday, not today.
|
||||||
|
</li>
|
||||||
|
</ul>',
|
||||||
|
'due' => 'Due',
|
||||||
|
'next_due_on' => 'Due Next: :date',
|
||||||
|
'use_client_terms' => 'Use client terms',
|
||||||
|
'day_of_month' => ':ordinal day of month',
|
||||||
|
'last_day_of_month' => 'Last day of month',
|
||||||
|
'day_of_week_after' => ':ordinal :day after',
|
||||||
|
'sunday' => 'Sunday',
|
||||||
|
'monday' => 'Monday',
|
||||||
|
'tuesday' => 'Tuesday',
|
||||||
|
'wednesday' => 'Wednesday',
|
||||||
|
'thursday' => 'Thursday',
|
||||||
|
'friday' => 'Friday',
|
||||||
|
'saturday' => 'Saturday',
|
||||||
|
|
||||||
|
// Fonts
|
||||||
|
'header_font_id' => 'Header Font',
|
||||||
|
'body_font_id' => 'Body Font',
|
||||||
|
'color_font_help' => 'Note: the primary color and fonts are also used in the client portal and custom email designs.',
|
||||||
|
|
||||||
|
'live_preview' => 'Live Preview',
|
||||||
|
'invalid_mail_config' => 'Unable to send email, please check that the mail settings are correct.',
|
||||||
|
|
||||||
|
'invoice_message_button' => 'To view your invoice for :amount, click the button below.',
|
||||||
|
'quote_message_button' => 'To view your quote for :amount, click the button below.',
|
||||||
|
'payment_message_button' => 'Thank you for your payment of :amount.',
|
||||||
|
'payment_type_direct_debit' => 'Direct Debit',
|
||||||
|
'bank_accounts' => 'Bank Accounts',
|
||||||
|
'add_bank_account' => 'Add Bank Account',
|
||||||
|
'setup_account' => 'Setup Account',
|
||||||
|
'import_expenses' => 'Import Expenses',
|
||||||
|
'bank_id' => 'bank',
|
||||||
|
'integration_type' => 'Integration Type',
|
||||||
|
'updated_bank_account' => 'Successfully updated bank account',
|
||||||
|
'edit_bank_account' => 'Edit Bank Account',
|
||||||
|
'archive_bank_account' => 'Archive Bank Account',
|
||||||
|
'archived_bank_account' => 'Successfully archived bank account',
|
||||||
|
'created_bank_account' => 'Successfully created bank account',
|
||||||
|
'validate_bank_account' => 'Validate Bank Account',
|
||||||
|
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>',
|
||||||
|
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
|
||||||
|
'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.',
|
||||||
|
'username' => 'Username',
|
||||||
|
'account_number' => 'Account Number',
|
||||||
|
'account_name' => 'Account Name',
|
||||||
|
'bank_account_error' => 'Failed to retreive account details, please check your credentials.',
|
||||||
|
'status_approved' => 'Approved',
|
||||||
|
'quote_settings' => 'Quote Settings',
|
||||||
|
'auto_convert_quote' => 'Auto convert quote',
|
||||||
|
'auto_convert_quote_help' => 'Automatically convert a quote to an invoice when approved by a client.',
|
||||||
|
'validate' => 'Validate',
|
||||||
|
'info' => 'Info',
|
||||||
|
'imported_expenses' => 'Successfully created :count_vendors vendor(s) and :count_expenses expense(s)',
|
||||||
|
|
||||||
|
);
|
@ -25,7 +25,7 @@ return array(
|
|||||||
"numeric" => ":attribute muss zwischen :min & :max liegen.",
|
"numeric" => ":attribute muss zwischen :min & :max liegen.",
|
||||||
"file" => ":attribute muss zwischen :min & :max Kilobytes groß sein.",
|
"file" => ":attribute muss zwischen :min & :max Kilobytes groß sein.",
|
||||||
"string" => ":attribute muss zwischen :min & :max Zeichen lang sein.",
|
"string" => ":attribute muss zwischen :min & :max Zeichen lang sein.",
|
||||||
"array" => ":attribute muss zwischen :min & :max Elemente haben."
|
"array" => ":attribute muss zwischen :min & :max Elemente haben.",
|
||||||
),
|
),
|
||||||
"confirmed" => ":attribute stimmt nicht mit der Bestätigung überein.",
|
"confirmed" => ":attribute stimmt nicht mit der Bestätigung überein.",
|
||||||
"date" => ":attribute muss ein gültiges Datum sein.",
|
"date" => ":attribute muss ein gültiges Datum sein.",
|
||||||
@ -43,14 +43,14 @@ return array(
|
|||||||
"numeric" => ":attribute darf maximal :max sein.",
|
"numeric" => ":attribute darf maximal :max sein.",
|
||||||
"file" => ":attribute darf maximal :max Kilobytes groß sein.",
|
"file" => ":attribute darf maximal :max Kilobytes groß sein.",
|
||||||
"string" => ":attribute darf maximal :max Zeichen haben.",
|
"string" => ":attribute darf maximal :max Zeichen haben.",
|
||||||
"array" => ":attribute darf nicht mehr als :max Elemente haben."
|
"array" => ":attribute darf nicht mehr als :max Elemente haben.",
|
||||||
),
|
),
|
||||||
"mimes" => ":attribute muss den Dateityp :values haben.",
|
"mimes" => ":attribute muss den Dateityp :values haben.",
|
||||||
"min" => array(
|
"min" => array(
|
||||||
"numeric" => ":attribute muss mindestens :min sein.",
|
"numeric" => ":attribute muss mindestens :min sein.",
|
||||||
"file" => ":attribute muss mindestens :min Kilobytes groß sein.",
|
"file" => ":attribute muss mindestens :min Kilobytes groß sein.",
|
||||||
"string" => ":attribute muss mindestens :min Zeichen lang sein.",
|
"string" => ":attribute muss mindestens :min Zeichen lang sein.",
|
||||||
"array" => ":attribute muss mindestens :min Elemente haben."
|
"array" => ":attribute muss mindestens :min Elemente haben.",
|
||||||
),
|
),
|
||||||
"not_in" => "Der gewählte Wert für :attribute ist ungültig.",
|
"not_in" => "Der gewählte Wert für :attribute ist ungültig.",
|
||||||
"numeric" => ":attribute muss eine Zahl sein.",
|
"numeric" => ":attribute muss eine Zahl sein.",
|
||||||
@ -66,7 +66,7 @@ return array(
|
|||||||
"numeric" => ":attribute muss gleich :size sein.",
|
"numeric" => ":attribute muss gleich :size sein.",
|
||||||
"file" => ":attribute muss :size Kilobyte groß sein.",
|
"file" => ":attribute muss :size Kilobyte groß sein.",
|
||||||
"string" => ":attribute muss :size Zeichen lang sein.",
|
"string" => ":attribute muss :size Zeichen lang sein.",
|
||||||
"array" => ":attribute muss genau :size Elemente haben."
|
"array" => ":attribute muss genau :size Elemente haben.",
|
||||||
),
|
),
|
||||||
"unique" => ":attribute ist schon vergeben.",
|
"unique" => ":attribute ist schon vergeben.",
|
||||||
"url" => "Das Format von :attribute ist ungültig.",
|
"url" => "Das Format von :attribute ist ungültig.",
|
||||||
@ -78,7 +78,7 @@ return array(
|
|||||||
"has_counter" => 'Der Wert muss {$counter} beinhalten',
|
"has_counter" => 'Der Wert muss {$counter} beinhalten',
|
||||||
"valid_contacts" => "Alle Kontake müssen entweder einen Namen oder eine E-Mail Adresse haben",
|
"valid_contacts" => "Alle Kontake müssen entweder einen Namen oder eine E-Mail Adresse haben",
|
||||||
"valid_invoice_items" => "Die Rechnung übersteigt den maximalen Betrag",
|
"valid_invoice_items" => "Die Rechnung übersteigt den maximalen Betrag",
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Custom Validation Language Lines
|
| Custom Validation Language Lines
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
|
||||||
|
@ -263,7 +263,6 @@ return array(
|
|||||||
'deleted_vendor' => 'Successfully deleted vendor',
|
'deleted_vendor' => 'Successfully deleted vendor',
|
||||||
'deleted_vendors' => 'Successfully deleted :count vendors',
|
'deleted_vendors' => 'Successfully deleted :count vendors',
|
||||||
|
|
||||||
|
|
||||||
// Emails
|
// Emails
|
||||||
'confirmation_subject' => 'Invoice Ninja Account Confirmation',
|
'confirmation_subject' => 'Invoice Ninja Account Confirmation',
|
||||||
'confirmation_header' => 'Account Confirmation',
|
'confirmation_header' => 'Account Confirmation',
|
||||||
@ -284,8 +283,7 @@ return array(
|
|||||||
'notification_invoice_sent' => 'The following client :client was emailed Invoice :invoice for :amount.',
|
'notification_invoice_sent' => 'The following client :client was emailed Invoice :invoice for :amount.',
|
||||||
'notification_invoice_viewed' => 'The following client :client viewed Invoice :invoice for :amount.',
|
'notification_invoice_viewed' => 'The following client :client viewed Invoice :invoice for :amount.',
|
||||||
'reset_password' => 'You can reset your account password by clicking the following button:',
|
'reset_password' => 'You can reset your account password by clicking the following button:',
|
||||||
'reset_password_footer' => 'If you did not request this password reset please email our support: ' . CONTACT_EMAIL,
|
'reset_password_footer' => 'If you did not request this password reset please email our support: '.CONTACT_EMAIL,
|
||||||
|
|
||||||
|
|
||||||
// Payment page
|
// Payment page
|
||||||
'secure_payment' => 'Secure Payment',
|
'secure_payment' => 'Secure Payment',
|
||||||
@ -313,7 +311,7 @@ return array(
|
|||||||
|
|
||||||
'logout' => 'Log Out',
|
'logout' => 'Log Out',
|
||||||
'sign_up_to_save' => 'Sign up to save your work',
|
'sign_up_to_save' => 'Sign up to save your work',
|
||||||
'agree_to_terms' =>'I agree to the Invoice Ninja :terms',
|
'agree_to_terms' => 'I agree to the Invoice Ninja :terms',
|
||||||
'terms_of_service' => 'Terms of Service',
|
'terms_of_service' => 'Terms of Service',
|
||||||
'email_taken' => 'The email address is already registered',
|
'email_taken' => 'The email address is already registered',
|
||||||
'working' => 'Working',
|
'working' => 'Working',
|
||||||
@ -433,7 +431,7 @@ return array(
|
|||||||
'active' => 'Active',
|
'active' => 'Active',
|
||||||
'pending' => 'Pending',
|
'pending' => 'Pending',
|
||||||
'deleted_user' => 'Successfully deleted user',
|
'deleted_user' => 'Successfully deleted user',
|
||||||
'limit_users' => 'Sorry, this will exceed the limit of ' . MAX_NUM_USERS . ' users',
|
'limit_users' => 'Sorry, this will exceed the limit of '.MAX_NUM_USERS.' users',
|
||||||
|
|
||||||
'confirm_email_invoice' => 'Are you sure you want to email this invoice?',
|
'confirm_email_invoice' => 'Are you sure you want to email this invoice?',
|
||||||
'confirm_email_quote' => 'Are you sure you want to email this quote?',
|
'confirm_email_quote' => 'Are you sure you want to email this quote?',
|
||||||
@ -1053,7 +1051,7 @@ return array(
|
|||||||
'view' => 'View',
|
'view' => 'View',
|
||||||
'restore_expense' => 'Restore Expense',
|
'restore_expense' => 'Restore Expense',
|
||||||
'invoice_expense' => 'Invoice Expense',
|
'invoice_expense' => 'Invoice Expense',
|
||||||
'expense_error_multiple_clients' =>'The expenses can\'t belong to different clients',
|
'expense_error_multiple_clients' => 'The expenses can\'t belong to different clients',
|
||||||
'expense_error_invoiced' => 'Expense has already been invoiced',
|
'expense_error_invoiced' => 'Expense has already been invoiced',
|
||||||
'convert_currency' => 'Convert currency',
|
'convert_currency' => 'Convert currency',
|
||||||
|
|
||||||
@ -1107,6 +1105,8 @@ return array(
|
|||||||
'payment_type_direct_debit' => 'Direct Debit',
|
'payment_type_direct_debit' => 'Direct Debit',
|
||||||
'bank_accounts' => 'Bank Accounts',
|
'bank_accounts' => 'Bank Accounts',
|
||||||
'add_bank_account' => 'Add Bank Account',
|
'add_bank_account' => 'Add Bank Account',
|
||||||
|
'setup_account' => 'Setup Account',
|
||||||
|
'import_expenses' => 'Import Expenses',
|
||||||
'bank_id' => 'bank',
|
'bank_id' => 'bank',
|
||||||
'integration_type' => 'Integration Type',
|
'integration_type' => 'Integration Type',
|
||||||
'updated_bank_account' => 'Successfully updated bank account',
|
'updated_bank_account' => 'Successfully updated bank account',
|
||||||
@ -1114,17 +1114,20 @@ return array(
|
|||||||
'archive_bank_account' => 'Archive Bank Account',
|
'archive_bank_account' => 'Archive Bank Account',
|
||||||
'archived_bank_account' => 'Successfully archived bank account',
|
'archived_bank_account' => 'Successfully archived bank account',
|
||||||
'created_bank_account' => 'Successfully created bank account',
|
'created_bank_account' => 'Successfully created bank account',
|
||||||
'test' => 'Test',
|
'validate_bank_account' => 'Validate Bank Account',
|
||||||
'test_bank_account' => 'Test Bank Account',
|
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>',
|
||||||
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
|
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
|
||||||
'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.',
|
'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.',
|
||||||
'username' => 'Username',
|
'username' => 'Username',
|
||||||
'account_number' => 'Account Number',
|
'account_number' => 'Account Number',
|
||||||
|
'account_name' => 'Account Name',
|
||||||
'bank_account_error' => 'Failed to retreive account details, please check your credentials.',
|
'bank_account_error' => 'Failed to retreive account details, please check your credentials.',
|
||||||
'status_approved' => 'Approved',
|
'status_approved' => 'Approved',
|
||||||
'quote_settings' => 'Quote Settings',
|
'quote_settings' => 'Quote Settings',
|
||||||
'auto_convert_quote' => 'Auto convert quote',
|
'auto_convert_quote' => 'Auto convert quote',
|
||||||
'auto_convert_quote_help' => 'Automatically convert a quote to an invoice when approved by a client.',
|
'auto_convert_quote_help' => 'Automatically convert a quote to an invoice when approved by a client.',
|
||||||
|
'validate' => 'Validate',
|
||||||
|
'info' => 'Info',
|
||||||
|
'imported_expenses' => 'Successfully created :count_vendors vendor(s) and :count_expenses expense(s)',
|
||||||
|
|
||||||
|
|
||||||
);
|
);
|
||||||
|
@ -68,7 +68,7 @@ return array(
|
|||||||
),
|
),
|
||||||
"unique" => "The :attribute has already been taken.",
|
"unique" => "The :attribute has already been taken.",
|
||||||
"url" => "The :attribute format is invalid.",
|
"url" => "The :attribute format is invalid.",
|
||||||
|
|
||||||
"positive" => "The :attribute must be greater than zero.",
|
"positive" => "The :attribute must be greater than zero.",
|
||||||
"has_credit" => "The client does not have enough credit.",
|
"has_credit" => "The client does not have enough credit.",
|
||||||
"notmasked" => "The values are masked",
|
"notmasked" => "The values are masked",
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
return array(
|
return array(
|
||||||
|
|
||||||
// client
|
// client
|
||||||
'organization' => 'Empresa',
|
'organization' => 'Empresa',
|
||||||
'name' => 'Nombre', //Razon social-Colombia,
|
'name' => 'Nombre', //Razon social-Colombia,
|
||||||
'website' => 'Sitio Web',
|
'website' => 'Sitio Web',
|
||||||
'work_phone' => 'Teléfono',
|
'work_phone' => 'Teléfono',
|
||||||
@ -116,7 +116,7 @@ return array(
|
|||||||
'billed_client' => 'cliente facturado',
|
'billed_client' => 'cliente facturado',
|
||||||
'billed_clients' => 'clientes facturados',
|
'billed_clients' => 'clientes facturados',
|
||||||
'active_client' => 'cliente activo',
|
'active_client' => 'cliente activo',
|
||||||
'active_clients' => 'clientes activos',
|
'active_clients' => 'clientes activos',
|
||||||
'invoices_past_due' => 'Facturas vencidas',
|
'invoices_past_due' => 'Facturas vencidas',
|
||||||
'upcoming_invoices' => 'Próximas facturas',
|
'upcoming_invoices' => 'Próximas facturas',
|
||||||
'average_invoice' => 'Promedio de facturación',
|
'average_invoice' => 'Promedio de facturación',
|
||||||
@ -265,12 +265,12 @@ return array(
|
|||||||
'notification_invoice_sent' => 'La factura :invoice por valor de :amount fue enviada al cliente :cliente.',
|
'notification_invoice_sent' => 'La factura :invoice por valor de :amount fue enviada al cliente :cliente.',
|
||||||
'notification_invoice_viewed' => 'La factura :invoice por valor de :amount fue visualizada por el cliente :client.',
|
'notification_invoice_viewed' => 'La factura :invoice por valor de :amount fue visualizada por el cliente :client.',
|
||||||
'reset_password' => 'Puedes reconfigurar la contraseña de tu cuenta haciendo clic en el siguiente enlace:',
|
'reset_password' => 'Puedes reconfigurar la contraseña de tu cuenta haciendo clic en el siguiente enlace:',
|
||||||
'reset_password_footer' => 'Si no has solicitado un cambio de contraseña, por favor contactate con nosostros: ' . CONTACT_EMAIL,
|
'reset_password_footer' => 'Si no has solicitado un cambio de contraseña, por favor contactate con nosostros: '.CONTACT_EMAIL,
|
||||||
|
|
||||||
// Payment page
|
// Payment page
|
||||||
'secure_payment' => 'Pago seguro',
|
'secure_payment' => 'Pago seguro',
|
||||||
'card_number' => 'Número de tarjeta',
|
'card_number' => 'Número de tarjeta',
|
||||||
'expiration_month' => 'Mes de caducidad',
|
'expiration_month' => 'Mes de caducidad',
|
||||||
'expiration_year' => 'Año de caducidad',
|
'expiration_year' => 'Año de caducidad',
|
||||||
'cvv' => 'CVV',
|
'cvv' => 'CVV',
|
||||||
|
|
||||||
@ -290,9 +290,9 @@ return array(
|
|||||||
'remove_logo' => ':link haz click para eliminar el logo de Invoice Ninja', //Maybe incorrect for the context
|
'remove_logo' => ':link haz click para eliminar el logo de Invoice Ninja', //Maybe incorrect for the context
|
||||||
'remove_logo_link' => 'Haz clic aquí',
|
'remove_logo_link' => 'Haz clic aquí',
|
||||||
],
|
],
|
||||||
'logout' => 'Cerrar sesión',
|
'logout' => 'Cerrar sesión',
|
||||||
'sign_up_to_save' => 'Registrate para guardar tu trabajo',
|
'sign_up_to_save' => 'Registrate para guardar tu trabajo',
|
||||||
'agree_to_terms' =>'Estoy de acuerdo con los términos de Invoice Ninja :terms',
|
'agree_to_terms' => 'Estoy de acuerdo con los términos de Invoice Ninja :terms',
|
||||||
'terms_of_service' => 'Términos de servicio',
|
'terms_of_service' => 'Términos de servicio',
|
||||||
'email_taken' => 'Esta dirección de correo electrónico ya se ha registrado',
|
'email_taken' => 'Esta dirección de correo electrónico ya se ha registrado',
|
||||||
'working' => 'Procesando',
|
'working' => 'Procesando',
|
||||||
@ -311,7 +311,7 @@ return array(
|
|||||||
'field_label' => 'Etiqueta del campo',
|
'field_label' => 'Etiqueta del campo',
|
||||||
'field_value' => 'Valor del campo',
|
'field_value' => 'Valor del campo',
|
||||||
'edit' => 'Editar',
|
'edit' => 'Editar',
|
||||||
'view_as_recipient' => 'Ver como destinitario',
|
'view_as_recipient' => 'Ver como destinitario',
|
||||||
|
|
||||||
// product management
|
// product management
|
||||||
'product_library' => 'Inventario de productos',
|
'product_library' => 'Inventario de productos',
|
||||||
@ -374,7 +374,7 @@ return array(
|
|||||||
'notification_quote_sent_subject' => 'Cotización :invoice enviada a el cliente :client',
|
'notification_quote_sent_subject' => 'Cotización :invoice enviada a el cliente :client',
|
||||||
'notification_quote_viewed_subject' => 'Cotización :invoice visualizada por el cliente :client',
|
'notification_quote_viewed_subject' => 'Cotización :invoice visualizada por el cliente :client',
|
||||||
'notification_quote_sent' => 'La cotización :invoice por un valor de :amount, ha sido enviada al cliente :client.',
|
'notification_quote_sent' => 'La cotización :invoice por un valor de :amount, ha sido enviada al cliente :client.',
|
||||||
'notification_quote_viewed' => 'La cotizacion :invoice por un valor de :amount ha sido visualizada por el cliente :client.',
|
'notification_quote_viewed' => 'La cotizacion :invoice por un valor de :amount ha sido visualizada por el cliente :client.',
|
||||||
'session_expired' => 'Tu sesión ha caducado.',
|
'session_expired' => 'Tu sesión ha caducado.',
|
||||||
'invoice_fields' => 'Campos de factura',
|
'invoice_fields' => 'Campos de factura',
|
||||||
'invoice_options' => 'Opciones de factura',
|
'invoice_options' => 'Opciones de factura',
|
||||||
@ -396,7 +396,7 @@ return array(
|
|||||||
'active' => 'Activar',
|
'active' => 'Activar',
|
||||||
'pending' => 'Pendiente',
|
'pending' => 'Pendiente',
|
||||||
'deleted_user' => 'Usario eliminado con éxito',
|
'deleted_user' => 'Usario eliminado con éxito',
|
||||||
'limit_users' => 'Lo sentimos, esta acción excederá el límite de ' . MAX_NUM_USERS . ' usarios',
|
'limit_users' => 'Lo sentimos, esta acción excederá el límite de '.MAX_NUM_USERS.' usarios',
|
||||||
'confirm_email_invoice' => '¿Estás seguro que quieres enviar esta factura?',
|
'confirm_email_invoice' => '¿Estás seguro que quieres enviar esta factura?',
|
||||||
'confirm_email_quote' => '¿Estás seguro que quieres enviar esta cotización?',
|
'confirm_email_quote' => '¿Estás seguro que quieres enviar esta cotización?',
|
||||||
'confirm_recurring_email_invoice' => 'Se ha marcado esta factura como recurrente, estás seguro que quieres enviar esta factura?',
|
'confirm_recurring_email_invoice' => 'Se ha marcado esta factura como recurrente, estás seguro que quieres enviar esta factura?',
|
||||||
@ -459,7 +459,7 @@ return array(
|
|||||||
'restored_client' => 'Cliente restaurado con éxito',
|
'restored_client' => 'Cliente restaurado con éxito',
|
||||||
'restored_payment' => 'Pago restaurado con éxito',
|
'restored_payment' => 'Pago restaurado con éxito',
|
||||||
'restored_credit' => 'Crédito restaurado con éxito',
|
'restored_credit' => 'Crédito restaurado con éxito',
|
||||||
|
|
||||||
'reason_for_canceling' => 'Ayúdenos a mejorar contándonos porqué se va.',
|
'reason_for_canceling' => 'Ayúdenos a mejorar contándonos porqué se va.',
|
||||||
'discount_percent' => 'Porcentaje',
|
'discount_percent' => 'Porcentaje',
|
||||||
'discount_amount' => 'Cantidad',
|
'discount_amount' => 'Cantidad',
|
||||||
@ -481,7 +481,7 @@ return array(
|
|||||||
'payment_email' => 'Correo de Pago',
|
'payment_email' => 'Correo de Pago',
|
||||||
'quote_email' => 'Correo de Cotizacion',
|
'quote_email' => 'Correo de Cotizacion',
|
||||||
'reset_all' => 'Reiniciar Todos',
|
'reset_all' => 'Reiniciar Todos',
|
||||||
'approve' => 'Aprobar',
|
'approve' => 'Aprobar',
|
||||||
|
|
||||||
'token_billing_type_id' => 'Token de Facturación',
|
'token_billing_type_id' => 'Token de Facturación',
|
||||||
'token_billing_help' => 'Permite almacenar tarjetas de crédito con su gateway de pagos, y facturar en una fecha posterior.',
|
'token_billing_help' => 'Permite almacenar tarjetas de crédito con su gateway de pagos, y facturar en una fecha posterior.',
|
||||||
@ -549,7 +549,7 @@ return array(
|
|||||||
'send_email' => 'Enviar Correo',
|
'send_email' => 'Enviar Correo',
|
||||||
'set_password' => 'Asignar Contraseña',
|
'set_password' => 'Asignar Contraseña',
|
||||||
'converted' => 'Convertido',
|
'converted' => 'Convertido',
|
||||||
|
|
||||||
'email_approved' => 'Enviarme un correo cuando una cotización sea <b>aprobada</b>',
|
'email_approved' => 'Enviarme un correo cuando una cotización sea <b>aprobada</b>',
|
||||||
'notification_quote_approved_subject' => 'Cotización :invoice fue aprobada por :client',
|
'notification_quote_approved_subject' => 'Cotización :invoice fue aprobada por :client',
|
||||||
'notification_quote_approved' => 'El cliente :client ha aprobado la cotización :invoice por el valor :amount.',
|
'notification_quote_approved' => 'El cliente :client ha aprobado la cotización :invoice por el valor :amount.',
|
||||||
@ -574,7 +574,7 @@ return array(
|
|||||||
'view_documentation' => 'Ver Documentación',
|
'view_documentation' => 'Ver Documentación',
|
||||||
'app_title' => 'Facturación Open-Source Gratuita',
|
'app_title' => 'Facturación Open-Source Gratuita',
|
||||||
'app_description' => 'Invoice Ninja es una solución open-source gratuita para manejar la facturación de tus clientes. Con Invoice Ninja, se pueden crear y enviar hermosas facturas desde cualquier dispositivo que tenga acceso a Internet. Tus clientes pueden imprimir tus facturas, descargarlas en formato PDF o inclusive pagarlas en linea desde esta misma plataforma',
|
'app_description' => 'Invoice Ninja es una solución open-source gratuita para manejar la facturación de tus clientes. Con Invoice Ninja, se pueden crear y enviar hermosas facturas desde cualquier dispositivo que tenga acceso a Internet. Tus clientes pueden imprimir tus facturas, descargarlas en formato PDF o inclusive pagarlas en linea desde esta misma plataforma',
|
||||||
|
|
||||||
'rows' => 'filas',
|
'rows' => 'filas',
|
||||||
'www' => 'www',
|
'www' => 'www',
|
||||||
'logo' => 'Logo',
|
'logo' => 'Logo',
|
||||||
@ -717,7 +717,7 @@ return array(
|
|||||||
'recent_payments' => 'Pagos Recientes',
|
'recent_payments' => 'Pagos Recientes',
|
||||||
'outstanding' => 'Sobresaliente',
|
'outstanding' => 'Sobresaliente',
|
||||||
'manage_companies' => 'Administrar Compañías',
|
'manage_companies' => 'Administrar Compañías',
|
||||||
'total_revenue' => 'Ingresos Totales',
|
'total_revenue' => 'Ingresos Totales',
|
||||||
|
|
||||||
'current_user' => 'Usuario Actual',
|
'current_user' => 'Usuario Actual',
|
||||||
'new_recurring_invoice' => 'Nueva Factura Recurrente',
|
'new_recurring_invoice' => 'Nueva Factura Recurrente',
|
||||||
@ -867,7 +867,7 @@ return array(
|
|||||||
'default_invoice_footer' => 'Default Invoice Footer',
|
'default_invoice_footer' => 'Default Invoice Footer',
|
||||||
'quote_footer' => 'Quote Footer',
|
'quote_footer' => 'Quote Footer',
|
||||||
'free' => 'Free',
|
'free' => 'Free',
|
||||||
|
|
||||||
'quote_is_approved' => 'This quote is approved',
|
'quote_is_approved' => 'This quote is approved',
|
||||||
'apply_credit' => 'Apply Credit',
|
'apply_credit' => 'Apply Credit',
|
||||||
'system_settings' => 'System Settings',
|
'system_settings' => 'System Settings',
|
||||||
@ -966,5 +966,126 @@ return array(
|
|||||||
'schedule' => 'Schedule',
|
'schedule' => 'Schedule',
|
||||||
'email_designs' => 'Email Designs',
|
'email_designs' => 'Email Designs',
|
||||||
'assigned_when_sent' => 'Assigned when sent',
|
'assigned_when_sent' => 'Assigned when sent',
|
||||||
|
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.',
|
||||||
|
'white_label_purchase_link' => 'Purchase a white label license',
|
||||||
|
|
||||||
|
// Expense / vendor
|
||||||
|
'expense' => 'Expense',
|
||||||
|
'expenses' => 'Expenses',
|
||||||
|
'new_expense' => 'Enter Expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'vendors' => 'Vendors',
|
||||||
|
'new_vendor' => 'Create Vendor',
|
||||||
|
'payment_terms_net' => 'Net',
|
||||||
|
'vendor' => 'Vendor',
|
||||||
|
'edit_vendor' => 'Edit Vendor',
|
||||||
|
'archive_vendor' => 'Archive Vendor',
|
||||||
|
'delete_vendor' => 'Delete Vendor',
|
||||||
|
'view_vendor' => 'View Vendor',
|
||||||
|
'deleted_expense' => 'Successfully deleted expense',
|
||||||
|
'archived_expense' => 'Successfully archived expense',
|
||||||
|
'deleted_expenses' => 'Successfully deleted expenses',
|
||||||
|
'archived_expenses' => 'Successfully archived expenses',
|
||||||
|
|
||||||
|
// Expenses
|
||||||
|
'expense_amount' => 'Expense Amount',
|
||||||
|
'expense_balance' => 'Expense Balance',
|
||||||
|
'expense_date' => 'Expense Date',
|
||||||
|
'expense_should_be_invoiced' => 'Should this expense be invoiced?',
|
||||||
|
'public_notes' => 'Public Notes',
|
||||||
|
'invoice_amount' => 'Invoice Amount',
|
||||||
|
'exchange_rate' => 'Exchange Rate',
|
||||||
|
'yes' => 'Yes',
|
||||||
|
'no' => 'No',
|
||||||
|
'should_be_invoiced' => 'Should be invoiced',
|
||||||
|
'view_expense' => 'View expense # :expense',
|
||||||
|
'edit_expense' => 'Edit Expense',
|
||||||
|
'archive_expense' => 'Archive Expense',
|
||||||
|
'delete_expense' => 'Delete Expense',
|
||||||
|
'view_expense_num' => 'Expense # :expense',
|
||||||
|
'updated_expense' => 'Successfully updated expense',
|
||||||
|
'created_expense' => 'Successfully created expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'view' => 'View',
|
||||||
|
'restore_expense' => 'Restore Expense',
|
||||||
|
'invoice_expense' => 'Invoice Expense',
|
||||||
|
'expense_error_multiple_clients' => 'The expenses can\'t belong to different clients',
|
||||||
|
'expense_error_invoiced' => 'Expense has already been invoiced',
|
||||||
|
'convert_currency' => 'Convert currency',
|
||||||
|
|
||||||
|
// Payment terms
|
||||||
|
'num_days' => 'Number of days',
|
||||||
|
'create_payment_term' => 'Create Payment Term',
|
||||||
|
'edit_payment_terms' => 'Edit Payment Term',
|
||||||
|
'edit_payment_term' => 'Edit Payment Term',
|
||||||
|
'archive_payment_term' => 'Archive Payment Term',
|
||||||
|
|
||||||
|
// recurring due dates
|
||||||
|
'recurring_due_dates' => 'Recurring Invoice Due Dates',
|
||||||
|
'recurring_due_date_help' => '<p>Automatically sets a due date for the invoice.</p>
|
||||||
|
<p>Invoices on a monthly or yearly cycle set to be due on or before the day they are created will be due the next month. Invoices set to be due on the 29th or 30th in months that don\'t have that day will be due the last day of the month.</p>
|
||||||
|
<p>Invoices on a weekly cycle set to be due on the day of the week they are created will be due the next week.</p>
|
||||||
|
<p>For example:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Today is the 15th, due date is 1st of the month. The due date should likely be the 1st of the next month.</li>
|
||||||
|
<li>Today is the 15th, due date is the last day of the month. The due date will be the last day of the this month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the 15th, due date is the 15th day of the month. The due date will be the 15th day of <strong>next</strong> month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the Friday, due date is the 1st Friday after. The due date will be next Friday, not today.
|
||||||
|
</li>
|
||||||
|
</ul>',
|
||||||
|
'due' => 'Due',
|
||||||
|
'next_due_on' => 'Due Next: :date',
|
||||||
|
'use_client_terms' => 'Use client terms',
|
||||||
|
'day_of_month' => ':ordinal day of month',
|
||||||
|
'last_day_of_month' => 'Last day of month',
|
||||||
|
'day_of_week_after' => ':ordinal :day after',
|
||||||
|
'sunday' => 'Sunday',
|
||||||
|
'monday' => 'Monday',
|
||||||
|
'tuesday' => 'Tuesday',
|
||||||
|
'wednesday' => 'Wednesday',
|
||||||
|
'thursday' => 'Thursday',
|
||||||
|
'friday' => 'Friday',
|
||||||
|
'saturday' => 'Saturday',
|
||||||
|
|
||||||
|
// Fonts
|
||||||
|
'header_font_id' => 'Header Font',
|
||||||
|
'body_font_id' => 'Body Font',
|
||||||
|
'color_font_help' => 'Note: the primary color and fonts are also used in the client portal and custom email designs.',
|
||||||
|
|
||||||
|
'live_preview' => 'Live Preview',
|
||||||
|
'invalid_mail_config' => 'Unable to send email, please check that the mail settings are correct.',
|
||||||
|
|
||||||
|
'invoice_message_button' => 'To view your invoice for :amount, click the button below.',
|
||||||
|
'quote_message_button' => 'To view your quote for :amount, click the button below.',
|
||||||
|
'payment_message_button' => 'Thank you for your payment of :amount.',
|
||||||
|
'payment_type_direct_debit' => 'Direct Debit',
|
||||||
|
'bank_accounts' => 'Bank Accounts',
|
||||||
|
'add_bank_account' => 'Add Bank Account',
|
||||||
|
'setup_account' => 'Setup Account',
|
||||||
|
'import_expenses' => 'Import Expenses',
|
||||||
|
'bank_id' => 'bank',
|
||||||
|
'integration_type' => 'Integration Type',
|
||||||
|
'updated_bank_account' => 'Successfully updated bank account',
|
||||||
|
'edit_bank_account' => 'Edit Bank Account',
|
||||||
|
'archive_bank_account' => 'Archive Bank Account',
|
||||||
|
'archived_bank_account' => 'Successfully archived bank account',
|
||||||
|
'created_bank_account' => 'Successfully created bank account',
|
||||||
|
'validate_bank_account' => 'Validate Bank Account',
|
||||||
|
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>',
|
||||||
|
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
|
||||||
|
'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.',
|
||||||
|
'username' => 'Username',
|
||||||
|
'account_number' => 'Account Number',
|
||||||
|
'account_name' => 'Account Name',
|
||||||
|
'bank_account_error' => 'Failed to retreive account details, please check your credentials.',
|
||||||
|
'status_approved' => 'Approved',
|
||||||
|
'quote_settings' => 'Quote Settings',
|
||||||
|
'auto_convert_quote' => 'Auto convert quote',
|
||||||
|
'auto_convert_quote_help' => 'Automatically convert a quote to an invoice when approved by a client.',
|
||||||
|
'validate' => 'Validate',
|
||||||
|
'info' => 'Info',
|
||||||
|
'imported_expenses' => 'Successfully created :count_vendors vendor(s) and :count_expenses expense(s)',
|
||||||
|
|
||||||
);
|
);
|
||||||
|
@ -77,7 +77,7 @@ return array(
|
|||||||
"has_counter" => 'The value must contain {$counter}',
|
"has_counter" => 'The value must contain {$counter}',
|
||||||
"valid_contacts" => "All of the contacts must have either an email or name",
|
"valid_contacts" => "All of the contacts must have either an email or name",
|
||||||
"valid_invoice_items" => "The invoice exceeds the maximum amount",
|
"valid_invoice_items" => "The invoice exceeds the maximum amount",
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Custom Validation Language Lines
|
| Custom Validation Language Lines
|
||||||
|
@ -888,7 +888,7 @@ return array(
|
|||||||
'default_invoice_footer' => 'Default Invoice Footer',
|
'default_invoice_footer' => 'Default Invoice Footer',
|
||||||
'quote_footer' => 'Quote Footer',
|
'quote_footer' => 'Quote Footer',
|
||||||
'free' => 'Free',
|
'free' => 'Free',
|
||||||
|
|
||||||
'quote_is_approved' => 'This quote is approved',
|
'quote_is_approved' => 'This quote is approved',
|
||||||
'apply_credit' => 'Apply Credit',
|
'apply_credit' => 'Apply Credit',
|
||||||
'system_settings' => 'System Settings',
|
'system_settings' => 'System Settings',
|
||||||
@ -988,4 +988,126 @@ return array(
|
|||||||
'email_designs' => 'Email Designs',
|
'email_designs' => 'Email Designs',
|
||||||
'assigned_when_sent' => 'Assigned when sent',
|
'assigned_when_sent' => 'Assigned when sent',
|
||||||
|
|
||||||
|
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.',
|
||||||
|
'white_label_purchase_link' => 'Purchase a white label license',
|
||||||
|
|
||||||
|
// Expense / vendor
|
||||||
|
'expense' => 'Expense',
|
||||||
|
'expenses' => 'Expenses',
|
||||||
|
'new_expense' => 'Enter Expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'vendors' => 'Vendors',
|
||||||
|
'new_vendor' => 'Create Vendor',
|
||||||
|
'payment_terms_net' => 'Net',
|
||||||
|
'vendor' => 'Vendor',
|
||||||
|
'edit_vendor' => 'Edit Vendor',
|
||||||
|
'archive_vendor' => 'Archive Vendor',
|
||||||
|
'delete_vendor' => 'Delete Vendor',
|
||||||
|
'view_vendor' => 'View Vendor',
|
||||||
|
'deleted_expense' => 'Successfully deleted expense',
|
||||||
|
'archived_expense' => 'Successfully archived expense',
|
||||||
|
'deleted_expenses' => 'Successfully deleted expenses',
|
||||||
|
'archived_expenses' => 'Successfully archived expenses',
|
||||||
|
|
||||||
|
// Expenses
|
||||||
|
'expense_amount' => 'Expense Amount',
|
||||||
|
'expense_balance' => 'Expense Balance',
|
||||||
|
'expense_date' => 'Expense Date',
|
||||||
|
'expense_should_be_invoiced' => 'Should this expense be invoiced?',
|
||||||
|
'public_notes' => 'Public Notes',
|
||||||
|
'invoice_amount' => 'Invoice Amount',
|
||||||
|
'exchange_rate' => 'Exchange Rate',
|
||||||
|
'yes' => 'Yes',
|
||||||
|
'no' => 'No',
|
||||||
|
'should_be_invoiced' => 'Should be invoiced',
|
||||||
|
'view_expense' => 'View expense # :expense',
|
||||||
|
'edit_expense' => 'Edit Expense',
|
||||||
|
'archive_expense' => 'Archive Expense',
|
||||||
|
'delete_expense' => 'Delete Expense',
|
||||||
|
'view_expense_num' => 'Expense # :expense',
|
||||||
|
'updated_expense' => 'Successfully updated expense',
|
||||||
|
'created_expense' => 'Successfully created expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'view' => 'View',
|
||||||
|
'restore_expense' => 'Restore Expense',
|
||||||
|
'invoice_expense' => 'Invoice Expense',
|
||||||
|
'expense_error_multiple_clients' => 'The expenses can\'t belong to different clients',
|
||||||
|
'expense_error_invoiced' => 'Expense has already been invoiced',
|
||||||
|
'convert_currency' => 'Convert currency',
|
||||||
|
|
||||||
|
// Payment terms
|
||||||
|
'num_days' => 'Number of days',
|
||||||
|
'create_payment_term' => 'Create Payment Term',
|
||||||
|
'edit_payment_terms' => 'Edit Payment Term',
|
||||||
|
'edit_payment_term' => 'Edit Payment Term',
|
||||||
|
'archive_payment_term' => 'Archive Payment Term',
|
||||||
|
|
||||||
|
// recurring due dates
|
||||||
|
'recurring_due_dates' => 'Recurring Invoice Due Dates',
|
||||||
|
'recurring_due_date_help' => '<p>Automatically sets a due date for the invoice.</p>
|
||||||
|
<p>Invoices on a monthly or yearly cycle set to be due on or before the day they are created will be due the next month. Invoices set to be due on the 29th or 30th in months that don\'t have that day will be due the last day of the month.</p>
|
||||||
|
<p>Invoices on a weekly cycle set to be due on the day of the week they are created will be due the next week.</p>
|
||||||
|
<p>For example:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Today is the 15th, due date is 1st of the month. The due date should likely be the 1st of the next month.</li>
|
||||||
|
<li>Today is the 15th, due date is the last day of the month. The due date will be the last day of the this month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the 15th, due date is the 15th day of the month. The due date will be the 15th day of <strong>next</strong> month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the Friday, due date is the 1st Friday after. The due date will be next Friday, not today.
|
||||||
|
</li>
|
||||||
|
</ul>',
|
||||||
|
'due' => 'Due',
|
||||||
|
'next_due_on' => 'Due Next: :date',
|
||||||
|
'use_client_terms' => 'Use client terms',
|
||||||
|
'day_of_month' => ':ordinal day of month',
|
||||||
|
'last_day_of_month' => 'Last day of month',
|
||||||
|
'day_of_week_after' => ':ordinal :day after',
|
||||||
|
'sunday' => 'Sunday',
|
||||||
|
'monday' => 'Monday',
|
||||||
|
'tuesday' => 'Tuesday',
|
||||||
|
'wednesday' => 'Wednesday',
|
||||||
|
'thursday' => 'Thursday',
|
||||||
|
'friday' => 'Friday',
|
||||||
|
'saturday' => 'Saturday',
|
||||||
|
|
||||||
|
// Fonts
|
||||||
|
'header_font_id' => 'Header Font',
|
||||||
|
'body_font_id' => 'Body Font',
|
||||||
|
'color_font_help' => 'Note: the primary color and fonts are also used in the client portal and custom email designs.',
|
||||||
|
|
||||||
|
'live_preview' => 'Live Preview',
|
||||||
|
'invalid_mail_config' => 'Unable to send email, please check that the mail settings are correct.',
|
||||||
|
|
||||||
|
'invoice_message_button' => 'To view your invoice for :amount, click the button below.',
|
||||||
|
'quote_message_button' => 'To view your quote for :amount, click the button below.',
|
||||||
|
'payment_message_button' => 'Thank you for your payment of :amount.',
|
||||||
|
'payment_type_direct_debit' => 'Direct Debit',
|
||||||
|
'bank_accounts' => 'Bank Accounts',
|
||||||
|
'add_bank_account' => 'Add Bank Account',
|
||||||
|
'setup_account' => 'Setup Account',
|
||||||
|
'import_expenses' => 'Import Expenses',
|
||||||
|
'bank_id' => 'bank',
|
||||||
|
'integration_type' => 'Integration Type',
|
||||||
|
'updated_bank_account' => 'Successfully updated bank account',
|
||||||
|
'edit_bank_account' => 'Edit Bank Account',
|
||||||
|
'archive_bank_account' => 'Archive Bank Account',
|
||||||
|
'archived_bank_account' => 'Successfully archived bank account',
|
||||||
|
'created_bank_account' => 'Successfully created bank account',
|
||||||
|
'validate_bank_account' => 'Validate Bank Account',
|
||||||
|
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>',
|
||||||
|
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
|
||||||
|
'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.',
|
||||||
|
'username' => 'Username',
|
||||||
|
'account_number' => 'Account Number',
|
||||||
|
'account_name' => 'Account Name',
|
||||||
|
'bank_account_error' => 'Failed to retreive account details, please check your credentials.',
|
||||||
|
'status_approved' => 'Approved',
|
||||||
|
'quote_settings' => 'Quote Settings',
|
||||||
|
'auto_convert_quote' => 'Auto convert quote',
|
||||||
|
'auto_convert_quote_help' => 'Automatically convert a quote to an invoice when approved by a client.',
|
||||||
|
'validate' => 'Validate',
|
||||||
|
'info' => 'Info',
|
||||||
|
'imported_expenses' => 'Successfully created :count_vendors vendor(s) and :count_expenses expense(s)',
|
||||||
|
|
||||||
);
|
);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
|
||||||
@ -17,4 +17,4 @@ return array(
|
|||||||
|
|
||||||
'next' => 'Suivant »',
|
'next' => 'Suivant »',
|
||||||
|
|
||||||
);
|
);
|
||||||
|
@ -21,4 +21,4 @@ return array(
|
|||||||
|
|
||||||
"sent" => "Rappel du mot de passe envoyé !",
|
"sent" => "Rappel du mot de passe envoyé !",
|
||||||
|
|
||||||
);
|
);
|
||||||
|
@ -271,7 +271,7 @@ return array(
|
|||||||
'notification_invoice_sent' => 'Le client suivant :client a reçu par courriel la facture :invoice d\'un montant de :amount',
|
'notification_invoice_sent' => 'Le client suivant :client a reçu par courriel la facture :invoice d\'un montant de :amount',
|
||||||
'notification_invoice_viewed' => 'Le client suivant :client a vu la facture :invoice d\'un montant de :amount',
|
'notification_invoice_viewed' => 'Le client suivant :client a vu la facture :invoice d\'un montant de :amount',
|
||||||
'reset_password' => 'Vous pouvez réinitialiser votre mot de passe en cliquant sur le lien suivant :',
|
'reset_password' => 'Vous pouvez réinitialiser votre mot de passe en cliquant sur le lien suivant :',
|
||||||
'reset_password_footer' => 'Si vous n\'avez pas effectué de demande de réinitalisation de mot de passe veuillez contacter notre support :' . CONTACT_EMAIL,
|
'reset_password_footer' => 'Si vous n\'avez pas effectué de demande de réinitalisation de mot de passe veuillez contacter notre support :'.CONTACT_EMAIL,
|
||||||
|
|
||||||
// Payment page
|
// Payment page
|
||||||
'secure_payment' => 'Paiement sécurisé',
|
'secure_payment' => 'Paiement sécurisé',
|
||||||
@ -299,7 +299,7 @@ return array(
|
|||||||
|
|
||||||
'logout' => 'Se déconnecter',
|
'logout' => 'Se déconnecter',
|
||||||
'sign_up_to_save' => 'Connectez vous pour sauvegarder votre travail',
|
'sign_up_to_save' => 'Connectez vous pour sauvegarder votre travail',
|
||||||
'agree_to_terms' =>'J\'accepte les conditions d\'utilisation d\'Invoice ninja :terms',
|
'agree_to_terms' => 'J\'accepte les conditions d\'utilisation d\'Invoice ninja :terms',
|
||||||
'terms_of_service' => 'Conditions d\'utilisation',
|
'terms_of_service' => 'Conditions d\'utilisation',
|
||||||
'email_taken' => 'L\'adresse courriel existe déjà',
|
'email_taken' => 'L\'adresse courriel existe déjà',
|
||||||
'working' => 'En cours',
|
'working' => 'En cours',
|
||||||
@ -412,7 +412,7 @@ return array(
|
|||||||
'active' => 'Actif',
|
'active' => 'Actif',
|
||||||
'pending' => 'En attente',
|
'pending' => 'En attente',
|
||||||
'deleted_user' => 'Utilisateur supprimé',
|
'deleted_user' => 'Utilisateur supprimé',
|
||||||
'limit_users' => 'Désolé, ceci excédera la limite de ' . MAX_NUM_USERS . ' utilisateurs',
|
'limit_users' => 'Désolé, ceci excédera la limite de '.MAX_NUM_USERS.' utilisateurs',
|
||||||
|
|
||||||
'confirm_email_invoice' => 'Voulez-vous vraiment envoyer cette facture par courriel ?',
|
'confirm_email_invoice' => 'Voulez-vous vraiment envoyer cette facture par courriel ?',
|
||||||
'confirm_email_quote' => 'Voulez-vous vraiment envoyer ce devis par courriel ?',
|
'confirm_email_quote' => 'Voulez-vous vraiment envoyer ce devis par courriel ?',
|
||||||
@ -427,7 +427,6 @@ return array(
|
|||||||
'hide' => 'Cacher',
|
'hide' => 'Cacher',
|
||||||
'new_version_available' => 'Une nouvelle version de :releases_link est disponible. Vous utilisez v:user_version, la plus récente est v:latest_version',
|
'new_version_available' => 'Une nouvelle version de :releases_link est disponible. Vous utilisez v:user_version, la plus récente est v:latest_version',
|
||||||
|
|
||||||
|
|
||||||
'invoice_settings' => 'Paramètres des factures',
|
'invoice_settings' => 'Paramètres des factures',
|
||||||
'invoice_number_prefix' => 'Préfixe du numéro de facture',
|
'invoice_number_prefix' => 'Préfixe du numéro de facture',
|
||||||
'invoice_number_counter' => 'Compteur du numéro de facture',
|
'invoice_number_counter' => 'Compteur du numéro de facture',
|
||||||
@ -731,7 +730,7 @@ return array(
|
|||||||
'recent_payments' => 'Paiements récents',
|
'recent_payments' => 'Paiements récents',
|
||||||
'outstanding' => 'Impayé',
|
'outstanding' => 'Impayé',
|
||||||
'manage_companies' => 'Gérer les sociétés',
|
'manage_companies' => 'Gérer les sociétés',
|
||||||
'total_revenue' => 'Revenu total',
|
'total_revenue' => 'Revenu total',
|
||||||
|
|
||||||
'current_user' => 'Utilisateur actuel',
|
'current_user' => 'Utilisateur actuel',
|
||||||
'new_recurring_invoice' => 'Nouvelle facture récurrente',
|
'new_recurring_invoice' => 'Nouvelle facture récurrente',
|
||||||
@ -776,7 +775,7 @@ return array(
|
|||||||
'reminder_subject' => 'Reminder: Invoice :invoice from :account',
|
'reminder_subject' => 'Reminder: Invoice :invoice from :account',
|
||||||
'reset' => 'Remettre à zéro',
|
'reset' => 'Remettre à zéro',
|
||||||
'invoice_not_found' => 'La facture demandée n\'est pas disponible',
|
'invoice_not_found' => 'La facture demandée n\'est pas disponible',
|
||||||
|
|
||||||
'referral_program' => 'Referral Program',
|
'referral_program' => 'Referral Program',
|
||||||
'referral_code' => 'Referral Code',
|
'referral_code' => 'Referral Code',
|
||||||
'last_sent_on' => 'Last sent on :date',
|
'last_sent_on' => 'Last sent on :date',
|
||||||
@ -882,7 +881,7 @@ return array(
|
|||||||
'default_invoice_footer' => 'Pied de page des factures par défaut',
|
'default_invoice_footer' => 'Pied de page des factures par défaut',
|
||||||
'quote_footer' => 'Pied de page des devis',
|
'quote_footer' => 'Pied de page des devis',
|
||||||
'free' => 'Gratuit',
|
'free' => 'Gratuit',
|
||||||
|
|
||||||
'quote_is_approved' => 'Ce devis est approuvé',
|
'quote_is_approved' => 'Ce devis est approuvé',
|
||||||
'apply_credit' => 'Appliquer crédit',
|
'apply_credit' => 'Appliquer crédit',
|
||||||
'system_settings' => 'Paramètres système',
|
'system_settings' => 'Paramètres système',
|
||||||
@ -981,5 +980,127 @@ return array(
|
|||||||
'schedule' => 'Schedule',
|
'schedule' => 'Schedule',
|
||||||
'email_designs' => 'Email Designs',
|
'email_designs' => 'Email Designs',
|
||||||
'assigned_when_sent' => 'Assigned when sent',
|
'assigned_when_sent' => 'Assigned when sent',
|
||||||
|
|
||||||
|
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.',
|
||||||
|
'white_label_purchase_link' => 'Purchase a white label license',
|
||||||
|
|
||||||
|
// Expense / vendor
|
||||||
|
'expense' => 'Expense',
|
||||||
|
'expenses' => 'Expenses',
|
||||||
|
'new_expense' => 'Enter Expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'vendors' => 'Vendors',
|
||||||
|
'new_vendor' => 'Create Vendor',
|
||||||
|
'payment_terms_net' => 'Net',
|
||||||
|
'vendor' => 'Vendor',
|
||||||
|
'edit_vendor' => 'Edit Vendor',
|
||||||
|
'archive_vendor' => 'Archive Vendor',
|
||||||
|
'delete_vendor' => 'Delete Vendor',
|
||||||
|
'view_vendor' => 'View Vendor',
|
||||||
|
'deleted_expense' => 'Successfully deleted expense',
|
||||||
|
'archived_expense' => 'Successfully archived expense',
|
||||||
|
'deleted_expenses' => 'Successfully deleted expenses',
|
||||||
|
'archived_expenses' => 'Successfully archived expenses',
|
||||||
|
|
||||||
|
// Expenses
|
||||||
|
'expense_amount' => 'Expense Amount',
|
||||||
|
'expense_balance' => 'Expense Balance',
|
||||||
|
'expense_date' => 'Expense Date',
|
||||||
|
'expense_should_be_invoiced' => 'Should this expense be invoiced?',
|
||||||
|
'public_notes' => 'Public Notes',
|
||||||
|
'invoice_amount' => 'Invoice Amount',
|
||||||
|
'exchange_rate' => 'Exchange Rate',
|
||||||
|
'yes' => 'Yes',
|
||||||
|
'no' => 'No',
|
||||||
|
'should_be_invoiced' => 'Should be invoiced',
|
||||||
|
'view_expense' => 'View expense # :expense',
|
||||||
|
'edit_expense' => 'Edit Expense',
|
||||||
|
'archive_expense' => 'Archive Expense',
|
||||||
|
'delete_expense' => 'Delete Expense',
|
||||||
|
'view_expense_num' => 'Expense # :expense',
|
||||||
|
'updated_expense' => 'Successfully updated expense',
|
||||||
|
'created_expense' => 'Successfully created expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'view' => 'View',
|
||||||
|
'restore_expense' => 'Restore Expense',
|
||||||
|
'invoice_expense' => 'Invoice Expense',
|
||||||
|
'expense_error_multiple_clients' => 'The expenses can\'t belong to different clients',
|
||||||
|
'expense_error_invoiced' => 'Expense has already been invoiced',
|
||||||
|
'convert_currency' => 'Convert currency',
|
||||||
|
|
||||||
|
// Payment terms
|
||||||
|
'num_days' => 'Number of days',
|
||||||
|
'create_payment_term' => 'Create Payment Term',
|
||||||
|
'edit_payment_terms' => 'Edit Payment Term',
|
||||||
|
'edit_payment_term' => 'Edit Payment Term',
|
||||||
|
'archive_payment_term' => 'Archive Payment Term',
|
||||||
|
|
||||||
|
// recurring due dates
|
||||||
|
'recurring_due_dates' => 'Recurring Invoice Due Dates',
|
||||||
|
'recurring_due_date_help' => '<p>Automatically sets a due date for the invoice.</p>
|
||||||
|
<p>Invoices on a monthly or yearly cycle set to be due on or before the day they are created will be due the next month. Invoices set to be due on the 29th or 30th in months that don\'t have that day will be due the last day of the month.</p>
|
||||||
|
<p>Invoices on a weekly cycle set to be due on the day of the week they are created will be due the next week.</p>
|
||||||
|
<p>For example:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Today is the 15th, due date is 1st of the month. The due date should likely be the 1st of the next month.</li>
|
||||||
|
<li>Today is the 15th, due date is the last day of the month. The due date will be the last day of the this month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the 15th, due date is the 15th day of the month. The due date will be the 15th day of <strong>next</strong> month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the Friday, due date is the 1st Friday after. The due date will be next Friday, not today.
|
||||||
|
</li>
|
||||||
|
</ul>',
|
||||||
|
'due' => 'Due',
|
||||||
|
'next_due_on' => 'Due Next: :date',
|
||||||
|
'use_client_terms' => 'Use client terms',
|
||||||
|
'day_of_month' => ':ordinal day of month',
|
||||||
|
'last_day_of_month' => 'Last day of month',
|
||||||
|
'day_of_week_after' => ':ordinal :day after',
|
||||||
|
'sunday' => 'Sunday',
|
||||||
|
'monday' => 'Monday',
|
||||||
|
'tuesday' => 'Tuesday',
|
||||||
|
'wednesday' => 'Wednesday',
|
||||||
|
'thursday' => 'Thursday',
|
||||||
|
'friday' => 'Friday',
|
||||||
|
'saturday' => 'Saturday',
|
||||||
|
|
||||||
|
// Fonts
|
||||||
|
'header_font_id' => 'Header Font',
|
||||||
|
'body_font_id' => 'Body Font',
|
||||||
|
'color_font_help' => 'Note: the primary color and fonts are also used in the client portal and custom email designs.',
|
||||||
|
|
||||||
|
'live_preview' => 'Live Preview',
|
||||||
|
'invalid_mail_config' => 'Unable to send email, please check that the mail settings are correct.',
|
||||||
|
|
||||||
|
'invoice_message_button' => 'To view your invoice for :amount, click the button below.',
|
||||||
|
'quote_message_button' => 'To view your quote for :amount, click the button below.',
|
||||||
|
'payment_message_button' => 'Thank you for your payment of :amount.',
|
||||||
|
'payment_type_direct_debit' => 'Direct Debit',
|
||||||
|
'bank_accounts' => 'Bank Accounts',
|
||||||
|
'add_bank_account' => 'Add Bank Account',
|
||||||
|
'setup_account' => 'Setup Account',
|
||||||
|
'import_expenses' => 'Import Expenses',
|
||||||
|
'bank_id' => 'bank',
|
||||||
|
'integration_type' => 'Integration Type',
|
||||||
|
'updated_bank_account' => 'Successfully updated bank account',
|
||||||
|
'edit_bank_account' => 'Edit Bank Account',
|
||||||
|
'archive_bank_account' => 'Archive Bank Account',
|
||||||
|
'archived_bank_account' => 'Successfully archived bank account',
|
||||||
|
'created_bank_account' => 'Successfully created bank account',
|
||||||
|
'validate_bank_account' => 'Validate Bank Account',
|
||||||
|
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>',
|
||||||
|
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
|
||||||
|
'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.',
|
||||||
|
'username' => 'Username',
|
||||||
|
'account_number' => 'Account Number',
|
||||||
|
'account_name' => 'Account Name',
|
||||||
|
'bank_account_error' => 'Failed to retreive account details, please check your credentials.',
|
||||||
|
'status_approved' => 'Approved',
|
||||||
|
'quote_settings' => 'Quote Settings',
|
||||||
|
'auto_convert_quote' => 'Auto convert quote',
|
||||||
|
'auto_convert_quote_help' => 'Automatically convert a quote to an invoice when approved by a client.',
|
||||||
|
'validate' => 'Validate',
|
||||||
|
'info' => 'Info',
|
||||||
|
'imported_expenses' => 'Successfully created :count_vendors vendor(s) and :count_expenses expense(s)',
|
||||||
|
|
||||||
);
|
);
|
||||||
|
@ -25,7 +25,7 @@ return array(
|
|||||||
"numeric" => "La valeur de :attribute doit être comprise entre :min et :max.",
|
"numeric" => "La valeur de :attribute doit être comprise entre :min et :max.",
|
||||||
"file" => "Le fichier :attribute doit avoir une taille entre :min et :max kilobytes.",
|
"file" => "Le fichier :attribute doit avoir une taille entre :min et :max kilobytes.",
|
||||||
"string" => "Le texte :attribute doit avoir entre :min et :max caractères.",
|
"string" => "Le texte :attribute doit avoir entre :min et :max caractères.",
|
||||||
"array" => "Le champ :attribute doit avoir entre :min et :max éléments."
|
"array" => "Le champ :attribute doit avoir entre :min et :max éléments.",
|
||||||
),
|
),
|
||||||
"confirmed" => "Le champ de confirmation :attribute ne correspond pas.",
|
"confirmed" => "Le champ de confirmation :attribute ne correspond pas.",
|
||||||
"date" => "Le champ :attribute n'est pas une date valide.",
|
"date" => "Le champ :attribute n'est pas une date valide.",
|
||||||
@ -50,7 +50,7 @@ return array(
|
|||||||
"numeric" => "La valeur de :attribute doit être supérieure à :min.",
|
"numeric" => "La valeur de :attribute doit être supérieure à :min.",
|
||||||
"file" => "Le fichier :attribute doit être plus que gros que :min kilobytes.",
|
"file" => "Le fichier :attribute doit être plus que gros que :min kilobytes.",
|
||||||
"string" => "Le texte :attribute doit contenir au moins :min caractères.",
|
"string" => "Le texte :attribute doit contenir au moins :min caractères.",
|
||||||
"array" => "Le champ :attribute doit avoir au moins :min éléments."
|
"array" => "Le champ :attribute doit avoir au moins :min éléments.",
|
||||||
),
|
),
|
||||||
"not_in" => "Le champ :attribute sélectionné n'est pas valide.",
|
"not_in" => "Le champ :attribute sélectionné n'est pas valide.",
|
||||||
"numeric" => "Le champ :attribute doit contenir un nombre.",
|
"numeric" => "Le champ :attribute doit contenir un nombre.",
|
||||||
@ -66,7 +66,7 @@ return array(
|
|||||||
"numeric" => "La valeur de :attribute doit être :size.",
|
"numeric" => "La valeur de :attribute doit être :size.",
|
||||||
"file" => "La taille du fichier de :attribute doit être de :size kilobytes.",
|
"file" => "La taille du fichier de :attribute doit être de :size kilobytes.",
|
||||||
"string" => "Le texte de :attribute doit contenir :size caractères.",
|
"string" => "Le texte de :attribute doit contenir :size caractères.",
|
||||||
"array" => "Le champ :attribute doit contenir :size éléments."
|
"array" => "Le champ :attribute doit contenir :size éléments.",
|
||||||
),
|
),
|
||||||
"unique" => "La valeur du champ :attribute est déjà utilisée.",
|
"unique" => "La valeur du champ :attribute est déjà utilisée.",
|
||||||
"url" => "Le format de l'URL de :attribute n'est pas valide.",
|
"url" => "Le format de l'URL de :attribute n'est pas valide.",
|
||||||
@ -78,7 +78,7 @@ return array(
|
|||||||
"has_counter" => 'The value must contain {$counter}',
|
"has_counter" => 'The value must contain {$counter}',
|
||||||
"valid_contacts" => "All of the contacts must have either an email or name",
|
"valid_contacts" => "All of the contacts must have either an email or name",
|
||||||
"valid_invoice_items" => "The invoice exceeds the maximum amount",
|
"valid_invoice_items" => "The invoice exceeds the maximum amount",
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Custom Validation Language Lines
|
| Custom Validation Language Lines
|
||||||
@ -136,7 +136,7 @@ return array(
|
|||||||
"date" => "Date",
|
"date" => "Date",
|
||||||
"time" => "Heure",
|
"time" => "Heure",
|
||||||
"available" => "Disponible",
|
"available" => "Disponible",
|
||||||
"size" => "Taille"
|
"size" => "Taille",
|
||||||
),
|
),
|
||||||
|
|
||||||
);
|
);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
|
||||||
|
@ -271,7 +271,7 @@ return array(
|
|||||||
'notification_invoice_sent' => 'Le client suivant :client a reçu par courriel la facture :invoice d\'un montant de :amount',
|
'notification_invoice_sent' => 'Le client suivant :client a reçu par courriel la facture :invoice d\'un montant de :amount',
|
||||||
'notification_invoice_viewed' => 'Le client suivant :client a vu la facture :invoice d\'un montant de :amount',
|
'notification_invoice_viewed' => 'Le client suivant :client a vu la facture :invoice d\'un montant de :amount',
|
||||||
'reset_password' => 'Vous pouvez réinitialiser votre mot de passe en cliquant sur le lien suivant :',
|
'reset_password' => 'Vous pouvez réinitialiser votre mot de passe en cliquant sur le lien suivant :',
|
||||||
'reset_password_footer' => 'Si vous n\'avez pas effectué de demande de réinitalisation de mot de passe veuillez contacter notre support :' . CONTACT_EMAIL,
|
'reset_password_footer' => 'Si vous n\'avez pas effectué de demande de réinitalisation de mot de passe veuillez contacter notre support :'.CONTACT_EMAIL,
|
||||||
|
|
||||||
// Payment page
|
// Payment page
|
||||||
'secure_payment' => 'Paiement sécurisé',
|
'secure_payment' => 'Paiement sécurisé',
|
||||||
@ -299,7 +299,7 @@ return array(
|
|||||||
|
|
||||||
'logout' => 'Se déconnecter',
|
'logout' => 'Se déconnecter',
|
||||||
'sign_up_to_save' => 'Connectez vous pour sauvegarder votre travail',
|
'sign_up_to_save' => 'Connectez vous pour sauvegarder votre travail',
|
||||||
'agree_to_terms' =>'J\'accepte les conditions d\'utilisation d\'Invoice ninja :terms',
|
'agree_to_terms' => 'J\'accepte les conditions d\'utilisation d\'Invoice ninja :terms',
|
||||||
'terms_of_service' => 'Conditions d\'utilisation',
|
'terms_of_service' => 'Conditions d\'utilisation',
|
||||||
'email_taken' => 'L\'adresse courriel existe déjà',
|
'email_taken' => 'L\'adresse courriel existe déjà',
|
||||||
'working' => 'En cours',
|
'working' => 'En cours',
|
||||||
@ -412,7 +412,7 @@ return array(
|
|||||||
'active' => 'Actif',
|
'active' => 'Actif',
|
||||||
'pending' => 'En attente',
|
'pending' => 'En attente',
|
||||||
'deleted_user' => 'Utilisateur supprimé',
|
'deleted_user' => 'Utilisateur supprimé',
|
||||||
'limit_users' => 'Désolé, ceci excédera la limite de ' . MAX_NUM_USERS . ' utilisateurs',
|
'limit_users' => 'Désolé, ceci excédera la limite de '.MAX_NUM_USERS.' utilisateurs',
|
||||||
|
|
||||||
'confirm_email_invoice' => 'Voulez-vous vraiment envoyer cette facture par courriel ?',
|
'confirm_email_invoice' => 'Voulez-vous vraiment envoyer cette facture par courriel ?',
|
||||||
'confirm_email_quote' => 'Voulez-vous vraiment envoyer ce devis par courriel ?',
|
'confirm_email_quote' => 'Voulez-vous vraiment envoyer ce devis par courriel ?',
|
||||||
@ -427,7 +427,6 @@ return array(
|
|||||||
'hide' => 'Cacher',
|
'hide' => 'Cacher',
|
||||||
'new_version_available' => 'Une nouvelle version de :releases_link est disponible. Vous utilisez v:user_version, la plus récente est v:latest_version',
|
'new_version_available' => 'Une nouvelle version de :releases_link est disponible. Vous utilisez v:user_version, la plus récente est v:latest_version',
|
||||||
|
|
||||||
|
|
||||||
'invoice_settings' => 'Paramètres des factures',
|
'invoice_settings' => 'Paramètres des factures',
|
||||||
'invoice_number_prefix' => 'Préfixe du numéro de facture',
|
'invoice_number_prefix' => 'Préfixe du numéro de facture',
|
||||||
'invoice_number_counter' => 'Compteur du numéro de facture',
|
'invoice_number_counter' => 'Compteur du numéro de facture',
|
||||||
@ -667,7 +666,6 @@ return array(
|
|||||||
'partial_value' => 'Must be greater than zero and less than the total',
|
'partial_value' => 'Must be greater than zero and less than the total',
|
||||||
'more_actions' => 'More Actions',
|
'more_actions' => 'More Actions',
|
||||||
|
|
||||||
|
|
||||||
'pro_plan_title' => 'NINJA PRO',
|
'pro_plan_title' => 'NINJA PRO',
|
||||||
'pro_plan_call_to_action' => 'Upgrade Now!',
|
'pro_plan_call_to_action' => 'Upgrade Now!',
|
||||||
'pro_plan_feature1' => 'Create Unlimited Clients',
|
'pro_plan_feature1' => 'Create Unlimited Clients',
|
||||||
@ -732,7 +730,7 @@ return array(
|
|||||||
'recent_payments' => 'Recent Payments',
|
'recent_payments' => 'Recent Payments',
|
||||||
'outstanding' => 'Outstanding',
|
'outstanding' => 'Outstanding',
|
||||||
'manage_companies' => 'Manage Companies',
|
'manage_companies' => 'Manage Companies',
|
||||||
'total_revenue' => 'Total Revenue',
|
'total_revenue' => 'Total Revenue',
|
||||||
|
|
||||||
'current_user' => 'Current User',
|
'current_user' => 'Current User',
|
||||||
'new_recurring_invoice' => 'New Recurring Invoice',
|
'new_recurring_invoice' => 'New Recurring Invoice',
|
||||||
@ -778,7 +776,7 @@ return array(
|
|||||||
'reminder_subject' => 'Reminder: Invoice :invoice from :account',
|
'reminder_subject' => 'Reminder: Invoice :invoice from :account',
|
||||||
'reset' => 'Reset',
|
'reset' => 'Reset',
|
||||||
'invoice_not_found' => 'The requested invoice is not available',
|
'invoice_not_found' => 'The requested invoice is not available',
|
||||||
|
|
||||||
'referral_program' => 'Referral Program',
|
'referral_program' => 'Referral Program',
|
||||||
'referral_code' => 'Referral Code',
|
'referral_code' => 'Referral Code',
|
||||||
'last_sent_on' => 'Last sent on :date',
|
'last_sent_on' => 'Last sent on :date',
|
||||||
@ -882,7 +880,7 @@ return array(
|
|||||||
'default_invoice_footer' => 'Default Invoice Footer',
|
'default_invoice_footer' => 'Default Invoice Footer',
|
||||||
'quote_footer' => 'Quote Footer',
|
'quote_footer' => 'Quote Footer',
|
||||||
'free' => 'Free',
|
'free' => 'Free',
|
||||||
|
|
||||||
'quote_is_approved' => 'This quote is approved',
|
'quote_is_approved' => 'This quote is approved',
|
||||||
'apply_credit' => 'Apply Credit',
|
'apply_credit' => 'Apply Credit',
|
||||||
'system_settings' => 'System Settings',
|
'system_settings' => 'System Settings',
|
||||||
@ -982,4 +980,126 @@ return array(
|
|||||||
'email_designs' => 'Email Designs',
|
'email_designs' => 'Email Designs',
|
||||||
'assigned_when_sent' => 'Assigned when sent',
|
'assigned_when_sent' => 'Assigned when sent',
|
||||||
|
|
||||||
|
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.',
|
||||||
|
'white_label_purchase_link' => 'Purchase a white label license',
|
||||||
|
|
||||||
|
// Expense / vendor
|
||||||
|
'expense' => 'Expense',
|
||||||
|
'expenses' => 'Expenses',
|
||||||
|
'new_expense' => 'Enter Expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'vendors' => 'Vendors',
|
||||||
|
'new_vendor' => 'Create Vendor',
|
||||||
|
'payment_terms_net' => 'Net',
|
||||||
|
'vendor' => 'Vendor',
|
||||||
|
'edit_vendor' => 'Edit Vendor',
|
||||||
|
'archive_vendor' => 'Archive Vendor',
|
||||||
|
'delete_vendor' => 'Delete Vendor',
|
||||||
|
'view_vendor' => 'View Vendor',
|
||||||
|
'deleted_expense' => 'Successfully deleted expense',
|
||||||
|
'archived_expense' => 'Successfully archived expense',
|
||||||
|
'deleted_expenses' => 'Successfully deleted expenses',
|
||||||
|
'archived_expenses' => 'Successfully archived expenses',
|
||||||
|
|
||||||
|
// Expenses
|
||||||
|
'expense_amount' => 'Expense Amount',
|
||||||
|
'expense_balance' => 'Expense Balance',
|
||||||
|
'expense_date' => 'Expense Date',
|
||||||
|
'expense_should_be_invoiced' => 'Should this expense be invoiced?',
|
||||||
|
'public_notes' => 'Public Notes',
|
||||||
|
'invoice_amount' => 'Invoice Amount',
|
||||||
|
'exchange_rate' => 'Exchange Rate',
|
||||||
|
'yes' => 'Yes',
|
||||||
|
'no' => 'No',
|
||||||
|
'should_be_invoiced' => 'Should be invoiced',
|
||||||
|
'view_expense' => 'View expense # :expense',
|
||||||
|
'edit_expense' => 'Edit Expense',
|
||||||
|
'archive_expense' => 'Archive Expense',
|
||||||
|
'delete_expense' => 'Delete Expense',
|
||||||
|
'view_expense_num' => 'Expense # :expense',
|
||||||
|
'updated_expense' => 'Successfully updated expense',
|
||||||
|
'created_expense' => 'Successfully created expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'view' => 'View',
|
||||||
|
'restore_expense' => 'Restore Expense',
|
||||||
|
'invoice_expense' => 'Invoice Expense',
|
||||||
|
'expense_error_multiple_clients' => 'The expenses can\'t belong to different clients',
|
||||||
|
'expense_error_invoiced' => 'Expense has already been invoiced',
|
||||||
|
'convert_currency' => 'Convert currency',
|
||||||
|
|
||||||
|
// Payment terms
|
||||||
|
'num_days' => 'Number of days',
|
||||||
|
'create_payment_term' => 'Create Payment Term',
|
||||||
|
'edit_payment_terms' => 'Edit Payment Term',
|
||||||
|
'edit_payment_term' => 'Edit Payment Term',
|
||||||
|
'archive_payment_term' => 'Archive Payment Term',
|
||||||
|
|
||||||
|
// recurring due dates
|
||||||
|
'recurring_due_dates' => 'Recurring Invoice Due Dates',
|
||||||
|
'recurring_due_date_help' => '<p>Automatically sets a due date for the invoice.</p>
|
||||||
|
<p>Invoices on a monthly or yearly cycle set to be due on or before the day they are created will be due the next month. Invoices set to be due on the 29th or 30th in months that don\'t have that day will be due the last day of the month.</p>
|
||||||
|
<p>Invoices on a weekly cycle set to be due on the day of the week they are created will be due the next week.</p>
|
||||||
|
<p>For example:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Today is the 15th, due date is 1st of the month. The due date should likely be the 1st of the next month.</li>
|
||||||
|
<li>Today is the 15th, due date is the last day of the month. The due date will be the last day of the this month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the 15th, due date is the 15th day of the month. The due date will be the 15th day of <strong>next</strong> month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the Friday, due date is the 1st Friday after. The due date will be next Friday, not today.
|
||||||
|
</li>
|
||||||
|
</ul>',
|
||||||
|
'due' => 'Due',
|
||||||
|
'next_due_on' => 'Due Next: :date',
|
||||||
|
'use_client_terms' => 'Use client terms',
|
||||||
|
'day_of_month' => ':ordinal day of month',
|
||||||
|
'last_day_of_month' => 'Last day of month',
|
||||||
|
'day_of_week_after' => ':ordinal :day after',
|
||||||
|
'sunday' => 'Sunday',
|
||||||
|
'monday' => 'Monday',
|
||||||
|
'tuesday' => 'Tuesday',
|
||||||
|
'wednesday' => 'Wednesday',
|
||||||
|
'thursday' => 'Thursday',
|
||||||
|
'friday' => 'Friday',
|
||||||
|
'saturday' => 'Saturday',
|
||||||
|
|
||||||
|
// Fonts
|
||||||
|
'header_font_id' => 'Header Font',
|
||||||
|
'body_font_id' => 'Body Font',
|
||||||
|
'color_font_help' => 'Note: the primary color and fonts are also used in the client portal and custom email designs.',
|
||||||
|
|
||||||
|
'live_preview' => 'Live Preview',
|
||||||
|
'invalid_mail_config' => 'Unable to send email, please check that the mail settings are correct.',
|
||||||
|
|
||||||
|
'invoice_message_button' => 'To view your invoice for :amount, click the button below.',
|
||||||
|
'quote_message_button' => 'To view your quote for :amount, click the button below.',
|
||||||
|
'payment_message_button' => 'Thank you for your payment of :amount.',
|
||||||
|
'payment_type_direct_debit' => 'Direct Debit',
|
||||||
|
'bank_accounts' => 'Bank Accounts',
|
||||||
|
'add_bank_account' => 'Add Bank Account',
|
||||||
|
'setup_account' => 'Setup Account',
|
||||||
|
'import_expenses' => 'Import Expenses',
|
||||||
|
'bank_id' => 'bank',
|
||||||
|
'integration_type' => 'Integration Type',
|
||||||
|
'updated_bank_account' => 'Successfully updated bank account',
|
||||||
|
'edit_bank_account' => 'Edit Bank Account',
|
||||||
|
'archive_bank_account' => 'Archive Bank Account',
|
||||||
|
'archived_bank_account' => 'Successfully archived bank account',
|
||||||
|
'created_bank_account' => 'Successfully created bank account',
|
||||||
|
'validate_bank_account' => 'Validate Bank Account',
|
||||||
|
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>',
|
||||||
|
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
|
||||||
|
'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.',
|
||||||
|
'username' => 'Username',
|
||||||
|
'account_number' => 'Account Number',
|
||||||
|
'account_name' => 'Account Name',
|
||||||
|
'bank_account_error' => 'Failed to retreive account details, please check your credentials.',
|
||||||
|
'status_approved' => 'Approved',
|
||||||
|
'quote_settings' => 'Quote Settings',
|
||||||
|
'auto_convert_quote' => 'Auto convert quote',
|
||||||
|
'auto_convert_quote_help' => 'Automatically convert a quote to an invoice when approved by a client.',
|
||||||
|
'validate' => 'Validate',
|
||||||
|
'info' => 'Info',
|
||||||
|
'imported_expenses' => 'Successfully created :count_vendors vendor(s) and :count_expenses expense(s)',
|
||||||
|
|
||||||
);
|
);
|
||||||
|
@ -25,7 +25,7 @@ return array(
|
|||||||
"numeric" => "La valeur de :attribute doit être comprise entre :min et :max.",
|
"numeric" => "La valeur de :attribute doit être comprise entre :min et :max.",
|
||||||
"file" => "Le fichier :attribute doit avoir une taille entre :min et :max kilobytes.",
|
"file" => "Le fichier :attribute doit avoir une taille entre :min et :max kilobytes.",
|
||||||
"string" => "Le texte :attribute doit avoir entre :min et :max caractères.",
|
"string" => "Le texte :attribute doit avoir entre :min et :max caractères.",
|
||||||
"array" => "Le champ :attribute doit avoir entre :min et :max éléments."
|
"array" => "Le champ :attribute doit avoir entre :min et :max éléments.",
|
||||||
),
|
),
|
||||||
"confirmed" => "Le champ de confirmation :attribute ne correspond pas.",
|
"confirmed" => "Le champ de confirmation :attribute ne correspond pas.",
|
||||||
"date" => "Le champ :attribute n'est pas une date valide.",
|
"date" => "Le champ :attribute n'est pas une date valide.",
|
||||||
@ -50,7 +50,7 @@ return array(
|
|||||||
"numeric" => "La valeur de :attribute doit être supérieure à :min.",
|
"numeric" => "La valeur de :attribute doit être supérieure à :min.",
|
||||||
"file" => "Le fichier :attribute doit être plus que gros que :min kilobytes.",
|
"file" => "Le fichier :attribute doit être plus que gros que :min kilobytes.",
|
||||||
"string" => "Le texte :attribute doit contenir au moins :min caractères.",
|
"string" => "Le texte :attribute doit contenir au moins :min caractères.",
|
||||||
"array" => "Le champ :attribute doit avoir au moins :min éléments."
|
"array" => "Le champ :attribute doit avoir au moins :min éléments.",
|
||||||
),
|
),
|
||||||
"not_in" => "Le champ :attribute sélectionné n'est pas valide.",
|
"not_in" => "Le champ :attribute sélectionné n'est pas valide.",
|
||||||
"numeric" => "Le champ :attribute doit contenir un nombre.",
|
"numeric" => "Le champ :attribute doit contenir un nombre.",
|
||||||
@ -66,7 +66,7 @@ return array(
|
|||||||
"numeric" => "La valeur de :attribute doit être :size.",
|
"numeric" => "La valeur de :attribute doit être :size.",
|
||||||
"file" => "La taille du fichier de :attribute doit être de :size kilobytes.",
|
"file" => "La taille du fichier de :attribute doit être de :size kilobytes.",
|
||||||
"string" => "Le texte de :attribute doit contenir :size caractères.",
|
"string" => "Le texte de :attribute doit contenir :size caractères.",
|
||||||
"array" => "Le champ :attribute doit contenir :size éléments."
|
"array" => "Le champ :attribute doit contenir :size éléments.",
|
||||||
),
|
),
|
||||||
"unique" => "La valeur du champ :attribute est déjà utilisée.",
|
"unique" => "La valeur du champ :attribute est déjà utilisée.",
|
||||||
"url" => "Le format de l'URL de :attribute n'est pas valide.",
|
"url" => "Le format de l'URL de :attribute n'est pas valide.",
|
||||||
@ -78,7 +78,7 @@ return array(
|
|||||||
"has_counter" => 'The value must contain {$counter}',
|
"has_counter" => 'The value must contain {$counter}',
|
||||||
"valid_contacts" => "All of the contacts must have either an email or name",
|
"valid_contacts" => "All of the contacts must have either an email or name",
|
||||||
"valid_invoice_items" => "The invoice exceeds the maximum amount",
|
"valid_invoice_items" => "The invoice exceeds the maximum amount",
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Custom Validation Language Lines
|
| Custom Validation Language Lines
|
||||||
@ -136,7 +136,7 @@ return array(
|
|||||||
"date" => "Date",
|
"date" => "Date",
|
||||||
"time" => "Heure",
|
"time" => "Heure",
|
||||||
"available" => "Disponible",
|
"available" => "Disponible",
|
||||||
"size" => "Taille"
|
"size" => "Taille",
|
||||||
),
|
),
|
||||||
|
|
||||||
);
|
);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
|
||||||
@ -17,4 +17,4 @@ return array(
|
|||||||
|
|
||||||
'next' => 'Successivo »',
|
'next' => 'Successivo »',
|
||||||
|
|
||||||
);
|
);
|
||||||
|
@ -984,4 +984,126 @@ return array(
|
|||||||
'email_designs' => 'Email Designs',
|
'email_designs' => 'Email Designs',
|
||||||
'assigned_when_sent' => 'Assigned when sent',
|
'assigned_when_sent' => 'Assigned when sent',
|
||||||
|
|
||||||
);
|
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.',
|
||||||
|
'white_label_purchase_link' => 'Purchase a white label license',
|
||||||
|
|
||||||
|
// Expense / vendor
|
||||||
|
'expense' => 'Expense',
|
||||||
|
'expenses' => 'Expenses',
|
||||||
|
'new_expense' => 'Enter Expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'vendors' => 'Vendors',
|
||||||
|
'new_vendor' => 'Create Vendor',
|
||||||
|
'payment_terms_net' => 'Net',
|
||||||
|
'vendor' => 'Vendor',
|
||||||
|
'edit_vendor' => 'Edit Vendor',
|
||||||
|
'archive_vendor' => 'Archive Vendor',
|
||||||
|
'delete_vendor' => 'Delete Vendor',
|
||||||
|
'view_vendor' => 'View Vendor',
|
||||||
|
'deleted_expense' => 'Successfully deleted expense',
|
||||||
|
'archived_expense' => 'Successfully archived expense',
|
||||||
|
'deleted_expenses' => 'Successfully deleted expenses',
|
||||||
|
'archived_expenses' => 'Successfully archived expenses',
|
||||||
|
|
||||||
|
// Expenses
|
||||||
|
'expense_amount' => 'Expense Amount',
|
||||||
|
'expense_balance' => 'Expense Balance',
|
||||||
|
'expense_date' => 'Expense Date',
|
||||||
|
'expense_should_be_invoiced' => 'Should this expense be invoiced?',
|
||||||
|
'public_notes' => 'Public Notes',
|
||||||
|
'invoice_amount' => 'Invoice Amount',
|
||||||
|
'exchange_rate' => 'Exchange Rate',
|
||||||
|
'yes' => 'Yes',
|
||||||
|
'no' => 'No',
|
||||||
|
'should_be_invoiced' => 'Should be invoiced',
|
||||||
|
'view_expense' => 'View expense # :expense',
|
||||||
|
'edit_expense' => 'Edit Expense',
|
||||||
|
'archive_expense' => 'Archive Expense',
|
||||||
|
'delete_expense' => 'Delete Expense',
|
||||||
|
'view_expense_num' => 'Expense # :expense',
|
||||||
|
'updated_expense' => 'Successfully updated expense',
|
||||||
|
'created_expense' => 'Successfully created expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'view' => 'View',
|
||||||
|
'restore_expense' => 'Restore Expense',
|
||||||
|
'invoice_expense' => 'Invoice Expense',
|
||||||
|
'expense_error_multiple_clients' =>'The expenses can\'t belong to different clients',
|
||||||
|
'expense_error_invoiced' => 'Expense has already been invoiced',
|
||||||
|
'convert_currency' => 'Convert currency',
|
||||||
|
|
||||||
|
// Payment terms
|
||||||
|
'num_days' => 'Number of days',
|
||||||
|
'create_payment_term' => 'Create Payment Term',
|
||||||
|
'edit_payment_terms' => 'Edit Payment Term',
|
||||||
|
'edit_payment_term' => 'Edit Payment Term',
|
||||||
|
'archive_payment_term' => 'Archive Payment Term',
|
||||||
|
|
||||||
|
// recurring due dates
|
||||||
|
'recurring_due_dates' => 'Recurring Invoice Due Dates',
|
||||||
|
'recurring_due_date_help' => '<p>Automatically sets a due date for the invoice.</p>
|
||||||
|
<p>Invoices on a monthly or yearly cycle set to be due on or before the day they are created will be due the next month. Invoices set to be due on the 29th or 30th in months that don\'t have that day will be due the last day of the month.</p>
|
||||||
|
<p>Invoices on a weekly cycle set to be due on the day of the week they are created will be due the next week.</p>
|
||||||
|
<p>For example:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Today is the 15th, due date is 1st of the month. The due date should likely be the 1st of the next month.</li>
|
||||||
|
<li>Today is the 15th, due date is the last day of the month. The due date will be the last day of the this month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the 15th, due date is the 15th day of the month. The due date will be the 15th day of <strong>next</strong> month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the Friday, due date is the 1st Friday after. The due date will be next Friday, not today.
|
||||||
|
</li>
|
||||||
|
</ul>',
|
||||||
|
'due' => 'Due',
|
||||||
|
'next_due_on' => 'Due Next: :date',
|
||||||
|
'use_client_terms' => 'Use client terms',
|
||||||
|
'day_of_month' => ':ordinal day of month',
|
||||||
|
'last_day_of_month' => 'Last day of month',
|
||||||
|
'day_of_week_after' => ':ordinal :day after',
|
||||||
|
'sunday' => 'Sunday',
|
||||||
|
'monday' => 'Monday',
|
||||||
|
'tuesday' => 'Tuesday',
|
||||||
|
'wednesday' => 'Wednesday',
|
||||||
|
'thursday' => 'Thursday',
|
||||||
|
'friday' => 'Friday',
|
||||||
|
'saturday' => 'Saturday',
|
||||||
|
|
||||||
|
// Fonts
|
||||||
|
'header_font_id' => 'Header Font',
|
||||||
|
'body_font_id' => 'Body Font',
|
||||||
|
'color_font_help' => 'Note: the primary color and fonts are also used in the client portal and custom email designs.',
|
||||||
|
|
||||||
|
'live_preview' => 'Live Preview',
|
||||||
|
'invalid_mail_config' => 'Unable to send email, please check that the mail settings are correct.',
|
||||||
|
|
||||||
|
'invoice_message_button' => 'To view your invoice for :amount, click the button below.',
|
||||||
|
'quote_message_button' => 'To view your quote for :amount, click the button below.',
|
||||||
|
'payment_message_button' => 'Thank you for your payment of :amount.',
|
||||||
|
'payment_type_direct_debit' => 'Direct Debit',
|
||||||
|
'bank_accounts' => 'Bank Accounts',
|
||||||
|
'add_bank_account' => 'Add Bank Account',
|
||||||
|
'setup_account' => 'Setup Account',
|
||||||
|
'import_expenses' => 'Import Expenses',
|
||||||
|
'bank_id' => 'bank',
|
||||||
|
'integration_type' => 'Integration Type',
|
||||||
|
'updated_bank_account' => 'Successfully updated bank account',
|
||||||
|
'edit_bank_account' => 'Edit Bank Account',
|
||||||
|
'archive_bank_account' => 'Archive Bank Account',
|
||||||
|
'archived_bank_account' => 'Successfully archived bank account',
|
||||||
|
'created_bank_account' => 'Successfully created bank account',
|
||||||
|
'validate_bank_account' => 'Validate Bank Account',
|
||||||
|
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>',
|
||||||
|
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
|
||||||
|
'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.',
|
||||||
|
'username' => 'Username',
|
||||||
|
'account_number' => 'Account Number',
|
||||||
|
'account_name' => 'Account Name',
|
||||||
|
'bank_account_error' => 'Failed to retreive account details, please check your credentials.',
|
||||||
|
'status_approved' => 'Approved',
|
||||||
|
'quote_settings' => 'Quote Settings',
|
||||||
|
'auto_convert_quote' => 'Auto convert quote',
|
||||||
|
'auto_convert_quote_help' => 'Automatically convert a quote to an invoice when approved by a client.',
|
||||||
|
'validate' => 'Validate',
|
||||||
|
'info' => 'Info',
|
||||||
|
'imported_expenses' => 'Successfully created :count_vendors vendor(s) and :count_expenses expense(s)',
|
||||||
|
|
||||||
|
);
|
@ -24,7 +24,7 @@ return array(
|
|||||||
"numeric" => ":attribute deve trovarsi tra :min - :max.",
|
"numeric" => ":attribute deve trovarsi tra :min - :max.",
|
||||||
"file" => ":attribute deve trovarsi tra :min - :max kilobytes.",
|
"file" => ":attribute deve trovarsi tra :min - :max kilobytes.",
|
||||||
"string" => ":attribute deve trovarsi tra :min - :max caratteri.",
|
"string" => ":attribute deve trovarsi tra :min - :max caratteri.",
|
||||||
"array" => ":attribute deve avere tra :min - :max elementi."
|
"array" => ":attribute deve avere tra :min - :max elementi.",
|
||||||
),
|
),
|
||||||
"confirmed" => "Il campo di conferma per :attribute non coincide.",
|
"confirmed" => "Il campo di conferma per :attribute non coincide.",
|
||||||
"date" => ":attribute non è una data valida.",
|
"date" => ":attribute non è una data valida.",
|
||||||
@ -42,14 +42,14 @@ return array(
|
|||||||
"numeric" => ":attribute deve essere minore di :max.",
|
"numeric" => ":attribute deve essere minore di :max.",
|
||||||
"file" => ":attribute non deve essere più grande di :max kilobytes.",
|
"file" => ":attribute non deve essere più grande di :max kilobytes.",
|
||||||
"string" => ":attribute non può contenere più di :max caratteri.",
|
"string" => ":attribute non può contenere più di :max caratteri.",
|
||||||
"array" => ":attribute non può avere più di :max elementi."
|
"array" => ":attribute non può avere più di :max elementi.",
|
||||||
),
|
),
|
||||||
"mimes" => ":attribute deve essere del tipo: :values.",
|
"mimes" => ":attribute deve essere del tipo: :values.",
|
||||||
"min" => array(
|
"min" => array(
|
||||||
"numeric" => ":attribute deve valere almeno :min.",
|
"numeric" => ":attribute deve valere almeno :min.",
|
||||||
"file" => ":attribute deve essere più grande di :min kilobytes.",
|
"file" => ":attribute deve essere più grande di :min kilobytes.",
|
||||||
"string" => ":attribute deve contenere almeno :min caratteri.",
|
"string" => ":attribute deve contenere almeno :min caratteri.",
|
||||||
"array" => ":attribute deve avere almeno :min elementi."
|
"array" => ":attribute deve avere almeno :min elementi.",
|
||||||
),
|
),
|
||||||
"not_in" => "Il valore selezionato per :attribute non è valido.",
|
"not_in" => "Il valore selezionato per :attribute non è valido.",
|
||||||
"numeric" => ":attribute deve essere un numero.",
|
"numeric" => ":attribute deve essere un numero.",
|
||||||
@ -65,7 +65,7 @@ return array(
|
|||||||
"numeric" => ":attribute deve valere :size.",
|
"numeric" => ":attribute deve valere :size.",
|
||||||
"file" => ":attribute deve essere grande :size kilobytes.",
|
"file" => ":attribute deve essere grande :size kilobytes.",
|
||||||
"string" => ":attribute deve contenere :size caratteri.",
|
"string" => ":attribute deve contenere :size caratteri.",
|
||||||
"array" => ":attribute deve contenere :size elementi."
|
"array" => ":attribute deve contenere :size elementi.",
|
||||||
),
|
),
|
||||||
"unique" => ":attribute è stato già utilizzato.",
|
"unique" => ":attribute è stato già utilizzato.",
|
||||||
"url" => ":attribute deve essere un URL.",
|
"url" => ":attribute deve essere un URL.",
|
||||||
@ -77,7 +77,7 @@ return array(
|
|||||||
"has_counter" => 'The value must contain {$counter}',
|
"has_counter" => 'The value must contain {$counter}',
|
||||||
"valid_contacts" => "All of the contacts must have either an email or name",
|
"valid_contacts" => "All of the contacts must have either an email or name",
|
||||||
"valid_invoice_items" => "The invoice exceeds the maximum amount",
|
"valid_invoice_items" => "The invoice exceeds the maximum amount",
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Custom Validation Language Lines
|
| Custom Validation Language Lines
|
||||||
|
@ -991,5 +991,126 @@ return array(
|
|||||||
'email_designs' => 'Email Designs',
|
'email_designs' => 'Email Designs',
|
||||||
'assigned_when_sent' => 'Assigned when sent',
|
'assigned_when_sent' => 'Assigned when sent',
|
||||||
|
|
||||||
);
|
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.',
|
||||||
|
'white_label_purchase_link' => 'Purchase a white label license',
|
||||||
|
|
||||||
|
// Expense / vendor
|
||||||
|
'expense' => 'Expense',
|
||||||
|
'expenses' => 'Expenses',
|
||||||
|
'new_expense' => 'Enter Expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'vendors' => 'Vendors',
|
||||||
|
'new_vendor' => 'Create Vendor',
|
||||||
|
'payment_terms_net' => 'Net',
|
||||||
|
'vendor' => 'Vendor',
|
||||||
|
'edit_vendor' => 'Edit Vendor',
|
||||||
|
'archive_vendor' => 'Archive Vendor',
|
||||||
|
'delete_vendor' => 'Delete Vendor',
|
||||||
|
'view_vendor' => 'View Vendor',
|
||||||
|
'deleted_expense' => 'Successfully deleted expense',
|
||||||
|
'archived_expense' => 'Successfully archived expense',
|
||||||
|
'deleted_expenses' => 'Successfully deleted expenses',
|
||||||
|
'archived_expenses' => 'Successfully archived expenses',
|
||||||
|
|
||||||
|
// Expenses
|
||||||
|
'expense_amount' => 'Expense Amount',
|
||||||
|
'expense_balance' => 'Expense Balance',
|
||||||
|
'expense_date' => 'Expense Date',
|
||||||
|
'expense_should_be_invoiced' => 'Should this expense be invoiced?',
|
||||||
|
'public_notes' => 'Public Notes',
|
||||||
|
'invoice_amount' => 'Invoice Amount',
|
||||||
|
'exchange_rate' => 'Exchange Rate',
|
||||||
|
'yes' => 'Yes',
|
||||||
|
'no' => 'No',
|
||||||
|
'should_be_invoiced' => 'Should be invoiced',
|
||||||
|
'view_expense' => 'View expense # :expense',
|
||||||
|
'edit_expense' => 'Edit Expense',
|
||||||
|
'archive_expense' => 'Archive Expense',
|
||||||
|
'delete_expense' => 'Delete Expense',
|
||||||
|
'view_expense_num' => 'Expense # :expense',
|
||||||
|
'updated_expense' => 'Successfully updated expense',
|
||||||
|
'created_expense' => 'Successfully created expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'view' => 'View',
|
||||||
|
'restore_expense' => 'Restore Expense',
|
||||||
|
'invoice_expense' => 'Invoice Expense',
|
||||||
|
'expense_error_multiple_clients' =>'The expenses can\'t belong to different clients',
|
||||||
|
'expense_error_invoiced' => 'Expense has already been invoiced',
|
||||||
|
'convert_currency' => 'Convert currency',
|
||||||
|
|
||||||
|
// Payment terms
|
||||||
|
'num_days' => 'Number of days',
|
||||||
|
'create_payment_term' => 'Create Payment Term',
|
||||||
|
'edit_payment_terms' => 'Edit Payment Term',
|
||||||
|
'edit_payment_term' => 'Edit Payment Term',
|
||||||
|
'archive_payment_term' => 'Archive Payment Term',
|
||||||
|
|
||||||
|
// recurring due dates
|
||||||
|
'recurring_due_dates' => 'Recurring Invoice Due Dates',
|
||||||
|
'recurring_due_date_help' => '<p>Automatically sets a due date for the invoice.</p>
|
||||||
|
<p>Invoices on a monthly or yearly cycle set to be due on or before the day they are created will be due the next month. Invoices set to be due on the 29th or 30th in months that don\'t have that day will be due the last day of the month.</p>
|
||||||
|
<p>Invoices on a weekly cycle set to be due on the day of the week they are created will be due the next week.</p>
|
||||||
|
<p>For example:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Today is the 15th, due date is 1st of the month. The due date should likely be the 1st of the next month.</li>
|
||||||
|
<li>Today is the 15th, due date is the last day of the month. The due date will be the last day of the this month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the 15th, due date is the 15th day of the month. The due date will be the 15th day of <strong>next</strong> month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the Friday, due date is the 1st Friday after. The due date will be next Friday, not today.
|
||||||
|
</li>
|
||||||
|
</ul>',
|
||||||
|
'due' => 'Due',
|
||||||
|
'next_due_on' => 'Due Next: :date',
|
||||||
|
'use_client_terms' => 'Use client terms',
|
||||||
|
'day_of_month' => ':ordinal day of month',
|
||||||
|
'last_day_of_month' => 'Last day of month',
|
||||||
|
'day_of_week_after' => ':ordinal :day after',
|
||||||
|
'sunday' => 'Sunday',
|
||||||
|
'monday' => 'Monday',
|
||||||
|
'tuesday' => 'Tuesday',
|
||||||
|
'wednesday' => 'Wednesday',
|
||||||
|
'thursday' => 'Thursday',
|
||||||
|
'friday' => 'Friday',
|
||||||
|
'saturday' => 'Saturday',
|
||||||
|
|
||||||
|
// Fonts
|
||||||
|
'header_font_id' => 'Header Font',
|
||||||
|
'body_font_id' => 'Body Font',
|
||||||
|
'color_font_help' => 'Note: the primary color and fonts are also used in the client portal and custom email designs.',
|
||||||
|
|
||||||
|
'live_preview' => 'Live Preview',
|
||||||
|
'invalid_mail_config' => 'Unable to send email, please check that the mail settings are correct.',
|
||||||
|
|
||||||
|
'invoice_message_button' => 'To view your invoice for :amount, click the button below.',
|
||||||
|
'quote_message_button' => 'To view your quote for :amount, click the button below.',
|
||||||
|
'payment_message_button' => 'Thank you for your payment of :amount.',
|
||||||
|
'payment_type_direct_debit' => 'Direct Debit',
|
||||||
|
'bank_accounts' => 'Bank Accounts',
|
||||||
|
'add_bank_account' => 'Add Bank Account',
|
||||||
|
'setup_account' => 'Setup Account',
|
||||||
|
'import_expenses' => 'Import Expenses',
|
||||||
|
'bank_id' => 'bank',
|
||||||
|
'integration_type' => 'Integration Type',
|
||||||
|
'updated_bank_account' => 'Successfully updated bank account',
|
||||||
|
'edit_bank_account' => 'Edit Bank Account',
|
||||||
|
'archive_bank_account' => 'Archive Bank Account',
|
||||||
|
'archived_bank_account' => 'Successfully archived bank account',
|
||||||
|
'created_bank_account' => 'Successfully created bank account',
|
||||||
|
'validate_bank_account' => 'Validate Bank Account',
|
||||||
|
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>',
|
||||||
|
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
|
||||||
|
'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.',
|
||||||
|
'username' => 'Username',
|
||||||
|
'account_number' => 'Account Number',
|
||||||
|
'account_name' => 'Account Name',
|
||||||
|
'bank_account_error' => 'Failed to retreive account details, please check your credentials.',
|
||||||
|
'status_approved' => 'Approved',
|
||||||
|
'quote_settings' => 'Quote Settings',
|
||||||
|
'auto_convert_quote' => 'Auto convert quote',
|
||||||
|
'auto_convert_quote_help' => 'Automatically convert a quote to an invoice when approved by a client.',
|
||||||
|
'validate' => 'Validate',
|
||||||
|
'info' => 'Info',
|
||||||
|
'imported_expenses' => 'Successfully created :count_vendors vendor(s) and :count_expenses expense(s)',
|
||||||
|
|
||||||
|
);
|
@ -1,20 +1,20 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Pagination Language Lines
|
| Pagination Language Lines
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
|
||||||
| The following language lines are used by the paginator library to build
|
| The following language lines are used by the paginator library to build
|
||||||
| the simple pagination links. You are free to change them to anything
|
| the simple pagination links. You are free to change them to anything
|
||||||
| you want to customize your views to better match your application.
|
| you want to customize your views to better match your application.
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'previous' => '« Tilbake',
|
'previous' => '« Tilbake',
|
||||||
|
|
||||||
'next' => 'Neste »',
|
'next' => 'Neste »',
|
||||||
|
|
||||||
);
|
);
|
||||||
|
@ -2,23 +2,23 @@
|
|||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Password Reminder Language Lines
|
| Password Reminder Language Lines
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
|
||||||
| The following language lines are the default lines which match reasons
|
| The following language lines are the default lines which match reasons
|
||||||
| that are given by the password broker for a password update attempt
|
| that are given by the password broker for a password update attempt
|
||||||
| has failed, such as for an invalid token or invalid new password.
|
| has failed, such as for an invalid token or invalid new password.
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
"password" => "Passord må være minst seks tegn og samsvare med bekreftelsen.",
|
"password" => "Passord må være minst seks tegn og samsvare med bekreftelsen.",
|
||||||
|
|
||||||
"user" => "Vi kan ikke finne en bruker med den e-postadressen.",
|
"user" => "Vi kan ikke finne en bruker med den e-postadressen.",
|
||||||
|
|
||||||
"token" => "Denne tilbakestillingsnøkkelen er ugyldig.",
|
"token" => "Denne tilbakestillingsnøkkelen er ugyldig.",
|
||||||
|
|
||||||
"sent" => "Passord påminnelse sendt!",
|
"sent" => "Passord påminnelse sendt!",
|
||||||
|
|
||||||
);
|
);
|
||||||
|
@ -989,4 +989,126 @@ return array(
|
|||||||
'email_designs' => 'Email Designs',
|
'email_designs' => 'Email Designs',
|
||||||
'assigned_when_sent' => 'Assigned when sent',
|
'assigned_when_sent' => 'Assigned when sent',
|
||||||
|
|
||||||
);
|
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.',
|
||||||
|
'white_label_purchase_link' => 'Purchase a white label license',
|
||||||
|
|
||||||
|
// Expense / vendor
|
||||||
|
'expense' => 'Expense',
|
||||||
|
'expenses' => 'Expenses',
|
||||||
|
'new_expense' => 'Enter Expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'vendors' => 'Vendors',
|
||||||
|
'new_vendor' => 'Create Vendor',
|
||||||
|
'payment_terms_net' => 'Net',
|
||||||
|
'vendor' => 'Vendor',
|
||||||
|
'edit_vendor' => 'Edit Vendor',
|
||||||
|
'archive_vendor' => 'Archive Vendor',
|
||||||
|
'delete_vendor' => 'Delete Vendor',
|
||||||
|
'view_vendor' => 'View Vendor',
|
||||||
|
'deleted_expense' => 'Successfully deleted expense',
|
||||||
|
'archived_expense' => 'Successfully archived expense',
|
||||||
|
'deleted_expenses' => 'Successfully deleted expenses',
|
||||||
|
'archived_expenses' => 'Successfully archived expenses',
|
||||||
|
|
||||||
|
// Expenses
|
||||||
|
'expense_amount' => 'Expense Amount',
|
||||||
|
'expense_balance' => 'Expense Balance',
|
||||||
|
'expense_date' => 'Expense Date',
|
||||||
|
'expense_should_be_invoiced' => 'Should this expense be invoiced?',
|
||||||
|
'public_notes' => 'Public Notes',
|
||||||
|
'invoice_amount' => 'Invoice Amount',
|
||||||
|
'exchange_rate' => 'Exchange Rate',
|
||||||
|
'yes' => 'Yes',
|
||||||
|
'no' => 'No',
|
||||||
|
'should_be_invoiced' => 'Should be invoiced',
|
||||||
|
'view_expense' => 'View expense # :expense',
|
||||||
|
'edit_expense' => 'Edit Expense',
|
||||||
|
'archive_expense' => 'Archive Expense',
|
||||||
|
'delete_expense' => 'Delete Expense',
|
||||||
|
'view_expense_num' => 'Expense # :expense',
|
||||||
|
'updated_expense' => 'Successfully updated expense',
|
||||||
|
'created_expense' => 'Successfully created expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'view' => 'View',
|
||||||
|
'restore_expense' => 'Restore Expense',
|
||||||
|
'invoice_expense' => 'Invoice Expense',
|
||||||
|
'expense_error_multiple_clients' =>'The expenses can\'t belong to different clients',
|
||||||
|
'expense_error_invoiced' => 'Expense has already been invoiced',
|
||||||
|
'convert_currency' => 'Convert currency',
|
||||||
|
|
||||||
|
// Payment terms
|
||||||
|
'num_days' => 'Number of days',
|
||||||
|
'create_payment_term' => 'Create Payment Term',
|
||||||
|
'edit_payment_terms' => 'Edit Payment Term',
|
||||||
|
'edit_payment_term' => 'Edit Payment Term',
|
||||||
|
'archive_payment_term' => 'Archive Payment Term',
|
||||||
|
|
||||||
|
// recurring due dates
|
||||||
|
'recurring_due_dates' => 'Recurring Invoice Due Dates',
|
||||||
|
'recurring_due_date_help' => '<p>Automatically sets a due date for the invoice.</p>
|
||||||
|
<p>Invoices on a monthly or yearly cycle set to be due on or before the day they are created will be due the next month. Invoices set to be due on the 29th or 30th in months that don\'t have that day will be due the last day of the month.</p>
|
||||||
|
<p>Invoices on a weekly cycle set to be due on the day of the week they are created will be due the next week.</p>
|
||||||
|
<p>For example:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Today is the 15th, due date is 1st of the month. The due date should likely be the 1st of the next month.</li>
|
||||||
|
<li>Today is the 15th, due date is the last day of the month. The due date will be the last day of the this month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the 15th, due date is the 15th day of the month. The due date will be the 15th day of <strong>next</strong> month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the Friday, due date is the 1st Friday after. The due date will be next Friday, not today.
|
||||||
|
</li>
|
||||||
|
</ul>',
|
||||||
|
'due' => 'Due',
|
||||||
|
'next_due_on' => 'Due Next: :date',
|
||||||
|
'use_client_terms' => 'Use client terms',
|
||||||
|
'day_of_month' => ':ordinal day of month',
|
||||||
|
'last_day_of_month' => 'Last day of month',
|
||||||
|
'day_of_week_after' => ':ordinal :day after',
|
||||||
|
'sunday' => 'Sunday',
|
||||||
|
'monday' => 'Monday',
|
||||||
|
'tuesday' => 'Tuesday',
|
||||||
|
'wednesday' => 'Wednesday',
|
||||||
|
'thursday' => 'Thursday',
|
||||||
|
'friday' => 'Friday',
|
||||||
|
'saturday' => 'Saturday',
|
||||||
|
|
||||||
|
// Fonts
|
||||||
|
'header_font_id' => 'Header Font',
|
||||||
|
'body_font_id' => 'Body Font',
|
||||||
|
'color_font_help' => 'Note: the primary color and fonts are also used in the client portal and custom email designs.',
|
||||||
|
|
||||||
|
'live_preview' => 'Live Preview',
|
||||||
|
'invalid_mail_config' => 'Unable to send email, please check that the mail settings are correct.',
|
||||||
|
|
||||||
|
'invoice_message_button' => 'To view your invoice for :amount, click the button below.',
|
||||||
|
'quote_message_button' => 'To view your quote for :amount, click the button below.',
|
||||||
|
'payment_message_button' => 'Thank you for your payment of :amount.',
|
||||||
|
'payment_type_direct_debit' => 'Direct Debit',
|
||||||
|
'bank_accounts' => 'Bank Accounts',
|
||||||
|
'add_bank_account' => 'Add Bank Account',
|
||||||
|
'setup_account' => 'Setup Account',
|
||||||
|
'import_expenses' => 'Import Expenses',
|
||||||
|
'bank_id' => 'bank',
|
||||||
|
'integration_type' => 'Integration Type',
|
||||||
|
'updated_bank_account' => 'Successfully updated bank account',
|
||||||
|
'edit_bank_account' => 'Edit Bank Account',
|
||||||
|
'archive_bank_account' => 'Archive Bank Account',
|
||||||
|
'archived_bank_account' => 'Successfully archived bank account',
|
||||||
|
'created_bank_account' => 'Successfully created bank account',
|
||||||
|
'validate_bank_account' => 'Validate Bank Account',
|
||||||
|
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>',
|
||||||
|
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
|
||||||
|
'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.',
|
||||||
|
'username' => 'Username',
|
||||||
|
'account_number' => 'Account Number',
|
||||||
|
'account_name' => 'Account Name',
|
||||||
|
'bank_account_error' => 'Failed to retreive account details, please check your credentials.',
|
||||||
|
'status_approved' => 'Approved',
|
||||||
|
'quote_settings' => 'Quote Settings',
|
||||||
|
'auto_convert_quote' => 'Auto convert quote',
|
||||||
|
'auto_convert_quote_help' => 'Automatically convert a quote to an invoice when approved by a client.',
|
||||||
|
'validate' => 'Validate',
|
||||||
|
'info' => 'Info',
|
||||||
|
'imported_expenses' => 'Successfully created :count_vendors vendor(s) and :count_expenses expense(s)',
|
||||||
|
|
||||||
|
);
|
@ -2,103 +2,103 @@
|
|||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Validation Language Lines
|
| Validation Language Lines
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
|
||||||
| The following language lines contain the default error messages used by
|
| The following language lines contain the default error messages used by
|
||||||
| the validator class. Some of these rules have multiple versions such
|
| the validator class. Some of these rules have multiple versions such
|
||||||
| such as the size rules. Feel free to tweak each of these messages.
|
| such as the size rules. Feel free to tweak each of these messages.
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
"accepted" => ":attribute må være akseptert.",
|
"accepted" => ":attribute må være akseptert.",
|
||||||
"active_url" => ":attribute er ikke en gyldig nettadresse.",
|
"active_url" => ":attribute er ikke en gyldig nettadresse.",
|
||||||
"after" => ":attribute må være en dato etter :date.",
|
"after" => ":attribute må være en dato etter :date.",
|
||||||
"alpha" => ":attribute kan kun inneholde bokstaver.",
|
"alpha" => ":attribute kan kun inneholde bokstaver.",
|
||||||
"alpha_dash" => ":attribute kan kun inneholde bokstaver, sifre, og bindestreker.",
|
"alpha_dash" => ":attribute kan kun inneholde bokstaver, sifre, og bindestreker.",
|
||||||
"alpha_num" => ":attribute kan kun inneholde bokstaver og sifre.",
|
"alpha_num" => ":attribute kan kun inneholde bokstaver og sifre.",
|
||||||
"array" => ":attribute må være en matrise.",
|
"array" => ":attribute må være en matrise.",
|
||||||
"before" => ":attribute må være en dato før :date.",
|
"before" => ":attribute må være en dato før :date.",
|
||||||
"between" => array(
|
"between" => array(
|
||||||
"numeric" => ":attribute må være mellom :min - :max.",
|
"numeric" => ":attribute må være mellom :min - :max.",
|
||||||
"file" => ":attribute må være mellom :min - :max kilobytes.",
|
"file" => ":attribute må være mellom :min - :max kilobytes.",
|
||||||
"string" => ":attribute må være mellom :min - :max tegn.",
|
"string" => ":attribute må være mellom :min - :max tegn.",
|
||||||
"array" => ":attribute må ha mellom :min - :max elementer.",
|
"array" => ":attribute må ha mellom :min - :max elementer.",
|
||||||
),
|
),
|
||||||
"confirmed" => ":attribute bekreftelsen stemmer ikke",
|
"confirmed" => ":attribute bekreftelsen stemmer ikke",
|
||||||
"date" => ":attribute er ikke en gyldig dato.",
|
"date" => ":attribute er ikke en gyldig dato.",
|
||||||
"date_format" => ":attribute samsvarer ikke med formatet :format.",
|
"date_format" => ":attribute samsvarer ikke med formatet :format.",
|
||||||
"different" => ":attribute og :other må være forskjellig.",
|
"different" => ":attribute og :other må være forskjellig.",
|
||||||
"digits" => ":attribute må være :digits sifre.",
|
"digits" => ":attribute må være :digits sifre.",
|
||||||
"digits_between" => ":attribute må være mellom :min og :max sifre.",
|
"digits_between" => ":attribute må være mellom :min og :max sifre.",
|
||||||
"email" => ":attribute formatet er ugyldig.",
|
"email" => ":attribute formatet er ugyldig.",
|
||||||
"exists" => "Valgt :attribute er ugyldig.",
|
"exists" => "Valgt :attribute er ugyldig.",
|
||||||
"image" => ":attribute må være et bilde.",
|
"image" => ":attribute må være et bilde.",
|
||||||
"in" => "Valgt :attribute er ugyldig.",
|
"in" => "Valgt :attribute er ugyldig.",
|
||||||
"integer" => ":attribute må være heltall.",
|
"integer" => ":attribute må være heltall.",
|
||||||
"ip" => ":attribute må være en gyldig IP-adresse.",
|
"ip" => ":attribute må være en gyldig IP-adresse.",
|
||||||
"max" => array(
|
"max" => array(
|
||||||
"numeric" => ":attribute kan ikke være høyere enn :max.",
|
"numeric" => ":attribute kan ikke være høyere enn :max.",
|
||||||
"file" => ":attribute kan ikke være større enn :max kilobytes.",
|
"file" => ":attribute kan ikke være større enn :max kilobytes.",
|
||||||
"string" => ":attribute kan ikke være mer enn :max tegn.",
|
"string" => ":attribute kan ikke være mer enn :max tegn.",
|
||||||
"array" => ":attribute kan ikke inneholde mer enn :max elementer.",
|
"array" => ":attribute kan ikke inneholde mer enn :max elementer.",
|
||||||
),
|
),
|
||||||
"mimes" => ":attribute må være av filtypen: :values.",
|
"mimes" => ":attribute må være av filtypen: :values.",
|
||||||
"min" => array(
|
"min" => array(
|
||||||
"numeric" => ":attribute må minimum være :min.",
|
"numeric" => ":attribute må minimum være :min.",
|
||||||
"file" => ":attribute må minimum være :min kilobytes.",
|
"file" => ":attribute må minimum være :min kilobytes.",
|
||||||
"string" => ":attribute må minimum være :min tegn.",
|
"string" => ":attribute må minimum være :min tegn.",
|
||||||
"array" => ":attribute må inneholde minimum :min elementer.",
|
"array" => ":attribute må inneholde minimum :min elementer.",
|
||||||
),
|
),
|
||||||
"not_in" => "Valgt :attribute er ugyldig.",
|
"not_in" => "Valgt :attribute er ugyldig.",
|
||||||
"numeric" => ":attribute må være et siffer.",
|
"numeric" => ":attribute må være et siffer.",
|
||||||
"regex" => ":attribute formatet er ugyldig.",
|
"regex" => ":attribute formatet er ugyldig.",
|
||||||
"required" => ":attribute er påkrevd.",
|
"required" => ":attribute er påkrevd.",
|
||||||
"required_if" => ":attribute er påkrevd når :other er :value.",
|
"required_if" => ":attribute er påkrevd når :other er :value.",
|
||||||
"required_with" => ":attribute er påkrevd når :values er valgt.",
|
"required_with" => ":attribute er påkrevd når :values er valgt.",
|
||||||
"required_without" => ":attribute er påkrevd når :values ikke er valgt.",
|
"required_without" => ":attribute er påkrevd når :values ikke er valgt.",
|
||||||
"same" => ":attribute og :other må samsvare.",
|
"same" => ":attribute og :other må samsvare.",
|
||||||
"size" => array(
|
"size" => array(
|
||||||
"numeric" => ":attribute må være :size.",
|
"numeric" => ":attribute må være :size.",
|
||||||
"file" => ":attribute må være :size kilobytes.",
|
"file" => ":attribute må være :size kilobytes.",
|
||||||
"string" => ":attribute må være :size tegn.",
|
"string" => ":attribute må være :size tegn.",
|
||||||
"array" => ":attribute må inneholde :size elementer.",
|
"array" => ":attribute må inneholde :size elementer.",
|
||||||
),
|
),
|
||||||
"unique" => ":attribute er allerede blitt tatt.",
|
"unique" => ":attribute er allerede blitt tatt.",
|
||||||
"url" => ":attribute formatet er ugyldig.",
|
"url" => ":attribute formatet er ugyldig.",
|
||||||
|
|
||||||
"positive" => ":attribute må være mer enn null.",
|
"positive" => ":attribute må være mer enn null.",
|
||||||
"has_credit" => "Klienten har ikke høy nok kreditt.",
|
"has_credit" => "Klienten har ikke høy nok kreditt.",
|
||||||
"notmasked" => "Verdiene er skjult",
|
"notmasked" => "Verdiene er skjult",
|
||||||
"less_than" => ':attribute må være mindre enn :value',
|
"less_than" => ':attribute må være mindre enn :value',
|
||||||
"has_counter" => 'Verdien må inneholde {$counter}',
|
"has_counter" => 'Verdien må inneholde {$counter}',
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Custom Validation Language Lines
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| Here you may specify custom validation messages for attributes using the
|
|
||||||
| convention "attribute.rule" to name the lines. This makes it quick to
|
|
||||||
| specify a specific custom language line for a given attribute rule.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'custom' => array(),
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Custom Validation Language Lines
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Here you may specify custom validation messages for attributes using the
|
||||||
|
| convention "attribute.rule" to name the lines. This makes it quick to
|
||||||
|
| specify a specific custom language line for a given attribute rule.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
'custom' => array(),
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Custom Validation Attributes
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| The following language lines are used to swap attribute place-holders
|
|
||||||
| with something more reader friendly such as E-Mail Address instead
|
|
||||||
| of "email". This simply helps us make messages a little cleaner.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'attributes' => array(),
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Custom Validation Attributes
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| The following language lines are used to swap attribute place-holders
|
||||||
|
| with something more reader friendly such as E-Mail Address instead
|
||||||
|
| of "email". This simply helps us make messages a little cleaner.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'attributes' => array(),
|
||||||
|
|
||||||
);
|
);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
|
||||||
@ -17,4 +17,4 @@ return array(
|
|||||||
|
|
||||||
'next' => 'Volgende »',
|
'next' => 'Volgende »',
|
||||||
|
|
||||||
);
|
);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
|
||||||
@ -116,11 +116,11 @@ return array(
|
|||||||
'billed_client' => 'Gefactureerde klant',
|
'billed_client' => 'Gefactureerde klant',
|
||||||
'billed_clients' => 'Gefactureerde klanten',
|
'billed_clients' => 'Gefactureerde klanten',
|
||||||
'active_client' => 'Actieve klant',
|
'active_client' => 'Actieve klant',
|
||||||
'active_clients' => 'Actieve klanten',
|
'active_clients' => 'Actieve klanten',
|
||||||
'invoices_past_due' => 'Vervallen facturen',
|
'invoices_past_due' => 'Vervallen facturen',
|
||||||
'upcoming_invoices' => 'Aankomende facturen',
|
'upcoming_invoices' => 'Aankomende facturen',
|
||||||
'average_invoice' => 'Gemiddelde factuur',
|
'average_invoice' => 'Gemiddelde factuur',
|
||||||
|
|
||||||
// list pages
|
// list pages
|
||||||
'archive' => 'Archiveer',
|
'archive' => 'Archiveer',
|
||||||
'delete' => 'Verwijder',
|
'delete' => 'Verwijder',
|
||||||
@ -270,15 +270,15 @@ return array(
|
|||||||
'notification_invoice_sent' => 'De volgende klant :client heeft Factuur :invoice voor :amount gemaild gekregen.',
|
'notification_invoice_sent' => 'De volgende klant :client heeft Factuur :invoice voor :amount gemaild gekregen.',
|
||||||
'notification_invoice_viewed' => 'De volgende klant :client heeft Factuur :invoice voor :amount bekeken.',
|
'notification_invoice_viewed' => 'De volgende klant :client heeft Factuur :invoice voor :amount bekeken.',
|
||||||
'reset_password' => 'U kunt het wachtwoord van uw account resetten door op de volgende link te klikken:',
|
'reset_password' => 'U kunt het wachtwoord van uw account resetten door op de volgende link te klikken:',
|
||||||
'reset_password_footer' => 'Neem a.u.b. contact op met onze helpdesk indien u deze wachtwoordreset niet heeft aangevraagd. Het e-mailadres van de helpdesk is ' . CONTACT_EMAIL,
|
'reset_password_footer' => 'Neem a.u.b. contact op met onze helpdesk indien u deze wachtwoordreset niet heeft aangevraagd. Het e-mailadres van de helpdesk is '.CONTACT_EMAIL,
|
||||||
|
|
||||||
// Payment page
|
// Payment page
|
||||||
'secure_payment' => 'Veilige betaling',
|
'secure_payment' => 'Veilige betaling',
|
||||||
'card_number' => 'Kaartnummer',
|
'card_number' => 'Kaartnummer',
|
||||||
'expiration_month' => 'Verval maand',
|
'expiration_month' => 'Verval maand',
|
||||||
'expiration_year' => 'Verval jaar',
|
'expiration_year' => 'Verval jaar',
|
||||||
'cvv' => 'CVV',
|
'cvv' => 'CVV',
|
||||||
|
|
||||||
// Security alerts
|
// Security alerts
|
||||||
'security' => [
|
'security' => [
|
||||||
'too_many_attempts' => 'Te veel pogingen. Probeer opnieuw binnen enkele minuten.',
|
'too_many_attempts' => 'Te veel pogingen. Probeer opnieuw binnen enkele minuten.',
|
||||||
@ -289,16 +289,16 @@ return array(
|
|||||||
'password_reset' => 'Uw wachtwoord is succesvol aangepast.',
|
'password_reset' => 'Uw wachtwoord is succesvol aangepast.',
|
||||||
'wrong_password_reset' => 'Ongeldig wachtwoord. Probeer opnieuw',
|
'wrong_password_reset' => 'Ongeldig wachtwoord. Probeer opnieuw',
|
||||||
],
|
],
|
||||||
|
|
||||||
// Pro Plan
|
// Pro Plan
|
||||||
'pro_plan' => [
|
'pro_plan' => [
|
||||||
'remove_logo' => ':link om het InvoiceNinja logo te verwijderen door het pro plan te nemen',
|
'remove_logo' => ':link om het InvoiceNinja logo te verwijderen door het pro plan te nemen',
|
||||||
'remove_logo_link' => 'Klik hier',
|
'remove_logo_link' => 'Klik hier',
|
||||||
],
|
],
|
||||||
|
|
||||||
'logout' => 'Afmelden',
|
'logout' => 'Afmelden',
|
||||||
'sign_up_to_save' => 'Registreer u om uw werk op te slaan',
|
'sign_up_to_save' => 'Registreer u om uw werk op te slaan',
|
||||||
'agree_to_terms' =>'Ik accepteer de InvoiceNinja :terms',
|
'agree_to_terms' => 'Ik accepteer de InvoiceNinja :terms',
|
||||||
'terms_of_service' => 'Gebruiksvoorwaarden',
|
'terms_of_service' => 'Gebruiksvoorwaarden',
|
||||||
'email_taken' => 'Het e-mailadres is al geregistreerd',
|
'email_taken' => 'Het e-mailadres is al geregistreerd',
|
||||||
'working' => 'Actief',
|
'working' => 'Actief',
|
||||||
@ -307,7 +307,7 @@ return array(
|
|||||||
'erase_data' => 'Dit zal uw data permanent verwijderen.',
|
'erase_data' => 'Dit zal uw data permanent verwijderen.',
|
||||||
'password' => 'Wachtwoord',
|
'password' => 'Wachtwoord',
|
||||||
'invoice_subject' => 'Nieuwe factuur :invoice van :account',
|
'invoice_subject' => 'Nieuwe factuur :invoice van :account',
|
||||||
'close' => 'Sluiten',
|
'close' => 'Sluiten',
|
||||||
|
|
||||||
'pro_plan_product' => 'Pro Plan',
|
'pro_plan_product' => 'Pro Plan',
|
||||||
'pro_plan_description' => 'Één jaar abbonnement op het InvoiceNinja Pro Plan.',
|
'pro_plan_description' => 'Één jaar abbonnement op het InvoiceNinja Pro Plan.',
|
||||||
@ -389,10 +389,10 @@ return array(
|
|||||||
'notification_quote_sent_subject' => 'Offerte :invoice is verstuurd naar :client',
|
'notification_quote_sent_subject' => 'Offerte :invoice is verstuurd naar :client',
|
||||||
'notification_quote_viewed_subject' => 'Offerte :invoice is bekeken door :client',
|
'notification_quote_viewed_subject' => 'Offerte :invoice is bekeken door :client',
|
||||||
'notification_quote_sent' => 'Klant :client heeft offerte :invoice voor :amount per email ontvangen.',
|
'notification_quote_sent' => 'Klant :client heeft offerte :invoice voor :amount per email ontvangen.',
|
||||||
'notification_quote_viewed' => 'Klant :client heeft offerte :invoice voor :amount bekeken.',
|
'notification_quote_viewed' => 'Klant :client heeft offerte :invoice voor :amount bekeken.',
|
||||||
'auto_convert_quote' => 'Offerte automatisch omzetten in factuur als deze goed gekeurd wordt',
|
'auto_convert_quote' => 'Offerte automatisch omzetten in factuur als deze goed gekeurd wordt',
|
||||||
|
|
||||||
'session_expired' => 'Uw sessie is verlopen.',
|
'session_expired' => 'Uw sessie is verlopen.',
|
||||||
|
|
||||||
'invoice_fields' => 'Factuurvelden',
|
'invoice_fields' => 'Factuurvelden',
|
||||||
'invoice_options' => 'Factuuropties',
|
'invoice_options' => 'Factuuropties',
|
||||||
@ -415,11 +415,11 @@ return array(
|
|||||||
'active' => 'Actief',
|
'active' => 'Actief',
|
||||||
'pending' => 'In afwachting',
|
'pending' => 'In afwachting',
|
||||||
'deleted_user' => 'Gebruiker succesvol verwijderd',
|
'deleted_user' => 'Gebruiker succesvol verwijderd',
|
||||||
'limit_users' => 'Sorry, dit zou de limiet van ' . MAX_NUM_USERS . ' gebruikers overschrijden',
|
'limit_users' => 'Sorry, dit zou de limiet van '.MAX_NUM_USERS.' gebruikers overschrijden',
|
||||||
|
|
||||||
'confirm_email_invoice' => 'Weet u zeker dat u deze factuur wilt mailen?',
|
'confirm_email_invoice' => 'Weet u zeker dat u deze factuur wilt mailen?',
|
||||||
'confirm_email_quote' => 'Weet u zeker dat u deze offerte wilt mailen?',
|
'confirm_email_quote' => 'Weet u zeker dat u deze offerte wilt mailen?',
|
||||||
'confirm_recurring_email_invoice' => 'Terugkeren (herhalen) staat aan, weet u zeker dat u deze factuur wilt mailen?',
|
'confirm_recurring_email_invoice' => 'Terugkeren (herhalen) staat aan, weet u zeker dat u deze factuur wilt mailen?',
|
||||||
|
|
||||||
'cancel_account' => 'Zeg Account Op',
|
'cancel_account' => 'Zeg Account Op',
|
||||||
'cancel_account_message' => 'Waarschuwing: Dit zal al uw data verwijderen. Er is geen manier om dit ongedaan te maken',
|
'cancel_account_message' => 'Waarschuwing: Dit zal al uw data verwijderen. Er is geen manier om dit ongedaan te maken',
|
||||||
@ -438,8 +438,7 @@ return array(
|
|||||||
'share_invoice_counter' => 'Deel factuur teller',
|
'share_invoice_counter' => 'Deel factuur teller',
|
||||||
'invoice_issued_to' => 'Factuur uitgegeven aan',
|
'invoice_issued_to' => 'Factuur uitgegeven aan',
|
||||||
'invalid_counter' => 'Stel een factuurnummervoorvoegsel of offertenummervoorvoegsel in om een mogelijk conflict te voorkomen.',
|
'invalid_counter' => 'Stel een factuurnummervoorvoegsel of offertenummervoorvoegsel in om een mogelijk conflict te voorkomen.',
|
||||||
'mark_sent' => 'Markeer als verzonden',
|
'mark_sent' => 'Markeer als verzonden',
|
||||||
|
|
||||||
|
|
||||||
'gateway_help_1' => ':link om in te schrijven voor Authorize.net.',
|
'gateway_help_1' => ':link om in te schrijven voor Authorize.net.',
|
||||||
'gateway_help_2' => ':link om in te schrijven voor Authorize.net.',
|
'gateway_help_2' => ':link om in te schrijven voor Authorize.net.',
|
||||||
@ -455,7 +454,6 @@ return array(
|
|||||||
'buy' => 'Koop',
|
'buy' => 'Koop',
|
||||||
'bought_designs' => 'Aanvullende factuurontwerpen succesvol toegevoegd',
|
'bought_designs' => 'Aanvullende factuurontwerpen succesvol toegevoegd',
|
||||||
|
|
||||||
|
|
||||||
'sent' => 'verzonden',
|
'sent' => 'verzonden',
|
||||||
'timesheets' => 'Timesheets',
|
'timesheets' => 'Timesheets',
|
||||||
|
|
||||||
@ -472,7 +470,6 @@ return array(
|
|||||||
'bought_white_label' => 'White label licentie succesvol geactiveerd',
|
'bought_white_label' => 'White label licentie succesvol geactiveerd',
|
||||||
'white_labeled' => 'White labeled',
|
'white_labeled' => 'White labeled',
|
||||||
|
|
||||||
|
|
||||||
'restore' => 'Herstel',
|
'restore' => 'Herstel',
|
||||||
'restore_invoice' => 'Herstel factuur',
|
'restore_invoice' => 'Herstel factuur',
|
||||||
'restore_quote' => 'Herstel offerte',
|
'restore_quote' => 'Herstel offerte',
|
||||||
@ -485,7 +482,7 @@ return array(
|
|||||||
'restored_client' => 'Klant succesvol hersteld',
|
'restored_client' => 'Klant succesvol hersteld',
|
||||||
'restored_payment' => 'Betaling succesvol hersteld',
|
'restored_payment' => 'Betaling succesvol hersteld',
|
||||||
'restored_credit' => 'Kredietnota succesvol hersteld',
|
'restored_credit' => 'Kredietnota succesvol hersteld',
|
||||||
|
|
||||||
'reason_for_canceling' => 'Help ons om onze site te verbeteren door ons te vertellen waarom u weggaat.',
|
'reason_for_canceling' => 'Help ons om onze site te verbeteren door ons te vertellen waarom u weggaat.',
|
||||||
'discount_percent' => 'Percentage',
|
'discount_percent' => 'Percentage',
|
||||||
'discount_amount' => 'Bedrag',
|
'discount_amount' => 'Bedrag',
|
||||||
@ -589,7 +586,7 @@ return array(
|
|||||||
'knowledge_base' => 'Kennis databank',
|
'knowledge_base' => 'Kennis databank',
|
||||||
'partial' => 'Gedeeld',
|
'partial' => 'Gedeeld',
|
||||||
'partial_remaining' => ':partial / :balance',
|
'partial_remaining' => ':partial / :balance',
|
||||||
|
|
||||||
'more_fields' => 'Meer velden',
|
'more_fields' => 'Meer velden',
|
||||||
'less_fields' => 'Minder velden',
|
'less_fields' => 'Minder velden',
|
||||||
'client_name' => 'Klantnaam',
|
'client_name' => 'Klantnaam',
|
||||||
@ -600,7 +597,7 @@ return array(
|
|||||||
'view_documentation' => 'Bekijk documentatie',
|
'view_documentation' => 'Bekijk documentatie',
|
||||||
'app_title' => 'Gratis Open-Source Online Facturatie',
|
'app_title' => 'Gratis Open-Source Online Facturatie',
|
||||||
'app_description' => 'Invoice Ninja is een gratis, open-source oplossing voor het aanmkaen en versturen van facturen aan klanten. Met Invoice Ninja, kun je gemakkelijk mooie facturen aanmaken en verzenden van om het even welk toestel met internettoegang. Je klanten kunnen je facturen afdrukken, downloaden als pdf bestanden en je zelfs online betalen vanuit het systeem.',
|
'app_description' => 'Invoice Ninja is een gratis, open-source oplossing voor het aanmkaen en versturen van facturen aan klanten. Met Invoice Ninja, kun je gemakkelijk mooie facturen aanmaken en verzenden van om het even welk toestel met internettoegang. Je klanten kunnen je facturen afdrukken, downloaden als pdf bestanden en je zelfs online betalen vanuit het systeem.',
|
||||||
|
|
||||||
'rows' => 'rijen',
|
'rows' => 'rijen',
|
||||||
'www' => 'www',
|
'www' => 'www',
|
||||||
'logo' => 'Logo',
|
'logo' => 'Logo',
|
||||||
@ -736,7 +733,7 @@ return array(
|
|||||||
'recent_payments' => 'Recente betalingen',
|
'recent_payments' => 'Recente betalingen',
|
||||||
'outstanding' => 'Uitstaand',
|
'outstanding' => 'Uitstaand',
|
||||||
'manage_companies' => 'Beheer bedrijven',
|
'manage_companies' => 'Beheer bedrijven',
|
||||||
'total_revenue' => 'Totale opbrengst',
|
'total_revenue' => 'Totale opbrengst',
|
||||||
|
|
||||||
'current_user' => 'Huidige gebruiker',
|
'current_user' => 'Huidige gebruiker',
|
||||||
'new_recurring_invoice' => 'Nieuwe terugkerende factuur',
|
'new_recurring_invoice' => 'Nieuwe terugkerende factuur',
|
||||||
@ -762,7 +759,7 @@ return array(
|
|||||||
'status_partial' => 'Gedeeltelijk',
|
'status_partial' => 'Gedeeltelijk',
|
||||||
'status_paid' => 'Betaald',
|
'status_paid' => 'Betaald',
|
||||||
'show_line_item_tax' => '<b>BTW-tarieven per regel</b> tonen',
|
'show_line_item_tax' => '<b>BTW-tarieven per regel</b> tonen',
|
||||||
|
|
||||||
'iframe_url' => 'Website',
|
'iframe_url' => 'Website',
|
||||||
'iframe_url_help1' => 'Kopieer de volgende code naar een pagina op uw site.',
|
'iframe_url_help1' => 'Kopieer de volgende code naar een pagina op uw site.',
|
||||||
'iframe_url_help2' => 'U kunt de functionaliteit testen door te klikken op \'Bekijk als ontvanger\' bij een factuur.',
|
'iframe_url_help2' => 'U kunt de functionaliteit testen door te klikken op \'Bekijk als ontvanger\' bij een factuur.',
|
||||||
@ -887,7 +884,7 @@ return array(
|
|||||||
'default_invoice_footer' => 'Standaard factuurfooter',
|
'default_invoice_footer' => 'Standaard factuurfooter',
|
||||||
'quote_footer' => 'Offertefooter',
|
'quote_footer' => 'Offertefooter',
|
||||||
'free' => 'Gratis',
|
'free' => 'Gratis',
|
||||||
|
|
||||||
'quote_is_approved' => 'Deze offerte is geaccordeerd',
|
'quote_is_approved' => 'Deze offerte is geaccordeerd',
|
||||||
'apply_credit' => 'Apply Credit',
|
'apply_credit' => 'Apply Credit',
|
||||||
'system_settings' => 'Systeeminstellingen',
|
'system_settings' => 'Systeeminstellingen',
|
||||||
@ -975,7 +972,7 @@ return array(
|
|||||||
'button_confirmation_message' => 'Click to confirm your email address.',
|
'button_confirmation_message' => 'Click to confirm your email address.',
|
||||||
'confirm' => 'Confirm',
|
'confirm' => 'Confirm',
|
||||||
'email_preferences' => 'Email Preferences',
|
'email_preferences' => 'Email Preferences',
|
||||||
'created_invoices' => 'Successfully created :count invoice(s)',
|
'created_invoices' => 'Successfully created :count invoice(s)',
|
||||||
'next_invoice_number' => 'The next invoice number is :number.',
|
'next_invoice_number' => 'The next invoice number is :number.',
|
||||||
'next_quote_number' => 'The next quote number is :number.',
|
'next_quote_number' => 'The next quote number is :number.',
|
||||||
|
|
||||||
@ -986,5 +983,127 @@ return array(
|
|||||||
'schedule' => 'Schedule',
|
'schedule' => 'Schedule',
|
||||||
'email_designs' => 'Email Designs',
|
'email_designs' => 'Email Designs',
|
||||||
'assigned_when_sent' => 'Assigned when sent',
|
'assigned_when_sent' => 'Assigned when sent',
|
||||||
|
|
||||||
);
|
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.',
|
||||||
|
'white_label_purchase_link' => 'Purchase a white label license',
|
||||||
|
|
||||||
|
// Expense / vendor
|
||||||
|
'expense' => 'Expense',
|
||||||
|
'expenses' => 'Expenses',
|
||||||
|
'new_expense' => 'Enter Expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'vendors' => 'Vendors',
|
||||||
|
'new_vendor' => 'Create Vendor',
|
||||||
|
'payment_terms_net' => 'Net',
|
||||||
|
'vendor' => 'Vendor',
|
||||||
|
'edit_vendor' => 'Edit Vendor',
|
||||||
|
'archive_vendor' => 'Archive Vendor',
|
||||||
|
'delete_vendor' => 'Delete Vendor',
|
||||||
|
'view_vendor' => 'View Vendor',
|
||||||
|
'deleted_expense' => 'Successfully deleted expense',
|
||||||
|
'archived_expense' => 'Successfully archived expense',
|
||||||
|
'deleted_expenses' => 'Successfully deleted expenses',
|
||||||
|
'archived_expenses' => 'Successfully archived expenses',
|
||||||
|
|
||||||
|
// Expenses
|
||||||
|
'expense_amount' => 'Expense Amount',
|
||||||
|
'expense_balance' => 'Expense Balance',
|
||||||
|
'expense_date' => 'Expense Date',
|
||||||
|
'expense_should_be_invoiced' => 'Should this expense be invoiced?',
|
||||||
|
'public_notes' => 'Public Notes',
|
||||||
|
'invoice_amount' => 'Invoice Amount',
|
||||||
|
'exchange_rate' => 'Exchange Rate',
|
||||||
|
'yes' => 'Yes',
|
||||||
|
'no' => 'No',
|
||||||
|
'should_be_invoiced' => 'Should be invoiced',
|
||||||
|
'view_expense' => 'View expense # :expense',
|
||||||
|
'edit_expense' => 'Edit Expense',
|
||||||
|
'archive_expense' => 'Archive Expense',
|
||||||
|
'delete_expense' => 'Delete Expense',
|
||||||
|
'view_expense_num' => 'Expense # :expense',
|
||||||
|
'updated_expense' => 'Successfully updated expense',
|
||||||
|
'created_expense' => 'Successfully created expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'view' => 'View',
|
||||||
|
'restore_expense' => 'Restore Expense',
|
||||||
|
'invoice_expense' => 'Invoice Expense',
|
||||||
|
'expense_error_multiple_clients' => 'The expenses can\'t belong to different clients',
|
||||||
|
'expense_error_invoiced' => 'Expense has already been invoiced',
|
||||||
|
'convert_currency' => 'Convert currency',
|
||||||
|
|
||||||
|
// Payment terms
|
||||||
|
'num_days' => 'Number of days',
|
||||||
|
'create_payment_term' => 'Create Payment Term',
|
||||||
|
'edit_payment_terms' => 'Edit Payment Term',
|
||||||
|
'edit_payment_term' => 'Edit Payment Term',
|
||||||
|
'archive_payment_term' => 'Archive Payment Term',
|
||||||
|
|
||||||
|
// recurring due dates
|
||||||
|
'recurring_due_dates' => 'Recurring Invoice Due Dates',
|
||||||
|
'recurring_due_date_help' => '<p>Automatically sets a due date for the invoice.</p>
|
||||||
|
<p>Invoices on a monthly or yearly cycle set to be due on or before the day they are created will be due the next month. Invoices set to be due on the 29th or 30th in months that don\'t have that day will be due the last day of the month.</p>
|
||||||
|
<p>Invoices on a weekly cycle set to be due on the day of the week they are created will be due the next week.</p>
|
||||||
|
<p>For example:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Today is the 15th, due date is 1st of the month. The due date should likely be the 1st of the next month.</li>
|
||||||
|
<li>Today is the 15th, due date is the last day of the month. The due date will be the last day of the this month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the 15th, due date is the 15th day of the month. The due date will be the 15th day of <strong>next</strong> month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the Friday, due date is the 1st Friday after. The due date will be next Friday, not today.
|
||||||
|
</li>
|
||||||
|
</ul>',
|
||||||
|
'due' => 'Due',
|
||||||
|
'next_due_on' => 'Due Next: :date',
|
||||||
|
'use_client_terms' => 'Use client terms',
|
||||||
|
'day_of_month' => ':ordinal day of month',
|
||||||
|
'last_day_of_month' => 'Last day of month',
|
||||||
|
'day_of_week_after' => ':ordinal :day after',
|
||||||
|
'sunday' => 'Sunday',
|
||||||
|
'monday' => 'Monday',
|
||||||
|
'tuesday' => 'Tuesday',
|
||||||
|
'wednesday' => 'Wednesday',
|
||||||
|
'thursday' => 'Thursday',
|
||||||
|
'friday' => 'Friday',
|
||||||
|
'saturday' => 'Saturday',
|
||||||
|
|
||||||
|
// Fonts
|
||||||
|
'header_font_id' => 'Header Font',
|
||||||
|
'body_font_id' => 'Body Font',
|
||||||
|
'color_font_help' => 'Note: the primary color and fonts are also used in the client portal and custom email designs.',
|
||||||
|
|
||||||
|
'live_preview' => 'Live Preview',
|
||||||
|
'invalid_mail_config' => 'Unable to send email, please check that the mail settings are correct.',
|
||||||
|
|
||||||
|
'invoice_message_button' => 'To view your invoice for :amount, click the button below.',
|
||||||
|
'quote_message_button' => 'To view your quote for :amount, click the button below.',
|
||||||
|
'payment_message_button' => 'Thank you for your payment of :amount.',
|
||||||
|
'payment_type_direct_debit' => 'Direct Debit',
|
||||||
|
'bank_accounts' => 'Bank Accounts',
|
||||||
|
'add_bank_account' => 'Add Bank Account',
|
||||||
|
'setup_account' => 'Setup Account',
|
||||||
|
'import_expenses' => 'Import Expenses',
|
||||||
|
'bank_id' => 'bank',
|
||||||
|
'integration_type' => 'Integration Type',
|
||||||
|
'updated_bank_account' => 'Successfully updated bank account',
|
||||||
|
'edit_bank_account' => 'Edit Bank Account',
|
||||||
|
'archive_bank_account' => 'Archive Bank Account',
|
||||||
|
'archived_bank_account' => 'Successfully archived bank account',
|
||||||
|
'created_bank_account' => 'Successfully created bank account',
|
||||||
|
'validate_bank_account' => 'Validate Bank Account',
|
||||||
|
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>',
|
||||||
|
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
|
||||||
|
'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.',
|
||||||
|
'username' => 'Username',
|
||||||
|
'account_number' => 'Account Number',
|
||||||
|
'account_name' => 'Account Name',
|
||||||
|
'bank_account_error' => 'Failed to retreive account details, please check your credentials.',
|
||||||
|
'status_approved' => 'Approved',
|
||||||
|
'quote_settings' => 'Quote Settings',
|
||||||
|
'auto_convert_quote' => 'Auto convert quote',
|
||||||
|
'auto_convert_quote_help' => 'Automatically convert a quote to an invoice when approved by a client.',
|
||||||
|
'validate' => 'Validate',
|
||||||
|
'info' => 'Info',
|
||||||
|
'imported_expenses' => 'Successfully created :count_vendors vendor(s) and :count_expenses expense(s)',
|
||||||
|
|
||||||
|
);
|
@ -25,7 +25,7 @@ return array(
|
|||||||
"numeric" => ":attribute moet tussen :min en :max zijn.",
|
"numeric" => ":attribute moet tussen :min en :max zijn.",
|
||||||
"file" => ":attribute moet tussen :min en :max kilobytes zijn.",
|
"file" => ":attribute moet tussen :min en :max kilobytes zijn.",
|
||||||
"string" => ":attribute moet tussen :min en :max karakters zijn.",
|
"string" => ":attribute moet tussen :min en :max karakters zijn.",
|
||||||
"array" => ":attribute moet tussen :min en :max items bevatten."
|
"array" => ":attribute moet tussen :min en :max items bevatten.",
|
||||||
),
|
),
|
||||||
"confirmed" => ":attribute bevestiging komt niet overeen.",
|
"confirmed" => ":attribute bevestiging komt niet overeen.",
|
||||||
"count" => ":attribute moet precies :count geselecteerde elementen bevatten.",
|
"count" => ":attribute moet precies :count geselecteerde elementen bevatten.",
|
||||||
@ -48,14 +48,14 @@ return array(
|
|||||||
"numeric" => ":attribute moet minder dan :max zijn.",
|
"numeric" => ":attribute moet minder dan :max zijn.",
|
||||||
"file" => ":attribute moet minder dan :max kilobytes zijn.",
|
"file" => ":attribute moet minder dan :max kilobytes zijn.",
|
||||||
"string" => ":attribute moet minder dan :max karakters zijn.",
|
"string" => ":attribute moet minder dan :max karakters zijn.",
|
||||||
"array" => ":attribute mag maximaal :max items bevatten."
|
"array" => ":attribute mag maximaal :max items bevatten.",
|
||||||
),
|
),
|
||||||
"mimes" => ":attribute moet een bestand zijn van het bestandstype :values.",
|
"mimes" => ":attribute moet een bestand zijn van het bestandstype :values.",
|
||||||
"min" => array(
|
"min" => array(
|
||||||
"numeric" => ":attribute moet minimaal :min zijn.",
|
"numeric" => ":attribute moet minimaal :min zijn.",
|
||||||
"file" => ":attribute moet minimaal :min kilobytes zijn.",
|
"file" => ":attribute moet minimaal :min kilobytes zijn.",
|
||||||
"string" => ":attribute moet minimaal :min karakters zijn.",
|
"string" => ":attribute moet minimaal :min karakters zijn.",
|
||||||
"array" => ":attribute moet minimaal :min items bevatten."
|
"array" => ":attribute moet minimaal :min items bevatten.",
|
||||||
),
|
),
|
||||||
"not_in" => "Het geselecteerde :attribute is ongeldig.",
|
"not_in" => "Het geselecteerde :attribute is ongeldig.",
|
||||||
"numeric" => ":attribute moet een nummer zijn.",
|
"numeric" => ":attribute moet een nummer zijn.",
|
||||||
@ -71,7 +71,7 @@ return array(
|
|||||||
"numeric" => ":attribute moet :size zijn.",
|
"numeric" => ":attribute moet :size zijn.",
|
||||||
"file" => ":attribute moet :size kilobyte zijn.",
|
"file" => ":attribute moet :size kilobyte zijn.",
|
||||||
"string" => ":attribute moet :size karakters lang zijn.",
|
"string" => ":attribute moet :size karakters lang zijn.",
|
||||||
"array" => ":attribute moet :size items bevatten."
|
"array" => ":attribute moet :size items bevatten.",
|
||||||
),
|
),
|
||||||
"unique" => ":attribute is al in gebruik.",
|
"unique" => ":attribute is al in gebruik.",
|
||||||
"url" => ":attribute is geen geldige URL.",
|
"url" => ":attribute is geen geldige URL.",
|
||||||
@ -83,7 +83,7 @@ return array(
|
|||||||
"has_counter" => 'De waarde moet {$counter} bevatten',
|
"has_counter" => 'De waarde moet {$counter} bevatten',
|
||||||
"valid_contacts" => "Alle contacten moeten een e-mailadres of een naam hebben",
|
"valid_contacts" => "Alle contacten moeten een e-mailadres of een naam hebben",
|
||||||
"valid_invoice_items" => "De factuur overschrijd het maximale aantal",
|
"valid_invoice_items" => "De factuur overschrijd het maximale aantal",
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Custom Validation Language Lines
|
| Custom Validation Language Lines
|
||||||
|
@ -908,7 +908,7 @@ return array(
|
|||||||
'user' => 'Usuário',
|
'user' => 'Usuário',
|
||||||
'country' => 'País',
|
'country' => 'País',
|
||||||
'include' => 'Incluir',
|
'include' => 'Incluir',
|
||||||
|
|
||||||
'logo_too_large' => 'Sua logo tem :size, para uma melhor performance sugerimos que este tamanho não ultrapasse 200KB',
|
'logo_too_large' => 'Sua logo tem :size, para uma melhor performance sugerimos que este tamanho não ultrapasse 200KB',
|
||||||
'email_errors' => [
|
'email_errors' => [
|
||||||
'inactive_client' => 'Não é possível enviar e-mails para clientes intativos',
|
'inactive_client' => 'Não é possível enviar e-mails para clientes intativos',
|
||||||
@ -918,7 +918,7 @@ return array(
|
|||||||
'user_unconfirmed' => 'Confirme sua conta para enviar e-mails',
|
'user_unconfirmed' => 'Confirme sua conta para enviar e-mails',
|
||||||
'invalid_contact_email' => 'E-mail do contato inválido',
|
'invalid_contact_email' => 'E-mail do contato inválido',
|
||||||
],
|
],
|
||||||
|
|
||||||
'import_freshbooks' => 'Importar de FreshBooks',
|
'import_freshbooks' => 'Importar de FreshBooks',
|
||||||
'import_data' => 'Importar Dados',
|
'import_data' => 'Importar Dados',
|
||||||
'source' => 'Fonte',
|
'source' => 'Fonte',
|
||||||
@ -981,4 +981,126 @@ return array(
|
|||||||
'email_designs' => 'Email Designs',
|
'email_designs' => 'Email Designs',
|
||||||
'assigned_when_sent' => 'Assigned when sent',
|
'assigned_when_sent' => 'Assigned when sent',
|
||||||
|
|
||||||
|
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.',
|
||||||
|
'white_label_purchase_link' => 'Purchase a white label license',
|
||||||
|
|
||||||
|
// Expense / vendor
|
||||||
|
'expense' => 'Expense',
|
||||||
|
'expenses' => 'Expenses',
|
||||||
|
'new_expense' => 'Enter Expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'vendors' => 'Vendors',
|
||||||
|
'new_vendor' => 'Create Vendor',
|
||||||
|
'payment_terms_net' => 'Net',
|
||||||
|
'vendor' => 'Vendor',
|
||||||
|
'edit_vendor' => 'Edit Vendor',
|
||||||
|
'archive_vendor' => 'Archive Vendor',
|
||||||
|
'delete_vendor' => 'Delete Vendor',
|
||||||
|
'view_vendor' => 'View Vendor',
|
||||||
|
'deleted_expense' => 'Successfully deleted expense',
|
||||||
|
'archived_expense' => 'Successfully archived expense',
|
||||||
|
'deleted_expenses' => 'Successfully deleted expenses',
|
||||||
|
'archived_expenses' => 'Successfully archived expenses',
|
||||||
|
|
||||||
|
// Expenses
|
||||||
|
'expense_amount' => 'Expense Amount',
|
||||||
|
'expense_balance' => 'Expense Balance',
|
||||||
|
'expense_date' => 'Expense Date',
|
||||||
|
'expense_should_be_invoiced' => 'Should this expense be invoiced?',
|
||||||
|
'public_notes' => 'Public Notes',
|
||||||
|
'invoice_amount' => 'Invoice Amount',
|
||||||
|
'exchange_rate' => 'Exchange Rate',
|
||||||
|
'yes' => 'Yes',
|
||||||
|
'no' => 'No',
|
||||||
|
'should_be_invoiced' => 'Should be invoiced',
|
||||||
|
'view_expense' => 'View expense # :expense',
|
||||||
|
'edit_expense' => 'Edit Expense',
|
||||||
|
'archive_expense' => 'Archive Expense',
|
||||||
|
'delete_expense' => 'Delete Expense',
|
||||||
|
'view_expense_num' => 'Expense # :expense',
|
||||||
|
'updated_expense' => 'Successfully updated expense',
|
||||||
|
'created_expense' => 'Successfully created expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'view' => 'View',
|
||||||
|
'restore_expense' => 'Restore Expense',
|
||||||
|
'invoice_expense' => 'Invoice Expense',
|
||||||
|
'expense_error_multiple_clients' => 'The expenses can\'t belong to different clients',
|
||||||
|
'expense_error_invoiced' => 'Expense has already been invoiced',
|
||||||
|
'convert_currency' => 'Convert currency',
|
||||||
|
|
||||||
|
// Payment terms
|
||||||
|
'num_days' => 'Number of days',
|
||||||
|
'create_payment_term' => 'Create Payment Term',
|
||||||
|
'edit_payment_terms' => 'Edit Payment Term',
|
||||||
|
'edit_payment_term' => 'Edit Payment Term',
|
||||||
|
'archive_payment_term' => 'Archive Payment Term',
|
||||||
|
|
||||||
|
// recurring due dates
|
||||||
|
'recurring_due_dates' => 'Recurring Invoice Due Dates',
|
||||||
|
'recurring_due_date_help' => '<p>Automatically sets a due date for the invoice.</p>
|
||||||
|
<p>Invoices on a monthly or yearly cycle set to be due on or before the day they are created will be due the next month. Invoices set to be due on the 29th or 30th in months that don\'t have that day will be due the last day of the month.</p>
|
||||||
|
<p>Invoices on a weekly cycle set to be due on the day of the week they are created will be due the next week.</p>
|
||||||
|
<p>For example:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Today is the 15th, due date is 1st of the month. The due date should likely be the 1st of the next month.</li>
|
||||||
|
<li>Today is the 15th, due date is the last day of the month. The due date will be the last day of the this month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the 15th, due date is the 15th day of the month. The due date will be the 15th day of <strong>next</strong> month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the Friday, due date is the 1st Friday after. The due date will be next Friday, not today.
|
||||||
|
</li>
|
||||||
|
</ul>',
|
||||||
|
'due' => 'Due',
|
||||||
|
'next_due_on' => 'Due Next: :date',
|
||||||
|
'use_client_terms' => 'Use client terms',
|
||||||
|
'day_of_month' => ':ordinal day of month',
|
||||||
|
'last_day_of_month' => 'Last day of month',
|
||||||
|
'day_of_week_after' => ':ordinal :day after',
|
||||||
|
'sunday' => 'Sunday',
|
||||||
|
'monday' => 'Monday',
|
||||||
|
'tuesday' => 'Tuesday',
|
||||||
|
'wednesday' => 'Wednesday',
|
||||||
|
'thursday' => 'Thursday',
|
||||||
|
'friday' => 'Friday',
|
||||||
|
'saturday' => 'Saturday',
|
||||||
|
|
||||||
|
// Fonts
|
||||||
|
'header_font_id' => 'Header Font',
|
||||||
|
'body_font_id' => 'Body Font',
|
||||||
|
'color_font_help' => 'Note: the primary color and fonts are also used in the client portal and custom email designs.',
|
||||||
|
|
||||||
|
'live_preview' => 'Live Preview',
|
||||||
|
'invalid_mail_config' => 'Unable to send email, please check that the mail settings are correct.',
|
||||||
|
|
||||||
|
'invoice_message_button' => 'To view your invoice for :amount, click the button below.',
|
||||||
|
'quote_message_button' => 'To view your quote for :amount, click the button below.',
|
||||||
|
'payment_message_button' => 'Thank you for your payment of :amount.',
|
||||||
|
'payment_type_direct_debit' => 'Direct Debit',
|
||||||
|
'bank_accounts' => 'Bank Accounts',
|
||||||
|
'add_bank_account' => 'Add Bank Account',
|
||||||
|
'setup_account' => 'Setup Account',
|
||||||
|
'import_expenses' => 'Import Expenses',
|
||||||
|
'bank_id' => 'bank',
|
||||||
|
'integration_type' => 'Integration Type',
|
||||||
|
'updated_bank_account' => 'Successfully updated bank account',
|
||||||
|
'edit_bank_account' => 'Edit Bank Account',
|
||||||
|
'archive_bank_account' => 'Archive Bank Account',
|
||||||
|
'archived_bank_account' => 'Successfully archived bank account',
|
||||||
|
'created_bank_account' => 'Successfully created bank account',
|
||||||
|
'validate_bank_account' => 'Validate Bank Account',
|
||||||
|
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>',
|
||||||
|
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
|
||||||
|
'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.',
|
||||||
|
'username' => 'Username',
|
||||||
|
'account_number' => 'Account Number',
|
||||||
|
'account_name' => 'Account Name',
|
||||||
|
'bank_account_error' => 'Failed to retreive account details, please check your credentials.',
|
||||||
|
'status_approved' => 'Approved',
|
||||||
|
'quote_settings' => 'Quote Settings',
|
||||||
|
'auto_convert_quote' => 'Auto convert quote',
|
||||||
|
'auto_convert_quote_help' => 'Automatically convert a quote to an invoice when approved by a client.',
|
||||||
|
'validate' => 'Validate',
|
||||||
|
'info' => 'Info',
|
||||||
|
'imported_expenses' => 'Successfully created :count_vendors vendor(s) and :count_expenses expense(s)',
|
||||||
|
|
||||||
);
|
);
|
||||||
|
@ -2,23 +2,23 @@
|
|||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Password Reminder Language Lines
|
| Password Reminder Language Lines
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
|
||||||
| The following language lines are the default lines which match reasons
|
| The following language lines are the default lines which match reasons
|
||||||
| that are given by the password broker for a password update attempt
|
| that are given by the password broker for a password update attempt
|
||||||
| has failed, such as for an invalid token or invalid new password.
|
| has failed, such as for an invalid token or invalid new password.
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
"password" => "Passwords must be at least six characters and match the confirmation.",
|
"password" => "Passwords must be at least six characters and match the confirmation.",
|
||||||
|
|
||||||
"user" => "We can't find a user with that e-mail address.",
|
"user" => "We can't find a user with that e-mail address.",
|
||||||
|
|
||||||
"token" => "This password reset token is invalid.",
|
"token" => "This password reset token is invalid.",
|
||||||
|
|
||||||
"sent" => "Password reminder sent!",
|
"sent" => "Password reminder sent!",
|
||||||
|
|
||||||
);
|
);
|
||||||
|
@ -986,5 +986,126 @@ return array(
|
|||||||
'email_designs' => 'Email Designs',
|
'email_designs' => 'Email Designs',
|
||||||
'assigned_when_sent' => 'Assigned when sent',
|
'assigned_when_sent' => 'Assigned when sent',
|
||||||
|
|
||||||
|
'white_label_custom_css' => ':link for $'.WHITE_LABEL_PRICE.' to enable custom styling and help support our project.',
|
||||||
|
'white_label_purchase_link' => 'Purchase a white label license',
|
||||||
|
|
||||||
|
// Expense / vendor
|
||||||
|
'expense' => 'Expense',
|
||||||
|
'expenses' => 'Expenses',
|
||||||
|
'new_expense' => 'Enter Expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'vendors' => 'Vendors',
|
||||||
|
'new_vendor' => 'Create Vendor',
|
||||||
|
'payment_terms_net' => 'Net',
|
||||||
|
'vendor' => 'Vendor',
|
||||||
|
'edit_vendor' => 'Edit Vendor',
|
||||||
|
'archive_vendor' => 'Archive Vendor',
|
||||||
|
'delete_vendor' => 'Delete Vendor',
|
||||||
|
'view_vendor' => 'View Vendor',
|
||||||
|
'deleted_expense' => 'Successfully deleted expense',
|
||||||
|
'archived_expense' => 'Successfully archived expense',
|
||||||
|
'deleted_expenses' => 'Successfully deleted expenses',
|
||||||
|
'archived_expenses' => 'Successfully archived expenses',
|
||||||
|
|
||||||
|
// Expenses
|
||||||
|
'expense_amount' => 'Expense Amount',
|
||||||
|
'expense_balance' => 'Expense Balance',
|
||||||
|
'expense_date' => 'Expense Date',
|
||||||
|
'expense_should_be_invoiced' => 'Should this expense be invoiced?',
|
||||||
|
'public_notes' => 'Public Notes',
|
||||||
|
'invoice_amount' => 'Invoice Amount',
|
||||||
|
'exchange_rate' => 'Exchange Rate',
|
||||||
|
'yes' => 'Yes',
|
||||||
|
'no' => 'No',
|
||||||
|
'should_be_invoiced' => 'Should be invoiced',
|
||||||
|
'view_expense' => 'View expense # :expense',
|
||||||
|
'edit_expense' => 'Edit Expense',
|
||||||
|
'archive_expense' => 'Archive Expense',
|
||||||
|
'delete_expense' => 'Delete Expense',
|
||||||
|
'view_expense_num' => 'Expense # :expense',
|
||||||
|
'updated_expense' => 'Successfully updated expense',
|
||||||
|
'created_expense' => 'Successfully created expense',
|
||||||
|
'enter_expense' => 'Enter Expense',
|
||||||
|
'view' => 'View',
|
||||||
|
'restore_expense' => 'Restore Expense',
|
||||||
|
'invoice_expense' => 'Invoice Expense',
|
||||||
|
'expense_error_multiple_clients' => 'The expenses can\'t belong to different clients',
|
||||||
|
'expense_error_invoiced' => 'Expense has already been invoiced',
|
||||||
|
'convert_currency' => 'Convert currency',
|
||||||
|
|
||||||
|
// Payment terms
|
||||||
|
'num_days' => 'Number of days',
|
||||||
|
'create_payment_term' => 'Create Payment Term',
|
||||||
|
'edit_payment_terms' => 'Edit Payment Term',
|
||||||
|
'edit_payment_term' => 'Edit Payment Term',
|
||||||
|
'archive_payment_term' => 'Archive Payment Term',
|
||||||
|
|
||||||
|
// recurring due dates
|
||||||
|
'recurring_due_dates' => 'Recurring Invoice Due Dates',
|
||||||
|
'recurring_due_date_help' => '<p>Automatically sets a due date for the invoice.</p>
|
||||||
|
<p>Invoices on a monthly or yearly cycle set to be due on or before the day they are created will be due the next month. Invoices set to be due on the 29th or 30th in months that don\'t have that day will be due the last day of the month.</p>
|
||||||
|
<p>Invoices on a weekly cycle set to be due on the day of the week they are created will be due the next week.</p>
|
||||||
|
<p>For example:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Today is the 15th, due date is 1st of the month. The due date should likely be the 1st of the next month.</li>
|
||||||
|
<li>Today is the 15th, due date is the last day of the month. The due date will be the last day of the this month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the 15th, due date is the 15th day of the month. The due date will be the 15th day of <strong>next</strong> month.
|
||||||
|
</li>
|
||||||
|
<li>Today is the Friday, due date is the 1st Friday after. The due date will be next Friday, not today.
|
||||||
|
</li>
|
||||||
|
</ul>',
|
||||||
|
'due' => 'Due',
|
||||||
|
'next_due_on' => 'Due Next: :date',
|
||||||
|
'use_client_terms' => 'Use client terms',
|
||||||
|
'day_of_month' => ':ordinal day of month',
|
||||||
|
'last_day_of_month' => 'Last day of month',
|
||||||
|
'day_of_week_after' => ':ordinal :day after',
|
||||||
|
'sunday' => 'Sunday',
|
||||||
|
'monday' => 'Monday',
|
||||||
|
'tuesday' => 'Tuesday',
|
||||||
|
'wednesday' => 'Wednesday',
|
||||||
|
'thursday' => 'Thursday',
|
||||||
|
'friday' => 'Friday',
|
||||||
|
'saturday' => 'Saturday',
|
||||||
|
|
||||||
|
// Fonts
|
||||||
|
'header_font_id' => 'Header Font',
|
||||||
|
'body_font_id' => 'Body Font',
|
||||||
|
'color_font_help' => 'Note: the primary color and fonts are also used in the client portal and custom email designs.',
|
||||||
|
|
||||||
|
'live_preview' => 'Live Preview',
|
||||||
|
'invalid_mail_config' => 'Unable to send email, please check that the mail settings are correct.',
|
||||||
|
|
||||||
|
'invoice_message_button' => 'To view your invoice for :amount, click the button below.',
|
||||||
|
'quote_message_button' => 'To view your quote for :amount, click the button below.',
|
||||||
|
'payment_message_button' => 'Thank you for your payment of :amount.',
|
||||||
|
'payment_type_direct_debit' => 'Direct Debit',
|
||||||
|
'bank_accounts' => 'Bank Accounts',
|
||||||
|
'add_bank_account' => 'Add Bank Account',
|
||||||
|
'setup_account' => 'Setup Account',
|
||||||
|
'import_expenses' => 'Import Expenses',
|
||||||
|
'bank_id' => 'bank',
|
||||||
|
'integration_type' => 'Integration Type',
|
||||||
|
'updated_bank_account' => 'Successfully updated bank account',
|
||||||
|
'edit_bank_account' => 'Edit Bank Account',
|
||||||
|
'archive_bank_account' => 'Archive Bank Account',
|
||||||
|
'archived_bank_account' => 'Successfully archived bank account',
|
||||||
|
'created_bank_account' => 'Successfully created bank account',
|
||||||
|
'validate_bank_account' => 'Validate Bank Account',
|
||||||
|
'bank_accounts_help' => 'Connect a bank account to automatically import expenses and create vendors. Supports American Express and <a href="'.OFX_HOME_URL.'" target="_blank">400+ US banks.</a>',
|
||||||
|
'bank_password_help' => 'Note: your password is transmitted securely and never stored on our servers.',
|
||||||
|
'bank_password_warning' => 'Warning: your password may be transmitted in plain text, consider enabling HTTPS.',
|
||||||
|
'username' => 'Username',
|
||||||
|
'account_number' => 'Account Number',
|
||||||
|
'account_name' => 'Account Name',
|
||||||
|
'bank_account_error' => 'Failed to retreive account details, please check your credentials.',
|
||||||
|
'status_approved' => 'Approved',
|
||||||
|
'quote_settings' => 'Quote Settings',
|
||||||
|
'auto_convert_quote' => 'Auto convert quote',
|
||||||
|
'auto_convert_quote_help' => 'Automatically convert a quote to an invoice when approved by a client.',
|
||||||
|
'validate' => 'Validate',
|
||||||
|
'info' => 'Info',
|
||||||
|
'imported_expenses' => 'Successfully created :count_vendors vendor(s) and :count_expenses expense(s)',
|
||||||
|
|
||||||
);
|
);
|
||||||
|
@ -80,7 +80,7 @@ return [
|
|||||||
"has_counter" => 'The value must contain {$counter}',
|
"has_counter" => 'The value must contain {$counter}',
|
||||||
"valid_contacts" => "All of the contacts must have either an email or name",
|
"valid_contacts" => "All of the contacts must have either an email or name",
|
||||||
"valid_invoice_items" => "The invoice exceeds the maximum amount",
|
"valid_invoice_items" => "The invoice exceeds the maximum amount",
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Custom Validation Language Lines
|
| Custom Validation Language Lines
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
@section('head')
|
@section('head')
|
||||||
@parent
|
@parent
|
||||||
|
|
||||||
|
@include('money_script')
|
||||||
|
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
table.accounts-table > thead > tr > th.header {
|
table.accounts-table > thead > tr > th.header {
|
||||||
@ -9,9 +11,7 @@
|
|||||||
color:#fff !important;
|
color:#fff !important;
|
||||||
padding-top:8px;
|
padding-top:8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@stop
|
@stop
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
@ -19,157 +19,359 @@
|
|||||||
|
|
||||||
@include('accounts.nav', ['selected' => ACCOUNT_BANKS])
|
@include('accounts.nav', ['selected' => ACCOUNT_BANKS])
|
||||||
|
|
||||||
{!! Former::open($url)
|
{!! Former::open()->addClass('main-form warn-on-exit') !!}
|
||||||
->method($method)
|
|
||||||
->rule()
|
|
||||||
->addClass('main-form warn-on-exit') !!}
|
|
||||||
|
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h3 class="panel-title">{!! trans($title) !!}</h3>
|
<h3 class="panel-title" data-bind="text: title"></h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body form-padding-right">
|
<div class="panel-body">
|
||||||
|
|
||||||
@if ($bankAccount)
|
<div data-bind="visible: page() == 'login'">
|
||||||
{!! Former::populateField('bank_id', $bankAccount->bank_id) !!}
|
<div class="form-padding-right">
|
||||||
@endif
|
@if ($bankAccount)
|
||||||
|
{!! Former::populateField('public_id', $bankAccount->public_id) !!}
|
||||||
|
{!! Former::hidden('public_id') !!}
|
||||||
|
@else
|
||||||
|
{!! Former::select('bank_id')
|
||||||
|
->data_bind('combobox: bank_id')
|
||||||
|
->addOption('', '')
|
||||||
|
->fromQuery($banks, 'name', 'id')
|
||||||
|
->blockHelp('texts.bank_accounts_help') !!}
|
||||||
|
@endif
|
||||||
|
|
||||||
{!! Former::select('bank_id')
|
{!! Former::password('bank_username')
|
||||||
->data_bind('dropdown: bank_id')
|
->data_bind("value: bank_username, valueUpdate: 'afterkeydown'")
|
||||||
->addOption('', '')
|
->label(trans('texts.username')) !!}
|
||||||
->fromQuery($banks, 'name', 'id') !!}
|
|
||||||
|
|
||||||
{!! Former::password('bank_username')
|
{!! Former::password('bank_password')
|
||||||
->data_bind("value: bank_username, valueUpdate: 'afterkeydown'")
|
->label(trans('texts.password'))
|
||||||
->label(trans('texts.username'))
|
->data_bind("value: bank_password, valueUpdate: 'afterkeydown'")
|
||||||
->blockHelp(trans(Request::secure() ? 'texts.bank_password_help' : 'texts.bank_password_warning')) !!}
|
->blockHelp(trans(Request::secure() ? 'texts.bank_password_help' : 'texts.bank_password_warning')) !!}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
<div class="col-lg-12 col-sm-12" data-bind="visible: page() == 'setup'" style="display:none">
|
||||||
</div>
|
<table class="table accounts-table" style="width:100%">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="header">{{ trans('texts.account_name') }}</th>
|
||||||
|
<th class="header">{{ trans('texts.account_number') }}</th>
|
||||||
|
<th class="header">{{ trans('texts.balance') }}</th>
|
||||||
|
<th class="header">{{ trans('texts.include') }}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody data-bind="foreach: bank_accounts">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<input type="text" class="form-control" data-bind="value: account_name, valueUpdate: 'afterkeydown', attr: {name: 'bank_accounts[' + $index() + '][account_name]'}"/>
|
||||||
|
<input type="text" style="display:none" data-bind="value: hashed_account_number, attr: {name: 'bank_accounts[' + $index() + '][hashed_account_number]'}"/>
|
||||||
|
</td>
|
||||||
|
<td data-bind="text: masked_account_number"></td>
|
||||||
|
<td data-bind="text: balance"></td>
|
||||||
|
<td style="text-align:center">
|
||||||
|
<input type="checkbox" value="1"
|
||||||
|
data-bind="checked: includeAccount, attr: {name: 'bank_accounts[' + $index() + '][include]'}"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="modal fade" id="testModal" tabindex="-1" role="dialog" aria-labelledby="testModalLabel" aria-hidden="true">
|
<div class="col-lg-12 col-sm-12" data-bind="visible: page() == 'import'" style="display:none">
|
||||||
<div class="modal-dialog" style="min-width:150px">
|
<div class="row panel">
|
||||||
<div class="modal-content">
|
<div class="col-md-8" style="height:60px;padding-top:10px;">
|
||||||
<div class="modal-header">
|
<span data-bind="text: statusLabel"></span>
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
|
||||||
<h4 class="modal-title" id="testModalLabel">{!! trans('texts.test_bank_account') !!}</h4>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="panel-body row">
|
|
||||||
<div class="form-group" style="padding-bottom:30px">
|
|
||||||
<label for="username" class="control-label col-lg-4 col-sm-4">{{ trans('texts.password') }}</label>
|
|
||||||
<div class="col-lg-6 col-sm-6">
|
|
||||||
<input class="form-control" id="bank_password" name="bank_password" type="password" data-bind="value: bank_password, valueUpdate: 'afterkeydown'"><br/>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
<div class="col-lg-12 col-sm-12" data-bind="visible: state() == 'loading'">
|
<input type="text" class="form-control" data-bind="value: $root.filter, valueUpdate: 'afterkeydown'"
|
||||||
<div class="progress">
|
placeholder="{{ trans('texts.filter') }}"/>
|
||||||
<div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 100%">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-lg-12 col-sm-12" data-bind="visible: state() == 'error'">
|
|
||||||
<div class="alert alert-danger" role="alert">
|
|
||||||
<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
|
|
||||||
{{ trans('texts.bank_account_error') }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-lg-12 col-sm-12" data-bind="visible: bank_accounts().length">
|
|
||||||
<table class="table table-striped accounts-table">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th class="header">{{ trans('texts.account_number') }}</th>
|
|
||||||
<th class="header">{{ trans('texts.type') }}</th>
|
|
||||||
<th class="header">{{ trans('texts.balance') }}</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody data-bind="foreach: bank_accounts">
|
|
||||||
<tr>
|
|
||||||
<td data-bind="text: account_number"></td>
|
|
||||||
<td data-bind="text: type"></td>
|
|
||||||
<td data-bind="text: balance"></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="modal-footer" style="margin-top: 0px; padding-top:30px;">
|
<div data-bind="foreach: bank_accounts">
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">{{ trans('texts.close') }}</button>
|
|
||||||
<button type="button" class="btn btn-success" onclick="doTest()" data-bind="css: { disabled: disableDoTest }">{{ trans('texts.test') }}</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
<h4 data-bind="text: account_name"></h4><br/>
|
||||||
|
|
||||||
|
<table class="table accounts-table" style="width:100%;">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="header">
|
||||||
|
<input type="checkbox" data-bind="checked: checkall, click: updateChecked"/>
|
||||||
|
</th>
|
||||||
|
<th class="header">{{ trans('texts.vendor') }}</th>
|
||||||
|
<th class="header">{{ trans('texts.info') }}</th>
|
||||||
|
<th class="header">{{ trans('texts.public_notes') }}</th>
|
||||||
|
<th class="header" nowrap>{{ trans('texts.date') }}</th>
|
||||||
|
<th class="header" nowrap>{{ trans('texts.amount') }}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody data-bind="foreach: filteredTransactions">
|
||||||
|
<tr>
|
||||||
|
<td style="text-align:center">
|
||||||
|
<input type="checkbox" value="1"
|
||||||
|
data-bind="checked: includeTransaction, attr: {name: 'bank_accounts[' + $index() + '][include]'}"/>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" class="form-control"
|
||||||
|
data-bind="value: vendor.pretty, valueUpdate: 'afterkeydown'"/>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" class="form-control"
|
||||||
|
data-bind="value: info, valueUpdate: 'afterkeydown'"/>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" class="form-control"
|
||||||
|
data-bind="value: memo, valueUpdate: 'afterkeydown'"/>
|
||||||
|
</td>
|
||||||
|
<td data-bind="text: date" nowrap></td>
|
||||||
|
<td data-bind="text: amount.pretty" nowrap></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<p> </p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
<div class="col-lg-12 col-sm-12" data-bind="visible: page() == 'done'" style="display:none">
|
||||||
|
<div class="alert alert-info" role="alert">
|
||||||
|
<span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span>
|
||||||
|
<span data-bind="text: importResults()"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-12 col-sm-12" data-bind="visible: isLoading" style="display:none">
|
||||||
|
<p> </p>
|
||||||
|
<div class="progress">
|
||||||
|
<div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 100%">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-12 col-sm-12" data-bind="visible: errorStr" style="display:none">
|
||||||
|
<div class="alert alert-danger" role="alert">
|
||||||
|
<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
|
||||||
|
{{ trans('texts.bank_account_error') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<p/> <p/>
|
<p/> <p/>
|
||||||
|
|
||||||
{!! Former::actions(
|
{!! Former::actions(
|
||||||
count(Cache::get('banks')) > 0 ? Button::normal(trans('texts.cancel'))->large()->asLinkTo(URL::to('/settings/bank_accounts'))->appendIcon(Icon::create('remove-circle')) : false,
|
count(Cache::get('banks')) > 0 ?
|
||||||
(!$bankAccount ?
|
Button::normal(trans('texts.cancel'))
|
||||||
Button::primary(trans('texts.test'))
|
->withAttributes([
|
||||||
|
'data-bind' => 'visible: !importResults()',
|
||||||
|
])
|
||||||
|
->large()
|
||||||
|
->asLinkTo(URL::to('/settings/bank_accounts'))
|
||||||
|
->appendIcon(Icon::create('remove-circle')) : false,
|
||||||
|
Button::success(trans('texts.validate'))
|
||||||
->withAttributes([
|
->withAttributes([
|
||||||
'data-bind' => 'css: {disabled: disableMainButton}',
|
'data-bind' => 'css: {disabled: disableValidate}, visible: page() == "login"',
|
||||||
'onclick' => 'showTest()'
|
'onclick' => 'validate()'
|
||||||
])
|
])
|
||||||
->large()
|
->large()
|
||||||
->appendIcon(Icon::create('download-alt'))
|
->appendIcon(Icon::create('lock')),
|
||||||
: false),
|
|
||||||
Button::success(trans('texts.save'))
|
Button::success(trans('texts.save'))
|
||||||
->submit()->large()
|
|
||||||
->withAttributes([
|
->withAttributes([
|
||||||
'data-bind' => 'css: {disabled: disableMainButton}',
|
'data-bind' => 'css: {disabled: disableSave}, visible: page() == "setup"',
|
||||||
|
'style' => 'display:none',
|
||||||
|
'onclick' => 'save()'
|
||||||
])
|
])
|
||||||
|
->large()
|
||||||
|
->appendIcon(Icon::create('floppy-disk')) ,
|
||||||
|
Button::success(trans('texts.import'))
|
||||||
|
->withAttributes([
|
||||||
|
'data-bind' => 'css: {disabled: disableSaveExpenses}, visible: page() == "import"',
|
||||||
|
'style' => 'display:none',
|
||||||
|
'onclick' => 'saveExpenses()'
|
||||||
|
])
|
||||||
|
->large()
|
||||||
->appendIcon(Icon::create('floppy-disk'))) !!}
|
->appendIcon(Icon::create('floppy-disk'))) !!}
|
||||||
|
|
||||||
{!! Former::close() !!}
|
{!! Former::close() !!}
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
|
||||||
function showTest() {
|
function validate() {
|
||||||
$('#testModal').modal('show');
|
model.errorStr(false);
|
||||||
}
|
model.isLoading(true);
|
||||||
|
$.post('{{ URL::to('/bank_accounts/validate') }}', $('.main-form').serialize())
|
||||||
function doTest() {
|
|
||||||
model.state('loading');
|
|
||||||
$.post('{{ URL::to('/bank_accounts/test') }}', $('.main-form').serialize())
|
|
||||||
.done(function(data) {
|
.done(function(data) {
|
||||||
model.state('');
|
|
||||||
data = JSON.parse(data);
|
data = JSON.parse(data);
|
||||||
if (!data || !data.length) {
|
if (!data || !data.length) {
|
||||||
model.state('error');
|
model.isLoading(false);
|
||||||
|
model.errorStr('error');
|
||||||
} else {
|
} else {
|
||||||
for (var i=0; i<data.length; i++) {
|
loadTransactions(data);
|
||||||
model.bank_accounts.push(data[i]);
|
@if ($bankAccount)
|
||||||
}
|
model.setPage('import')
|
||||||
|
@else
|
||||||
|
model.setPage('setup')
|
||||||
|
@endif
|
||||||
}
|
}
|
||||||
}).fail(function() {
|
}).fail(function() {
|
||||||
model.state('error');
|
model.isLoading(false);
|
||||||
|
model.errorStr('error');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function save() {
|
||||||
|
model.errorStr(false);
|
||||||
|
model.isLoading(true);
|
||||||
|
$.post('{{ URL::to('/bank_accounts') }}', $('.main-form').serialize())
|
||||||
|
.done(function(data) {
|
||||||
|
data = JSON.parse(data);
|
||||||
|
if (!data || !data.length) {
|
||||||
|
model.isLoading(false);
|
||||||
|
model.errorStr('error');
|
||||||
|
} else {
|
||||||
|
loadTransactions(data);
|
||||||
|
model.setPage('import')
|
||||||
|
}
|
||||||
|
}).fail(function() {
|
||||||
|
model.isLoading(false);
|
||||||
|
model.errorStr('error');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadTransactions(data) {
|
||||||
|
model.bank_accounts.removeAll();
|
||||||
|
for (var i=0; i<data.length; i++) {
|
||||||
|
var row = data[i];
|
||||||
|
var account = new BankAccountModel(row);
|
||||||
|
if (row.transactions) {
|
||||||
|
var transactions = account.transactions();
|
||||||
|
for (var j=0; j<row.transactions.length; j++) {
|
||||||
|
var transaction = row.transactions[j];
|
||||||
|
transactions.push(new TransactionModel(transaction));
|
||||||
|
}
|
||||||
|
account.transactions.valueHasMutated();
|
||||||
|
}
|
||||||
|
model.bank_accounts.push(account);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveExpenses() {
|
||||||
|
model.errorStr(false);
|
||||||
|
model.isLoading(true);
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: '{{ URL::to('/bank_accounts/import_expenses') }}' + '/' + model.bank_id(),
|
||||||
|
type: 'POST',
|
||||||
|
data: ko.toJSON(model.includedTransactions()),
|
||||||
|
datatype: 'json',
|
||||||
|
processData: false,
|
||||||
|
contentType: 'application/json; charset=utf-8',
|
||||||
|
success: function (result) {
|
||||||
|
model.importResults(result);
|
||||||
|
model.setPage('done');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
@if ($bankAccount)
|
|
||||||
$('#bank_id').prop('disabled', true);
|
|
||||||
@else
|
|
||||||
$('#bank_id').combobox().on('change', function(e) {
|
|
||||||
model.bank_id($('#bank_id').val());
|
|
||||||
});
|
|
||||||
@endif
|
|
||||||
|
|
||||||
$('#testModal').on('shown.bs.modal', function() {
|
|
||||||
$('#bank_password').focus();
|
|
||||||
});
|
|
||||||
|
|
||||||
$('#bank_id').focus();
|
$('#bank_id').focus();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var TransactionModel = function(data) {
|
||||||
|
var self = this;
|
||||||
|
self.vendor = ko.observable(data.vendor);
|
||||||
|
self.info = ko.observable(data.info);
|
||||||
|
self.memo = ko.observable(data.memo);
|
||||||
|
self.amount = ko.observable(data.amount);
|
||||||
|
self.date = ko.observable(data.date);
|
||||||
|
self.vendor_orig = data.vendor;
|
||||||
|
self.id = data.uniqueId;
|
||||||
|
|
||||||
|
self.includeTransaction = ko.observable();
|
||||||
|
|
||||||
|
self.vendor.pretty = ko.computed({
|
||||||
|
read: function () {
|
||||||
|
return self.vendor();
|
||||||
|
},
|
||||||
|
write: function (value) {
|
||||||
|
this.vendor(value);
|
||||||
|
for (var i=0; i<model.bank_accounts().length; i++) {
|
||||||
|
var account = model.bank_accounts()[i];
|
||||||
|
var transactions = account.transactions();
|
||||||
|
for (var j=0; j<transactions.length; j++) {
|
||||||
|
var transaction = transactions[j];
|
||||||
|
if (transaction.vendor_orig == this.vendor_orig) {
|
||||||
|
transaction.vendor(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
owner: self
|
||||||
|
})
|
||||||
|
|
||||||
|
self.amount.pretty = ko.computed({
|
||||||
|
read: function () {
|
||||||
|
return self.amount() ? formatMoney(self.amount()) : '';
|
||||||
|
},
|
||||||
|
write: function (value) {
|
||||||
|
this.amount(value);
|
||||||
|
},
|
||||||
|
owner: self
|
||||||
|
});
|
||||||
|
|
||||||
|
self.isMatch = function(filter) {
|
||||||
|
var filter = filter.toLowerCase();
|
||||||
|
var values = [
|
||||||
|
self.vendor(),
|
||||||
|
self.info(),
|
||||||
|
self.memo()
|
||||||
|
];
|
||||||
|
for (var i=0; i<values.length; i++) {
|
||||||
|
if (values[i] && values[i].toLowerCase().indexOf(filter) >= 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var BankAccountModel = function(data) {
|
||||||
|
var self = this;
|
||||||
|
self.includeAccount = ko.observable(true);
|
||||||
|
self.checkall = ko.observable();
|
||||||
|
self.hashed_account_number = ko.observable(data.hashed_account_number);
|
||||||
|
self.masked_account_number = ko.observable(data.masked_account_number);
|
||||||
|
self.account_name = ko.observable(data.account_name);
|
||||||
|
self.balance = ko.observable(data.balance);
|
||||||
|
self.transactions = ko.observableArray();
|
||||||
|
|
||||||
|
self.filteredTransactions = ko.computed(function() {
|
||||||
|
if (!model.filter()) {
|
||||||
|
return self.transactions();
|
||||||
|
} else {
|
||||||
|
return ko.utils.arrayFilter(self.transactions(), function(transaction) {
|
||||||
|
return transaction.isMatch(model.filter());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, self).extend({ rateLimit: { timeout: 350, method: 'notifyWhenChangesStop' } });
|
||||||
|
|
||||||
|
|
||||||
|
self.isValid = ko.computed(function() {
|
||||||
|
return self.account_name() ? true : false;
|
||||||
|
}, self);
|
||||||
|
|
||||||
|
self.updateChecked = function() {
|
||||||
|
var data = self.filteredTransactions();
|
||||||
|
for (var i=0; i<data.length; i++) {
|
||||||
|
data[i].includeTransaction(self.checkall());
|
||||||
|
}
|
||||||
|
self.transactions.valueHasMutated();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var ViewModel = function() {
|
var ViewModel = function() {
|
||||||
var self = this;
|
var self = this;
|
||||||
@ -178,14 +380,101 @@
|
|||||||
self.bank_password = ko.observable();
|
self.bank_password = ko.observable();
|
||||||
self.bank_accounts = ko.observableArray();
|
self.bank_accounts = ko.observableArray();
|
||||||
|
|
||||||
self.state = ko.observable(false);
|
self.page = ko.observable();
|
||||||
|
self.title = ko.observable();
|
||||||
|
self.errorStr = ko.observable(false);
|
||||||
|
self.isLoading = ko.observable(false);
|
||||||
|
self.importResults = ko.observable();
|
||||||
|
self.filter = ko.observable();
|
||||||
|
|
||||||
self.disableMainButton = ko.computed(function() {
|
self.setPage = function(page) {
|
||||||
return !self.bank_id() || !self.bank_username();
|
self.isLoading(false);
|
||||||
|
self.page(page);
|
||||||
|
if (page == 'login') {
|
||||||
|
@if ($bankAccount)
|
||||||
|
self.title("{{ $bankAccount->bank->name }}");
|
||||||
|
@else
|
||||||
|
self.title("{{ trans('texts.add_bank_account') }}");
|
||||||
|
@endif
|
||||||
|
} else if (page == 'setup') {
|
||||||
|
self.title("{{ trans('texts.setup_account') }}");
|
||||||
|
} else if (page == 'import') {
|
||||||
|
self.title("{{ trans('texts.import_expenses') }}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self.setPage('login')
|
||||||
|
|
||||||
|
self.includedTransactions = ko.computed(function() {
|
||||||
|
var data = [];
|
||||||
|
for (var i=0; i<self.bank_accounts().length; i++) {
|
||||||
|
var account = self.bank_accounts()[i];
|
||||||
|
var transactions = ko.utils.arrayFilter(account.transactions(), function(transaction) {
|
||||||
|
return transaction.includeTransaction();
|
||||||
|
});
|
||||||
|
data = data.concat(transactions);
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
});
|
||||||
|
|
||||||
|
self.countExpenses = ko.computed(function() {
|
||||||
|
var count = 0;
|
||||||
|
for (var i=0; i<self.bank_accounts().length; i++) {
|
||||||
|
var account = self.bank_accounts()[i];
|
||||||
|
var transactions = ko.utils.arrayFilter(account.transactions(), function(transaction) {
|
||||||
|
return transaction.includeTransaction();
|
||||||
|
});
|
||||||
|
count += transactions.length;
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
});
|
||||||
|
|
||||||
|
self.statusLabel = ko.computed(function() {
|
||||||
|
var count = 0;
|
||||||
|
var total = 0;
|
||||||
|
for (var i=0; i<self.bank_accounts().length; i++) {
|
||||||
|
var account = self.bank_accounts()[i];
|
||||||
|
var transactions = ko.utils.arrayFilter(account.transactions(), function(transaction) {
|
||||||
|
return transaction.includeTransaction();
|
||||||
|
});
|
||||||
|
count += transactions.length;
|
||||||
|
for (var j=0; j<transactions.length; j++) {
|
||||||
|
total += transactions[j].amount();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var str = count + (count == 1 ? " {{ trans('texts.expense') }}" : " {{ trans('texts.expenses') }}") + " | ";
|
||||||
|
return str + formatMoney(total);
|
||||||
|
});
|
||||||
|
|
||||||
|
self.disableValidate = ko.computed(function() {
|
||||||
|
if (self.isLoading()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return !self.bank_id() || !self.bank_username() || !self.bank_password();
|
||||||
}, self);
|
}, self);
|
||||||
|
|
||||||
self.disableDoTest = ko.computed(function() {
|
self.disableSave = ko.computed(function() {
|
||||||
return !self.bank_id() || !self.bank_username() || !self.bank_password();
|
if (self.disableValidate()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
var hasAccount = false;
|
||||||
|
for (var i=0; i<self.bank_accounts().length; i++) {
|
||||||
|
var account = self.bank_accounts()[i];
|
||||||
|
if (account.includeAccount()) {
|
||||||
|
if (account.isValid()) {
|
||||||
|
hasAccount = true;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return !hasAccount;
|
||||||
|
}, self);
|
||||||
|
|
||||||
|
self.disableSaveExpenses = ko.computed(function() {
|
||||||
|
if (self.isLoading()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return self.countExpenses() == 0;
|
||||||
}, self);
|
}, self);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -33,12 +33,10 @@ class InvoiceDesignCest
|
|||||||
|
|
||||||
$I->click('#primary_color + .sp-replacer');
|
$I->click('#primary_color + .sp-replacer');
|
||||||
$I->executeJS('$("#primary_color").val("#7364b6")');
|
$I->executeJS('$("#primary_color").val("#7364b6")');
|
||||||
//$I->executeJS('$("#primary_color + .sp-replacer .sp-preview-inner").attr("style", "background-color: rgb(0,98,254);")');
|
|
||||||
$I->executeJS('$(".sp-container:nth-child(1) .sp-choose").click()');
|
$I->executeJS('$(".sp-container:nth-child(1) .sp-choose").click()');
|
||||||
|
|
||||||
$I->click('#secondary_color + .sp-replacer');
|
$I->click('#secondary_color + .sp-replacer');
|
||||||
$I->executeJS('$("#secondary_color").val("#aa6709")');
|
$I->executeJS('$("#secondary_color").val("#aa6709")');
|
||||||
//$I->executeJS('$("#secondary_color + .sp-replacer .sp-preview-inner").attr("style", "background-color: rgb(254,0,50);")');
|
|
||||||
$I->executeJS('$(".sp-container:nth-child(2) .sp-choose").click()');
|
$I->executeJS('$(".sp-container:nth-child(2) .sp-choose").click()');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -129,21 +129,6 @@ class SettingsCest
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public function updateInvoiceDesign(FunctionalTester $I)
|
|
||||||
{
|
|
||||||
$I->wantTo('update invoice design');
|
|
||||||
$I->amOnPage('/settings/invoice_design');
|
|
||||||
|
|
||||||
$color = $this->faker->hexcolor;
|
|
||||||
|
|
||||||
$I->fillField(['name' => 'labels_item'], $this->faker->text(14));
|
|
||||||
$I->fillField(['name' => 'primary_color'], $color);
|
|
||||||
$I->click('Save');
|
|
||||||
|
|
||||||
$I->seeResponseCodeIs(200);
|
|
||||||
$I->seeRecord('accounts', array('primary_color' => $color));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function updateInvoiceSettings(FunctionalTester $I)
|
public function updateInvoiceSettings(FunctionalTester $I)
|
||||||
{
|
{
|
||||||
$I->wantTo('update invoice settings');
|
$I->wantTo('update invoice settings');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user