diff --git a/.env.example b/.env.example index 66d2d5251b27..c0d6668fb52a 100644 --- a/.env.example +++ b/.env.example @@ -41,4 +41,6 @@ API_SECRET=password #GOOGLE_CLIENT_ID= #GOOGLE_CLIENT_SECRET= -#GOOGLE_OAUTH_REDIRECT=http://ninja.dev/auth/google \ No newline at end of file +#GOOGLE_OAUTH_REDIRECT=http://ninja.dev/auth/google + +#GOOGLE_MAPS_API_KEY= \ No newline at end of file diff --git a/LICENSE b/LICENSE index 2f9d7d69a9b5..9fe9b899c55a 100644 --- a/LICENSE +++ b/LICENSE @@ -13,7 +13,7 @@ open-source software. 1. Redistributions of source code, in whole or part and with or without modification requires the express permission of the author and must prominently -display "Powered by InvoiceNinja" or the Invoice Ninja logo in verifiable form +display "Powered by InvoiceNinja" and the Invoice Ninja logo in verifiable form with hyperlink to said site. 2. Neither the name nor any trademark of the Author may be used to endorse or promote products derived from this software without specific diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index 755932691d18..912ade56f962 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -760,7 +760,7 @@ class AccountController extends BaseController } $labels = []; - foreach (['item', 'description', 'unit_cost', 'quantity', 'line_total', 'terms'] as $field) { + foreach (['item', 'description', 'unit_cost', 'quantity', 'line_total', 'terms', 'balance_due', 'partial_due'] as $field) { $labels[$field] = Input::get("labels_{$field}"); } $account->invoice_labels = json_encode($labels); diff --git a/app/Http/Controllers/DashboardApiController.php b/app/Http/Controllers/DashboardApiController.php new file mode 100644 index 000000000000..06393e3ddc3c --- /dev/null +++ b/app/Http/Controllers/DashboardApiController.php @@ -0,0 +1,179 @@ +hasPermission('view_all'); + $user_id = Auth::user()->id; + + // total_income, billed_clients, invoice_sent and active_clients + $select = DB::raw('COUNT(DISTINCT CASE WHEN invoices.id IS NOT NULL THEN clients.id ELSE null END) billed_clients, + SUM(CASE WHEN invoices.invoice_status_id >= '.INVOICE_STATUS_SENT.' THEN 1 ELSE 0 END) invoices_sent, + COUNT(DISTINCT clients.id) active_clients'); + $metrics = DB::table('accounts') + ->select($select) + ->leftJoin('clients', 'accounts.id', '=', 'clients.account_id') + ->leftJoin('invoices', 'clients.id', '=', 'invoices.client_id') + ->where('accounts.id', '=', Auth::user()->account_id) + ->where('clients.is_deleted', '=', false) + ->where('invoices.is_deleted', '=', false) + ->where('invoices.is_recurring', '=', false) + ->where('invoices.is_quote', '=', false); + + if(!$view_all){ + $metrics = $metrics->where(function($query) use($user_id){ + $query->where('invoices.user_id', '=', $user_id); + $query->orwhere(function($query) use($user_id){ + $query->where('invoices.user_id', '=', null); + $query->where('clients.user_id', '=', $user_id); + }); + }); + } + + $metrics = $metrics->groupBy('accounts.id') + ->first(); + + $select = DB::raw('SUM(clients.paid_to_date) as value, clients.currency_id as currency_id'); + $paidToDate = DB::table('accounts') + ->select($select) + ->leftJoin('clients', 'accounts.id', '=', 'clients.account_id') + ->where('accounts.id', '=', Auth::user()->account_id) + ->where('clients.is_deleted', '=', false); + + if(!$view_all){ + $paidToDate = $paidToDate->where('clients.user_id', '=', $user_id); + } + + $paidToDate = $paidToDate->groupBy('accounts.id') + ->groupBy(DB::raw('CASE WHEN clients.currency_id IS NULL THEN CASE WHEN accounts.currency_id IS NULL THEN 1 ELSE accounts.currency_id END ELSE clients.currency_id END')) + ->get(); + + $select = DB::raw('AVG(invoices.amount) as invoice_avg, clients.currency_id as currency_id'); + $averageInvoice = DB::table('accounts') + ->select($select) + ->leftJoin('clients', 'accounts.id', '=', 'clients.account_id') + ->leftJoin('invoices', 'clients.id', '=', 'invoices.client_id') + ->where('accounts.id', '=', Auth::user()->account_id) + ->where('clients.is_deleted', '=', false) + ->where('invoices.is_deleted', '=', false) + ->where('invoices.is_quote', '=', false) + ->where('invoices.is_recurring', '=', false); + + if(!$view_all){ + $averageInvoice = $averageInvoice->where('invoices.user_id', '=', $user_id); + } + + $averageInvoice = $averageInvoice->groupBy('accounts.id') + ->groupBy(DB::raw('CASE WHEN clients.currency_id IS NULL THEN CASE WHEN accounts.currency_id IS NULL THEN 1 ELSE accounts.currency_id END ELSE clients.currency_id END')) + ->get(); + + $select = DB::raw('SUM(clients.balance) as value, clients.currency_id as currency_id'); + $balances = DB::table('accounts') + ->select($select) + ->leftJoin('clients', 'accounts.id', '=', 'clients.account_id') + ->where('accounts.id', '=', Auth::user()->account_id) + ->where('clients.is_deleted', '=', false) + ->groupBy('accounts.id') + ->groupBy(DB::raw('CASE WHEN clients.currency_id IS NULL THEN CASE WHEN accounts.currency_id IS NULL THEN 1 ELSE accounts.currency_id END ELSE clients.currency_id END')) + ->get(); + + $pastDue = DB::table('invoices') + ->leftJoin('clients', 'clients.id', '=', 'invoices.client_id') + ->leftJoin('contacts', 'contacts.client_id', '=', 'clients.id') + ->where('invoices.account_id', '=', Auth::user()->account_id) + ->where('clients.deleted_at', '=', null) + ->where('contacts.deleted_at', '=', null) + ->where('invoices.is_recurring', '=', false) + //->where('invoices.is_quote', '=', false) + ->where('invoices.balance', '>', 0) + ->where('invoices.is_deleted', '=', false) + ->where('invoices.deleted_at', '=', null) + ->where('contacts.is_primary', '=', true) + ->where('invoices.due_date', '<', date('Y-m-d')); + + if(!$view_all){ + $pastDue = $pastDue->where('invoices.user_id', '=', $user_id); + } + + $pastDue = $pastDue->select(['invoices.due_date', 'invoices.balance', 'invoices.public_id', 'invoices.invoice_number', 'clients.name as client_name', 'contacts.email', 'contacts.first_name', 'contacts.last_name', 'clients.currency_id', 'clients.public_id as client_public_id', 'clients.user_id as client_user_id', 'is_quote']) + ->orderBy('invoices.due_date', 'asc') + ->take(50) + ->get(); + + $upcoming = DB::table('invoices') + ->leftJoin('clients', 'clients.id', '=', 'invoices.client_id') + ->leftJoin('contacts', 'contacts.client_id', '=', 'clients.id') + ->where('invoices.account_id', '=', Auth::user()->account_id) + ->where('clients.deleted_at', '=', null) + ->where('contacts.deleted_at', '=', null) + ->where('invoices.deleted_at', '=', null) + ->where('invoices.is_recurring', '=', false) + //->where('invoices.is_quote', '=', false) + ->where('invoices.balance', '>', 0) + ->where('invoices.is_deleted', '=', false) + ->where('contacts.is_primary', '=', true) + ->where('invoices.due_date', '>=', date('Y-m-d')) + ->orderBy('invoices.due_date', 'asc'); + + if(!$view_all){ + $upcoming = $upcoming->where('invoices.user_id', '=', $user_id); + } + + $upcoming = $upcoming->take(50) + ->select(['invoices.due_date', 'invoices.balance', 'invoices.public_id', 'invoices.invoice_number', 'clients.name as client_name', 'contacts.email', 'contacts.first_name', 'contacts.last_name', 'clients.currency_id', 'clients.public_id as client_public_id', 'clients.user_id as client_user_id', 'is_quote']) + ->get(); + + $payments = DB::table('payments') + ->leftJoin('clients', 'clients.id', '=', 'payments.client_id') + ->leftJoin('contacts', 'contacts.client_id', '=', 'clients.id') + ->leftJoin('invoices', 'invoices.id', '=', 'payments.invoice_id') + ->where('payments.account_id', '=', Auth::user()->account_id) + ->where('payments.is_deleted', '=', false) + ->where('invoices.is_deleted', '=', false) + ->where('clients.is_deleted', '=', false) + ->where('contacts.deleted_at', '=', null) + ->where('contacts.is_primary', '=', true); + + if(!$view_all){ + $payments = $payments->where('payments.user_id', '=', $user_id); + } + + $payments = $payments->select(['payments.payment_date', 'payments.amount', 'invoices.public_id', 'invoices.invoice_number', 'clients.name as client_name', 'contacts.email', 'contacts.first_name', 'contacts.last_name', 'clients.currency_id', 'clients.public_id as client_public_id', 'clients.user_id as client_user_id']) + ->orderBy('payments.payment_date', 'desc') + ->take(50) + ->get(); + + $hasQuotes = false; + foreach ([$upcoming, $pastDue] as $data) { + foreach ($data as $invoice) { + if ($invoice->is_quote) { + $hasQuotes = true; + } + } + } + + + $data = [ + 'id' => 1, + 'paidToDate' => $paidToDate[0]->value, + 'paidToDateCurrency' => $paidToDate[0]->currency_id, + 'balances' => $balances[0]->value, + 'balancesCurrency' => $balances[0]->currency_id, + 'averageInvoice' => $averageInvoice[0]->invoice_avg, + 'averageInvoiceCurrency' => $averageInvoice[0]->currency_id, + 'invoicesSent' => $metrics ? $metrics->invoices_sent : 0, + 'activeClients' => $metrics ? $metrics->active_clients : 0, + ]; + + + + return $this->response($data); + + } +} diff --git a/app/Http/Controllers/ExpenseController.php b/app/Http/Controllers/ExpenseController.php index eb9fa0c437ee..b1fd28e41941 100644 --- a/app/Http/Controllers/ExpenseController.php +++ b/app/Http/Controllers/ExpenseController.php @@ -45,7 +45,7 @@ class ExpenseController extends BaseController return View::make('list', array( 'entityType' => ENTITY_EXPENSE, 'title' => trans('texts.expenses'), - 'sortCol' => '1', + 'sortCol' => '3', 'columns' => Utils::trans([ 'checkbox', 'vendor', diff --git a/app/Http/Controllers/InvoiceController.php b/app/Http/Controllers/InvoiceController.php index 05e784695634..5a14ea624449 100644 --- a/app/Http/Controllers/InvoiceController.php +++ b/app/Http/Controllers/InvoiceController.php @@ -52,6 +52,7 @@ class InvoiceController extends BaseController $data = [ 'title' => trans('texts.invoices'), 'entityType' => ENTITY_INVOICE, + 'sortCol' => '3', 'columns' => Utils::trans([ 'checkbox', 'invoice_number', @@ -88,7 +89,7 @@ class InvoiceController extends BaseController { $account = Auth::user()->account; $invoice = Invoice::scope($publicId) - ->with('invitations', 'account.country', 'client.contacts', 'client.country', 'invoice_items') + ->with('invitations', 'account.country', 'client.contacts', 'client.country', 'invoice_items', 'payments') ->withTrashed() ->firstOrFail(); @@ -154,6 +155,14 @@ class InvoiceController extends BaseController if (!$invoice->is_recurring && $invoice->balance > 0) { $actions[] = ['url' => 'javascript:onPaymentClick()', 'label' => trans('texts.enter_payment')]; } + + foreach ($invoice->payments as $payment) { + $label = trans("texts.view_payment"); + if (count($invoice->payments) > 1) { + $label .= ' - ' . $account->formatMoney($payment->amount, $invoice->client); + } + $actions[] = ['url' => $payment->present()->url, 'label' => $label]; + } } if (count($actions) > 3) { diff --git a/app/Http/Controllers/PaymentController.php b/app/Http/Controllers/PaymentController.php index 7e675d023f29..ebede5711bd5 100644 --- a/app/Http/Controllers/PaymentController.php +++ b/app/Http/Controllers/PaymentController.php @@ -48,6 +48,7 @@ class PaymentController extends BaseController return View::make('list', array( 'entityType' => ENTITY_PAYMENT, 'title' => trans('texts.payments'), + 'sortCol' => '6', 'columns' => Utils::trans([ 'checkbox', 'invoice', @@ -641,6 +642,6 @@ class PaymentController extends BaseController $message .= $error ?: trans('texts.payment_error'); Session::flash('error', $message); - Utils::logError("Payment Error [{$type}]: " . ($exception ? Utils::getErrorString($exception) : $message)); + Utils::logError("Payment Error [{$type}]: " . ($exception ? Utils::getErrorString($exception) : $message), 'PHP', true); } } diff --git a/app/Http/Controllers/QuoteController.php b/app/Http/Controllers/QuoteController.php index 7777c5a9d006..0c2dc3a8a5ba 100644 --- a/app/Http/Controllers/QuoteController.php +++ b/app/Http/Controllers/QuoteController.php @@ -54,6 +54,7 @@ class QuoteController extends BaseController $data = [ 'title' => trans('texts.quotes'), 'entityType' => ENTITY_QUOTE, + 'sortCol' => '3', 'columns' => Utils::trans([ 'checkbox', 'quote_number', diff --git a/app/Http/Controllers/ReportController.php b/app/Http/Controllers/ReportController.php index 1c4c033b9ed3..f1feb65b4bd9 100644 --- a/app/Http/Controllers/ReportController.php +++ b/app/Http/Controllers/ReportController.php @@ -354,8 +354,8 @@ class ReportController extends BaseController private function generateInvoiceReport($startDate, $endDate, $isExport) { - $columns = ['client', 'invoice_number', 'invoice_date', 'amount', 'paid', 'balance']; - + $columns = ['client', 'invoice_number', 'invoice_date', 'amount', 'payment_date', 'paid', 'method']; + $account = Auth::user()->account; $displayData = []; $reportTotals = []; @@ -379,19 +379,25 @@ class ReportController extends BaseController }]); foreach ($clients->get() as $client) { - $currencyId = $client->currency_id ?: Auth::user()->account->getCurrencyId(); + foreach ($client->invoices as $invoice) { + + $payments = count($invoice->payments) ? $invoice->payments : [false]; + foreach ($payments as $payment) { + $displayData[] = [ + $isExport ? $client->getDisplayName() : $client->present()->link, + $isExport ? $invoice->invoice_number : $invoice->present()->link, + $invoice->present()->invoice_date, + $account->formatMoney($invoice->amount, $client), + $payment ? $payment->present()->payment_date : '', + $payment ? $account->formatMoney($payment->amount, $client) : '', + $payment ? $payment->present()->method : '', + ]; + if ($payment) { + $reportTotals = $this->addToTotals($reportTotals, $client->currency_id, 'paid', $payment->amount); + } + } - foreach ($client->invoices as $invoice) { - $displayData[] = [ - $isExport ? $client->getDisplayName() : $client->present()->link, - $isExport ? $invoice->invoice_number : $invoice->present()->link, - $invoice->present()->invoice_date, - $account->formatMoney($invoice->amount, $client), - $account->formatMoney($invoice->getAmountPaid(), $client), - $account->formatMoney($invoice->balance, $client), - ]; $reportTotals = $this->addToTotals($reportTotals, $client->currency_id, 'amount', $invoice->amount); - $reportTotals = $this->addToTotals($reportTotals, $client->currency_id, 'paid', $invoice->getAmountPaid()); $reportTotals = $this->addToTotals($reportTotals, $client->currency_id, 'balance', $invoice->balance); } } diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 0e5a8dd70dd6..2e3f675aa53e 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -77,7 +77,6 @@ class UserController extends BaseController 'user' => $user, 'method' => 'PUT', 'url' => 'users/'.$publicId, - 'title' => trans('texts.edit_user'), ]; return View::make('users.edit', $data); @@ -120,7 +119,6 @@ class UserController extends BaseController 'user' => null, 'method' => 'POST', 'url' => 'users', - 'title' => trans('texts.add_user'), ]; return View::make('users.edit', $data); diff --git a/app/Http/routes.php b/app/Http/routes.php index 55f65e99a491..1f5289d44326 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -257,6 +257,7 @@ Route::group(['middleware' => 'api', 'prefix' => 'api/v1'], function() Route::resource('expenses','ExpenseApiController'); Route::post('add_token', 'AccountApiController@addDeviceToken'); Route::post('update_notifications', 'AccountApiController@updatePushNotifications'); + Route::get('dashboard', 'DashboardApiController@index'); // Vendor Route::resource('vendors', 'VendorApiController'); @@ -508,6 +509,8 @@ if (!defined('CONTACT_EMAIL')) { define('GATEWAY_PAYFAST', 13); define('GATEWAY_PAYPAL_EXPRESS', 17); define('GATEWAY_PAYPAL_PRO', 18); + define('GATEWAY_SAGE_PAY_DIRECT', 20); + define('GATEWAY_SAGE_PAY_SERVER', 21); define('GATEWAY_STRIPE', 23); define('GATEWAY_GOCARDLESS', 6); define('GATEWAY_TWO_CHECKOUT', 27); @@ -532,7 +535,7 @@ if (!defined('CONTACT_EMAIL')) { define('NINJA_GATEWAY_CONFIG', 'NINJA_GATEWAY_CONFIG'); define('NINJA_WEB_URL', 'https://www.invoiceninja.com'); define('NINJA_APP_URL', 'https://app.invoiceninja.com'); - define('NINJA_VERSION', '2.5.0.4'); + define('NINJA_VERSION', '2.5.1.1'); define('NINJA_DATE', '2000-01-01'); define('SOCIAL_LINK_FACEBOOK', 'https://www.facebook.com/invoiceninja'); @@ -705,4 +708,4 @@ if (Utils::isNinjaDev()) //ini_set('memory_limit','1024M'); //Auth::loginUsingId(1); } -*/ +*/ \ No newline at end of file diff --git a/app/Libraries/Utils.php b/app/Libraries/Utils.php index cfcc97c00114..439247f337c0 100644 --- a/app/Libraries/Utils.php +++ b/app/Libraries/Utils.php @@ -247,7 +247,7 @@ class Utils return "***{$class}*** [{$code}] : {$exception->getFile()} [Line {$exception->getLine()}] => {$exception->getMessage()}"; } - public static function logError($error, $context = 'PHP') + public static function logError($error, $context = 'PHP', $info = false) { if ($error instanceof Exception) { $error = self::getErrorString($error); @@ -271,7 +271,11 @@ class Utils 'count' => Session::get('error_count', 0), ]; - Log::error($error."\n", $data); + if ($info) { + Log::info($error."\n", $data); + } else { + Log::error($error."\n", $data); + } /* Mail::queue('emails.error', ['message'=>$error.' '.json_encode($data)], function($message) @@ -620,8 +624,8 @@ class Utils private static function getMonth($offset) { - $months = [ "January", "February", "March", "April", "May", "June", - "July", "August", "September", "October", "November", "December", ]; + $months = [ "january", "february", "march", "april", "may", "june", + "july", "august", "september", "october", "november", "december", ]; $month = intval(date('n')) - 1; @@ -632,7 +636,7 @@ class Utils $month += 12; } - return $months[$month]; + return trans('texts.' . $months[$month]); } private static function getQuarter($offset) diff --git a/app/Models/Account.php b/app/Models/Account.php index 368ecac825ab..f6a7194bdf6f 100644 --- a/app/Models/Account.php +++ b/app/Models/Account.php @@ -683,7 +683,7 @@ class Account extends Eloquent 'subtotal', 'paid_to_date', 'balance_due', - 'amount_due', + 'partial_due', 'terms', 'your_invoice', 'quote', @@ -1023,7 +1023,7 @@ class Account extends Eloquent return true; } - public function showCustomField($field, $entity) + public function showCustomField($field, $entity = false) { if ($this->isPro()) { return $this->$field ? true : false; diff --git a/app/Models/Gateway.php b/app/Models/Gateway.php index 06621518403b..681e8315c512 100644 --- a/app/Models/Gateway.php +++ b/app/Models/Gateway.php @@ -75,6 +75,8 @@ class Gateway extends Eloquent $link = 'https://bitpay.com/dashboard/signup'; } elseif ($this->id == GATEWAY_DWOLLA) { $link = 'https://www.dwolla.com/register'; + } elseif ($this->id == GATEWAY_SAGE_PAY_DIRECT || $this->id == GATEWAY_SAGE_PAY_SERVER) { + $link = 'https://applications.sagepay.com/apply/2C02C252-0F8A-1B84-E10D-CF933EFCAA99'; } $key = 'texts.gateway_help_'.$this->id; diff --git a/app/Models/Vendor.php b/app/Models/Vendor.php index ce21a6446364..573a581e4774 100644 --- a/app/Models/Vendor.php +++ b/app/Models/Vendor.php @@ -5,6 +5,7 @@ use DB; use Carbon; use App\Events\VendorWasCreated; use App\Events\VendorWasUpdated; +use App\Events\VendorWasDeleted; use Laracasts\Presenter\PresentableTrait; use Illuminate\Database\Eloquent\SoftDeletes; diff --git a/app/Ninja/Mailers/Mailer.php b/app/Ninja/Mailers/Mailer.php index c30c9a10d74c..7afcc2548c93 100644 --- a/app/Ninja/Mailers/Mailer.php +++ b/app/Ninja/Mailers/Mailer.php @@ -81,7 +81,7 @@ class Mailer $emailError = $exception->getMessage(); } - Utils::logError("Email Error: $emailError"); + //Utils::logError("Email Error: $emailError"); if (isset($data['invitation'])) { $invitation = $data['invitation']; diff --git a/app/Ninja/Presenters/InvoicePresenter.php b/app/Ninja/Presenters/InvoicePresenter.php index 560f2d49e6f4..ebb3297d5c1a 100644 --- a/app/Ninja/Presenters/InvoicePresenter.php +++ b/app/Ninja/Presenters/InvoicePresenter.php @@ -19,7 +19,7 @@ class InvoicePresenter extends Presenter { public function balanceDueLabel() { if ($this->entity->partial) { - return 'amount_due'; + return 'partial_due'; } elseif ($this->entity->is_quote) { return 'total'; } else { diff --git a/app/Ninja/Presenters/PaymentPresenter.php b/app/Ninja/Presenters/PaymentPresenter.php index a0a58663e5a7..a1c3692991fe 100644 --- a/app/Ninja/Presenters/PaymentPresenter.php +++ b/app/Ninja/Presenters/PaymentPresenter.php @@ -1,5 +1,6 @@ entity->public_id . '/edit'); + } + + public function link() + { + return link_to('/payments/' . $this->entity->public_id . '/edit', $this->entity->getDisplayName()); + } + } \ No newline at end of file diff --git a/bootstrap/app.php b/bootstrap/app.php index 354e5dd90538..71f392315f59 100755 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -58,4 +58,9 @@ if (strstr($_SERVER['HTTP_USER_AGENT'], 'PhantomJS') && Utils::isNinjaDev()) { } */ +// Write info messages to a separate file +$app->configureMonologUsing(function($monolog) { + $monolog->pushHandler(new Monolog\Handler\StreamHandler(storage_path() . '/logs/laravel-info.log', Monolog\Logger::INFO, false)); +}); + return $app; diff --git a/composer.lock b/composer.lock index 61af58eb88b9..6ce01e65ba67 100644 --- a/composer.lock +++ b/composer.lock @@ -123,12 +123,12 @@ "source": { "type": "git", "url": "https://github.com/formers/former.git", - "reference": "795f7b9b200a4ff4a33b37a96eaaab0229e36325" + "reference": "d97f907741323b390f43954a90a227921ecc6b96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/formers/former/zipball/795f7b9b200a4ff4a33b37a96eaaab0229e36325", - "reference": "795f7b9b200a4ff4a33b37a96eaaab0229e36325", + "url": "https://api.github.com/repos/formers/former/zipball/d97f907741323b390f43954a90a227921ecc6b96", + "reference": "d97f907741323b390f43954a90a227921ecc6b96", "shasum": "" }, "require": { @@ -174,7 +174,7 @@ "foundation", "laravel" ], - "time": "2015-11-05 15:53:52" + "time": "2016-03-16 01:43:45" }, { "name": "anahkiasen/html-object", @@ -381,12 +381,12 @@ "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-ide-helper.git", - "reference": "19553f63e4635480363ff2254350075f285fbbc5" + "reference": "e97ed532f09e290b91ff7713b785ed7ab11d0812" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/19553f63e4635480363ff2254350075f285fbbc5", - "reference": "19553f63e4635480363ff2254350075f285fbbc5", + "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/e97ed532f09e290b91ff7713b785ed7ab11d0812", + "reference": "e97ed532f09e290b91ff7713b785ed7ab11d0812", "shasum": "" }, "require": { @@ -436,7 +436,7 @@ "phpstorm", "sublime" ], - "time": "2016-03-02 10:03:09" + "time": "2016-03-03 14:38:04" }, { "name": "cardgate/omnipay-cardgate", @@ -579,7 +579,7 @@ "laravel" ], "abandoned": "OpenSkill/Datatable", - "time": "2015-11-23 21:33:41" + "time": "2015-04-29 07:00:36" }, { "name": "classpreloader/classpreloader", @@ -880,12 +880,12 @@ "source": { "type": "git", "url": "https://github.com/delatbabel/omnipay-fatzebra.git", - "reference": "7b3cb869abe8327d4cf6ccc6591a89a95c02bfbc" + "reference": "d0a56a8704357d91457672741a48a4cb6c7ecd53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/delatbabel/omnipay-fatzebra/zipball/7b3cb869abe8327d4cf6ccc6591a89a95c02bfbc", - "reference": "7b3cb869abe8327d4cf6ccc6591a89a95c02bfbc", + "url": "https://api.github.com/repos/delatbabel/omnipay-fatzebra/zipball/d0a56a8704357d91457672741a48a4cb6c7ecd53", + "reference": "d0a56a8704357d91457672741a48a4cb6c7ecd53", "shasum": "" }, "require": { @@ -929,7 +929,7 @@ "payment", "paystream" ], - "time": "2015-02-15 11:27:23" + "time": "2016-03-21 09:21:14" }, { "name": "dercoder/omnipay-ecopayz", @@ -1039,12 +1039,12 @@ "source": { "type": "git", "url": "https://github.com/descubraomundo/omnipay-pagarme.git", - "reference": "528953568929b57189de16fa7431eaab75d61840" + "reference": "8571396139eb1fb1a7011450714a5e8d8d604d8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/descubraomundo/omnipay-pagarme/zipball/528953568929b57189de16fa7431eaab75d61840", - "reference": "528953568929b57189de16fa7431eaab75d61840", + "url": "https://api.github.com/repos/descubraomundo/omnipay-pagarme/zipball/8571396139eb1fb1a7011450714a5e8d8d604d8c", + "reference": "8571396139eb1fb1a7011450714a5e8d8d604d8c", "shasum": "" }, "require": { @@ -1081,7 +1081,7 @@ "pay", "payment" ], - "time": "2015-10-27 19:17:20" + "time": "2016-03-18 19:37:37" }, { "name": "dioscouri/omnipay-cybersource", @@ -1938,16 +1938,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.1.1", + "version": "6.2.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "c6851d6e48f63b69357cbfa55bca116448140e0c" + "reference": "d094e337976dff9d8e2424e8485872194e768662" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/c6851d6e48f63b69357cbfa55bca116448140e0c", - "reference": "c6851d6e48f63b69357cbfa55bca116448140e0c", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d094e337976dff9d8e2424e8485872194e768662", + "reference": "d094e337976dff9d8e2424e8485872194e768662", "shasum": "" }, "require": { @@ -1963,7 +1963,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "6.1-dev" + "dev-master": "6.2-dev" } }, "autoload": { @@ -1996,20 +1996,20 @@ "rest", "web service" ], - "time": "2015-11-23 00:47:50" + "time": "2016-03-21 20:02:09" }, { "name": "guzzlehttp/promises", - "version": "1.0.3", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "b1e1c0d55f8083c71eda2c28c12a228d708294ea" + "reference": "bb9024c526b22f3fe6ae55a561fd70653d470aa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/b1e1c0d55f8083c71eda2c28c12a228d708294ea", - "reference": "b1e1c0d55f8083c71eda2c28c12a228d708294ea", + "url": "https://api.github.com/repos/guzzle/promises/zipball/bb9024c526b22f3fe6ae55a561fd70653d470aa8", + "reference": "bb9024c526b22f3fe6ae55a561fd70653d470aa8", "shasum": "" }, "require": { @@ -2047,7 +2047,7 @@ "keywords": [ "promise" ], - "time": "2015-10-15 22:28:00" + "time": "2016-03-08 01:15:46" }, { "name": "guzzlehttp/psr7", @@ -2603,12 +2603,12 @@ "source": { "type": "git", "url": "https://github.com/labs7in0/omnipay-wechat.git", - "reference": "4e279ff4535dfa0636a3d6af5c92b8e9dcc4311a" + "reference": "40c9f86df6573ad98ae1dd0d29712ccbc789a74e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/labs7in0/omnipay-wechat/zipball/4e279ff4535dfa0636a3d6af5c92b8e9dcc4311a", - "reference": "4e279ff4535dfa0636a3d6af5c92b8e9dcc4311a", + "url": "https://api.github.com/repos/labs7in0/omnipay-wechat/zipball/40c9f86df6573ad98ae1dd0d29712ccbc789a74e", + "reference": "40c9f86df6573ad98ae1dd0d29712ccbc789a74e", "shasum": "" }, "require": { @@ -2644,7 +2644,7 @@ "purchase", "wechat" ], - "time": "2015-11-16 11:04:21" + "time": "2016-03-18 09:59:11" }, { "name": "laracasts/presenter", @@ -2694,16 +2694,16 @@ }, { "name": "laravel/framework", - "version": "v5.2.22", + "version": "v5.2.24", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "aec1b7cb9ec0bac0107361a3730cac9b6f945ef4" + "reference": "396297a5fd3c70c2fc1af68f09ee574a2380175c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/aec1b7cb9ec0bac0107361a3730cac9b6f945ef4", - "reference": "aec1b7cb9ec0bac0107361a3730cac9b6f945ef4", + "url": "https://api.github.com/repos/laravel/framework/zipball/396297a5fd3c70c2fc1af68f09ee574a2380175c", + "reference": "396297a5fd3c70c2fc1af68f09ee574a2380175c", "shasum": "" }, "require": { @@ -2716,7 +2716,7 @@ "monolog/monolog": "~1.11", "mtdowling/cron-expression": "~1.0", "nesbot/carbon": "~1.20", - "paragonie/random_compat": "~1.1", + "paragonie/random_compat": "~1.4", "php": ">=5.5.9", "psy/psysh": "0.7.*", "swiftmailer/swiftmailer": "~5.1", @@ -2818,7 +2818,7 @@ "framework", "laravel" ], - "time": "2016-02-27 22:09:19" + "time": "2016-03-22 13:45:19" }, { "name": "laravel/socialite", @@ -2975,16 +2975,16 @@ }, { "name": "league/flysystem", - "version": "1.0.17", + "version": "1.0.20", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "02f5b6c9a8b9278c8381e3361e7bd9d641c740ca" + "reference": "e87a786e3ae12a25cf78a71bb07b4b384bfaa83a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/02f5b6c9a8b9278c8381e3361e7bd9d641c740ca", - "reference": "02f5b6c9a8b9278c8381e3361e7bd9d641c740ca", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/e87a786e3ae12a25cf78a71bb07b4b384bfaa83a", + "reference": "e87a786e3ae12a25cf78a71bb07b4b384bfaa83a", "shasum": "" }, "require": { @@ -3054,7 +3054,7 @@ "sftp", "storage" ], - "time": "2016-02-19 15:35:38" + "time": "2016-03-14 21:54:11" }, { "name": "league/fractal", @@ -3587,16 +3587,16 @@ }, { "name": "monolog/monolog", - "version": "1.18.0", + "version": "1.18.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "e19b764b5c855580e8ffa7e615f72c10fd2f99cc" + "reference": "a5f2734e8c16f3aa21b3da09715d10e15b4d2d45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/e19b764b5c855580e8ffa7e615f72c10fd2f99cc", - "reference": "e19b764b5c855580e8ffa7e615f72c10fd2f99cc", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/a5f2734e8c16f3aa21b3da09715d10e15b4d2d45", + "reference": "a5f2734e8c16f3aa21b3da09715d10e15b4d2d45", "shasum": "" }, "require": { @@ -3661,7 +3661,7 @@ "logging", "psr-3" ], - "time": "2016-03-01 18:00:40" + "time": "2016-03-13 16:08:35" }, { "name": "mtdowling/cron-expression", @@ -3815,7 +3815,7 @@ }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/omnipay-2checkout/zipball/31394ce58d5999b6f49b321cb3547747837c1297", + "url": "https://api.github.com/repos/thephpleague/omnipay-2checkout/zipball/77b316bd08c6b7a1e93721f15d1bfbd21a62ba6b", "reference": "e9c079c2dde0d7ba461903b3b7bd5caf6dee1248", "shasum": "" }, @@ -3866,16 +3866,16 @@ }, { "name": "omnipay/authorizenet", - "version": "v2.3.0", + "version": "2.3.1", "source": { "type": "git", "url": "https://github.com/thephpleague/omnipay-authorizenet.git", - "reference": "142a95f550a5320db09e66019ecf5c8b8c3885b9" + "reference": "e2e813b0b6306ef97b8763037f05476456546b3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/omnipay-authorizenet/zipball/142a95f550a5320db09e66019ecf5c8b8c3885b9", - "reference": "142a95f550a5320db09e66019ecf5c8b8c3885b9", + "url": "https://api.github.com/repos/thephpleague/omnipay-authorizenet/zipball/e2e813b0b6306ef97b8763037f05476456546b3e", + "reference": "e2e813b0b6306ef97b8763037f05476456546b3e", "shasum": "" }, "require": { @@ -3921,7 +3921,7 @@ "pay", "payment" ], - "time": "2015-07-15 18:11:17" + "time": "2016-03-10 11:35:24" }, { "name": "omnipay/bitpay", @@ -3929,12 +3929,12 @@ "source": { "type": "git", "url": "https://github.com/thephpleague/omnipay-bitpay.git", - "reference": "e659f0e993c586cb36acafaf50835570b4a16eb2" + "reference": "cf813f1d5436a1d2f942d3df6666695d1e2b5280" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/omnipay-bitpay/zipball/e659f0e993c586cb36acafaf50835570b4a16eb2", - "reference": "e659f0e993c586cb36acafaf50835570b4a16eb2", + "url": "https://api.github.com/repos/thephpleague/omnipay-bitpay/zipball/cf813f1d5436a1d2f942d3df6666695d1e2b5280", + "reference": "cf813f1d5436a1d2f942d3df6666695d1e2b5280", "shasum": "" }, "require": { @@ -3979,7 +3979,7 @@ "pay", "payment" ], - "time": "2015-03-23 14:18:26" + "time": "2016-03-10 03:16:04" }, { "name": "omnipay/buckaroo", @@ -4328,16 +4328,16 @@ }, { "name": "omnipay/eway", - "version": "v2.2.0", + "version": "v2.2.1", "source": { "type": "git", "url": "https://github.com/thephpleague/omnipay-eway.git", - "reference": "0dcf28596f0382fbfc3ee229e98e60798675ed16" + "reference": "1c953630f7097bfdeed200b17a847015a4df5607" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/omnipay-eway/zipball/0dcf28596f0382fbfc3ee229e98e60798675ed16", - "reference": "0dcf28596f0382fbfc3ee229e98e60798675ed16", + "url": "https://api.github.com/repos/thephpleague/omnipay-eway/zipball/1c953630f7097bfdeed200b17a847015a4df5607", + "reference": "1c953630f7097bfdeed200b17a847015a4df5607", "shasum": "" }, "require": { @@ -4381,7 +4381,7 @@ "pay", "payment" ], - "time": "2015-03-30 00:28:33" + "time": "2016-03-22 01:11:02" }, { "name": "omnipay/firstdata", @@ -5536,16 +5536,16 @@ }, { "name": "paragonie/random_compat", - "version": "v1.2.1", + "version": "v1.4.1", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "f078eba3bcf140fd69b5fcc3ea5ac809abf729dc" + "reference": "c7e26a21ba357863de030f0b9e701c7d04593774" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/f078eba3bcf140fd69b5fcc3ea5ac809abf729dc", - "reference": "f078eba3bcf140fd69b5fcc3ea5ac809abf729dc", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/c7e26a21ba357863de030f0b9e701c7d04593774", + "reference": "c7e26a21ba357863de030f0b9e701c7d04593774", "shasum": "" }, "require": { @@ -5580,7 +5580,7 @@ "pseudorandom", "random" ], - "time": "2016-02-29 17:25:04" + "time": "2016-03-18 20:34:03" }, { "name": "patricktalmadge/bootstrapper", @@ -5836,16 +5836,16 @@ }, { "name": "psy/psysh", - "version": "v0.7.1", + "version": "v0.7.2", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "5e8cedbe0a3681f18782594eefc78423f8401fc8" + "reference": "e64e10b20f8d229cac76399e1f3edddb57a0f280" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/5e8cedbe0a3681f18782594eefc78423f8401fc8", - "reference": "5e8cedbe0a3681f18782594eefc78423f8401fc8", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/e64e10b20f8d229cac76399e1f3edddb57a0f280", + "reference": "e64e10b20f8d229cac76399e1f3edddb57a0f280", "shasum": "" }, "require": { @@ -5904,20 +5904,20 @@ "interactive", "shell" ], - "time": "2016-02-27 18:59:18" + "time": "2016-03-09 05:03:14" }, { "name": "samvaughton/omnipay-barclays-epdq", - "version": "2.1.1", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/samvaughton/omnipay-barclays-epdq.git", - "reference": "f971de37aa40c72cc58f02d05f540a93b2c5958e" + "reference": "b7f9263afa73b8e6c3c5e8bb2bf04a82548a41da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/samvaughton/omnipay-barclays-epdq/zipball/f971de37aa40c72cc58f02d05f540a93b2c5958e", - "reference": "f971de37aa40c72cc58f02d05f540a93b2c5958e", + "url": "https://api.github.com/repos/samvaughton/omnipay-barclays-epdq/zipball/b7f9263afa73b8e6c3c5e8bb2bf04a82548a41da", + "reference": "b7f9263afa73b8e6c3c5e8bb2bf04a82548a41da", "shasum": "" }, "require": { @@ -5966,7 +5966,7 @@ "pay", "payment" ], - "time": "2015-05-07 14:45:43" + "time": "2016-03-03 14:40:27" }, { "name": "simshaun/recurr", @@ -6716,7 +6716,7 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.1.0", + "version": "v1.1.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", @@ -6775,16 +6775,16 @@ }, { "name": "symfony/polyfill-php54", - "version": "v1.1.0", + "version": "v1.1.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php54.git", - "reference": "74663d5a2ff3c530c1bc0571500e0feec9094054" + "reference": "9ba741ca01c77282ecf5796c2c1d667f03454ffb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php54/zipball/74663d5a2ff3c530c1bc0571500e0feec9094054", - "reference": "74663d5a2ff3c530c1bc0571500e0feec9094054", + "url": "https://api.github.com/repos/symfony/polyfill-php54/zipball/9ba741ca01c77282ecf5796c2c1d667f03454ffb", + "reference": "9ba741ca01c77282ecf5796c2c1d667f03454ffb", "shasum": "" }, "require": { @@ -6829,11 +6829,11 @@ "portable", "shim" ], - "time": "2016-01-20 09:13:37" + "time": "2016-01-25 19:13:00" }, { "name": "symfony/polyfill-php55", - "version": "v1.1.0", + "version": "v1.1.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php55.git", @@ -6889,7 +6889,7 @@ }, { "name": "symfony/polyfill-php56", - "version": "v1.1.0", + "version": "v1.1.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php56.git", @@ -6945,7 +6945,7 @@ }, { "name": "symfony/polyfill-util", - "version": "v1.1.0", + "version": "v1.1.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-util.git", @@ -8211,41 +8211,42 @@ }, { "name": "codeception/codeception", - "version": "2.1.6", + "version": "2.1.7", "source": { "type": "git", "url": "https://github.com/Codeception/Codeception.git", - "reference": "b199941f5e59d1e7fd32d78296c8ab98db873d89" + "reference": "65971b0dee4972710365b6102154cd412a9bf7b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/b199941f5e59d1e7fd32d78296c8ab98db873d89", - "reference": "b199941f5e59d1e7fd32d78296c8ab98db873d89", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/65971b0dee4972710365b6102154cd412a9bf7b1", + "reference": "65971b0dee4972710365b6102154cd412a9bf7b1", "shasum": "" }, "require": { "ext-json": "*", "ext-mbstring": "*", - "facebook/webdriver": ">=1.0.1", + "facebook/webdriver": ">=1.0.1 <2.0", "guzzlehttp/guzzle": ">=4.1.4 <7.0", "guzzlehttp/psr7": "~1.0", - "php": ">=5.4.0", - "phpunit/phpunit": "~4.8.0", - "symfony/browser-kit": ">=2.4|<3.1", - "symfony/console": ">=2.4|<3.1", - "symfony/css-selector": ">=2.4|<3.1", - "symfony/dom-crawler": ">=2.4|<3.1", - "symfony/event-dispatcher": ">=2.4|<3.1", - "symfony/finder": ">=2.4|<3.1", - "symfony/yaml": ">=2.4|<3.1" + "php": ">=5.4.0 <8.0", + "phpunit/php-code-coverage": ">=2.1.3", + "phpunit/phpunit": ">4.8.20 <6.0", + "symfony/browser-kit": ">=2.5 <3.1", + "symfony/console": ">=2.5 <3.1", + "symfony/css-selector": ">=2.5 <3.1", + "symfony/dom-crawler": ">=2.5 <3.1", + "symfony/event-dispatcher": ">=2.5 <3.1", + "symfony/finder": ">=2.5 <3.1", + "symfony/yaml": ">=2.5 <3.1" }, "require-dev": { "codeception/specify": "~0.3", - "facebook/php-sdk-v4": "~4.0", + "facebook/php-sdk-v4": "~5.0", "flow/jsonpath": "~0.2", "monolog/monolog": "~1.8", "pda/pheanstalk": "~2.0", - "videlalvaro/php-amqplib": "~2.4" + "php-amqplib/php-amqplib": "~2.4" }, "suggest": { "codeception/phpbuiltinserver": "Extension to start and stop PHP built-in web server for your tests", @@ -8287,7 +8288,7 @@ "functional testing", "unit testing" ], - "time": "2016-02-09 22:27:48" + "time": "2016-03-12 01:15:25" }, { "name": "doctrine/instantiator", @@ -8474,16 +8475,16 @@ }, { "name": "phpspec/phpspec", - "version": "2.4.1", + "version": "2.5.0", "source": { "type": "git", "url": "https://github.com/phpspec/phpspec.git", - "reference": "5528ce1e93a1efa090c9404aba3395c329b4e6ed" + "reference": "385ecb015e97c13818074f1517928b24d4a26067" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/phpspec/zipball/5528ce1e93a1efa090c9404aba3395c329b4e6ed", - "reference": "5528ce1e93a1efa090c9404aba3395c329b4e6ed", + "url": "https://api.github.com/repos/phpspec/phpspec/zipball/385ecb015e97c13818074f1517928b24d4a26067", + "reference": "385ecb015e97c13818074f1517928b24d4a26067", "shasum": "" }, "require": { @@ -8548,7 +8549,7 @@ "testing", "tests" ], - "time": "2016-01-01 10:17:54" + "time": "2016-03-20 20:34:32" }, { "name": "phpspec/prophecy", @@ -8854,16 +8855,16 @@ }, { "name": "phpunit/phpunit", - "version": "4.8.23", + "version": "4.8.24", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "6e351261f9cd33daf205a131a1ba61c6d33bd483" + "reference": "a1066c562c52900a142a0e2bbf0582994671385e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6e351261f9cd33daf205a131a1ba61c6d33bd483", - "reference": "6e351261f9cd33daf205a131a1ba61c6d33bd483", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1066c562c52900a142a0e2bbf0582994671385e", + "reference": "a1066c562c52900a142a0e2bbf0582994671385e", "shasum": "" }, "require": { @@ -8922,7 +8923,7 @@ "testing", "xunit" ], - "time": "2016-02-11 14:56:33" + "time": "2016-03-14 06:16:08" }, { "name": "phpunit/phpunit-mock-objects", diff --git a/database/migrations/2016_03_14_214710_add_support_three_decimal_taxes.php b/database/migrations/2016_03_14_214710_add_support_three_decimal_taxes.php new file mode 100644 index 000000000000..af35fc927564 --- /dev/null +++ b/database/migrations/2016_03_14_214710_add_support_three_decimal_taxes.php @@ -0,0 +1,28 @@ +decimal('rate', 13, 3)->change(); + }); + } + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('tax_rates', function($table) { + $table->decimal('rate', 13, 2)->change(); + }); + } +} diff --git a/database/seeds/CurrenciesSeeder.php b/database/seeds/CurrenciesSeeder.php index c26c5acd12ab..9a8304b181f6 100644 --- a/database/seeds/CurrenciesSeeder.php +++ b/database/seeds/CurrenciesSeeder.php @@ -54,6 +54,7 @@ class CurrenciesSeeder extends Seeder ['name' => 'Croatian Kuna', 'code' => 'HKR', 'symbol' => 'kn', 'precision' => '2', 'thousand_separator' => '.', 'decimal_separator' => ','], ['name' => 'Saudi Riyal', 'code' => 'SAR', 'symbol' => '', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], ['name' => 'Japanese Yen', 'code' => 'JPY', 'symbol' => '¥', 'precision' => '0', 'thousand_separator' => ',', 'decimal_separator' => '.'], + ['name' => 'Maldivian Rufiyaa', 'code' => 'MVR', 'symbol' => '', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], ]; foreach ($currencies as $currency) { diff --git a/public/built.js b/public/built.js index 5e28b8fb3f18..9fccf73e0bff 100644 --- a/public/built.js +++ b/public/built.js @@ -30487,6 +30487,7 @@ function calculateAmounts(invoice) { for (var i=0; ithead>tr>th, .table>tbody>tr>th, .table>tfoot>tr>th, .table>thead>tr>td, .table>tbody>tr>td, .table>tfoot>tr>td { vertical-align: middle; border-top: none; @@ -2528,6 +2529,16 @@ font-weight: bold; filter: none; } +.navbar, +.panel-default, +ul.dropdown-menu, +.twitter-typeahead .tt-menu, +canvas { + x-moz-box-shadow: 0 0 1px 1px rgba(0,0,0,.05); + x-webkit-box-shadow: 0 0 1px 1px rgba(0,0,0,.05); + box-shadow: 0 0 1px 1px rgba(0,0,0,.05); +} + .navbar .active > a { background-color: #09334f !important; background-image: none; diff --git a/public/css/built.public.css b/public/css/built.public.css index 1ba4afb31115..3e91dc0ed193 100644 --- a/public/css/built.public.css +++ b/public/css/built.public.css @@ -790,14 +790,24 @@ html { overflow-y: scroll; } -@media screen and (min-width: 700px) { - .navbar-header { - padding-top: 16px; - padding-bottom: 16px; - } - .navbar li a { - padding: 31px 20px 31px 20px; - } + +.navbar-header { + padding-top: 4px; + padding-bottom: 4px; +} +.navbar li a { + padding-top: 18px; + font-weight: 500; + font-size: 15px; + font-weight: bold; + padding-left: 20px; + padding-right: 20px; +} + +.navbar { + x-moz-box-shadow: 0 0 1px 1px rgba(0,0,0,.05); + x-webkit-box-shadow: 0 0 1px 1px rgba(0,0,0,.05); + box-shadow: 0 0 1px 1px rgba(0,0,0,.05); } #footer { diff --git a/public/css/public.style.css b/public/css/public.style.css index da5a469decb7..95b158cb9b62 100644 --- a/public/css/public.style.css +++ b/public/css/public.style.css @@ -7,14 +7,24 @@ html { overflow-y: scroll; } -@media screen and (min-width: 700px) { - .navbar-header { - padding-top: 16px; - padding-bottom: 16px; - } - .navbar li a { - padding: 31px 20px 31px 20px; - } + +.navbar-header { + padding-top: 4px; + padding-bottom: 4px; +} +.navbar li a { + padding-top: 18px; + font-weight: 500; + font-size: 15px; + font-weight: bold; + padding-left: 20px; + padding-right: 20px; +} + +.navbar { + x-moz-box-shadow: 0 0 1px 1px rgba(0,0,0,.05); + x-webkit-box-shadow: 0 0 1px 1px rgba(0,0,0,.05); + box-shadow: 0 0 1px 1px rgba(0,0,0,.05); } #footer { diff --git a/public/css/style.css b/public/css/style.css index 97f2bbf79edf..2cf0cdceca24 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -89,7 +89,8 @@ th:last-child { } tr {border: none;} -th {border-left: 1px solid #d26b26; } +thead th {border-left: 1px solid #d26b26;} +tbody td {border-left: 1px solid #FFFFFF;} .table>thead>tr>th, .table>tbody>tr>th, .table>tfoot>tr>th, .table>thead>tr>td, .table>tbody>tr>td, .table>tfoot>tr>td { vertical-align: middle; border-top: none; @@ -401,6 +402,16 @@ font-weight: bold; filter: none; } +.navbar, +.panel-default, +ul.dropdown-menu, +.twitter-typeahead .tt-menu, +canvas { + x-moz-box-shadow: 0 0 1px 1px rgba(0,0,0,.05); + x-webkit-box-shadow: 0 0 1px 1px rgba(0,0,0,.05); + box-shadow: 0 0 1px 1px rgba(0,0,0,.05); +} + .navbar .active > a { background-color: #09334f !important; background-image: none; diff --git a/public/js/pdf.pdfmake.js b/public/js/pdf.pdfmake.js index 3a9f40280c74..f8f30f4b546f 100644 --- a/public/js/pdf.pdfmake.js +++ b/public/js/pdf.pdfmake.js @@ -190,7 +190,7 @@ NINJA.decodeJavascript = function(invoice, javascript) var value = getDescendantProp(invoice, field); if (match.indexOf('?') < 0 || value) { if (invoice.partial && field == 'balance_due') { - field = 'amount_due'; + field = 'partial_due'; } else if (invoice.is_quote) { field = field.replace('invoice', 'quote'); } @@ -267,10 +267,10 @@ NINJA.invoiceColumns = function(invoice) columns.push("*") - if (account.custom_invoice_item_label1) { + if (invoice.is_pro && account.custom_invoice_item_label1) { columns.push("10%"); } - if (account.custom_invoice_item_label2) { + if (invoice.is_pro && account.custom_invoice_item_label2) { columns.push("10%"); } @@ -322,10 +322,10 @@ NINJA.invoiceLines = function(invoice) { grid[0].push({text: invoiceLabels.description, style: ['tableHeader', 'descriptionTableHeader']}); - if (account.custom_invoice_item_label1) { + if (invoice.is_pro && account.custom_invoice_item_label1) { grid[0].push({text: account.custom_invoice_item_label1, style: ['tableHeader', 'custom1TableHeader']}); } - if (account.custom_invoice_item_label2) { + if (invoice.is_pro && account.custom_invoice_item_label2) { grid[0].push({text: account.custom_invoice_item_label2, style: ['tableHeader', 'custom2TableHeader']}); } @@ -380,10 +380,10 @@ NINJA.invoiceLines = function(invoice) { row.push({style:["productKey", rowStyle], text:productKey || ' '}); // product key can be blank when selecting from a datalist } row.push({style:["notes", rowStyle], stack:[{text:notes || ' '}]}); - if (account.custom_invoice_item_label1) { + if (invoice.is_pro && account.custom_invoice_item_label1) { row.push({style:["customValue1", rowStyle], text:item.custom_value1 || ' '}); } - if (account.custom_invoice_item_label2) { + if (invoice.is_pro && account.custom_invoice_item_label2) { row.push({style:["customValue2", rowStyle], text:item.custom_value2 || ' '}); } row.push({style:["cost", rowStyle], text:cost}); @@ -447,12 +447,22 @@ NINJA.subtotals = function(invoice, hideBalance) data.push([{text:invoiceLabels.paid_to_date}, {text:formatMoneyInvoice(paid, invoice)}]); } - if (!hideBalance) { - var isPartial = NINJA.parseFloat(invoice.partial); + var isPartial = NINJA.parseFloat(invoice.partial); + + if (!hideBalance || isPartial) { data.push([ - {text: isPartial ? invoiceLabels.amount_due : invoiceLabels.balance_due, style:['balanceDueLabel']}, - {text: formatMoneyInvoice(invoice.balance_amount, invoice), style:['balanceDue']} + { text: invoiceLabels.balance_due, style: [isPartial ? '' : 'balanceDueLabel'] }, + { text: formatMoneyInvoice(invoice.total_amount, invoice), style: [isPartial ? '' : 'balanceDue'] } + ]); + } + + if (!hideBalance) { + if (isPartial) { + data.push([ + { text: invoiceLabels.partial_due, style: ['balanceDueLabel'] }, + { text: formatMoneyInvoice(invoice.balance_amount, invoice), style: ['balanceDue'] } ]); + } } return NINJA.prepareDataPairs(data, 'subtotals'); @@ -461,7 +471,7 @@ NINJA.subtotals = function(invoice, hideBalance) NINJA.subtotalsBalance = function(invoice) { var isPartial = NINJA.parseFloat(invoice.partial); return [[ - {text: isPartial ? invoiceLabels.amount_due : invoiceLabels.balance_due, style:['balanceDueLabel']}, + {text: isPartial ? invoiceLabels.partial_due : invoiceLabels.balance_due, style:['balanceDueLabel']}, {text: formatMoneyInvoice(invoice.balance_amount, invoice), style:['balanceDue']} ]]; } @@ -539,18 +549,18 @@ NINJA.invoiceDetails = function(invoice) { if (NINJA.parseFloat(invoice.balance) < NINJA.parseFloat(invoice.amount)) { data.push([ - {text: invoiceLabels.total}, + {text: invoiceLabels.balance_due}, {text: formatMoneyInvoice(invoice.amount, invoice)} ]); } else if (isPartial) { data.push([ - {text: invoiceLabels.total}, + {text: invoiceLabels.balance_due}, {text: formatMoneyInvoice(invoice.total_amount, invoice)} ]); } data.push([ - {text: isPartial ? invoiceLabels.amount_due : invoiceLabels.balance_due, style: ['invoiceDetailBalanceDueLabel']}, + {text: isPartial ? invoiceLabels.partial_due : invoiceLabels.balance_due, style: ['invoiceDetailBalanceDueLabel']}, {text: formatMoneyInvoice(invoice.balance_amount, invoice), style: ['invoiceDetailBalanceDue']} ]) diff --git a/public/js/script.js b/public/js/script.js index 67031a5fe3c9..c447905f81b9 100644 --- a/public/js/script.js +++ b/public/js/script.js @@ -595,6 +595,7 @@ function calculateAmounts(invoice) { for (var i=0; i 'Notes', 'invoice_will_create' => 'client will be created', 'invoices_will_create' => 'invoices will be created', - 'failed_to_import' => 'The following records failed to import', + 'failed_to_import' => 'The following records failed to import, they either already exist or are missing required fields.', 'publishable_key' => 'Publishable Key', 'secret_key' => 'Secret Key', @@ -1131,4 +1131,73 @@ return array( 'overdue' => 'Overdue', 'white_label_text' => 'Purchase a ONE YEAR white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', + 'navigation' => 'Navigation', + 'list_invoices' => 'List Invoices', + 'list_clients' => 'List Clients', + 'list_quotes' => 'List Quotes', + 'list_tasks' => 'List Tasks', + 'list_expenses' => 'List Expenses', + 'list_recurring_invoices' => 'List Recurring Invoices', + 'list_payments' => 'List Payments', + 'list_credits' => 'List Credits', + 'tax_name' => 'Tax Name', + 'report_settings' => 'Report Settings', + 'search_hotkey' => 'shortcut is /', + + 'new_user' => 'New User', + 'new_product' => 'New Product', + 'new_tax_rate' => 'New Tax Rate', + 'invoiced_amount' => 'Invoiced Amount', + 'invoice_item_fields' => 'Invoice Item Fields', + 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', + 'recurring_invoice_number' => 'Recurring Invoice Number', + 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', + 'enable_client_portal' => 'Dashboard', + 'enable_client_portal_help' => 'Show/hide the dashboard page in the client portal.', + + // Client Passwords + 'enable_portal_password'=>'Password protect invoices', + 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', + 'send_portal_password'=>'Generate password automatically', + 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', + + 'expired' => 'Expired', + 'invalid_card_number' => 'The credit card number is not valid.', + 'invalid_expiry' => 'The expiration date is not valid.', + 'invalid_cvv' => 'The CVV is not valid.', + 'cost' => 'Cost', + 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', + + // User Permissions + 'owner' => 'Owner', + 'administrator' => 'Administrator', + 'administrator_help' => 'Allow user to manage users, change settings and modify all records', + 'user_create_all' => 'Create clients, invoices, etc.', + 'user_view_all' => 'View all clients, invoices, etc.', + 'user_edit_all' => 'Edit all clients, invoices, etc.', + 'gateway_help_20' => ':link to sign up for Sage Pay.', + 'gateway_help_21' => ':link to sign up for Sage Pay.', + 'partial_due' => 'Partial Due', + 'restore_vendor' => 'Restore Vendor', + 'restored_vendor' => 'Successfully restored vendor', + 'restored_expense' => 'Successfully restored expense', + 'permissions' => 'Permissions', + 'create_all_help' => 'Allow user to create and modify records', + 'view_all_help' => 'Allow user to view records they didn\'t create', + 'edit_all_help' => 'Allow user to modify records they didn\'t create', + 'view_payment' => 'View Payment', + + 'january' => 'January', + 'february' => 'February', + 'march' => 'March', + 'april' => 'April', + 'may' => 'May', + 'june' => 'June', + 'july' => 'July', + 'august' => 'August', + 'september' => 'September', + 'october' => 'October', + 'november' => 'November', + 'december' => 'December', + ); \ No newline at end of file diff --git a/resources/lang/de/texts.php b/resources/lang/de/texts.php index 80289bfa29f0..08ffaf7b8a0b 100644 --- a/resources/lang/de/texts.php +++ b/resources/lang/de/texts.php @@ -943,7 +943,7 @@ return array( 'notes' => 'Notes', 'invoice_will_create' => 'client will be created', 'invoices_will_create' => 'invoices will be created', - 'failed_to_import' => 'The following records failed to import', + 'failed_to_import' => 'The following records failed to import, they either already exist or are missing required fields.', 'publishable_key' => 'Publishable Key', 'secret_key' => 'Secret Key', @@ -1132,4 +1132,73 @@ return array( 'overdue' => 'Overdue', 'white_label_text' => 'Purchase a ONE YEAR white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', + 'navigation' => 'Navigation', + 'list_invoices' => 'List Invoices', + 'list_clients' => 'List Clients', + 'list_quotes' => 'List Quotes', + 'list_tasks' => 'List Tasks', + 'list_expenses' => 'List Expenses', + 'list_recurring_invoices' => 'List Recurring Invoices', + 'list_payments' => 'List Payments', + 'list_credits' => 'List Credits', + 'tax_name' => 'Tax Name', + 'report_settings' => 'Report Settings', + 'search_hotkey' => 'shortcut is /', + + 'new_user' => 'New User', + 'new_product' => 'New Product', + 'new_tax_rate' => 'New Tax Rate', + 'invoiced_amount' => 'Invoiced Amount', + 'invoice_item_fields' => 'Invoice Item Fields', + 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', + 'recurring_invoice_number' => 'Recurring Invoice Number', + 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', + 'enable_client_portal' => 'Dashboard', + 'enable_client_portal_help' => 'Show/hide the dashboard page in the client portal.', + + // Client Passwords + 'enable_portal_password'=>'Password protect invoices', + 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', + 'send_portal_password'=>'Generate password automatically', + 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', + + 'expired' => 'Expired', + 'invalid_card_number' => 'The credit card number is not valid.', + 'invalid_expiry' => 'The expiration date is not valid.', + 'invalid_cvv' => 'The CVV is not valid.', + 'cost' => 'Cost', + 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', + + // User Permissions + 'owner' => 'Owner', + 'administrator' => 'Administrator', + 'administrator_help' => 'Allow user to manage users, change settings and modify all records', + 'user_create_all' => 'Create clients, invoices, etc.', + 'user_view_all' => 'View all clients, invoices, etc.', + 'user_edit_all' => 'Edit all clients, invoices, etc.', + 'gateway_help_20' => ':link to sign up for Sage Pay.', + 'gateway_help_21' => ':link to sign up for Sage Pay.', + 'partial_due' => 'Partial Due', + 'restore_vendor' => 'Restore Vendor', + 'restored_vendor' => 'Successfully restored vendor', + 'restored_expense' => 'Successfully restored expense', + 'permissions' => 'Permissions', + 'create_all_help' => 'Allow user to create and modify records', + 'view_all_help' => 'Allow user to view records they didn\'t create', + 'edit_all_help' => 'Allow user to modify records they didn\'t create', + 'view_payment' => 'View Payment', + + 'january' => 'January', + 'february' => 'February', + 'march' => 'March', + 'april' => 'April', + 'may' => 'May', + 'june' => 'June', + 'july' => 'July', + 'august' => 'August', + 'september' => 'September', + 'october' => 'October', + 'november' => 'November', + 'december' => 'December', + ); diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php index ff129b37e0e1..1df2bc2ca4d3 100644 --- a/resources/lang/en/texts.php +++ b/resources/lang/en/texts.php @@ -161,7 +161,7 @@ $LANG = array( 'work_email' => 'Email', 'language_id' => 'Language', 'timezone_id' => 'Timezone', - 'date_format_id' => 'Date format', + 'date_format_id' => 'Date Format', 'datetime_format_id' => 'Date/Time Format', 'users' => 'Users', 'localization' => 'Localization', @@ -826,7 +826,7 @@ $LANG = array( 'notes' => 'Notes', 'invoice_will_create' => 'client will be created', 'invoices_will_create' => 'invoices will be created', - 'failed_to_import' => 'The following records failed to import', + 'failed_to_import' => 'The following records failed to import, they either already exist or are missing required fields.', 'publishable_key' => 'Publishable Key', 'secret_key' => 'Secret Key', 'missing_publishable_key' => 'Set your Stripe publishable key for an improved checkout process', @@ -950,7 +950,7 @@ $LANG = array( 'add_bank_account' => 'Add Bank Account', 'setup_account' => 'Setup Account', 'import_expenses' => 'Import Expenses', - 'bank_id' => 'bank', + 'bank_id' => 'Bank', 'integration_type' => 'Integration Type', 'updated_bank_account' => 'Successfully updated bank account', 'edit_bank_account' => 'Edit Bank Account', @@ -1062,14 +1062,40 @@ $LANG = array( 'invalid_card_number' => 'The credit card number is not valid.', 'invalid_expiry' => 'The expiration date is not valid.', 'invalid_cvv' => 'The CVV is not valid.', + 'cost' => 'Cost', + 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', // User Permissions 'owner' => 'Owner', 'administrator' => 'Administrator', - 'administrator_help' => 'Allow user to manage users, change settings, and view and modify all data', + 'administrator_help' => 'Allow user to manage users, change settings and modify all records', 'user_create_all' => 'Create clients, invoices, etc.', 'user_view_all' => 'View all clients, invoices, etc.', 'user_edit_all' => 'Edit all clients, invoices, etc.', + 'gateway_help_20' => ':link to sign up for Sage Pay.', + 'gateway_help_21' => ':link to sign up for Sage Pay.', + 'partial_due' => 'Partial Due', + 'restore_vendor' => 'Restore Vendor', + 'restored_vendor' => 'Successfully restored vendor', + 'restored_expense' => 'Successfully restored expense', + 'permissions' => 'Permissions', + 'create_all_help' => 'Allow user to create and modify records', + 'view_all_help' => 'Allow user to view records they didn\'t create', + 'edit_all_help' => 'Allow user to modify records they didn\'t create', + 'view_payment' => 'View Payment', + + 'january' => 'January', + 'february' => 'February', + 'march' => 'March', + 'april' => 'April', + 'may' => 'May', + 'june' => 'June', + 'july' => 'July', + 'august' => 'August', + 'september' => 'September', + 'october' => 'October', + 'november' => 'November', + 'december' => 'December', ); diff --git a/resources/lang/es/texts.php b/resources/lang/es/texts.php index 1b1f27947c46..75bd1a75dae6 100644 --- a/resources/lang/es/texts.php +++ b/resources/lang/es/texts.php @@ -920,7 +920,7 @@ return array( 'notes' => 'Notes', 'invoice_will_create' => 'client will be created', 'invoices_will_create' => 'invoices will be created', - 'failed_to_import' => 'The following records failed to import', + 'failed_to_import' => 'The following records failed to import, they either already exist or are missing required fields.', 'publishable_key' => 'Publishable Key', 'secret_key' => 'Secret Key', @@ -1108,4 +1108,73 @@ return array( 'overdue' => 'Overdue', 'white_label_text' => 'Purchase a ONE YEAR white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', + 'navigation' => 'Navigation', + 'list_invoices' => 'List Invoices', + 'list_clients' => 'List Clients', + 'list_quotes' => 'List Quotes', + 'list_tasks' => 'List Tasks', + 'list_expenses' => 'List Expenses', + 'list_recurring_invoices' => 'List Recurring Invoices', + 'list_payments' => 'List Payments', + 'list_credits' => 'List Credits', + 'tax_name' => 'Tax Name', + 'report_settings' => 'Report Settings', + 'search_hotkey' => 'shortcut is /', + + 'new_user' => 'New User', + 'new_product' => 'New Product', + 'new_tax_rate' => 'New Tax Rate', + 'invoiced_amount' => 'Invoiced Amount', + 'invoice_item_fields' => 'Invoice Item Fields', + 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', + 'recurring_invoice_number' => 'Recurring Invoice Number', + 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', + 'enable_client_portal' => 'Dashboard', + 'enable_client_portal_help' => 'Show/hide the dashboard page in the client portal.', + + // Client Passwords + 'enable_portal_password'=>'Password protect invoices', + 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', + 'send_portal_password'=>'Generate password automatically', + 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', + + 'expired' => 'Expired', + 'invalid_card_number' => 'The credit card number is not valid.', + 'invalid_expiry' => 'The expiration date is not valid.', + 'invalid_cvv' => 'The CVV is not valid.', + 'cost' => 'Cost', + 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', + + // User Permissions + 'owner' => 'Owner', + 'administrator' => 'Administrator', + 'administrator_help' => 'Allow user to manage users, change settings and modify all records', + 'user_create_all' => 'Create clients, invoices, etc.', + 'user_view_all' => 'View all clients, invoices, etc.', + 'user_edit_all' => 'Edit all clients, invoices, etc.', + 'gateway_help_20' => ':link to sign up for Sage Pay.', + 'gateway_help_21' => ':link to sign up for Sage Pay.', + 'partial_due' => 'Partial Due', + 'restore_vendor' => 'Restore Vendor', + 'restored_vendor' => 'Successfully restored vendor', + 'restored_expense' => 'Successfully restored expense', + 'permissions' => 'Permissions', + 'create_all_help' => 'Allow user to create and modify records', + 'view_all_help' => 'Allow user to view records they didn\'t create', + 'edit_all_help' => 'Allow user to modify records they didn\'t create', + 'view_payment' => 'View Payment', + + 'january' => 'January', + 'february' => 'February', + 'march' => 'March', + 'april' => 'April', + 'may' => 'May', + 'june' => 'June', + 'july' => 'July', + 'august' => 'August', + 'september' => 'September', + 'october' => 'October', + 'november' => 'November', + 'december' => 'December', + ); diff --git a/resources/lang/es_ES/texts.php b/resources/lang/es_ES/texts.php index 4e29075d559a..25054072dac5 100644 --- a/resources/lang/es_ES/texts.php +++ b/resources/lang/es_ES/texts.php @@ -1128,4 +1128,73 @@ return array( 'overdue' => 'Overdue', 'white_label_text' => 'Purchase a ONE YEAR white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', + 'navigation' => 'Navigation', + 'list_invoices' => 'List Invoices', + 'list_clients' => 'List Clients', + 'list_quotes' => 'List Quotes', + 'list_tasks' => 'List Tasks', + 'list_expenses' => 'List Expenses', + 'list_recurring_invoices' => 'List Recurring Invoices', + 'list_payments' => 'List Payments', + 'list_credits' => 'List Credits', + 'tax_name' => 'Tax Name', + 'report_settings' => 'Report Settings', + 'search_hotkey' => 'shortcut is /', + + 'new_user' => 'New User', + 'new_product' => 'New Product', + 'new_tax_rate' => 'New Tax Rate', + 'invoiced_amount' => 'Invoiced Amount', + 'invoice_item_fields' => 'Invoice Item Fields', + 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', + 'recurring_invoice_number' => 'Recurring Invoice Number', + 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', + 'enable_client_portal' => 'Dashboard', + 'enable_client_portal_help' => 'Show/hide the dashboard page in the client portal.', + + // Client Passwords + 'enable_portal_password'=>'Password protect invoices', + 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', + 'send_portal_password'=>'Generate password automatically', + 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', + + 'expired' => 'Expired', + 'invalid_card_number' => 'The credit card number is not valid.', + 'invalid_expiry' => 'The expiration date is not valid.', + 'invalid_cvv' => 'The CVV is not valid.', + 'cost' => 'Cost', + 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', + + // User Permissions + 'owner' => 'Owner', + 'administrator' => 'Administrator', + 'administrator_help' => 'Allow user to manage users, change settings and modify all records', + 'user_create_all' => 'Create clients, invoices, etc.', + 'user_view_all' => 'View all clients, invoices, etc.', + 'user_edit_all' => 'Edit all clients, invoices, etc.', + 'gateway_help_20' => ':link to sign up for Sage Pay.', + 'gateway_help_21' => ':link to sign up for Sage Pay.', + 'partial_due' => 'Partial Due', + 'restore_vendor' => 'Restore Vendor', + 'restored_vendor' => 'Successfully restored vendor', + 'restored_expense' => 'Successfully restored expense', + 'permissions' => 'Permissions', + 'create_all_help' => 'Allow user to create and modify records', + 'view_all_help' => 'Allow user to view records they didn\'t create', + 'edit_all_help' => 'Allow user to modify records they didn\'t create', + 'view_payment' => 'View Payment', + + 'january' => 'January', + 'february' => 'February', + 'march' => 'March', + 'april' => 'April', + 'may' => 'May', + 'june' => 'June', + 'july' => 'July', + 'august' => 'August', + 'september' => 'September', + 'october' => 'October', + 'november' => 'November', + 'december' => 'December', + ); diff --git a/resources/lang/fr/texts.php b/resources/lang/fr/texts.php index 1572eb219137..6cd75a9f0efa 100644 --- a/resources/lang/fr/texts.php +++ b/resources/lang/fr/texts.php @@ -934,7 +934,7 @@ return array( 'notes' => 'Notes', 'invoice_will_create' => 'client will be created', 'invoices_will_create' => 'invoices will be created', - 'failed_to_import' => 'The following records failed to import', + 'failed_to_import' => 'The following records failed to import, they either already exist or are missing required fields.', 'publishable_key' => 'Publishable Key', 'secret_key' => 'Secret Key', @@ -1123,4 +1123,73 @@ return array( 'overdue' => 'Overdue', 'white_label_text' => 'Purchase a ONE YEAR white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', + 'navigation' => 'Navigation', + 'list_invoices' => 'List Invoices', + 'list_clients' => 'List Clients', + 'list_quotes' => 'List Quotes', + 'list_tasks' => 'List Tasks', + 'list_expenses' => 'List Expenses', + 'list_recurring_invoices' => 'List Recurring Invoices', + 'list_payments' => 'List Payments', + 'list_credits' => 'List Credits', + 'tax_name' => 'Tax Name', + 'report_settings' => 'Report Settings', + 'search_hotkey' => 'shortcut is /', + + 'new_user' => 'New User', + 'new_product' => 'New Product', + 'new_tax_rate' => 'New Tax Rate', + 'invoiced_amount' => 'Invoiced Amount', + 'invoice_item_fields' => 'Invoice Item Fields', + 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', + 'recurring_invoice_number' => 'Recurring Invoice Number', + 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', + 'enable_client_portal' => 'Dashboard', + 'enable_client_portal_help' => 'Show/hide the dashboard page in the client portal.', + + // Client Passwords + 'enable_portal_password'=>'Password protect invoices', + 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', + 'send_portal_password'=>'Generate password automatically', + 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', + + 'expired' => 'Expired', + 'invalid_card_number' => 'The credit card number is not valid.', + 'invalid_expiry' => 'The expiration date is not valid.', + 'invalid_cvv' => 'The CVV is not valid.', + 'cost' => 'Cost', + 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', + + // User Permissions + 'owner' => 'Owner', + 'administrator' => 'Administrator', + 'administrator_help' => 'Allow user to manage users, change settings and modify all records', + 'user_create_all' => 'Create clients, invoices, etc.', + 'user_view_all' => 'View all clients, invoices, etc.', + 'user_edit_all' => 'Edit all clients, invoices, etc.', + 'gateway_help_20' => ':link to sign up for Sage Pay.', + 'gateway_help_21' => ':link to sign up for Sage Pay.', + 'partial_due' => 'Partial Due', + 'restore_vendor' => 'Restore Vendor', + 'restored_vendor' => 'Successfully restored vendor', + 'restored_expense' => 'Successfully restored expense', + 'permissions' => 'Permissions', + 'create_all_help' => 'Allow user to create and modify records', + 'view_all_help' => 'Allow user to view records they didn\'t create', + 'edit_all_help' => 'Allow user to modify records they didn\'t create', + 'view_payment' => 'View Payment', + + 'january' => 'January', + 'february' => 'February', + 'march' => 'March', + 'april' => 'April', + 'may' => 'May', + 'june' => 'June', + 'july' => 'July', + 'august' => 'August', + 'september' => 'September', + 'october' => 'October', + 'november' => 'November', + 'december' => 'December', + ); diff --git a/resources/lang/fr_CA/texts.php b/resources/lang/fr_CA/texts.php index 946fac0696ed..c62227e45050 100644 --- a/resources/lang/fr_CA/texts.php +++ b/resources/lang/fr_CA/texts.php @@ -1121,4 +1121,73 @@ return array( 'overdue' => 'En souffrance', 'white_label_text' => 'Achetez une licence sans pub d\'un an à $'.WHITE_LABEL_PRICE.' pour retirer le logo de Invoice Ninja du portail client et supporter notre projet.', + 'navigation' => 'Navigation', + 'list_invoices' => 'List Invoices', + 'list_clients' => 'List Clients', + 'list_quotes' => 'List Quotes', + 'list_tasks' => 'List Tasks', + 'list_expenses' => 'List Expenses', + 'list_recurring_invoices' => 'List Recurring Invoices', + 'list_payments' => 'List Payments', + 'list_credits' => 'List Credits', + 'tax_name' => 'Tax Name', + 'report_settings' => 'Report Settings', + 'search_hotkey' => 'shortcut is /', + + 'new_user' => 'New User', + 'new_product' => 'New Product', + 'new_tax_rate' => 'New Tax Rate', + 'invoiced_amount' => 'Invoiced Amount', + 'invoice_item_fields' => 'Invoice Item Fields', + 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', + 'recurring_invoice_number' => 'Recurring Invoice Number', + 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', + 'enable_client_portal' => 'Dashboard', + 'enable_client_portal_help' => 'Show/hide the dashboard page in the client portal.', + + // Client Passwords + 'enable_portal_password'=>'Password protect invoices', + 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', + 'send_portal_password'=>'Generate password automatically', + 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', + + 'expired' => 'Expired', + 'invalid_card_number' => 'The credit card number is not valid.', + 'invalid_expiry' => 'The expiration date is not valid.', + 'invalid_cvv' => 'The CVV is not valid.', + 'cost' => 'Cost', + 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', + + // User Permissions + 'owner' => 'Owner', + 'administrator' => 'Administrator', + 'administrator_help' => 'Allow user to manage users, change settings and modify all records', + 'user_create_all' => 'Create clients, invoices, etc.', + 'user_view_all' => 'View all clients, invoices, etc.', + 'user_edit_all' => 'Edit all clients, invoices, etc.', + 'gateway_help_20' => ':link to sign up for Sage Pay.', + 'gateway_help_21' => ':link to sign up for Sage Pay.', + 'partial_due' => 'Partial Due', + 'restore_vendor' => 'Restore Vendor', + 'restored_vendor' => 'Successfully restored vendor', + 'restored_expense' => 'Successfully restored expense', + 'permissions' => 'Permissions', + 'create_all_help' => 'Allow user to create and modify records', + 'view_all_help' => 'Allow user to view records they didn\'t create', + 'edit_all_help' => 'Allow user to modify records they didn\'t create', + 'view_payment' => 'View Payment', + + 'january' => 'January', + 'february' => 'February', + 'march' => 'March', + 'april' => 'April', + 'may' => 'May', + 'june' => 'June', + 'july' => 'July', + 'august' => 'August', + 'september' => 'September', + 'october' => 'October', + 'november' => 'November', + 'december' => 'December', + ); \ No newline at end of file diff --git a/resources/lang/it/texts.php b/resources/lang/it/texts.php index 5c358ae62627..0b2a843ccd2c 100644 --- a/resources/lang/it/texts.php +++ b/resources/lang/it/texts.php @@ -937,7 +937,7 @@ return array( 'notes' => 'Notes', 'invoice_will_create' => 'client will be created', 'invoices_will_create' => 'invoices will be created', - 'failed_to_import' => 'The following records failed to import', + 'failed_to_import' => 'The following records failed to import, they either already exist or are missing required fields.', 'publishable_key' => 'Publishable Key', 'secret_key' => 'Secret Key', @@ -1126,4 +1126,73 @@ return array( 'overdue' => 'Overdue', 'white_label_text' => 'Purchase a ONE YEAR white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', + 'navigation' => 'Navigation', + 'list_invoices' => 'List Invoices', + 'list_clients' => 'List Clients', + 'list_quotes' => 'List Quotes', + 'list_tasks' => 'List Tasks', + 'list_expenses' => 'List Expenses', + 'list_recurring_invoices' => 'List Recurring Invoices', + 'list_payments' => 'List Payments', + 'list_credits' => 'List Credits', + 'tax_name' => 'Tax Name', + 'report_settings' => 'Report Settings', + 'search_hotkey' => 'shortcut is /', + + 'new_user' => 'New User', + 'new_product' => 'New Product', + 'new_tax_rate' => 'New Tax Rate', + 'invoiced_amount' => 'Invoiced Amount', + 'invoice_item_fields' => 'Invoice Item Fields', + 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', + 'recurring_invoice_number' => 'Recurring Invoice Number', + 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', + 'enable_client_portal' => 'Dashboard', + 'enable_client_portal_help' => 'Show/hide the dashboard page in the client portal.', + + // Client Passwords + 'enable_portal_password'=>'Password protect invoices', + 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', + 'send_portal_password'=>'Generate password automatically', + 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', + + 'expired' => 'Expired', + 'invalid_card_number' => 'The credit card number is not valid.', + 'invalid_expiry' => 'The expiration date is not valid.', + 'invalid_cvv' => 'The CVV is not valid.', + 'cost' => 'Cost', + 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', + + // User Permissions + 'owner' => 'Owner', + 'administrator' => 'Administrator', + 'administrator_help' => 'Allow user to manage users, change settings and modify all records', + 'user_create_all' => 'Create clients, invoices, etc.', + 'user_view_all' => 'View all clients, invoices, etc.', + 'user_edit_all' => 'Edit all clients, invoices, etc.', + 'gateway_help_20' => ':link to sign up for Sage Pay.', + 'gateway_help_21' => ':link to sign up for Sage Pay.', + 'partial_due' => 'Partial Due', + 'restore_vendor' => 'Restore Vendor', + 'restored_vendor' => 'Successfully restored vendor', + 'restored_expense' => 'Successfully restored expense', + 'permissions' => 'Permissions', + 'create_all_help' => 'Allow user to create and modify records', + 'view_all_help' => 'Allow user to view records they didn\'t create', + 'edit_all_help' => 'Allow user to modify records they didn\'t create', + 'view_payment' => 'View Payment', + + 'january' => 'January', + 'february' => 'February', + 'march' => 'March', + 'april' => 'April', + 'may' => 'May', + 'june' => 'June', + 'july' => 'July', + 'august' => 'August', + 'september' => 'September', + 'october' => 'October', + 'november' => 'November', + 'december' => 'December', + ); \ No newline at end of file diff --git a/resources/lang/ja/texts.php b/resources/lang/ja/texts.php index a6b046e42f46..7e673ac11d33 100644 --- a/resources/lang/ja/texts.php +++ b/resources/lang/ja/texts.php @@ -1051,6 +1051,51 @@ $LANG = array( 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', 'enable_client_portal' => 'ダッシュボード', 'enable_client_portal_help' => 'Show/hide the dashboard page in the client portal.', + + // Client Passwords + 'enable_portal_password'=>'Password protect invoices', + 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', + 'send_portal_password'=>'Generate password automatically', + 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', + + 'expired' => 'Expired', + 'invalid_card_number' => 'The credit card number is not valid.', + 'invalid_expiry' => 'The expiration date is not valid.', + 'invalid_cvv' => 'The CVV is not valid.', + 'cost' => 'Cost', + 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', + + // User Permissions + 'owner' => 'Owner', + 'administrator' => 'Administrator', + 'administrator_help' => 'Allow user to manage users, change settings and modify all records', + 'user_create_all' => 'Create clients, invoices, etc.', + 'user_view_all' => 'View all clients, invoices, etc.', + 'user_edit_all' => 'Edit all clients, invoices, etc.', + 'gateway_help_20' => ':link to sign up for Sage Pay.', + 'gateway_help_21' => ':link to sign up for Sage Pay.', + 'partial_due' => 'Partial Due', + 'restore_vendor' => 'Restore Vendor', + 'restored_vendor' => 'Successfully restored vendor', + 'restored_expense' => 'Successfully restored expense', + 'permissions' => 'Permissions', + 'create_all_help' => 'Allow user to create and modify records', + 'view_all_help' => 'Allow user to view records they didn\'t create', + 'edit_all_help' => 'Allow user to modify records they didn\'t create', + 'view_payment' => 'View Payment', + + 'january' => 'January', + 'february' => 'February', + 'march' => 'March', + 'april' => 'April', + 'may' => 'May', + 'june' => 'June', + 'july' => 'July', + 'august' => 'August', + 'september' => 'September', + 'october' => 'October', + 'november' => 'November', + 'december' => 'December', ); diff --git a/resources/lang/lt/texts.php b/resources/lang/lt/texts.php index 4dc55e9e5e4f..252a7f03bd9c 100644 --- a/resources/lang/lt/texts.php +++ b/resources/lang/lt/texts.php @@ -944,7 +944,7 @@ return array( 'notes' => 'Notes', 'invoice_will_create' => 'client will be created', 'invoices_will_create' => 'invoices will be created', - 'failed_to_import' => 'The following records failed to import', + 'failed_to_import' => 'The following records failed to import, they either already exist or are missing required fields.', 'publishable_key' => 'Publishable Key', 'secret_key' => 'Secret Key', @@ -1133,4 +1133,73 @@ return array( 'overdue' => 'Overdue', 'white_label_text' => 'Purchase a ONE YEAR white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', + 'navigation' => 'Navigation', + 'list_invoices' => 'List Invoices', + 'list_clients' => 'List Clients', + 'list_quotes' => 'List Quotes', + 'list_tasks' => 'List Tasks', + 'list_expenses' => 'List Expenses', + 'list_recurring_invoices' => 'List Recurring Invoices', + 'list_payments' => 'List Payments', + 'list_credits' => 'List Credits', + 'tax_name' => 'Tax Name', + 'report_settings' => 'Report Settings', + 'search_hotkey' => 'shortcut is /', + + 'new_user' => 'New User', + 'new_product' => 'New Product', + 'new_tax_rate' => 'New Tax Rate', + 'invoiced_amount' => 'Invoiced Amount', + 'invoice_item_fields' => 'Invoice Item Fields', + 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', + 'recurring_invoice_number' => 'Recurring Invoice Number', + 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', + 'enable_client_portal' => 'Dashboard', + 'enable_client_portal_help' => 'Show/hide the dashboard page in the client portal.', + + // Client Passwords + 'enable_portal_password'=>'Password protect invoices', + 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', + 'send_portal_password'=>'Generate password automatically', + 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', + + 'expired' => 'Expired', + 'invalid_card_number' => 'The credit card number is not valid.', + 'invalid_expiry' => 'The expiration date is not valid.', + 'invalid_cvv' => 'The CVV is not valid.', + 'cost' => 'Cost', + 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', + + // User Permissions + 'owner' => 'Owner', + 'administrator' => 'Administrator', + 'administrator_help' => 'Allow user to manage users, change settings and modify all records', + 'user_create_all' => 'Create clients, invoices, etc.', + 'user_view_all' => 'View all clients, invoices, etc.', + 'user_edit_all' => 'Edit all clients, invoices, etc.', + 'gateway_help_20' => ':link to sign up for Sage Pay.', + 'gateway_help_21' => ':link to sign up for Sage Pay.', + 'partial_due' => 'Partial Due', + 'restore_vendor' => 'Restore Vendor', + 'restored_vendor' => 'Successfully restored vendor', + 'restored_expense' => 'Successfully restored expense', + 'permissions' => 'Permissions', + 'create_all_help' => 'Allow user to create and modify records', + 'view_all_help' => 'Allow user to view records they didn\'t create', + 'edit_all_help' => 'Allow user to modify records they didn\'t create', + 'view_payment' => 'View Payment', + + 'january' => 'January', + 'february' => 'February', + 'march' => 'March', + 'april' => 'April', + 'may' => 'May', + 'june' => 'June', + 'july' => 'July', + 'august' => 'August', + 'september' => 'September', + 'october' => 'October', + 'november' => 'November', + 'december' => 'December', + ); \ No newline at end of file diff --git a/resources/lang/nb_NO/texts.php b/resources/lang/nb_NO/texts.php index 875df81d4639..df06d7a32547 100644 --- a/resources/lang/nb_NO/texts.php +++ b/resources/lang/nb_NO/texts.php @@ -942,7 +942,7 @@ return array( 'notes' => 'Notes', 'invoice_will_create' => 'client will be created', 'invoices_will_create' => 'invoices will be created', - 'failed_to_import' => 'The following records failed to import', + 'failed_to_import' => 'The following records failed to import, they either already exist or are missing required fields.', 'publishable_key' => 'Publishable Key', 'secret_key' => 'Secret Key', @@ -1131,4 +1131,73 @@ return array( 'overdue' => 'Overdue', 'white_label_text' => 'Purchase a ONE YEAR white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', + 'navigation' => 'Navigation', + 'list_invoices' => 'List Invoices', + 'list_clients' => 'List Clients', + 'list_quotes' => 'List Quotes', + 'list_tasks' => 'List Tasks', + 'list_expenses' => 'List Expenses', + 'list_recurring_invoices' => 'List Recurring Invoices', + 'list_payments' => 'List Payments', + 'list_credits' => 'List Credits', + 'tax_name' => 'Tax Name', + 'report_settings' => 'Report Settings', + 'search_hotkey' => 'shortcut is /', + + 'new_user' => 'New User', + 'new_product' => 'New Product', + 'new_tax_rate' => 'New Tax Rate', + 'invoiced_amount' => 'Invoiced Amount', + 'invoice_item_fields' => 'Invoice Item Fields', + 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', + 'recurring_invoice_number' => 'Recurring Invoice Number', + 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', + 'enable_client_portal' => 'Dashboard', + 'enable_client_portal_help' => 'Show/hide the dashboard page in the client portal.', + + // Client Passwords + 'enable_portal_password'=>'Password protect invoices', + 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', + 'send_portal_password'=>'Generate password automatically', + 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', + + 'expired' => 'Expired', + 'invalid_card_number' => 'The credit card number is not valid.', + 'invalid_expiry' => 'The expiration date is not valid.', + 'invalid_cvv' => 'The CVV is not valid.', + 'cost' => 'Cost', + 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', + + // User Permissions + 'owner' => 'Owner', + 'administrator' => 'Administrator', + 'administrator_help' => 'Allow user to manage users, change settings and modify all records', + 'user_create_all' => 'Create clients, invoices, etc.', + 'user_view_all' => 'View all clients, invoices, etc.', + 'user_edit_all' => 'Edit all clients, invoices, etc.', + 'gateway_help_20' => ':link to sign up for Sage Pay.', + 'gateway_help_21' => ':link to sign up for Sage Pay.', + 'partial_due' => 'Partial Due', + 'restore_vendor' => 'Restore Vendor', + 'restored_vendor' => 'Successfully restored vendor', + 'restored_expense' => 'Successfully restored expense', + 'permissions' => 'Permissions', + 'create_all_help' => 'Allow user to create and modify records', + 'view_all_help' => 'Allow user to view records they didn\'t create', + 'edit_all_help' => 'Allow user to modify records they didn\'t create', + 'view_payment' => 'View Payment', + + 'january' => 'January', + 'february' => 'February', + 'march' => 'March', + 'april' => 'April', + 'may' => 'May', + 'june' => 'June', + 'july' => 'July', + 'august' => 'August', + 'september' => 'September', + 'october' => 'October', + 'november' => 'November', + 'december' => 'December', + ); \ No newline at end of file diff --git a/resources/lang/nl/texts.php b/resources/lang/nl/texts.php index 9794f7c0089b..83fef88816e1 100644 --- a/resources/lang/nl/texts.php +++ b/resources/lang/nl/texts.php @@ -937,7 +937,7 @@ return array( 'notes' => 'Notities', 'invoice_will_create' => 'klant zal worden aangemaakt', 'invoices_will_create' => 'factuur zal worden aangemaakt', - 'failed_to_import' => 'The following records failed to import', + 'failed_to_import' => 'The following records failed to import, they either already exist or are missing required fields.', 'publishable_key' => 'Publishable Key', 'secret_key' => 'Secret Key', @@ -1126,4 +1126,73 @@ return array( 'overdue' => 'Overdue', 'white_label_text' => 'Purchase a ONE YEAR white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', + 'navigation' => 'Navigation', + 'list_invoices' => 'List Invoices', + 'list_clients' => 'List Clients', + 'list_quotes' => 'List Quotes', + 'list_tasks' => 'List Tasks', + 'list_expenses' => 'List Expenses', + 'list_recurring_invoices' => 'List Recurring Invoices', + 'list_payments' => 'List Payments', + 'list_credits' => 'List Credits', + 'tax_name' => 'Tax Name', + 'report_settings' => 'Report Settings', + 'search_hotkey' => 'shortcut is /', + + 'new_user' => 'New User', + 'new_product' => 'New Product', + 'new_tax_rate' => 'New Tax Rate', + 'invoiced_amount' => 'Invoiced Amount', + 'invoice_item_fields' => 'Invoice Item Fields', + 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', + 'recurring_invoice_number' => 'Recurring Invoice Number', + 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', + 'enable_client_portal' => 'Dashboard', + 'enable_client_portal_help' => 'Show/hide the dashboard page in the client portal.', + + // Client Passwords + 'enable_portal_password'=>'Password protect invoices', + 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', + 'send_portal_password'=>'Generate password automatically', + 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', + + 'expired' => 'Expired', + 'invalid_card_number' => 'The credit card number is not valid.', + 'invalid_expiry' => 'The expiration date is not valid.', + 'invalid_cvv' => 'The CVV is not valid.', + 'cost' => 'Cost', + 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', + + // User Permissions + 'owner' => 'Owner', + 'administrator' => 'Administrator', + 'administrator_help' => 'Allow user to manage users, change settings and modify all records', + 'user_create_all' => 'Create clients, invoices, etc.', + 'user_view_all' => 'View all clients, invoices, etc.', + 'user_edit_all' => 'Edit all clients, invoices, etc.', + 'gateway_help_20' => ':link to sign up for Sage Pay.', + 'gateway_help_21' => ':link to sign up for Sage Pay.', + 'partial_due' => 'Partial Due', + 'restore_vendor' => 'Restore Vendor', + 'restored_vendor' => 'Successfully restored vendor', + 'restored_expense' => 'Successfully restored expense', + 'permissions' => 'Permissions', + 'create_all_help' => 'Allow user to create and modify records', + 'view_all_help' => 'Allow user to view records they didn\'t create', + 'edit_all_help' => 'Allow user to modify records they didn\'t create', + 'view_payment' => 'View Payment', + + 'january' => 'January', + 'february' => 'February', + 'march' => 'March', + 'april' => 'April', + 'may' => 'May', + 'june' => 'June', + 'july' => 'July', + 'august' => 'August', + 'september' => 'September', + 'october' => 'October', + 'november' => 'November', + 'december' => 'December', + ); \ No newline at end of file diff --git a/resources/lang/pt_BR/texts.php b/resources/lang/pt_BR/texts.php index 731be8bbbdc6..30fcfbf05c27 100644 --- a/resources/lang/pt_BR/texts.php +++ b/resources/lang/pt_BR/texts.php @@ -1123,4 +1123,73 @@ return array( 'overdue' => 'Overdue', 'white_label_text' => 'Purchase a ONE YEAR white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', + 'navigation' => 'Navigation', + 'list_invoices' => 'List Invoices', + 'list_clients' => 'List Clients', + 'list_quotes' => 'List Quotes', + 'list_tasks' => 'List Tasks', + 'list_expenses' => 'List Expenses', + 'list_recurring_invoices' => 'List Recurring Invoices', + 'list_payments' => 'List Payments', + 'list_credits' => 'List Credits', + 'tax_name' => 'Tax Name', + 'report_settings' => 'Report Settings', + 'search_hotkey' => 'shortcut is /', + + 'new_user' => 'New User', + 'new_product' => 'New Product', + 'new_tax_rate' => 'New Tax Rate', + 'invoiced_amount' => 'Invoiced Amount', + 'invoice_item_fields' => 'Invoice Item Fields', + 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', + 'recurring_invoice_number' => 'Recurring Invoice Number', + 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', + 'enable_client_portal' => 'Dashboard', + 'enable_client_portal_help' => 'Show/hide the dashboard page in the client portal.', + + // Client Passwords + 'enable_portal_password'=>'Password protect invoices', + 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', + 'send_portal_password'=>'Generate password automatically', + 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', + + 'expired' => 'Expired', + 'invalid_card_number' => 'The credit card number is not valid.', + 'invalid_expiry' => 'The expiration date is not valid.', + 'invalid_cvv' => 'The CVV is not valid.', + 'cost' => 'Cost', + 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', + + // User Permissions + 'owner' => 'Owner', + 'administrator' => 'Administrator', + 'administrator_help' => 'Allow user to manage users, change settings and modify all records', + 'user_create_all' => 'Create clients, invoices, etc.', + 'user_view_all' => 'View all clients, invoices, etc.', + 'user_edit_all' => 'Edit all clients, invoices, etc.', + 'gateway_help_20' => ':link to sign up for Sage Pay.', + 'gateway_help_21' => ':link to sign up for Sage Pay.', + 'partial_due' => 'Partial Due', + 'restore_vendor' => 'Restore Vendor', + 'restored_vendor' => 'Successfully restored vendor', + 'restored_expense' => 'Successfully restored expense', + 'permissions' => 'Permissions', + 'create_all_help' => 'Allow user to create and modify records', + 'view_all_help' => 'Allow user to view records they didn\'t create', + 'edit_all_help' => 'Allow user to modify records they didn\'t create', + 'view_payment' => 'View Payment', + + 'january' => 'January', + 'february' => 'February', + 'march' => 'March', + 'april' => 'April', + 'may' => 'May', + 'june' => 'June', + 'july' => 'July', + 'august' => 'August', + 'september' => 'September', + 'october' => 'October', + 'november' => 'November', + 'december' => 'December', + ); diff --git a/resources/lang/sv/texts.php b/resources/lang/sv/texts.php index 8f72d9bb40d3..050076bd6e3e 100644 --- a/resources/lang/sv/texts.php +++ b/resources/lang/sv/texts.php @@ -939,7 +939,7 @@ return array( 'notes' => 'Notes', 'invoice_will_create' => 'client will be created', 'invoices_will_create' => 'invoices will be created', - 'failed_to_import' => 'The following records failed to import', + 'failed_to_import' => 'The following records failed to import, they either already exist or are missing required fields.', 'publishable_key' => 'Publishable Key', 'secret_key' => 'Secret Key', @@ -1128,4 +1128,73 @@ return array( 'overdue' => 'Overdue', 'white_label_text' => 'Purchase a ONE YEAR white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the client portal and help support our project.', + 'navigation' => 'Navigation', + 'list_invoices' => 'List Invoices', + 'list_clients' => 'List Clients', + 'list_quotes' => 'List Quotes', + 'list_tasks' => 'List Tasks', + 'list_expenses' => 'List Expenses', + 'list_recurring_invoices' => 'List Recurring Invoices', + 'list_payments' => 'List Payments', + 'list_credits' => 'List Credits', + 'tax_name' => 'Tax Name', + 'report_settings' => 'Report Settings', + 'search_hotkey' => 'shortcut is /', + + 'new_user' => 'New User', + 'new_product' => 'New Product', + 'new_tax_rate' => 'New Tax Rate', + 'invoiced_amount' => 'Invoiced Amount', + 'invoice_item_fields' => 'Invoice Item Fields', + 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', + 'recurring_invoice_number' => 'Recurring Invoice Number', + 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', + 'enable_client_portal' => 'Dashboard', + 'enable_client_portal_help' => 'Show/hide the dashboard page in the client portal.', + + // Client Passwords + 'enable_portal_password'=>'Password protect invoices', + 'enable_portal_password_help'=>'Allows you to set a password for each contact. If a password is set, the contact will be required to enter a password before viewing invoices.', + 'send_portal_password'=>'Generate password automatically', + 'send_portal_password_help'=>'If no password is set, one will be generated and sent with the first invoice.', + + 'expired' => 'Expired', + 'invalid_card_number' => 'The credit card number is not valid.', + 'invalid_expiry' => 'The expiration date is not valid.', + 'invalid_cvv' => 'The CVV is not valid.', + 'cost' => 'Cost', + 'create_invoice_for_sample' => 'Note: create your first invoice to see a preview here.', + + // User Permissions + 'owner' => 'Owner', + 'administrator' => 'Administrator', + 'administrator_help' => 'Allow user to manage users, change settings and modify all records', + 'user_create_all' => 'Create clients, invoices, etc.', + 'user_view_all' => 'View all clients, invoices, etc.', + 'user_edit_all' => 'Edit all clients, invoices, etc.', + 'gateway_help_20' => ':link to sign up for Sage Pay.', + 'gateway_help_21' => ':link to sign up for Sage Pay.', + 'partial_due' => 'Partial Due', + 'restore_vendor' => 'Restore Vendor', + 'restored_vendor' => 'Successfully restored vendor', + 'restored_expense' => 'Successfully restored expense', + 'permissions' => 'Permissions', + 'create_all_help' => 'Allow user to create and modify records', + 'view_all_help' => 'Allow user to view records they didn\'t create', + 'edit_all_help' => 'Allow user to modify records they didn\'t create', + 'view_payment' => 'View Payment', + + 'january' => 'January', + 'february' => 'February', + 'march' => 'March', + 'april' => 'April', + 'may' => 'May', + 'june' => 'June', + 'july' => 'July', + 'august' => 'August', + 'september' => 'September', + 'october' => 'October', + 'november' => 'November', + 'december' => 'December', + ); diff --git a/resources/views/accounts/account_gateway.blade.php b/resources/views/accounts/account_gateway.blade.php index eda78b3c000c..c19268c258fd 100644 --- a/resources/views/accounts/account_gateway.blade.php +++ b/resources/views/accounts/account_gateway.blade.php @@ -52,6 +52,15 @@ @foreach ($gateways as $gateway)