mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-06-23 20:00:33 -04:00
Merge branch 'invoiceninja/develop' into attached-documents
This commit is contained in:
commit
9fbee962de
@ -42,3 +42,5 @@ API_SECRET=password
|
||||
#GOOGLE_CLIENT_ID=
|
||||
#GOOGLE_CLIENT_SECRET=
|
||||
#GOOGLE_OAUTH_REDIRECT=http://ninja.dev/auth/google
|
||||
|
||||
#GOOGLE_MAPS_API_KEY=
|
2
LICENSE
2
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
|
||||
|
@ -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);
|
||||
|
179
app/Http/Controllers/DashboardApiController.php
Normal file
179
app/Http/Controllers/DashboardApiController.php
Normal file
@ -0,0 +1,179 @@
|
||||
<?php namespace App\Http\Controllers;
|
||||
|
||||
use Auth;
|
||||
use DB;
|
||||
use View;
|
||||
use App\Models\Activity;
|
||||
|
||||
class DashboardApiController extends BaseAPIController
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$view_all = !Auth::user()->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);
|
||||
|
||||
}
|
||||
}
|
@ -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',
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -54,6 +54,7 @@ class QuoteController extends BaseController
|
||||
$data = [
|
||||
'title' => trans('texts.quotes'),
|
||||
'entityType' => ENTITY_QUOTE,
|
||||
'sortCol' => '3',
|
||||
'columns' => Utils::trans([
|
||||
'checkbox',
|
||||
'quote_number',
|
||||
|
@ -354,7 +354,7 @@ 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 = [];
|
||||
@ -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),
|
||||
$account->formatMoney($invoice->getAmountPaid(), $client),
|
||||
$account->formatMoney($invoice->balance, $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);
|
||||
}
|
||||
}
|
||||
|
||||
$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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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');
|
||||
|
@ -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),
|
||||
];
|
||||
|
||||
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)
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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'];
|
||||
|
@ -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 {
|
||||
|
@ -1,5 +1,6 @@
|
||||
<?php namespace App\Ninja\Presenters;
|
||||
|
||||
use URL;
|
||||
use Utils;
|
||||
use Laracasts\Presenter\Presenter;
|
||||
|
||||
@ -24,4 +25,14 @@ class PaymentPresenter extends Presenter {
|
||||
}
|
||||
}
|
||||
|
||||
public function url()
|
||||
{
|
||||
return URL::to('/payments/' . $this->entity->public_id . '/edit');
|
||||
}
|
||||
|
||||
public function link()
|
||||
{
|
||||
return link_to('/payments/' . $this->entity->public_id . '/edit', $this->entity->getDisplayName());
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
|
229
composer.lock
generated
229
composer.lock
generated
@ -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",
|
||||
|
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class AddSupportThreeDecimalTaxes extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('tax_rates', function($table) {
|
||||
$table->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();
|
||||
});
|
||||
}
|
||||
}
|
@ -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) {
|
||||
|
@ -30487,6 +30487,7 @@ function calculateAmounts(invoice) {
|
||||
for (var i=0; i<invoice.invoice_items.length; i++) {
|
||||
var item = invoice.invoice_items[i];
|
||||
var lineTotal = roundToTwo(NINJA.parseFloat(item.cost)) * roundToTwo(NINJA.parseFloat(item.qty));
|
||||
lineTotal = roundToTwo(lineTotal);
|
||||
if (lineTotal) {
|
||||
total += lineTotal;
|
||||
}
|
||||
@ -31182,7 +31183,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');
|
||||
}
|
||||
@ -31259,10 +31260,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%");
|
||||
}
|
||||
|
||||
@ -31314,10 +31315,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']});
|
||||
}
|
||||
|
||||
@ -31372,10 +31373,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});
|
||||
@ -31439,21 +31440,31 @@ NINJA.subtotals = function(invoice, hideBalance)
|
||||
data.push([{text:invoiceLabels.paid_to_date}, {text:formatMoneyInvoice(paid, invoice)}]);
|
||||
}
|
||||
|
||||
if (!hideBalance) {
|
||||
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');
|
||||
}
|
||||
|
||||
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']}
|
||||
]];
|
||||
}
|
||||
@ -31531,18 +31542,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']}
|
||||
])
|
||||
|
||||
|
13
public/css/built.css
vendored
13
public/css/built.css
vendored
@ -2216,7 +2216,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;
|
||||
@ -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;
|
||||
|
26
public/css/built.public.css
vendored
26
public/css/built.public.css
vendored
@ -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 {
|
||||
|
26
public/css/public.style.css
vendored
26
public/css/public.style.css
vendored
@ -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 {
|
||||
|
13
public/css/style.css
vendored
13
public/css/style.css
vendored
@ -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;
|
||||
|
@ -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,21 +447,31 @@ NINJA.subtotals = function(invoice, hideBalance)
|
||||
data.push([{text:invoiceLabels.paid_to_date}, {text:formatMoneyInvoice(paid, invoice)}]);
|
||||
}
|
||||
|
||||
if (!hideBalance) {
|
||||
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');
|
||||
}
|
||||
|
||||
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']}
|
||||
])
|
||||
|
||||
|
@ -595,6 +595,7 @@ function calculateAmounts(invoice) {
|
||||
for (var i=0; i<invoice.invoice_items.length; i++) {
|
||||
var item = invoice.invoice_items[i];
|
||||
var lineTotal = roundToTwo(NINJA.parseFloat(item.cost)) * roundToTwo(NINJA.parseFloat(item.qty));
|
||||
lineTotal = roundToTwo(lineTotal);
|
||||
if (lineTotal) {
|
||||
total += lineTotal;
|
||||
}
|
||||
|
@ -52,7 +52,7 @@ Note: we've recently updated this branch to Laravel 5.2. If you're upgrading her
|
||||
* [Debian and Nginx](https://www.rosehosting.com/blog/install-invoice-ninja-on-a-debian-7-vps/)
|
||||
* [User Guide](https://www.invoiceninja.com/app-user-guide/)
|
||||
* [Developer Guide](https://www.invoiceninja.com/knowledgebase/developer-guide/)
|
||||
* [API Documentation](https://www.invoiceninja.com/knowledgebase/api-documentation/)
|
||||
* [API Documentation](https://www.invoiceninja.com/api-documentation/)
|
||||
* [Support Forum](https://www.invoiceninja.com/forums/forum/support/)
|
||||
* [Feature Roadmap](https://trello.com/b/63BbiVVe/)
|
||||
|
||||
|
@ -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',
|
||||
|
||||
);
|
@ -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',
|
||||
|
||||
);
|
||||
|
@ -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',
|
||||
|
||||
);
|
||||
|
||||
|
@ -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',
|
||||
|
||||
);
|
||||
|
@ -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',
|
||||
|
||||
);
|
||||
|
@ -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',
|
||||
|
||||
);
|
||||
|
@ -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',
|
||||
|
||||
);
|
@ -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',
|
||||
|
||||
);
|
@ -1052,6 +1052,51 @@ $LANG = array(
|
||||
'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',
|
||||
|
||||
);
|
||||
|
||||
return $LANG;
|
||||
|
@ -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',
|
||||
|
||||
);
|
@ -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',
|
||||
|
||||
);
|
@ -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',
|
||||
|
||||
);
|
@ -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',
|
||||
|
||||
);
|
||||
|
@ -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',
|
||||
|
||||
);
|
||||
|
@ -52,6 +52,15 @@
|
||||
@foreach ($gateways as $gateway)
|
||||
|
||||
<div id="gateway_{{ $gateway->id }}_div" class='gateway-fields' style="display: none">
|
||||
@if ($gateway->getHelp())
|
||||
<div class="form-group">
|
||||
<label class="control-label col-lg-4 col-sm-4"></label>
|
||||
<div class="col-lg-8 col-sm-8 help-block">
|
||||
{!! $gateway->getHelp() !!}
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@foreach ($gateway->fields as $field => $details)
|
||||
|
||||
@if ($details && !$accountGateway)
|
||||
@ -64,24 +73,15 @@
|
||||
&& isset($_ENV['DWOLLA_KEY']) && isset($_ENV['DWOLLA_SECRET']))
|
||||
{{-- do nothing --}}
|
||||
@elseif ($field == 'testMode' || $field == 'developerMode' || $field == 'sandbox')
|
||||
{!! Former::checkbox($gateway->id.'_'.$field)->label(Utils::toSpaceCase($field))->text('Enable')->value('true') !!}
|
||||
{!! Former::checkbox($gateway->id.'_'.$field)->label(ucwords(Utils::toSpaceCase($field)))->text('Enable')->value('true') !!}
|
||||
@elseif ($field == 'username' || $field == 'password')
|
||||
{!! Former::text($gateway->id.'_'.$field)->label('API '. ucfirst(Utils::toSpaceCase($field))) !!}
|
||||
@else
|
||||
{!! Former::text($gateway->id.'_'.$field)->label($gateway->id == GATEWAY_STRIPE ? trans('texts.secret_key') : Utils::toSpaceCase($field)) !!}
|
||||
{!! Former::text($gateway->id.'_'.$field)->label($gateway->id == GATEWAY_STRIPE ? trans('texts.secret_key') : ucwords(Utils::toSpaceCase($field))) !!}
|
||||
@endif
|
||||
|
||||
@endforeach
|
||||
|
||||
@if ($gateway->getHelp())
|
||||
<div class="form-group">
|
||||
<label class="control-label col-lg-4 col-sm-4"></label>
|
||||
<div class="col-lg-8 col-sm-8 help-block">
|
||||
{!! $gateway->getHelp() !!}
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if ($gateway->id == GATEWAY_STRIPE)
|
||||
{!! Former::text('publishable_key') !!}
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
@include('accounts.nav', ['selected' => ACCOUNT_API_TOKENS, 'advanced' => true])
|
||||
|
||||
<div class="pull-right">
|
||||
{!! Button::normal(trans('texts.documentation'))->asLinkTo(NINJA_WEB_URL.'/knowledgebase/api-documentation/')->withAttributes(['target' => '_blank'])->appendIcon(Icon::create('info-sign')) !!}
|
||||
{!! Button::normal(trans('texts.documentation'))->asLinkTo(NINJA_WEB_URL.'/api-documentation/')->withAttributes(['target' => '_blank'])->appendIcon(Icon::create('info-sign')) !!}
|
||||
@if (Utils::isNinja())
|
||||
{!! Button::normal(trans('texts.zapier'))->asLinkTo(ZAPIER_URL)->withAttributes(['target' => '_blank']) !!}
|
||||
@endif
|
||||
@ -51,4 +51,9 @@
|
||||
|
||||
</script>
|
||||
|
||||
@if (Utils::isNinja() && !Utils::isReseller())
|
||||
<p> </p>
|
||||
<script src="https://zapier.com/zapbook/embed/widget.js?services=invoice-ninja&container=false&limit=6"></script>
|
||||
@endif
|
||||
|
||||
@stop
|
||||
|
@ -28,6 +28,7 @@
|
||||
@include('accounts.nav', ['selected' => ACCOUNT_CLIENT_PORTAL])
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">{!! trans('texts.client_portal') !!}</h3>
|
||||
@ -67,6 +68,7 @@
|
||||
->style("min-width:100%;max-width:100%;font-family:'Roboto Mono', 'Lucida Console', Monaco, monospace;font-size:14px;'") !!}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -153,7 +153,6 @@
|
||||
|
||||
@if (isset($sampleInvoice) && $sampleInvoice)
|
||||
var sample = {!! $sampleInvoice->toJSON() !!}
|
||||
console.log(sample);
|
||||
$('#sampleData').show().html(prettyJson(sample));
|
||||
@endif
|
||||
});
|
||||
@ -222,6 +221,9 @@
|
||||
{!! trans('texts.customize_help') !!}
|
||||
|
||||
<pre id="sampleData" style="display:none;height:200px;padding-top:16px;"></pre>
|
||||
@if (empty($sampleInvoice))
|
||||
<div class="help-block">{{ trans('texts.create_invoice_for_sample') }}</div>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<div class="modal-footer" style="margin-top: 0px">
|
||||
|
@ -50,7 +50,7 @@
|
||||
->help(trans('texts.subdomain_help')) !!}
|
||||
|
||||
{!! Former::text('iframe_url')
|
||||
->placeholder('http://www.example.com/invoice')
|
||||
->placeholder('https://www.example.com/invoice')
|
||||
->appendIcon('question-sign')
|
||||
->addGroupClass('iframe_url')
|
||||
->label(' ')
|
||||
|
@ -60,7 +60,16 @@
|
||||
@else
|
||||
NINJA.headerFont = NINJA.bodyFont = 'Roboto';
|
||||
@endif
|
||||
var fields = ['item', 'description', 'unit_cost', 'quantity', 'line_total', 'terms'];
|
||||
var fields = [
|
||||
'item',
|
||||
'description',
|
||||
'unit_cost',
|
||||
'quantity',
|
||||
'line_total',
|
||||
'terms',
|
||||
'balance_due',
|
||||
'partial_due'
|
||||
];
|
||||
invoiceLabels.old = {};
|
||||
for (var i=0; i<fields.length; i++) {
|
||||
var field = fields[i];
|
||||
@ -181,11 +190,13 @@
|
||||
{!! Former::text('labels_item')->label(trans('texts.item')) !!}
|
||||
{!! Former::text('labels_description')->label(trans('texts.description')) !!}
|
||||
{!! Former::text('labels_unit_cost')->label(trans('texts.unit_cost')) !!}
|
||||
{!! Former::text('labels_quantity')->label(trans('texts.quantity')) !!}
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
{!! Former::text('labels_quantity')->label(trans('texts.quantity')) !!}
|
||||
{!! Former::text('labels_line_total')->label(trans('texts.line_total')) !!}
|
||||
{!! Former::text('labels_terms')->label(trans('texts.terms')) !!}
|
||||
{!! Former::text('labels_balance_due')->label(trans('texts.balance_due')) !!}
|
||||
{!! Former::text('labels_partial_due')->label(trans('texts.partial_due')) !!}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -12,6 +12,8 @@
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-12">
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">{!! trans('texts.localization') !!}</h3>
|
||||
@ -34,6 +36,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<center>
|
||||
{!! Button::success(trans('texts.save'))->submit()->large()->appendIcon(Icon::create('floppy-disk')) !!}
|
||||
|
@ -6,7 +6,7 @@
|
||||
@include('accounts.nav', ['selected' => ACCOUNT_SYSTEM_SETTINGS])
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-12">
|
||||
{!! Former::open('/update_setup')
|
||||
->addClass('warn-on-exit')
|
||||
->autocomplete('off')
|
||||
@ -23,6 +23,7 @@
|
||||
@include('partials.system_settings')
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<center>
|
||||
{!! Button::success(trans('texts.save'))->submit()->large()->appendIcon(Icon::create('floppy-disk')) !!}
|
||||
|
@ -14,7 +14,7 @@
|
||||
}
|
||||
</style>
|
||||
|
||||
<script src="https://maps.googleapis.com/maps/api/js"></script>
|
||||
<script src="https://maps.googleapis.com/maps/api/js?key={{ env('GOOGLE_MAPS_API_KEY') }}"></script>
|
||||
@endif
|
||||
@stop
|
||||
|
||||
|
@ -401,6 +401,7 @@
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a href="{{ URL::to(NINJA_WEB_URL) }}" class='navbar-brand' target="_blank">
|
||||
{{-- Per our license, please do not remove or modify this link. --}}
|
||||
<img src="{{ asset('images/invoiceninja-logo.png') }}" style="height:20px;width:auto;padding-right:10px"/>
|
||||
</a>
|
||||
</div>
|
||||
|
@ -196,10 +196,10 @@
|
||||
<th style="min-width:32px;" class="hide-border"></th>
|
||||
<th style="min-width:160px">{{ $invoiceLabels['item'] }}</th>
|
||||
<th style="width:100%">{{ $invoiceLabels['description'] }}</th>
|
||||
@if ($account->custom_invoice_item_label1)
|
||||
@if ($account->showCustomField('custom_invoice_item_label1'))
|
||||
<th style="min-width:120px">{{ $account->custom_invoice_item_label1 }}</th>
|
||||
@endif
|
||||
@if ($account->custom_invoice_item_label2)
|
||||
@if ($account->showCustomField('custom_invoice_item_label2'))
|
||||
<th style="min-width:120px">{{ $account->custom_invoice_item_label2 }}</th>
|
||||
@endif
|
||||
<th style="min-width:120px" data-bind="text: costLabel">{{ $invoiceLabels['unit_cost'] }}</th>
|
||||
@ -224,12 +224,12 @@
|
||||
<input type="text" data-bind="value: task_public_id, attr: {name: 'invoice_items[' + $index() + '][task_public_id]'}" style="display: none"/>
|
||||
<input type="text" data-bind="value: expense_public_id, attr: {name: 'invoice_items[' + $index() + '][expense_public_id]'}" style="display: none"/>
|
||||
</td>
|
||||
@if ($account->custom_invoice_item_label1)
|
||||
@if ($account->showCustomField('custom_invoice_item_label1'))
|
||||
<td>
|
||||
<input data-bind="value: custom_value1, valueUpdate: 'afterkeydown', attr: {name: 'invoice_items[' + $index() + '][custom_value1]'}" class="form-control invoice-item"/>
|
||||
</td>
|
||||
@endif
|
||||
@if ($account->custom_invoice_item_label2)
|
||||
@if ($account->showCustomField('custom_invoice_item_label2'))
|
||||
<td>
|
||||
<input data-bind="value: custom_value2, valueUpdate: 'afterkeydown', attr: {name: 'invoice_items[' + $index() + '][custom_value2]'}" class="form-control invoice-item"/>
|
||||
</td>
|
||||
@ -262,7 +262,7 @@
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td class="hide-border"/>
|
||||
<td class="hide-border" colspan="{{ 2 + ($account->custom_invoice_item_label1 ? 1 : 0) + ($account->custom_invoice_item_label2 ? 1 : 0) }}" rowspan="6" style="vertical-align:top">
|
||||
<td class="hide-border" colspan="{{ 2 + ($account->showCustomField('custom_invoice_item_label1') ? 1 : 0) + ($account->showCustomField('custom_invoice_item_label2') ? 1 : 0) }}" rowspan="6" style="vertical-align:top">
|
||||
<br/>
|
||||
<div role="tabpanel">
|
||||
|
||||
@ -385,11 +385,18 @@
|
||||
</tr>
|
||||
@endif
|
||||
|
||||
<tr style="font-size:1.05em">
|
||||
<tr data-bind="style: { 'font-weight': partial() ? 'normal' : 'bold', 'font-size': partial() ? '1em' : '1.05em' }">
|
||||
<td class="hide-border" colspan="3"/>
|
||||
<td class="hide-border" style="display:none" data-bind="visible: $root.invoice_item_taxes.show"/>
|
||||
<td class="hide-border" colspan="{{ $account->hide_quantity ? 1 : 2 }}"><b>{{ trans($entityType == ENTITY_INVOICE ? 'texts.balance_due' : 'texts.total') }}</b></td>
|
||||
<td class="hide-border" style="text-align: right"><span data-bind="text: totals.total"></span></td>
|
||||
<td class="hide-border" data-bind="css: {'hide-border': !partial()}" colspan="{{ $account->hide_quantity ? 1 : 2 }}">{{ $entityType == ENTITY_INVOICE ? $invoiceLabels['balance_due'] : trans('texts.total') }}</td>
|
||||
<td class="hide-border" data-bind="css: {'hide-border': !partial()}" style="text-align: right"><span data-bind="text: totals.total"></span></td>
|
||||
</tr>
|
||||
|
||||
<tr style="font-size:1.05em; display:none; font-weight:bold" data-bind="visible: partial">
|
||||
<td class="hide-border" colspan="3"/>
|
||||
<td class="hide-border" style="display:none" data-bind="visible: $root.invoice_item_taxes.show"/>
|
||||
<td class="hide-border" colspan="{{ $account->hide_quantity ? 1 : 2 }}">{{ $invoiceLabels['partial_due'] }}</td>
|
||||
<td class="hide-border" style="text-align: right"><span data-bind="text: totals.partial"></span></td>
|
||||
</tr>
|
||||
|
||||
</tfoot>
|
||||
|
@ -512,7 +512,11 @@ function InvoiceModel(data) {
|
||||
});
|
||||
|
||||
self.totals.total = ko.computed(function() {
|
||||
return self.formatMoney(self.partial() ? self.partial() : self.totals.rawTotal());
|
||||
return self.formatMoney(self.totals.rawTotal());
|
||||
});
|
||||
|
||||
self.totals.partial = ko.computed(function() {
|
||||
return self.formatMoney(self.partial());
|
||||
});
|
||||
|
||||
self.onDragged = function(item) {
|
||||
|
@ -70,7 +70,7 @@
|
||||
</button>
|
||||
@if (!isset($hideLogo) || !$hideLogo)
|
||||
{{-- Per our license, please do not remove or modify this link. --}}
|
||||
<a class="navbar-brand" href="{{ URL::to(NINJA_WEB_URL) }}" target="_blank"><img src="{{ asset('images/invoiceninja-logo.png') }}"></a>
|
||||
<a class="navbar-brand" href="{{ URL::to(NINJA_WEB_URL) }}" target="_blank"><img src="{{ asset('images/invoiceninja-logo.png') }}" style="height:20px"></a>
|
||||
@endif
|
||||
</div>
|
||||
<div id="navbar" class="collapse navbar-collapse">
|
||||
|
@ -35,7 +35,7 @@
|
||||
</div>
|
||||
-->
|
||||
|
||||
<h2>{{ $title }}</h2>
|
||||
<h3>{{ $title }}</h3>
|
||||
|
||||
{!! Datatable::table()
|
||||
->addColumn($columns)
|
||||
|
@ -16,13 +16,24 @@
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">{!! $title !!}</h3>
|
||||
<h3 class="panel-title">{!! trans('texts.user_details') !!}</h3>
|
||||
</div>
|
||||
<div class="panel-body form-padding-right">
|
||||
|
||||
{!! Former::text('first_name') !!}
|
||||
{!! Former::text('last_name') !!}
|
||||
{!! Former::text('email') !!}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">{!! trans('texts.permissions') !!}</h3>
|
||||
</div>
|
||||
<div class="panel-body form-padding-right">
|
||||
|
||||
|
||||
{!! Former::checkbox('is_admin')
|
||||
->label(' ')
|
||||
->text(trans('texts.administrator'))
|
||||
@ -31,17 +42,20 @@
|
||||
->value('create_all')
|
||||
->label(' ')
|
||||
->id('permissions_create_all')
|
||||
->text(trans('texts.user_create_all')) !!}
|
||||
->text(trans('texts.user_create_all'))
|
||||
->help(trans('texts.create_all_help')) !!}
|
||||
{!! Former::checkbox('permissions[view_all]')
|
||||
->value('view_all')
|
||||
->label(' ')
|
||||
->id('permissions_view_all')
|
||||
->text(trans('texts.user_view_all')) !!}
|
||||
->text(trans('texts.user_view_all'))
|
||||
->help(trans('texts.view_all_help')) !!}
|
||||
{!! Former::checkbox('permissions[edit_all]')
|
||||
->value('edit_all')
|
||||
->label(' ')
|
||||
->id('permissions_edit_all')
|
||||
->text(trans('texts.user_edit_all')) !!}
|
||||
->text(trans('texts.user_edit_all'))
|
||||
->help(trans('texts.edit_all_help')) !!}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
2
resources/views/vendors/show.blade.php
vendored
2
resources/views/vendors/show.blade.php
vendored
@ -14,7 +14,7 @@
|
||||
}
|
||||
</style>
|
||||
|
||||
<script src="https://maps.googleapis.com/maps/api/js"></script>
|
||||
<script src="https://maps.googleapis.com/maps/api/js?key={{ env('GOOGLE_MAPS_API_KEY') }}"></script>
|
||||
@endif
|
||||
@stop
|
||||
|
||||
|
@ -80,9 +80,9 @@ $I->amOnPage('/settings/user_management');
|
||||
$I->see('Add User');
|
||||
|
||||
//try to logout
|
||||
$I->click('#myAccountButton');
|
||||
$I->see('Log Out');
|
||||
$I->click('Log Out');
|
||||
//$I->click('#myAccountButton');
|
||||
//$I->see('Log Out');
|
||||
//$I->click('Log Out');
|
||||
|
||||
// Miscellaneous pages
|
||||
$I->amOnPage('/terms');
|
||||
|
@ -67,6 +67,7 @@ class OnlinePaymentCest
|
||||
$I->amOnPage('/view/' . $invitationKey);
|
||||
$I->click('Pay Now');
|
||||
|
||||
/*
|
||||
$I->fillField(['name' => 'first_name'], $this->faker->firstName);
|
||||
$I->fillField(['name' => 'last_name'], $this->faker->lastName);
|
||||
$I->fillField(['name' => 'address1'], $this->faker->streetAddress);
|
||||
@ -75,6 +76,8 @@ class OnlinePaymentCest
|
||||
$I->fillField(['name' => 'state'], $this->faker->state);
|
||||
$I->fillField(['name' => 'postal_code'], $this->faker->postcode);
|
||||
$I->selectDropdown($I, 'United States', '.country-select .dropdown-toggle');
|
||||
*/
|
||||
|
||||
$I->fillField('#card_number', '4242424242424242');
|
||||
$I->fillField('#cvv', '1234');
|
||||
$I->selectOption('#expiration_month', 12);
|
||||
|
@ -30,8 +30,8 @@ class TaxRatesCest
|
||||
$total += round($itemCost * $itemTaxRate / 100, 2);
|
||||
$total += round($itemCost * $invoiceTaxRate / 100, 2);
|
||||
|
||||
$itemTaxRate = number_format($itemTaxRate, 2);
|
||||
$invoiceTaxRate = number_format($invoiceTaxRate, 2);
|
||||
$itemTaxRate = number_format($itemTaxRate, 3);
|
||||
$invoiceTaxRate = number_format($invoiceTaxRate, 3);
|
||||
|
||||
// create tax rates
|
||||
$I->amOnPage('/tax_rates/create');
|
||||
@ -72,7 +72,7 @@ class TaxRatesCest
|
||||
$I->selectDropdown($I, $clientEmail, '.client_select .dropdown-toggle');
|
||||
$I->fillField('table.invoice-table tbody tr:nth-child(1) #product_key', $productKey);
|
||||
$I->click('table.invoice-table tbody tr:nth-child(1) .tt-selectable');
|
||||
$I->selectOption('#taxRateSelect', $invoiceTaxName . ' ' . $invoiceTaxRate . '%');
|
||||
$I->selectOption('#taxRateSelect', $invoiceTaxName . ' ' . floatval($invoiceTaxRate) . '%');
|
||||
$I->wait(2);
|
||||
|
||||
// check total is right before saving
|
||||
|
Loading…
x
Reference in New Issue
Block a user