Merge remote-tracking branch 'upstream/develop' into 2016-09-payments-changes

This commit is contained in:
Joshua Dwire 2016-09-14 14:35:03 -04:00
commit 989b514788
78 changed files with 15090 additions and 3373 deletions

View File

@ -12,9 +12,9 @@
All Pro and Enterprise features from our hosted app are included in both the [self-host zip](https://www.invoiceninja.com/self-host/) and the GitHub repository. All Pro and Enterprise features from our hosted app are included in both the [self-host zip](https://www.invoiceninja.com/self-host/) and the GitHub repository.
[![Invoice Ninja - Overview](https://app.invoiceninja.com/youtube.png)](https://www.youtube.com/watch?v=xHGKvadapbA) Our [iPhone app](https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=1072566815&mt=8) is now available, our Android app is up next...
We're often asked to recommend Laravel/PHP developers to help setup our app and make small adjustments, email us at contact@invoiceninja.com if you're interested in taking on the work. [![Invoice Ninja - Overview](https://app.invoiceninja.com/youtube.png)](https://www.youtube.com/watch?v=xHGKvadapbA)
## Affiliates Programs ## Affiliates Programs
* Referral program (we pay you): $100 per signup paid over 3 years - [Learn more](https://www.invoiceninja.com/referral-program/) * Referral program (we pay you): $100 per signup paid over 3 years - [Learn more](https://www.invoiceninja.com/referral-program/)

View File

@ -6,6 +6,7 @@ use App\Ninja\Repositories\AccountRepository;
use App\Services\PaymentService; use App\Services\PaymentService;
use App\Models\Invoice; use App\Models\Invoice;
use App\Models\Account; use App\Models\Account;
use Exception;
/** /**
* Class ChargeRenewalInvoices * Class ChargeRenewalInvoices
@ -80,8 +81,12 @@ class ChargeRenewalInvoices extends Command
continue; continue;
} }
try {
$this->info("Charging invoice {$invoice->invoice_number}"); $this->info("Charging invoice {$invoice->invoice_number}");
$this->paymentService->autoBillInvoice($invoice); $this->paymentService->autoBillInvoice($invoice);
} catch (Exception $exception) {
$this->info('Error: ' . $exception->getMessage());
}
} }
$this->info('Done'); $this->info('Done');

View File

@ -135,7 +135,8 @@ class CreateTestData extends Command
$data = [ $data = [
'invoice_id' => $invoice->id, 'invoice_id' => $invoice->id,
'client_id' => $client->id, 'client_id' => $client->id,
'amount' => $this->faker->randomFloat(2, 0, $invoice->amount) 'amount' => $this->faker->randomFloat(2, 0, $invoice->amount),
'payment_date_sql' => date_create()->modify(rand(-100, 100) . ' days')->format('Y-m-d'),
]; ];
$payment = $this->paymentRepo->save($data); $payment = $this->paymentRepo->save($data);

View File

@ -155,18 +155,6 @@ class ClientPortalController extends BaseController
return View::make('invoices.view', $data); return View::make('invoices.view', $data);
} }
public function contactIndex($contactKey) {
if (!$contact = Contact::where('contact_key', '=', $contactKey)->first()) {
return $this->returnError();
}
$client = $contact->client;
Session::put('contact_key', $contactKey);// track current contact
return redirect()->to($client->account->enable_client_portal_dashboard?'/client/dashboard':'/client/invoices/');
}
private function getPaymentTypes($account, $client, $invitation) private function getPaymentTypes($account, $client, $invitation)
{ {
$links = []; $links = [];
@ -201,9 +189,14 @@ class ClientPortalController extends BaseController
return $pdfString; return $pdfString;
} }
public function dashboard() public function dashboard($contactKey = false)
{ {
if (!$contact = $this->getContact()) { if ($contactKey) {
if (!$contact = Contact::where('contact_key', '=', $contactKey)->first()) {
return $this->returnError();
}
Session::put('contact_key', $contactKey);// track current contact
} else if (!$contact = $this->getContact()) {
return $this->returnError(); return $this->returnError();
} }
@ -212,8 +205,10 @@ class ClientPortalController extends BaseController
$color = $account->primary_color ? $account->primary_color : '#0b4d78'; $color = $account->primary_color ? $account->primary_color : '#0b4d78';
$customer = false; $customer = false;
if (!$account->enable_client_portal || !$account->enable_client_portal_dashboard) { if (!$account->enable_client_portal) {
return $this->returnError(); return $this->returnError();
} elseif (!$account->enable_client_portal_dashboard) {
return redirect()->to('/client/invoices/');
} }
if ($paymentDriver = $account->paymentDriver(false, GATEWAY_TYPE_TOKEN)) { if ($paymentDriver = $account->paymentDriver(false, GATEWAY_TYPE_TOKEN)) {

View File

@ -46,7 +46,7 @@ class DashboardApiController extends BaseAPIController
'paidToDateCurrency' => $paidToDate[0]->currency_id ? $paidToDate[0]->currency_id : 0, 'paidToDateCurrency' => $paidToDate[0]->currency_id ? $paidToDate[0]->currency_id : 0,
'balances' => $balances[0]->value ? $balances[0]->value : 0, 'balances' => $balances[0]->value ? $balances[0]->value : 0,
'balancesCurrency' => $balances[0]->currency_id ? $balances[0]->currency_id : 0, 'balancesCurrency' => $balances[0]->currency_id ? $balances[0]->currency_id : 0,
'averageInvoice' => $averageInvoice[0]->invoice_avg ? $averageInvoice[0]->invoice_avg : 0, 'averageInvoice' => (count($averageInvoice) && $averageInvoice[0]->invoice_avg) ? $averageInvoice[0]->invoice_avg : 0,
'averageInvoiceCurrency' => $averageInvoice[0]->currency_id ? $averageInvoice[0]->currency_id : 0, 'averageInvoiceCurrency' => $averageInvoice[0]->currency_id ? $averageInvoice[0]->currency_id : 0,
'invoicesSent' => $metrics ? $metrics->invoices_sent : 0, 'invoicesSent' => $metrics ? $metrics->invoices_sent : 0,
'activeClients' => $metrics ? $metrics->active_clients : 0, 'activeClients' => $metrics ? $metrics->active_clients : 0,

View File

@ -4,6 +4,8 @@ use stdClass;
use Auth; use Auth;
use DB; use DB;
use View; use View;
use Utils;
use App\Models\Client;
use App\Models\Invoice; use App\Models\Invoice;
use App\Models\Payment; use App\Models\Payment;
use App\Ninja\Repositories\DashboardRepository; use App\Ninja\Repositories\DashboardRepository;
@ -26,7 +28,8 @@ class DashboardController extends BaseController
$user = Auth::user(); $user = Auth::user();
$viewAll = $user->hasPermission('view_all'); $viewAll = $user->hasPermission('view_all');
$userId = $user->id; $userId = $user->id;
$accountId = $user->account->id; $account = $user->account;
$accountId = $account->id;
$dashboardRepo = $this->dashboardRepo; $dashboardRepo = $this->dashboardRepo;
$metrics = $dashboardRepo->totals($accountId, $userId, $viewAll); $metrics = $dashboardRepo->totals($accountId, $userId, $viewAll);
@ -37,7 +40,10 @@ class DashboardController extends BaseController
$pastDue = $dashboardRepo->pastDue($accountId, $userId, $viewAll); $pastDue = $dashboardRepo->pastDue($accountId, $userId, $viewAll);
$upcoming = $dashboardRepo->upcoming($accountId, $userId, $viewAll); $upcoming = $dashboardRepo->upcoming($accountId, $userId, $viewAll);
$payments = $dashboardRepo->payments($accountId, $userId, $viewAll); $payments = $dashboardRepo->payments($accountId, $userId, $viewAll);
$expenses = $dashboardRepo->expenses($accountId, $userId, $viewAll);
$tasks = $dashboardRepo->tasks($accountId, $userId, $viewAll);
// check if the account has quotes
$hasQuotes = false; $hasQuotes = false;
foreach ([$upcoming, $pastDue] as $data) { foreach ([$upcoming, $pastDue] as $data) {
foreach ($data as $invoice) { foreach ($data as $invoice) {
@ -47,6 +53,26 @@ class DashboardController extends BaseController
} }
} }
// check if the account has multiple curencies
$currencyIds = $account->currency_id ? [$account->currency_id] : [DEFAULT_CURRENCY];
$data = Client::scope()
->withArchived()
->distinct()
->get(['currency_id'])
->toArray();
array_map(function ($item) use (&$currencyIds) {
$currencyId = intval($item['currency_id']);
if ($currencyId && ! in_array($currencyId, $currencyIds)) {
$currencyIds[] = $currencyId;
}
}, $data);
$currencies = [];
foreach ($currencyIds as $currencyId) {
$currencies[$currencyId] = Utils::getFromCache($currencyId, 'currencies')->code;
}
$data = [ $data = [
'account' => $user->account, 'account' => $user->account,
'paidToDate' => $paidToDate, 'paidToDate' => $paidToDate,
@ -60,8 +86,20 @@ class DashboardController extends BaseController
'payments' => $payments, 'payments' => $payments,
'title' => trans('texts.dashboard'), 'title' => trans('texts.dashboard'),
'hasQuotes' => $hasQuotes, 'hasQuotes' => $hasQuotes,
'showBreadcrumbs' => false,
'currencies' => $currencies,
'expenses' => $expenses,
'tasks' => $tasks,
]; ];
return View::make('dashboard', $data); return View::make('dashboard', $data);
} }
public function chartData($groupBy, $startDate, $endDate, $currencyCode, $includeExpenses)
{
$includeExpenses = filter_var($includeExpenses, FILTER_VALIDATE_BOOLEAN);
$data = $this->dashboardRepo->chartData(Auth::user()->account, $groupBy, $startDate, $endDate, $currencyCode, $includeExpenses);
return json_encode($data);
}
} }

View File

@ -6,6 +6,7 @@ use Utils;
use View; use View;
use Auth; use Auth;
use URL; use URL;
use Crawler;
use Exception; use Exception;
use Validator; use Validator;
use App\Models\Invitation; use App\Models\Invitation;
@ -241,6 +242,10 @@ class OnlinePaymentController extends BaseController
public function handleBuyNow(ClientRepository $clientRepo, InvoiceService $invoiceService, $gatewayTypeAlias = false) public function handleBuyNow(ClientRepository $clientRepo, InvoiceService $invoiceService, $gatewayTypeAlias = false)
{ {
if (Crawler::isCrawler()) {
return redirect()->to(NINJA_WEB_URL, 301);
}
$account = Account::whereAccountKey(Input::get('account_key'))->first(); $account = Account::whereAccountKey(Input::get('account_key'))->first();
$redirectUrl = Input::get('redirect_url', URL::previous()); $redirectUrl = Input::get('redirect_url', URL::previous());
@ -274,6 +279,8 @@ class OnlinePaymentController extends BaseController
$data = [ $data = [
'client_id' => $client->id, 'client_id' => $client->id,
'tax_rate1' => $account->default_tax_rate ? $account->default_tax_rate->rate : 0,
'tax_name1' => $account->default_tax_rate ? $account->default_tax_rate->name : '',
'invoice_items' => [[ 'invoice_items' => [[
'product_key' => $product->product_key, 'product_key' => $product->product_key,
'notes' => $product->notes, 'notes' => $product->notes,

View File

@ -5,8 +5,6 @@ use Config;
use Input; use Input;
use Utils; use Utils;
use DB; use DB;
use DateInterval;
use DatePeriod;
use Session; use Session;
use View; use View;
use App\Models\Account; use App\Models\Account;
@ -56,36 +54,17 @@ class ReportController extends BaseController
$action = Input::get('action'); $action = Input::get('action');
if (Input::all()) { if (Input::all()) {
$groupBy = Input::get('group_by');
$chartType = Input::get('chart_type');
$reportType = Input::get('report_type'); $reportType = Input::get('report_type');
$dateField = Input::get('date_field'); $dateField = Input::get('date_field');
$startDate = Utils::toSqlDate(Input::get('start_date'), false); $startDate = Utils::toSqlDate(Input::get('start_date'), false);
$endDate = Utils::toSqlDate(Input::get('end_date'), false); $endDate = Utils::toSqlDate(Input::get('end_date'), false);
$enableReport = boolval(Input::get('enable_report'));
$enableChart = boolval(Input::get('enable_chart'));
} else { } else {
$groupBy = 'MONTH';
$chartType = 'Bar';
$reportType = ENTITY_INVOICE; $reportType = ENTITY_INVOICE;
$dateField = FILTER_INVOICE_DATE; $dateField = FILTER_INVOICE_DATE;
$startDate = Utils::today(false)->modify('-3 month'); $startDate = Utils::today(false)->modify('-3 month');
$endDate = Utils::today(false); $endDate = Utils::today(false);
$enableReport = true;
$enableChart = true;
} }
$dateTypes = [
'DAYOFYEAR' => 'Daily',
'WEEK' => 'Weekly',
'MONTH' => 'Monthly',
];
$chartTypes = [
'Bar' => 'Bar',
'Line' => 'Line',
];
$reportTypes = [ $reportTypes = [
ENTITY_CLIENT => trans('texts.client'), ENTITY_CLIENT => trans('texts.client'),
ENTITY_INVOICE => trans('texts.invoice'), ENTITY_INVOICE => trans('texts.invoice'),
@ -96,148 +75,29 @@ class ReportController extends BaseController
]; ];
$params = [ $params = [
'dateTypes' => $dateTypes,
'chartTypes' => $chartTypes,
'chartType' => $chartType,
'startDate' => $startDate->format(Session::get(SESSION_DATE_FORMAT)), 'startDate' => $startDate->format(Session::get(SESSION_DATE_FORMAT)),
'endDate' => $endDate->format(Session::get(SESSION_DATE_FORMAT)), 'endDate' => $endDate->format(Session::get(SESSION_DATE_FORMAT)),
'groupBy' => $groupBy,
'reportTypes' => $reportTypes, 'reportTypes' => $reportTypes,
'reportType' => $reportType, 'reportType' => $reportType,
'enableChart' => $enableChart,
'enableReport' => $enableReport,
'title' => trans('texts.charts_and_reports'), 'title' => trans('texts.charts_and_reports'),
]; ];
if (Auth::user()->account->hasFeature(FEATURE_REPORTS)) { if (Auth::user()->account->hasFeature(FEATURE_REPORTS)) {
if ($enableReport) {
$isExport = $action == 'export'; $isExport = $action == 'export';
$params = array_merge($params, self::generateReport($reportType, $startDate, $endDate, $dateField, $isExport)); $params = array_merge($params, self::generateReport($reportType, $startDate, $endDate, $dateField, $isExport));
if ($isExport) { if ($isExport) {
self::export($reportType, $params['displayData'], $params['columns'], $params['reportTotals']); self::export($reportType, $params['displayData'], $params['columns'], $params['reportTotals']);
} }
}
if ($enableChart) {
$params = array_merge($params, self::generateChart($groupBy, $startDate, $endDate));
}
} else { } else {
$params['columns'] = []; $params['columns'] = [];
$params['displayData'] = []; $params['displayData'] = [];
$params['reportTotals'] = []; $params['reportTotals'] = [];
$params['labels'] = [];
$params['datasets'] = [];
$params['scaleStepWidth'] = 100;
} }
return View::make('reports.chart_builder', $params); return View::make('reports.chart_builder', $params);
} }
/**
* @param $groupBy
* @param $startDate
* @param $endDate
* @return array
*/
private function generateChart($groupBy, $startDate, $endDate)
{
$width = 10;
$datasets = [];
$labels = [];
$maxTotals = 0;
foreach ([ENTITY_INVOICE, ENTITY_PAYMENT, ENTITY_CREDIT] as $entityType) {
// SQLite does not support the YEAR(), MONTH(), WEEK() and similar functions.
// Let's see if SQLite is being used.
if (Config::get('database.connections.'.Config::get('database.default').'.driver') == 'sqlite') {
// Replace the unsupported function with it's date format counterpart
switch ($groupBy) {
case 'MONTH':
$dateFormat = '%m'; // returns 01-12
break;
case 'WEEK':
$dateFormat = '%W'; // returns 00-53
break;
case 'DAYOFYEAR':
$dateFormat = '%j'; // returns 001-366
break;
default:
$dateFormat = '%m'; // MONTH by default
break;
}
// Concatenate the year and the chosen timeframe (Month, Week or Day)
$timeframe = 'strftime("%Y", '.$entityType.'_date) || strftime("'.$dateFormat.'", '.$entityType.'_date)';
} else {
// Supported by Laravel's other DBMS drivers (MySQL, MSSQL and PostgreSQL)
$timeframe = 'concat(YEAR('.$entityType.'_date), '.$groupBy.'('.$entityType.'_date))';
}
$records = DB::table($entityType.'s')
->select(DB::raw('sum('.$entityType.'s.amount) as total, '.$timeframe.' as '.$groupBy))
->join('clients', 'clients.id', '=', $entityType.'s.client_id')
->where('clients.is_deleted', '=', false)
->where($entityType.'s.account_id', '=', Auth::user()->account_id)
->where($entityType.'s.is_deleted', '=', false)
->where($entityType.'s.'.$entityType.'_date', '>=', $startDate->format('Y-m-d'))
->where($entityType.'s.'.$entityType.'_date', '<=', $endDate->format('Y-m-d'))
->groupBy($groupBy);
if ($entityType == ENTITY_INVOICE) {
$records->where('invoice_type_id', '=', INVOICE_TYPE_STANDARD)
->where('is_recurring', '=', false);
} elseif ($entityType == ENTITY_PAYMENT) {
$records->join('invoices', 'invoices.id', '=', 'payments.invoice_id')
->where('invoices.is_deleted', '=', false)
->whereNotIn('payment_status_id', [PAYMENT_STATUS_VOIDED, PAYMENT_STATUS_FAILED]);
}
$totals = $records->lists('total');
$dates = $records->lists($groupBy);
$data = array_combine($dates, $totals);
$padding = $groupBy == 'DAYOFYEAR' ? 'day' : ($groupBy == 'WEEK' ? 'week' : 'month');
$endDate->modify('+1 '.$padding);
$interval = new DateInterval('P1'.substr($groupBy, 0, 1));
$period = new DatePeriod($startDate, $interval, $endDate);
$endDate->modify('-1 '.$padding);
$totals = [];
foreach ($period as $d) {
$dateFormat = $groupBy == 'DAYOFYEAR' ? 'z' : ($groupBy == 'WEEK' ? 'W' : 'n');
// MySQL returns 1-366 for DAYOFYEAR, whereas PHP returns 0-365
$date = $groupBy == 'DAYOFYEAR' ? $d->format('Y').($d->format($dateFormat) + 1) : $d->format('Y'.$dateFormat);
$totals[] = isset($data[$date]) ? $data[$date] : 0;
if ($entityType == ENTITY_INVOICE) {
$labelFormat = $groupBy == 'DAYOFYEAR' ? 'j' : ($groupBy == 'WEEK' ? 'W' : 'F');
$label = $d->format($labelFormat);
$labels[] = $label;
}
}
$max = max($totals);
if ($max > 0) {
$datasets[] = [
'totals' => $totals,
'colors' => $entityType == ENTITY_INVOICE ? '78,205,196' : ($entityType == ENTITY_CREDIT ? '199,244,100' : '255,107,107'),
];
$maxTotals = max($max, $maxTotals);
}
}
$width = (ceil($maxTotals / 100) * 100) / 10;
$width = max($width, 10);
return [
'datasets' => $datasets,
'scaleStepWidth' => $width,
'labels' => $labels,
];
}
/** /**
* @param $reportType * @param $reportType
* @param $startDate * @param $startDate

View File

@ -18,9 +18,11 @@ class Kernel extends HttpKernel {
'App\Http\Middleware\VerifyCsrfToken', 'App\Http\Middleware\VerifyCsrfToken',
'App\Http\Middleware\DuplicateSubmissionCheck', 'App\Http\Middleware\DuplicateSubmissionCheck',
'App\Http\Middleware\QueryLogging', 'App\Http\Middleware\QueryLogging',
'App\Http\Middleware\SessionDataCheckMiddleware',
'App\Http\Middleware\StartupCheck', 'App\Http\Middleware\StartupCheck',
]; ];
/** /**
* The application's route middleware. * The application's route middleware.
* *

View File

@ -22,10 +22,6 @@ class DuplicateSubmissionCheck
$path = $request->path(); $path = $request->path();
if (strpos($path, 'charts_and_reports') !== false) {
return $next($request);
}
if (in_array($request->method(), ['POST', 'PUT', 'DELETE'])) { if (in_array($request->method(), ['POST', 'PUT', 'DELETE'])) {
$lastPage = session(SESSION_LAST_REQUEST_PAGE); $lastPage = session(SESSION_LAST_REQUEST_PAGE);
$lastTime = session(SESSION_LAST_REQUEST_TIME); $lastTime = session(SESSION_LAST_REQUEST_TIME);

View File

@ -0,0 +1,31 @@
<?php namespace App\Http\Middleware;
use Closure;
use Auth;
use Session;
// https://arjunphp.com/laravel5-inactivity-idle-session-logout/
class SessionDataCheckMiddleware {
/**
* Check session data, if role is not valid logout the request
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$bag = Session::getMetadataBag();
$max = env('IDLE_TIMEOUT_MINUTES', 6 * 60) * 60; // minute to second conversion
$elapsed = time() - $bag->getLastUsed();
if ( ! $bag || $elapsed > $max) {
$request->session()->flush();
Auth::logout();
$request->session()->flash('warning', trans('texts.inactive_logout'));
}
return $next($request);
}
}

View File

@ -14,6 +14,7 @@ use Schema;
use App\Models\Language; use App\Models\Language;
use App\Models\InvoiceDesign; use App\Models\InvoiceDesign;
use App\Events\UserSettingsChanged; use App\Events\UserSettingsChanged;
use App\Libraries\CurlUtils;
/** /**
* Class StartupCheck * Class StartupCheck
@ -71,7 +72,7 @@ class StartupCheck
if (Utils::isNinja()) { if (Utils::isNinja()) {
$data = Utils::getNewsFeedResponse(); $data = Utils::getNewsFeedResponse();
} else { } else {
$file = @file_get_contents(NINJA_APP_URL.'/news_feed/'.Utils::getUserType().'/'.NINJA_VERSION); $file = @CurlUtils::get(NINJA_APP_URL.'/news_feed/'.Utils::getUserType().'/'.NINJA_VERSION);
$data = @json_decode($file); $data = @json_decode($file);
} }
if ($data) { if ($data) {
@ -128,7 +129,7 @@ class StartupCheck
$productId = Input::get('product_id'); $productId = Input::get('product_id');
$url = (Utils::isNinjaDev() ? SITE_URL : NINJA_APP_URL) . "/claim_license?license_key={$licenseKey}&product_id={$productId}&get_date=true"; $url = (Utils::isNinjaDev() ? SITE_URL : NINJA_APP_URL) . "/claim_license?license_key={$licenseKey}&product_id={$productId}&get_date=true";
$data = trim(file_get_contents($url)); $data = trim(CurlUtils::get($url));
if ($productId == PRODUCT_INVOICE_DESIGNS) { if ($productId == PRODUCT_INVOICE_DESIGNS) {
if ($data = json_decode($data)) { if ($data = json_decode($data)) {

View File

@ -57,8 +57,7 @@ Route::group(['middleware' => 'auth:client'], function() {
Route::post('client/invoices/auto_bill', 'ClientPortalController@setAutoBill'); Route::post('client/invoices/auto_bill', 'ClientPortalController@setAutoBill');
Route::get('client/documents', 'ClientPortalController@documentIndex'); Route::get('client/documents', 'ClientPortalController@documentIndex');
Route::get('client/payments', 'ClientPortalController@paymentIndex'); Route::get('client/payments', 'ClientPortalController@paymentIndex');
Route::get('client/dashboard', 'ClientPortalController@dashboard'); Route::get('client/dashboard/{contact_key?}', 'ClientPortalController@dashboard');
Route::get('client/dashboard/{contact_key}', 'ClientPortalController@contactIndex');
Route::get('client/documents/js/{documents}/{filename}', 'ClientPortalController@getDocumentVFSJS'); Route::get('client/documents/js/{documents}/{filename}', 'ClientPortalController@getDocumentVFSJS');
Route::get('client/documents/{invitation_key}/{documents}/{filename?}', 'ClientPortalController@getDocument'); Route::get('client/documents/{invitation_key}/{documents}/{filename?}', 'ClientPortalController@getDocument');
Route::get('client/documents/{invitation_key}/{filename?}', 'ClientPortalController@getInvoiceDocumentsZip'); Route::get('client/documents/{invitation_key}/{filename?}', 'ClientPortalController@getInvoiceDocumentsZip');
@ -123,6 +122,7 @@ if (Utils::isReseller()) {
Route::group(['middleware' => 'auth:user'], function() { Route::group(['middleware' => 'auth:user'], function() {
Route::get('dashboard', 'DashboardController@index'); Route::get('dashboard', 'DashboardController@index');
Route::get('dashboard_chart_data/{group_by}/{start_date}/{end_date}/{currency_id}/{include_expenses}', 'DashboardController@chartData');
Route::get('view_archive/{entity_type}/{visible}', 'AccountController@setTrashVisible'); Route::get('view_archive/{entity_type}/{visible}', 'AccountController@setTrashVisible');
Route::get('hide_message', 'HomeController@hideMessage'); Route::get('hide_message', 'HomeController@hideMessage');
Route::get('force_inline_pdf', 'UserController@forcePDFJS'); Route::get('force_inline_pdf', 'UserController@forcePDFJS');
@ -239,8 +239,8 @@ Route::group([
Route::get('settings/email_preview', 'AccountController@previewEmail'); Route::get('settings/email_preview', 'AccountController@previewEmail');
Route::get('company/{section}/{subSection?}', 'AccountController@redirectLegacy'); Route::get('company/{section}/{subSection?}', 'AccountController@redirectLegacy');
Route::get('settings/data_visualizations', 'ReportController@d3'); Route::get('settings/data_visualizations', 'ReportController@d3');
Route::get('settings/charts_and_reports', 'ReportController@showReports'); Route::get('settings/reports', 'ReportController@showReports');
Route::post('settings/charts_and_reports', 'ReportController@showReports'); Route::post('settings/reports', 'ReportController@showReports');
Route::post('settings/change_plan', 'AccountController@changePlan'); Route::post('settings/change_plan', 'AccountController@changePlan');
Route::post('settings/cancel_account', 'AccountController@cancelAccount'); Route::post('settings/cancel_account', 'AccountController@cancelAccount');
@ -412,7 +412,7 @@ if (!defined('CONTACT_EMAIL')) {
define('ACCOUNT_INVOICE_DESIGN', 'invoice_design'); define('ACCOUNT_INVOICE_DESIGN', 'invoice_design');
define('ACCOUNT_CLIENT_PORTAL', 'client_portal'); define('ACCOUNT_CLIENT_PORTAL', 'client_portal');
define('ACCOUNT_EMAIL_SETTINGS', 'email_settings'); define('ACCOUNT_EMAIL_SETTINGS', 'email_settings');
define('ACCOUNT_CHARTS_AND_REPORTS', 'charts_and_reports'); define('ACCOUNT_REPORTS', 'reports');
define('ACCOUNT_USER_MANAGEMENT', 'user_management'); define('ACCOUNT_USER_MANAGEMENT', 'user_management');
define('ACCOUNT_DATA_VISUALIZATIONS', 'data_visualizations'); define('ACCOUNT_DATA_VISUALIZATIONS', 'data_visualizations');
define('ACCOUNT_TEMPLATES_AND_REMINDERS', 'templates_and_reminders'); define('ACCOUNT_TEMPLATES_AND_REMINDERS', 'templates_and_reminders');
@ -622,7 +622,7 @@ if (!defined('CONTACT_EMAIL')) {
define('NINJA_APP_URL', env('NINJA_APP_URL', 'https://app.invoiceninja.com')); define('NINJA_APP_URL', env('NINJA_APP_URL', 'https://app.invoiceninja.com'));
define('NINJA_DOCS_URL', env('NINJA_DOCS_URL', 'http://docs.invoiceninja.com/en/latest')); define('NINJA_DOCS_URL', env('NINJA_DOCS_URL', 'http://docs.invoiceninja.com/en/latest'));
define('NINJA_DATE', '2000-01-01'); define('NINJA_DATE', '2000-01-01');
define('NINJA_VERSION', '2.6.11' . env('NINJA_VERSION_SUFFIX')); define('NINJA_VERSION', '2.7.0' . env('NINJA_VERSION_SUFFIX'));
define('SOCIAL_LINK_FACEBOOK', env('SOCIAL_LINK_FACEBOOK', 'https://www.facebook.com/invoiceninja')); define('SOCIAL_LINK_FACEBOOK', env('SOCIAL_LINK_FACEBOOK', 'https://www.facebook.com/invoiceninja'));
define('SOCIAL_LINK_TWITTER', env('SOCIAL_LINK_TWITTER', 'https://twitter.com/invoiceninja')); define('SOCIAL_LINK_TWITTER', env('SOCIAL_LINK_TWITTER', 'https://twitter.com/invoiceninja'));

View File

@ -22,6 +22,8 @@ class HistoryUtils
$activityTypes = [ $activityTypes = [
ACTIVITY_TYPE_CREATE_CLIENT, ACTIVITY_TYPE_CREATE_CLIENT,
ACTIVITY_TYPE_CREATE_TASK,
ACTIVITY_TYPE_UPDATE_TASK,
ACTIVITY_TYPE_CREATE_INVOICE, ACTIVITY_TYPE_CREATE_INVOICE,
ACTIVITY_TYPE_UPDATE_INVOICE, ACTIVITY_TYPE_UPDATE_INVOICE,
ACTIVITY_TYPE_EMAIL_INVOICE, ACTIVITY_TYPE_EMAIL_INVOICE,
@ -33,7 +35,7 @@ class HistoryUtils
]; ];
$activities = Activity::scope() $activities = Activity::scope()
->with(['client.contacts', 'invoice']) ->with(['client.contacts', 'invoice', 'task'])
->whereIn('user_id', $userIds) ->whereIn('user_id', $userIds)
->whereIn('activity_type_id', $activityTypes) ->whereIn('activity_type_id', $activityTypes)
->orderBy('id', 'asc') ->orderBy('id', 'asc')
@ -44,6 +46,9 @@ class HistoryUtils
{ {
if ($activity->activity_type_id == ACTIVITY_TYPE_CREATE_CLIENT) { if ($activity->activity_type_id == ACTIVITY_TYPE_CREATE_CLIENT) {
$entity = $activity->client; $entity = $activity->client;
} else if ($activity->activity_type_id == ACTIVITY_TYPE_CREATE_TASK || $activity->activity_type_id == ACTIVITY_TYPE_UPDATE_TASK) {
$entity = $activity->task;
$entity->setRelation('client', $activity->client);
} else { } else {
$entity = $activity->invoice; $entity = $activity->invoice;
$entity->setRelation('client', $activity->client); $entity->setRelation('client', $activity->client);
@ -55,9 +60,16 @@ class HistoryUtils
public static function trackViewed(EntityModel $entity) public static function trackViewed(EntityModel $entity)
{ {
if ($entity->isEntityType(ENTITY_CREDIT) $entityType = $entity->getEntityType();
|| $entity->isEntityType(ENTITY_PAYMENT) $trackedTypes = [
|| $entity->isEntityType(ENTITY_VENDOR)) { ENTITY_CLIENT,
ENTITY_INVOICE,
ENTITY_QUOTE,
ENTITY_TASK,
ENTITY_EXPENSE
];
if ( ! in_array($entityType, $trackedTypes)) {
return; return;
} }

View File

@ -186,7 +186,7 @@ class Utils
$response = new stdClass(); $response = new stdClass();
$response->message = isset($_ENV["{$userType}_MESSAGE"]) ? $_ENV["{$userType}_MESSAGE"] : ''; $response->message = isset($_ENV["{$userType}_MESSAGE"]) ? $_ENV["{$userType}_MESSAGE"] : '';
$response->id = isset($_ENV["{$userType}_ID"]) ? $_ENV["{$userType}_ID"] : ''; $response->id = isset($_ENV["{$userType}_ID"]) ? $_ENV["{$userType}_ID"] : '';
$response->version = env('NINJA_SELF_HOST_VERSION', NINJA_VERSION); $response->version = NINJA_VERSION;
return $response; return $response;
} }

View File

@ -96,7 +96,7 @@ class Account extends Eloquent
ACCOUNT_TEMPLATES_AND_REMINDERS, ACCOUNT_TEMPLATES_AND_REMINDERS,
ACCOUNT_BANKS, ACCOUNT_BANKS,
ACCOUNT_CLIENT_PORTAL, ACCOUNT_CLIENT_PORTAL,
ACCOUNT_CHARTS_AND_REPORTS, ACCOUNT_REPORTS,
ACCOUNT_DATA_VISUALIZATIONS, ACCOUNT_DATA_VISUALIZATIONS,
ACCOUNT_API_TOKENS, ACCOUNT_API_TOKENS,
ACCOUNT_USER_MANAGEMENT, ACCOUNT_USER_MANAGEMENT,
@ -401,11 +401,7 @@ class Account extends Eloquent
} }
} }
/** public function getDate($date = 'now')
* @param string $date
* @return DateTime|null|string
*/
public function getDateTime($date = 'now')
{ {
if ( ! $date) { if ( ! $date) {
return null; return null;
@ -413,6 +409,16 @@ class Account extends Eloquent
$date = new \DateTime($date); $date = new \DateTime($date);
} }
return $date;
}
/**
* @param string $date
* @return DateTime|null|string
*/
public function getDateTime($date = 'now')
{
$date = $this->getDate($date);
$date->setTimeZone(new \DateTimeZone($this->getTimezone())); $date->setTimeZone(new \DateTimeZone($this->getTimezone()));
return $date; return $date;
@ -469,7 +475,7 @@ class Account extends Eloquent
*/ */
public function formatDate($date) public function formatDate($date)
{ {
$date = $this->getDateTime($date); $date = $this->getDate($date);
if ( ! $date) { if ( ! $date) {
return null; return null;

View File

@ -328,7 +328,8 @@ class Client extends EntityModel
} }
$contact = $this->contacts[0]; $contact = $this->contacts[0];
return $contact->getDisplayName();
return $contact->getDisplayName() ?: trans('texts.unnamed_client');
} }
/** /**

View File

@ -1,6 +1,7 @@
<?php namespace App\Models; <?php namespace App\Models;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
use Laracasts\Presenter\PresentableTrait;
/** /**
* Class ExpenseCategory * Class ExpenseCategory
@ -9,6 +10,7 @@ class ExpenseCategory extends EntityModel
{ {
// Expense Categories // Expense Categories
use SoftDeletes; use SoftDeletes;
use PresentableTrait;
/** /**
* @var array * @var array
@ -17,6 +19,11 @@ class ExpenseCategory extends EntityModel
'name', 'name',
]; ];
/**
* @var string
*/
protected $presenter = 'App\Ninja\Presenters\EntityPresenter';
/** /**
* @return mixed * @return mixed
*/ */

View File

@ -156,6 +156,15 @@ class Task extends EntityModel
{ {
return '#' . $this->public_id; return '#' . $this->public_id;
} }
public function getDisplayName()
{
if ($this->description) {
return mb_strimwidth($this->description, 0, 16, "...");
}
return '#' . $this->public_id;
}
} }

View File

@ -181,6 +181,7 @@ trait PresentsInvoice
'from', 'from',
'to', 'to',
'invoice_to', 'invoice_to',
'quote_to',
'details', 'details',
'invoice_no', 'invoice_no',
'valid_until', 'valid_until',

View File

@ -609,8 +609,11 @@ class BasePaymentDriver
$term = strtolower($matches[2]); $term = strtolower($matches[2]);
$price = $invoice_item->cost; $price = $invoice_item->cost;
if ($plan == PLAN_ENTERPRISE) { if ($plan == PLAN_ENTERPRISE) {
preg_match('/###[\d] [\w]* (\d*)/', $invoice_item->notes, $matches); if (count($matches)) {
$numUsers = $matches[1]; $numUsers = $matches[1];
} else {
$numUsers = 5;
}
} else { } else {
$numUsers = 1; $numUsers = 1;
} }

View File

@ -402,7 +402,7 @@ class StripePaymentDriver extends BasePaymentDriver
$paymentMethod = PaymentMethod::scope(false, $accountId)->where('source_reference', '=', $sourceRef)->first(); $paymentMethod = PaymentMethod::scope(false, $accountId)->where('source_reference', '=', $sourceRef)->first();
if (!$paymentMethod) { if (!$paymentMethod) {
throw new Exception('Unknown payment method'); return false;
} }
if ($eventType == 'customer.source.deleted' || $eventType == 'customer.bank_account.deleted') { if ($eventType == 'customer.source.deleted' || $eventType == 'customer.bank_account.deleted') {

View File

@ -1,10 +1,148 @@
<?php namespace App\Ninja\Repositories; <?php namespace App\Ninja\Repositories;
use stdClass;
use DB; use DB;
use App\Models\Activity; use App\Models\Activity;
use App\Models\Invoice;
use App\Models\Task;
use DateInterval;
use DatePeriod;
class DashboardRepository class DashboardRepository
{ {
/**
* @param $groupBy
* @param $startDate
* @param $endDate
* @return array
*/
public function chartData($account, $groupBy, $startDate, $endDate, $currencyId, $includeExpenses)
{
$accountId = $account->id;
$startDate = date_create($startDate);
$endDate = date_create($endDate);
$groupBy = strtoupper($groupBy);
if ($groupBy == 'DAY') {
$groupBy = 'DAYOFYEAR';
}
$datasets = [];
$labels = [];
$totals = new stdClass;
$entitTypes = [ENTITY_INVOICE, ENTITY_PAYMENT];
if ($includeExpenses) {
$entitTypes[] = ENTITY_EXPENSE;
}
foreach ($entitTypes as $entityType) {
$data = [];
$count = 0;
$records = $this->rawChartData($entityType, $account, $groupBy, $startDate, $endDate, $currencyId);
array_map(function ($item) use (&$data, &$count, $groupBy) {
$data[$item->$groupBy] = $item->total;
$count += $item->count;
}, $records->get());
$padding = $groupBy == 'DAYOFYEAR' ? 'day' : ($groupBy == 'WEEK' ? 'week' : 'month');
$endDate->modify('+1 '.$padding);
$interval = new DateInterval('P1'.substr($groupBy, 0, 1));
$period = new DatePeriod($startDate, $interval, $endDate);
$endDate->modify('-1 '.$padding);
$records = [];
foreach ($period as $d) {
$dateFormat = $groupBy == 'DAYOFYEAR' ? 'z' : ($groupBy == 'WEEK' ? 'W' : 'n');
// MySQL returns 1-366 for DAYOFYEAR, whereas PHP returns 0-365
$date = $groupBy == 'DAYOFYEAR' ? $d->format('Y').($d->format($dateFormat) + 1) : $d->format('Y'.$dateFormat);
$records[] = isset($data[$date]) ? $data[$date] : 0;
if ($entityType == ENTITY_INVOICE) {
$labels[] = $d->format('r');
}
}
if ($entityType == ENTITY_INVOICE) {
$color = '51,122,183';
} elseif ($entityType == ENTITY_PAYMENT) {
$color = '54,193,87';
} elseif ($entityType == ENTITY_EXPENSE) {
$color = '128,128,128';
}
$record = new stdClass;
$record->data = $records;
$record->label = trans("texts.{$entityType}s");
$record->lineTension = 0;
$record->borderWidth = 4;
$record->borderColor = "rgba({$color}, 1)";
$record->backgroundColor = "rgba({$color}, 0.05)";
$datasets[] = $record;
if ($entityType == ENTITY_INVOICE) {
$totals->invoices = array_sum($data);
$totals->average = $count ? round($totals->invoices / $count, 2) : 0;
} elseif ($entityType == ENTITY_PAYMENT) {
$totals->revenue = array_sum($data);
$totals->balance = $totals->invoices - $totals->revenue;
} elseif ($entityType == ENTITY_EXPENSE) {
//$totals->profit = $totals->revenue - array_sum($data);
$totals->expenses = array_sum($data);
}
}
$data = new stdClass;
$data->labels = $labels;
$data->datasets = $datasets;
$response = new stdClass;
$response->data = $data;
$response->totals = $totals;
return $response;
}
private function rawChartData($entityType, $account, $groupBy, $startDate, $endDate, $currencyId)
{
$accountId = $account->id;
$currencyId = intval($currencyId);
$timeframe = 'concat(YEAR('.$entityType.'_date), '.$groupBy.'('.$entityType.'_date))';
$records = DB::table($entityType.'s')
->leftJoin('clients', 'clients.id', '=', $entityType.'s.client_id')
->whereRaw('(clients.id IS NULL OR clients.is_deleted = 0)')
->where($entityType.'s.account_id', '=', $accountId)
->where($entityType.'s.is_deleted', '=', false)
->where($entityType.'s.'.$entityType.'_date', '>=', $startDate->format('Y-m-d'))
->where($entityType.'s.'.$entityType.'_date', '<=', $endDate->format('Y-m-d'))
->groupBy($groupBy);
if ($entityType == ENTITY_EXPENSE) {
$records->where('expenses.expense_currency_id', '=', $currencyId);
} elseif ($currencyId == $account->getCurrencyId()) {
$records->whereRaw("(clients.currency_id = {$currencyId} or coalesce(clients.currency_id, 0) = 0)");
} else {
$records->where('clients.currency_id', '=', $currencyId);
}
if ($entityType == ENTITY_INVOICE) {
$records->select(DB::raw('sum(invoices.amount) as total, count(invoices.id) as count, '.$timeframe.' as '.$groupBy))
->where('invoice_type_id', '=', INVOICE_TYPE_STANDARD)
->where('is_recurring', '=', false);
} elseif ($entityType == ENTITY_PAYMENT) {
$records->select(DB::raw('sum(payments.amount - payments.refunded) as total, count(payments.id) as count, '.$timeframe.' as '.$groupBy))
->join('invoices', 'invoices.id', '=', 'payments.invoice_id')
->where('invoices.is_deleted', '=', false)
->whereNotIn('payment_status_id', [PAYMENT_STATUS_VOIDED, PAYMENT_STATUS_FAILED]);
} elseif ($entityType == ENTITY_EXPENSE) {
$records->select(DB::raw('sum(expenses.amount) as total, count(expenses.id) as count, '.$timeframe.' as '.$groupBy));
}
return $records;
}
public function totals($accountId, $userId, $viewAll) public function totals($accountId, $userId, $viewAll)
{ {
// total_income, billed_clients, invoice_sent and active_clients // total_income, billed_clients, invoice_sent and active_clients
@ -182,15 +320,45 @@ class DashboardRepository
->where('invoices.is_deleted', '=', false) ->where('invoices.is_deleted', '=', false)
->where('clients.is_deleted', '=', false) ->where('clients.is_deleted', '=', false)
->where('contacts.deleted_at', '=', null) ->where('contacts.deleted_at', '=', null)
->where('contacts.is_primary', '=', true); ->where('contacts.is_primary', '=', true)
->whereNotIn('payments.payment_status_id', [PAYMENT_STATUS_VOIDED, PAYMENT_STATUS_FAILED]);
if (!$viewAll){ if (!$viewAll){
$payments = $payments->where('payments.user_id', '=', $userId); $payments = $payments->where('payments.user_id', '=', $userId);
} }
return $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']) return $payments->select(['payments.payment_date', DB::raw('(payments.amount - payments.refunded) as 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') ->orderBy('payments.payment_date', 'desc')
->take(50) ->take(50)
->get(); ->get();
} }
public function expenses($accountId, $userId, $viewAll)
{
$select = DB::raw(
'SUM('.DB::getQueryGrammar()->wrap('expenses.amount', true).') as value,'
.DB::getQueryGrammar()->wrap('expenses.expense_currency_id', true).' as currency_id'
);
$paidToDate = DB::table('accounts')
->select($select)
->leftJoin('expenses', 'accounts.id', '=', 'expenses.account_id')
->where('accounts.id', '=', $accountId)
->where('expenses.is_deleted', '=', false);
if (!$viewAll){
$paidToDate = $paidToDate->where('expenses.user_id', '=', $userId);
}
return $paidToDate->groupBy('accounts.id')
->groupBy('expenses.expense_currency_id')
->get();
}
public function tasks($accountId, $userId, $viewAll)
{
return Task::scope()
->withArchived()
->whereIsRunning(true)
->get();
}
} }

View File

@ -30,7 +30,8 @@
"fuse.js": "~2.0.2", "fuse.js": "~2.0.2",
"dropzone": "~4.3.0", "dropzone": "~4.3.0",
"sweetalert": "~1.1.3", "sweetalert": "~1.1.3",
"nouislider": "~8.5.1" "nouislider": "~8.5.1",
"bootstrap-daterangepicker": "~2.1.24"
}, },
"resolutions": { "resolutions": {
"jquery": "~1.11" "jquery": "~1.11"

View File

@ -29,7 +29,7 @@ return [
| |
*/ */
'lifetime' => env('SESSION_LIFETIME', 120), 'lifetime' => env('SESSION_LIFETIME', (60 * 8)),
'expire_on_close' => false, 'expire_on_close' => false,

View File

@ -8,6 +8,9 @@ class LanguageSeeder extends Seeder
{ {
Eloquent::unguard(); Eloquent::unguard();
// https://github.com/caouecs/Laravel-lang
// https://www.loc.gov/standards/iso639-2/php/code_list.php
$languages = [ $languages = [
['name' => 'English', 'locale' => 'en'], ['name' => 'English', 'locale' => 'en'],
['name' => 'Italian', 'locale' => 'it'], ['name' => 'Italian', 'locale' => 'it'],
@ -26,6 +29,7 @@ class LanguageSeeder extends Seeder
['name' => 'Polish', 'locale' => 'pl'], ['name' => 'Polish', 'locale' => 'pl'],
['name' => 'Czech', 'locale' => 'cs'], ['name' => 'Czech', 'locale' => 'cs'],
['name' => 'Croatian', 'locale' => 'hr'], ['name' => 'Croatian', 'locale' => 'hr'],
['name' => 'Albanian', 'locale' => 'sq'],
]; ];
foreach ($languages as $language) { foreach ($languages as $language) {

115
docs/expenses.rst Normal file
View File

@ -0,0 +1,115 @@
Expenses
========
Running a freelance business isn't just about the money that's coming in. You also need to take care of the money going out. With Invoice Ninja, all your earnings, expenses, clients and vendors are stored and managed in one, smart system designed to keep you on top of things. What's more, the Expenses part of your Invoice Ninja account streamlines with your invoicing via a click of the mouse, across multiples currencies, so you get the complete bigger picture of your business expenses - with simplicity and ease.
List Expenses
"""""""""""""
To view the Expenses list page, click on the Expenses tab on the main taskbar.
Overview
^^^^^^^^
The Expenses list page displays a summary of all business expenses that you choose to enter. Apart from giving an overview of all your recorded expenses in a table format, you can also carry out a number of important actions from the Expenses page. First, let's take a look at the various columns in the Expenses table from left to right:
- **Vendor**: The name of the vendor
- **Client**: The name of the client for whom the expense is relevant
- **Expense**: Date The date the expense occurred
- **Amount**: The expense amount
- **Category**: The assigned category of the expense
- **Public Notes**: The notes entered when creating the expense (this becomes the item description if the expense is converted to an invoice)
- **Status**: The current status of the expense: Logged (blue), Pending (orange), Invoiced (gray), Paid (green)
The final column to the right is the Action column. To view the actions, hover your mouse over the Action area of the relevant expense entry and a gray Select button will appear. Click on the arrow at the right side of the button to open a drop-down list. These are the action options:
- **Edit Expense**: Edit the expense information on the Edit Expenses page.
- **Invoice Expense**: Convert the expense to a client invoice.
- **Archive Expense**: Click here to archive the expense. It will be archived and removed from the Expenses list page.
- **Delete Expense**: Click here to delete the expense. It will be deleted and removed from the Expenses list page.
.. TIP:: To sort the Expenses list according to any of the columns, click on the orange column tab of your choice. A small arrow will appear. If the arrow is pointing up, data is sorted from lowest to highest value. If the arrow is pointing down, data is sorted from highest to lowest value. Click to change the arrow direction.
Expense Categories
""""""""""""""""""
In order to better manage your business expenses, you can create custom categories and assign them to various expenses. For example, you may decide to create a category for "Office Supplies", or "Events" or perhaps "Salaries". Whichever categories you decide you need, creating them is super simple. First, you'll need to open the Expense Categories page.
To open the Expense Categories page:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Click on the gray Categories button that appears above the Expenses table. The page features a list of all existing categories.
To create a new Expense Category:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Click on the blue New Expense Category + button located at the top right of the Expense Categories page. On the Expense Categories/ Create page, enter the name of the category, and click Save. The new category will now appear in the list on the Expense Categories page. When you create a new expense, you can apply a category from your list to the expense.
To edit an Expense Category:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
On the Expense Categories page, click on the gray Select button in the far right column of the category entry, and select Edit Category.
To archive an Expense Category:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
On the Expense Categories page, select the relevant category, and click the gray Archive button above left of the Expense Categories table. The category will be permanently removed from the Categories list. To view archived categories, check the Show archived/deleted box next to the Archive button. The category will now be viewable again in the Expense category table, marked with an orange Archived status. To restore the archived category, click on the gray Select button in the far right column of the category entry, and select Restore expense category.
.. TIP:: There's another fast way to archive an Expense Category. Click on the gray Select button in the far right column of the category entry, and select Archive Category.
Here's a fast, easy way to get to the Vendors page from the Expenses list page. Click the gray Vendors button located at the top right of the page, to the right of the Categories button.
Filter
^^^^^^
To filter the Expenses list, enter the filter data in the Filter field, situated at the top right of the page, to the left of the gray Categories button. Expenses can be filtered according to Vendor name. Enter the name or parts of the name, and the filter function will automatically locate and present the relevant entries.
Archiving/Deleting Expenses
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
To archive or delete an expense, hover over the expense entry row, and open the Action drop-down list. Select Archive Expense or Delete Expense from the list. The Expenses table will automatically refresh, and archived or deleted expenses will no longer appear in the list.
You can also archive or delete one or more expense via the gray Archive button that appears at the top left side of the Expenses list page. To archive or delete expenses, check the relevant expenses in the check boxes that appear in the far left column next to the vendor name. The number of expenses selected for archiving/deleting will automatically update and show on the Archive button. Then click on the Archive button, open the drop-down list and select the desired action.
.. NOTE:: Want to view archived or deleted expenses? Check the box marked Show archived/deleted, situated to the right of the Archive button. The table will automatically refresh, and will now feature the full list of expenses, including current, archived and deleted expenses. The status of the archived and deleted expenses will be displayed in the far right column.
- Deleted expenses are displayed with a strikethrough line and a red Deleted button in the right hand column of the expense entry. To restore deleted expenses, hover on the red Deleted button. A gray Select button will appear. Click on the Select arrow, and select Restore expense in the drop-down list.
- Archived expenses are displayed with an orange Archived button. To restore the archived expense, hover on the orange Archived button. A gray Select button will appear. Click on the Select arrow, and choose Restore expense from the drop-down list. To delete an archived expense, select Delete expense from the drop-down list of the Select button.
Invoice
^^^^^^^
Are you billing a client directly for an expense? With the Invoice button on the Expenses list page, you can automatically convert an expense to an invoice in one simple click. To create an invoice for an expense, first you'll need to select the expense in question. Select an expense by checking the box located in the far left column of the relevant entry. Then click the blue Invoice button located at the top left of the Expenses table. The expense will be converted automatically to a new invoice.
.. TIP:: If you want to invoice an expense, you need to enable the invoicing function when you create the expense, or later by editing the expense. To enable the invoicing function, check the Should be invoiced box that appears on the Expenses/ Create or Expenses/ Edit page.
Create Expense
""""""""""""""
You can create a new expense directly from the Expenses list page by clicking on the blue New Expense + button located at the top right side of the page. The Expenses / Create page will open.
To ensure your business records are meticulous and organized, enter all your expenses in to your Invoice Ninja account. It's the perfect way to keep track, keep up to date and even invoice clients directly for expenses you've accrued while on the job. Managing and invoicing expenses on Invoice Ninja is so easy but the first step is logging the expense. Here's how to do it.
To create an expense, click on the Expenses tab on the main taskbar. Select New Expense from the drop-down menu and the Expenses / Create page will open.
Overview
^^^^^^^^
The Expenses / Create page features a range of fields and checkboxes for you to complete.
- **Vendor**: Click on the arrow on the right side of the Vendor field and select the vendor from the drop-down list.
- **Category**: Click on the arrow on the right side of the Category field and select the category from the drop-down list. Note: you don't have to apply a category. This is totally optional.
- **Date**: Enter the relevant date of the expense.
- **Currency**: Select the currency of the expense. This is a fantastic feature for complicated cross-border invoicing of overseas clients and/or vendors.
- **Amount**: The amount of the expense.
- **Client**: Click on the arrow on the right side of the Client field and select the relevant client from the drop-down list. TIP: Selecting a client is optional. If the expense is not attached to a particular client, leave this field blank.
- **Should be invoiced**: Do you need to invoice a particular client for this expense? If yes, check the Should be invoiced box to enable invoicing later.
- **Convert currency**: If the expense was paid in a different currency, check the Convert currency box. Then, when the expense is converted to an invoice, you can convert the amount to the currency with which you normally invoice the client.
- **Apply taxes**: If you need to apply taxes to the expense when invoicing the client, check the Apply taxes box. Then, when you create the invoice for the expense, the taxes feature will be enabled.
- **Public Notes**: Enter a description of the expense. When the expense is converted to an invoice, the text you enter here will feature as the line item description for the expense on the invoice. TIP: This is the description of the expense that your client will see on the invoice. Make sure to include the relevant details.
- **Private Notes**: Enter comments or notes that you wish to include about the expense as a personal reminder. Remember, the Private Notes section is for your eyes only, so feel free to enter anything you like.
- **Attached documents**: If you need to provide documentation relevant to the expense, such as receipts, stubs or other items, you can attach as many documents as you need here. File types can include Word documents, Excel spreadsheets, scanned PDF files and more. Click on the Attached documents box to open the Browse window, and select the relevant files.
To save the new expense, click the green Save button at the bottom of the page. Then, the expense you created will appear as an entry in the Expenses list page.
.. TIP:: After you click Save, the Expenses/ Create page will automatically refresh, and you'll see a gray More Actions button featured to the right of the Save button. Click on the More Actions button, and you can take any of three actions directly from the new expense page: Invoice Expense, Archive Expense or Delete Expense.

View File

@ -6,7 +6,7 @@ Want to find out everything there is to know about how to use your Invoice Ninja
.. _basic-features: .. _basic-features:
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: 1
:caption: Basic Features :caption: Basic Features
introduction introduction
@ -17,12 +17,14 @@ Want to find out everything there is to know about how to use your Invoice Ninja
credits credits
quotes quotes
tasks tasks
expenses
vendors
settings settings
.. _advanced-settings: .. _advanced-settings:
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: 1
:caption: Advanced Settings :caption: Advanced Settings
invoice_settings invoice_settings
@ -30,7 +32,7 @@ Want to find out everything there is to know about how to use your Invoice Ninja
email_settings email_settings
templates_and_reminders templates_and_reminders
client_portal client_portal
charts_and_reports reports
data_visualizations data_visualizations
api_tokens api_tokens
user_management user_management

View File

@ -1,9 +1,9 @@
Charts & Reports Reports
================ =======
It's easy to get caught up in the job you are currently working on, sending invoices and chasing payments. But it's just as important to take a step back from time to time, and to look at the bigger picture of how your freelance business is doing. It's easy to get caught up in the job you are currently working on, sending invoices and chasing payments. But it's just as important to take a step back from time to time, and to look at the bigger picture of how your freelance business is doing.
The Charts and Reports function helps you do just that. You can define your parameters and extract the exact information you need to generate a range of reports. And the graphical chart display gives you an instant visual understanding of your important business data. The Reports function helps you do just that. You can define your parameters and extract the exact information you need to generate a range of reports.
Report Settings Report Settings
""""""""""""""" """""""""""""""
@ -12,13 +12,7 @@ The Report Settings section enables you to set parameters and filter the data to
- **Start Date**: Click on the calendar button and select the Start Date for the report. - **Start Date**: Click on the calendar button and select the Start Date for the report.
- **End Date**: Click on the calendar button and select the End Date for the report. - **End Date**: Click on the calendar button and select the End Date for the report.
- **Report**: To generate a report, check the Enable box.
- **Type**: To select the report type, click on the Type field and a drop down menu will open. Select the type of report you want from the available list. - **Type**: To select the report type, click on the Type field and a drop down menu will open. Select the type of report you want from the available list.
- **Chart**: To generate a chart, check the Enable box.
- **Group by**: To select the required timeframe for the data segmentation (Monthly, Weekly or Daily), click on the Group by field and a drop down menu will open. Select the timeframe you want from the list.
- **Chart type**: To select the chart type, click on the Chart type field and a drop down menu will open. Select the type of chart you want from the available list.
- **Run**: Once you've selected all the parameters, click the green Run> button. The extracted data will show in the report display section below. TIP: When you click Run>, the report will generate automatically, and includes only the relevant columns and data, based on the type of reports and dates selected. To view another report, simply change your selections and click Run>. - **Run**: Once you've selected all the parameters, click the green Run> button. The extracted data will show in the report display section below. TIP: When you click Run>, the report will generate automatically, and includes only the relevant columns and data, based on the type of reports and dates selected. To view another report, simply change your selections and click Run>.
If you enabled the Chart function, a graphical chart will display below the Report data.
Export To export the report data to Excel or other spreadsheet software, click the blue Export button. The report will automatically download as a .csv file. Export To export the report data to Excel or other spreadsheet software, click the blue Export button. The report will automatically download as a .csv file.

100
docs/vendors.rst Normal file
View File

@ -0,0 +1,100 @@
Vendors
=======
Running a business is a two way street. Sure, you serve clients and charge them for it. But you also use suppliers, companies and service providers who charge you for all the things you need to get your job done. Office supplies? Check. Coffee machine? Check. Gas for the car? Check. And a hundred-and-one other supplies and services you can name.
Your expenses and vendors are managed with the same ease and one-click functionality as every other part of your business, right here in your Invoice Ninja account. With Invoice Ninja, managing your vendors and expenses is simple and similar to managing your clients and invoices. It's only a matter of which way the money's going...
List Vendors
""""""""""""
To view your Vendors list page, go to the main taskbar and click the Expenses tab. Select Vendors from the drop down menu.
Overview
^^^^^^^^
The Vendors page shows a list in table format of all companies, service providers or suppliers that you have entered to the Invoice Ninja system as part of your business activities. The table features the following data columns:
- **Vendor:** The company name of the vendor
- **City:** The city where the vendor is located
- **Phone:** The phone number of the vendor
- **Email:** The vendor's email address
- **Date Created:** The date the vendor was created in the system
- **Action column:** The final column to the right features a drop-down menu with a range of actions you can take to manage the selected vendor
Actions
^^^^^^^
To select an action for a particular vendor, hover with your mouse anywhere in the row entry of the vendor. A gray Select button will appear in the far right column. Click on the Select arrow and a drop-down list will open.
When you click on an action, you will be automatically redirected to the relevant action page for the selected vendor.
Here are the available actions in the drop-down list of the Action button, and the corresponding action pages that will open:
- **Edit Vendor**: Edit the vendor's details on the Vendors / Edit page
- **Enter Expense**: Enter a new expense for this vendor on the Expenses / Create page TIP: The vendor's name will automatically feature in the new expense. You won't need to enter the vendor's information.
- **Archive Vendor**: Click to archive the vendor
- **Delete Vendor**: Click to delete the vendor
.. TIP:: Each vendor you create has its own summary page, where you can view and manage the vendor details. To view a vendor's summary page, click on the vendor name in the Vendors list. You'll be automatically redirected to the vendor's summary page.
New Vendor
^^^^^^^^^^
You can add a new vendor directly from the Vendors list page by clicking on the blue New Vendor + button located at the top right side of the page. The Vendors / Create page will open.
Sorting & Filtering Vendors
^^^^^^^^^^^^^^^^^^^^^^^^^^^
The sort and filter functions make it easy for you to manage and view your vendor information.
Sort the vendors table by clicking on any of the tabs in the list header. A small arrow will appear. If the arrow is pointing up, data is sorted from lowest to highest value. If the arrow is pointing down, data is sorted from highest to lowest value. Click to change the arrow direction.
Filter the vendors list by completing the Filter field, situated at the top right of the page, to the left of the blue New Vendor + button.
Archiving/Deleting Vendors
^^^^^^^^^^^^^^^^^^^^^^^^^^
To archive or delete a specific vendor, hover over the vendor entry row, and open the Action drop-down list. Select Archive Vendor or Delete Vendor. The Vendors table will automatically refresh, and the vendor will no longer appear in the vendors list.
You can also archive or delete one or more vendors via the gray Archive button that appears at the top left side of the Vendors table. To archive or delete vendors, check the relevant vendors in the check boxes that appear in the far left column next to the vendor name. Then click on the Archive button, open the drop-down list and select the desired action.
Want to view archived or deleted vendors? Check the box marked Show archived/deleted, situated to the right of the Archive button. The table will automatically refresh, and will now feature the full list of vendors, including current, archived and deleted vendors.
- **Deleted vendors** are displayed with a strikethrough and a red Deleted button in the far right column. You can choose to restore a deleted vendor. To restore a deleted vendor, hover with your mouse over the red Deleted button of the relevant deleted vendor. A gray Select button will appear. Click on the Select arrow, and choose Restore vendor from the drop-down list.
- **Archived vendors** are displayed with an orange Archived button in the far right column.
You can choose to restore or delete the archived vendor. To restore an archived vendor, hover with your mouse over the orange Archived button of the relevant archived vendor. A gray Select button will appear. Click on the Select arrow, and choose Restore vendor from the drop-down list. To delete an archived vendor, select Delete vendor from the drop-down list of the Select button.
Create Vendor
"""""""""""""
To manage your earnings and expenses properly, you need a simple, effective system for every aspect of your accounts. Keeping an updated list and history of your vendors is another part of the puzzle, and, just like your clients, tasks and invoices, Invoice Ninja delivers the goods here too. Create and manage your vendor details with the familiar, fast functionality you've come to expect from Invoice Ninja.
You can create a new vendor either by going directly to the Vendors/ Create page from the main taskbar, or by clicking New Vendor + on the Vendors list page. Here, were going to focus on entering a new vendor via the Vendors/ Create page.
**Lets Begin**
To enter a new vendor, go to the Expenses tab, open the drop-down menu, and click on New Vendor. This will open the Vendors/Create page.
The Vendors/ Create page is divided into four sections. Enter the information in the relevant fields.
.. NOTE:: You dont have to complete every field. Enter the information that is important or necessary for your needs.
Lets take a closer look at each section:
- **Organization**: Enter details about the vendor's company, including the company name, ID number, VAT number, website address and telephone number.
- **Contacts**: Enter the name, email address and phone number of your contact person for this vendor. You can enter as many contact people as you like. To add more contact people, click +Add Contact.
- **Address**: Enter the vendor's street address.
- **Additional Info**: Enter the vendor's currency, and any other private notes or reminders you wish to add (dont worry - no one can see them but you.)
Once you have filled in the page, click Save to save the new vendor information. The vendor will now appear as an entry in the Vendors list page.
Vendor Summary Page
^^^^^^^^^^^^^^^^^^^
Each vendor you create has its own summary page that displays the vendor details and related expenses. To view a vendor's summary page, go the Vendors list page and click on the name of the vendor you wish to view. You'll be automatically redirected to the vendor's summary page.
There are a number of actions you can take from the vendor summary page. Let's check them out:
- **Edit Vendor**: Edit the vendor's details by clicking on the gray Edit Vendor button.
- **Enter Expense**: Create a new expense for the vendor by clicking on the blue New Expense + button at the top right of the page.
- **Archive or Delete Vendor**: Archive or delete the vendor by clicking on the arrow on the right hand side of the Edit Vendor button. A drop down menu will open. Select the desired action from the menu.

View File

@ -58,6 +58,11 @@ elixir(function(mix) {
'fonts.css' 'fonts.css'
], 'public/css/built.css'); ], 'public/css/built.css');
mix.styles([
bowerDir + '/bootstrap-daterangepicker/daterangepicker.css'
], 'public/css/daterangepicker.css');
/** /**
* JS configuration * JS configuration
*/ */
@ -71,6 +76,10 @@ elixir(function(mix) {
'vfs.js' 'vfs.js'
], 'public/pdf.built.js'); ], 'public/pdf.built.js');
mix.scripts([
bowerDir + '/bootstrap-daterangepicker/daterangepicker.js'
], 'public/js/daterangepicker.min.js');
mix.scripts([ mix.scripts([
bowerDir + '/jquery/dist/jquery.js', bowerDir + '/jquery/dist/jquery.js',
bowerDir + '/jquery-ui/jquery-ui.js', bowerDir + '/jquery-ui/jquery-ui.js',

File diff suppressed because one or more lines are too long

2
public/css/daterangepicker.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1432
public/js/Chart.min.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

3
public/js/daterangepicker.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -100,8 +100,8 @@
#right-sidebar-wrapper .sidebar-nav li { #right-sidebar-wrapper .sidebar-nav li {
text-indent: 8px; text-indent: 8px;
font-size: 16px; font-size: 15px;
line-height: 44px; line-height: 42px;
} }
#right-sidebar-wrapper .sidebar-nav li a.btn { #right-sidebar-wrapper .sidebar-nav li a.btn {

File diff suppressed because it is too large Load Diff

View File

@ -507,7 +507,7 @@ $LANG = array(
'payment_type_paypal' => 'PayPal', 'payment_type_paypal' => 'PayPal',
'payment_type_bitcoin' => 'Bitcoin', 'payment_type_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Knowledge Base', 'knowledge_base' => 'Knowledge Base',
'partial' => 'Partial', 'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial of :balance', 'partial_remaining' => ':partial of :balance',
'more_fields' => 'More Fields', 'more_fields' => 'More Fields',
'less_fields' => 'Less Fields', 'less_fields' => 'Less Fields',
@ -995,7 +995,7 @@ $LANG = array(
'overdue' => 'Overdue', 'overdue' => 'Overdue',
'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the invoice and client portal.',
'user_email_footer' => 'To adjust your email notification settings please visit :link', 'user_email_footer' => 'To adjust your email notification settings please visit :link',
'reset_password_footer' => 'If you did not request this password reset please email our support: :email', 'reset_password_footer' => 'If you did not request this password reset please email our support: :email',
'limit_users' => 'Sorry, this will exceed the limit of :limit users', 'limit_users' => 'Sorry, this will exceed the limit of :limit users',
@ -1695,6 +1695,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish', 'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain', 'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish', 'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies // Frequencies
'freq_weekly' => 'Weekly', 'freq_weekly' => 'Weekly',
@ -2043,7 +2044,71 @@ $LANG = array(
'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.', 'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.',
'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.', 'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.',
'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less', 'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less',
'error_title' => 'Something went wrong',
'error_contact_text' => 'If you\'d like help please email us at :mailaddress',
'no_undo' => 'Warning: this can\'t be undone.',
'no_contact_selected' => 'Please select a contact',
'no_client_selected' => 'Please select a client',
'gateway_config_error' => 'It may help to set new passwords or generate new API keys.',
'payment_type_on_file' => ':type on file',
'invoice_for_client' => 'Invoice :invoice for :client',
'intent_not_found' => 'Sorry, I\'m not sure what you\'re asking.',
'intent_not_supported' => 'Sorry, I\'m not able to do that.',
'client_not_found' => 'I wasn\'t able to find the client',
'not_allowed' => 'Sorry, you don\'t have the needed permissions',
'bot_emailed_invoice' => 'Your invoice has been sent.',
'bot_emailed_notify_viewed' => 'I\'ll email you when it\'s viewed.',
'bot_emailed_notify_paid' => 'I\'ll email you when it\'s paid.',
'add_product_to_invoice' => 'Add 1 :product',
'not_authorized' => 'Your are not authorized',
'bot_get_email' => 'Hi! (wave)<br/>Thanks for trying the Invoice Ninja Bot.<br/>Send me your account email to get started.',
'bot_get_code' => 'Thanks! I\'ve sent a you an email with your security code.',
'bot_welcome' => 'That\'s it, your account is verified.<br/>',
'email_not_found' => 'I wasn\'t able to find an available account for :email',
'invalid_code' => 'The code is not correct',
'security_code_email_subject' => 'Security code for Invoice Ninja Bot',
'security_code_email_line1' => 'This is your Invoice Ninja Bot security code.',
'security_code_email_line2' => 'Note: it will expire in 10 minutes.',
'bot_help_message' => 'I currently support:<br/>• Create\update\email an invoice<br/>• List products<br/>For example:<br/><i>invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent</i>',
'list_products' => 'List Products',
'include_item_taxes_inline' => 'Include <b>line item taxes in line total</b>',
'created_quotes' => 'Successfully created :count quotes(s)',
'limited_gateways' => 'Note: we support one credit card gateway per company.',
'warning' => 'Warning',
'self-update' => 'Update Invoice Ninja',
'update_invoiceninja_title' => 'Update Invoice Ninja',
'update_invoiceninja_warning' => 'Before start upgrading Invoice Ninja create a backup of your database and files!',
'update_invoiceninja_available' => 'A new version of Invoice Ninja is available.',
'update_invoiceninja_unavailable' => 'No new version of Invoice Ninja available.',
'update_invoiceninja_decide_update_download' => 'You can decide to update directly to :version or to just download the new relase and update later.',
'update_invoiceninja_update_start' => 'Update now',
'update_invoiceninja_download_start' => 'Download :version',
'create_new' => 'Create New',
'toggle_navigation' => 'Toggle Navigation',
'toggle_history' => 'Toggle History',
'unassigned' => 'Unassigned',
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
'facebook_and_twitter_help' => 'Follow our feeds to help support our project',
'reseller_text' => 'Note: the white-label license is intended for personal use, please email us at :email if you\'d like to resell our app.',
'unnamed_client' => 'Unnamed Client',
'day' => 'Day',
'week' => 'Week',
'month' => 'Month',
'inactive_logout' => 'You have been logged out due to inactivity',
'reports' => 'Reports',
'total_profit' => 'Total Profit',
'total_expenses' => 'Total Expenses',
'quote_to' => 'Quote to',
); );

View File

@ -506,7 +506,7 @@ $LANG = array(
'payment_type_paypal' => 'PayPal', 'payment_type_paypal' => 'PayPal',
'payment_type_bitcoin' => 'Bitcoin', 'payment_type_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Knowledge Base', 'knowledge_base' => 'Knowledge Base',
'partial' => 'Část', 'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial z :balance', 'partial_remaining' => ':partial z :balance',
'more_fields' => 'Více polí', 'more_fields' => 'Více polí',
'less_fields' => 'Méně polí', 'less_fields' => 'Méně polí',
@ -997,7 +997,7 @@ $LANG = array(
'overdue' => 'Po termínu', 'overdue' => 'Po termínu',
'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the invoice and client portal.',
'user_email_footer' => 'Pro úpravu emailových notifikací prosím navštivte :link', 'user_email_footer' => 'Pro úpravu emailových notifikací prosím navštivte :link',
'reset_password_footer' => 'Pokud jste nepožádali o resetování hesla, prosím kontaktujte naši podporu na: :email', 'reset_password_footer' => 'Pokud jste nepožádali o resetování hesla, prosím kontaktujte naši podporu na: :email',
'limit_users' => 'Omlouváme se, to už přesáhlo limit :limit uživatelů', 'limit_users' => 'Omlouváme se, to už přesáhlo limit :limit uživatelů',
@ -1697,6 +1697,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish', 'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain', 'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish', 'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies // Frequencies
'freq_weekly' => 'Weekly', 'freq_weekly' => 'Weekly',
@ -2045,7 +2046,71 @@ $LANG = array(
'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.', 'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.',
'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.', 'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.',
'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less', 'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less',
'error_title' => 'Something went wrong',
'error_contact_text' => 'If you\'d like help please email us at :mailaddress',
'no_undo' => 'Warning: this can\'t be undone.',
'no_contact_selected' => 'Please select a contact',
'no_client_selected' => 'Please select a client',
'gateway_config_error' => 'It may help to set new passwords or generate new API keys.',
'payment_type_on_file' => ':type on file',
'invoice_for_client' => 'Invoice :invoice for :client',
'intent_not_found' => 'Sorry, I\'m not sure what you\'re asking.',
'intent_not_supported' => 'Sorry, I\'m not able to do that.',
'client_not_found' => 'I wasn\'t able to find the client',
'not_allowed' => 'Sorry, you don\'t have the needed permissions',
'bot_emailed_invoice' => 'Your invoice has been sent.',
'bot_emailed_notify_viewed' => 'I\'ll email you when it\'s viewed.',
'bot_emailed_notify_paid' => 'I\'ll email you when it\'s paid.',
'add_product_to_invoice' => 'Add 1 :product',
'not_authorized' => 'Your are not authorized',
'bot_get_email' => 'Hi! (wave)<br/>Thanks for trying the Invoice Ninja Bot.<br/>Send me your account email to get started.',
'bot_get_code' => 'Thanks! I\'ve sent a you an email with your security code.',
'bot_welcome' => 'That\'s it, your account is verified.<br/>',
'email_not_found' => 'I wasn\'t able to find an available account for :email',
'invalid_code' => 'The code is not correct',
'security_code_email_subject' => 'Security code for Invoice Ninja Bot',
'security_code_email_line1' => 'This is your Invoice Ninja Bot security code.',
'security_code_email_line2' => 'Note: it will expire in 10 minutes.',
'bot_help_message' => 'I currently support:<br/>• Create\update\email an invoice<br/>• List products<br/>For example:<br/><i>invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent</i>',
'list_products' => 'List Products',
'include_item_taxes_inline' => 'Include <b>line item taxes in line total</b>',
'created_quotes' => 'Successfully created :count quotes(s)',
'limited_gateways' => 'Note: we support one credit card gateway per company.',
'warning' => 'Warning',
'self-update' => 'Update Invoice Ninja',
'update_invoiceninja_title' => 'Update Invoice Ninja',
'update_invoiceninja_warning' => 'Before start upgrading Invoice Ninja create a backup of your database and files!',
'update_invoiceninja_available' => 'A new version of Invoice Ninja is available.',
'update_invoiceninja_unavailable' => 'No new version of Invoice Ninja available.',
'update_invoiceninja_decide_update_download' => 'You can decide to update directly to :version or to just download the new relase and update later.',
'update_invoiceninja_update_start' => 'Update now',
'update_invoiceninja_download_start' => 'Download :version',
'create_new' => 'Create New',
'toggle_navigation' => 'Toggle Navigation',
'toggle_history' => 'Toggle History',
'unassigned' => 'Unassigned',
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
'facebook_and_twitter_help' => 'Follow our feeds to help support our project',
'reseller_text' => 'Note: the white-label license is intended for personal use, please email us at :email if you\'d like to resell our app.',
'unnamed_client' => 'Unnamed Client',
'day' => 'Day',
'week' => 'Week',
'month' => 'Month',
'inactive_logout' => 'You have been logged out due to inactivity',
'reports' => 'Reports',
'total_profit' => 'Total Profit',
'total_expenses' => 'Total Expenses',
'quote_to' => 'Quote to',
); );

View File

@ -507,7 +507,7 @@ $LANG = array(
'payment_type_paypal' => 'PayPal', 'payment_type_paypal' => 'PayPal',
'payment_type_bitcoin' => 'Bitcoin', 'payment_type_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Vidensbase', 'knowledge_base' => 'Vidensbase',
'partial' => 'Delvis', 'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial af :balance', 'partial_remaining' => ':partial af :balance',
'more_fields' => 'Flere felter', 'more_fields' => 'Flere felter',
'less_fields' => 'Mindre felter', 'less_fields' => 'Mindre felter',
@ -995,7 +995,7 @@ $LANG = array(
'overdue' => 'Overdue', 'overdue' => 'Overdue',
'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the invoice and client portal.',
'user_email_footer' => 'For at justere varslings indstillingene besøg venligst :link', 'user_email_footer' => 'For at justere varslings indstillingene besøg venligst :link',
'reset_password_footer' => 'Hvis du ikke bad om at få nulstillet din adgangskode kontakt venligst kundeservice: :email', 'reset_password_footer' => 'Hvis du ikke bad om at få nulstillet din adgangskode kontakt venligst kundeservice: :email',
'limit_users' => 'Desværre, dette vil overstige grænsen på :limit brugere', 'limit_users' => 'Desværre, dette vil overstige grænsen på :limit brugere',
@ -1695,6 +1695,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish', 'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain', 'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish', 'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies // Frequencies
'freq_weekly' => 'Weekly', 'freq_weekly' => 'Weekly',
@ -2043,7 +2044,71 @@ $LANG = array(
'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.', 'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.',
'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.', 'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.',
'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less', 'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less',
'error_title' => 'Something went wrong',
'error_contact_text' => 'If you\'d like help please email us at :mailaddress',
'no_undo' => 'Warning: this can\'t be undone.',
'no_contact_selected' => 'Please select a contact',
'no_client_selected' => 'Please select a client',
'gateway_config_error' => 'It may help to set new passwords or generate new API keys.',
'payment_type_on_file' => ':type on file',
'invoice_for_client' => 'Invoice :invoice for :client',
'intent_not_found' => 'Sorry, I\'m not sure what you\'re asking.',
'intent_not_supported' => 'Sorry, I\'m not able to do that.',
'client_not_found' => 'I wasn\'t able to find the client',
'not_allowed' => 'Sorry, you don\'t have the needed permissions',
'bot_emailed_invoice' => 'Your invoice has been sent.',
'bot_emailed_notify_viewed' => 'I\'ll email you when it\'s viewed.',
'bot_emailed_notify_paid' => 'I\'ll email you when it\'s paid.',
'add_product_to_invoice' => 'Add 1 :product',
'not_authorized' => 'Your are not authorized',
'bot_get_email' => 'Hi! (wave)<br/>Thanks for trying the Invoice Ninja Bot.<br/>Send me your account email to get started.',
'bot_get_code' => 'Thanks! I\'ve sent a you an email with your security code.',
'bot_welcome' => 'That\'s it, your account is verified.<br/>',
'email_not_found' => 'I wasn\'t able to find an available account for :email',
'invalid_code' => 'The code is not correct',
'security_code_email_subject' => 'Security code for Invoice Ninja Bot',
'security_code_email_line1' => 'This is your Invoice Ninja Bot security code.',
'security_code_email_line2' => 'Note: it will expire in 10 minutes.',
'bot_help_message' => 'I currently support:<br/>• Create\update\email an invoice<br/>• List products<br/>For example:<br/><i>invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent</i>',
'list_products' => 'List Products',
'include_item_taxes_inline' => 'Include <b>line item taxes in line total</b>',
'created_quotes' => 'Successfully created :count quotes(s)',
'limited_gateways' => 'Note: we support one credit card gateway per company.',
'warning' => 'Warning',
'self-update' => 'Update Invoice Ninja',
'update_invoiceninja_title' => 'Update Invoice Ninja',
'update_invoiceninja_warning' => 'Before start upgrading Invoice Ninja create a backup of your database and files!',
'update_invoiceninja_available' => 'A new version of Invoice Ninja is available.',
'update_invoiceninja_unavailable' => 'No new version of Invoice Ninja available.',
'update_invoiceninja_decide_update_download' => 'You can decide to update directly to :version or to just download the new relase and update later.',
'update_invoiceninja_update_start' => 'Update now',
'update_invoiceninja_download_start' => 'Download :version',
'create_new' => 'Create New',
'toggle_navigation' => 'Toggle Navigation',
'toggle_history' => 'Toggle History',
'unassigned' => 'Unassigned',
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
'facebook_and_twitter_help' => 'Follow our feeds to help support our project',
'reseller_text' => 'Note: the white-label license is intended for personal use, please email us at :email if you\'d like to resell our app.',
'unnamed_client' => 'Unnamed Client',
'day' => 'Day',
'week' => 'Week',
'month' => 'Month',
'inactive_logout' => 'You have been logged out due to inactivity',
'reports' => 'Reports',
'total_profit' => 'Total Profit',
'total_expenses' => 'Total Expenses',
'quote_to' => 'Quote to',
); );

View File

@ -507,7 +507,7 @@ $LANG = array(
'payment_type_paypal' => 'PayPal', 'payment_type_paypal' => 'PayPal',
'payment_type_bitcoin' => 'Bitcoin', 'payment_type_bitcoin' => 'Bitcoin',
'knowledge_base' => 'FAQ', 'knowledge_base' => 'FAQ',
'partial' => 'Partiell', 'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial von :balance', 'partial_remaining' => ':partial von :balance',
'more_fields' => 'Weitere Felder', 'more_fields' => 'Weitere Felder',
'less_fields' => 'Weniger Felder', 'less_fields' => 'Weniger Felder',
@ -685,7 +685,7 @@ $LANG = array(
'num_days_reminder' => 'Tage nach Fälligkeit', 'num_days_reminder' => 'Tage nach Fälligkeit',
'reminder_subject' => 'Erinnerung: Rechnung :invoice von :account', 'reminder_subject' => 'Erinnerung: Rechnung :invoice von :account',
'reset' => 'Zurücksetzen', 'reset' => 'Zurücksetzen',
'invoice_not_found' => 'Die gewünschte Rechnung ist nicht verfügbar', 'invoice_not_found' => 'Die gewünschte Rechnung ist nicht verfügbar.',
'referral_program' => 'Referral Program', 'referral_program' => 'Referral Program',
'referral_code' => 'Referral Code', 'referral_code' => 'Referral Code',
'last_sent_on' => 'Zuletzt versendet am :date', 'last_sent_on' => 'Zuletzt versendet am :date',
@ -995,7 +995,7 @@ $LANG = array(
'overdue' => 'Überfällig', 'overdue' => 'Überfällig',
'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the invoice and client portal.',
'user_email_footer' => 'Um deine E-Mail-Benachrichtigungen anzupassen besuche bitte :link', 'user_email_footer' => 'Um deine E-Mail-Benachrichtigungen anzupassen besuche bitte :link',
'reset_password_footer' => 'Wenn du das Zurücksetzen des Passworts nicht beantragt hast, benachrichtige bitte unseren Support: :email', 'reset_password_footer' => 'Wenn du das Zurücksetzen des Passworts nicht beantragt hast, benachrichtige bitte unseren Support: :email',
'limit_users' => 'Entschuldige, das würde das Limit von :limit Benutzern überschreiten', 'limit_users' => 'Entschuldige, das würde das Limit von :limit Benutzern überschreiten',
@ -1695,6 +1695,7 @@ $LANG = array(
'lang_Spanish' => 'Spanisch', 'lang_Spanish' => 'Spanisch',
'lang_Spanish - Spain' => 'Spanisch - Spanien', 'lang_Spanish - Spain' => 'Spanisch - Spanien',
'lang_Swedish' => 'Schwedisch', 'lang_Swedish' => 'Schwedisch',
'lang_Albanian' => 'Albanian',
// Frequencies // Frequencies
'freq_weekly' => 'Wöchentlich', 'freq_weekly' => 'Wöchentlich',
@ -2043,7 +2044,71 @@ $LANG = array(
'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.', 'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.',
'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.', 'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.',
'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less', 'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less',
'error_title' => 'Something went wrong',
'error_contact_text' => 'If you\'d like help please email us at :mailaddress',
'no_undo' => 'Warning: this can\'t be undone.',
'no_contact_selected' => 'Please select a contact',
'no_client_selected' => 'Please select a client',
'gateway_config_error' => 'It may help to set new passwords or generate new API keys.',
'payment_type_on_file' => ':type on file',
'invoice_for_client' => 'Invoice :invoice for :client',
'intent_not_found' => 'Sorry, I\'m not sure what you\'re asking.',
'intent_not_supported' => 'Sorry, I\'m not able to do that.',
'client_not_found' => 'I wasn\'t able to find the client',
'not_allowed' => 'Sorry, you don\'t have the needed permissions',
'bot_emailed_invoice' => 'Your invoice has been sent.',
'bot_emailed_notify_viewed' => 'I\'ll email you when it\'s viewed.',
'bot_emailed_notify_paid' => 'I\'ll email you when it\'s paid.',
'add_product_to_invoice' => 'Add 1 :product',
'not_authorized' => 'Your are not authorized',
'bot_get_email' => 'Hi! (wave)<br/>Thanks for trying the Invoice Ninja Bot.<br/>Send me your account email to get started.',
'bot_get_code' => 'Thanks! I\'ve sent a you an email with your security code.',
'bot_welcome' => 'That\'s it, your account is verified.<br/>',
'email_not_found' => 'I wasn\'t able to find an available account for :email',
'invalid_code' => 'The code is not correct',
'security_code_email_subject' => 'Security code for Invoice Ninja Bot',
'security_code_email_line1' => 'This is your Invoice Ninja Bot security code.',
'security_code_email_line2' => 'Note: it will expire in 10 minutes.',
'bot_help_message' => 'I currently support:<br/>• Create\update\email an invoice<br/>• List products<br/>For example:<br/><i>invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent</i>',
'list_products' => 'List Products',
'include_item_taxes_inline' => 'Include <b>line item taxes in line total</b>',
'created_quotes' => 'Successfully created :count quotes(s)',
'limited_gateways' => 'Note: we support one credit card gateway per company.',
'warning' => 'Warning',
'self-update' => 'Update Invoice Ninja',
'update_invoiceninja_title' => 'Update Invoice Ninja',
'update_invoiceninja_warning' => 'Before start upgrading Invoice Ninja create a backup of your database and files!',
'update_invoiceninja_available' => 'A new version of Invoice Ninja is available.',
'update_invoiceninja_unavailable' => 'No new version of Invoice Ninja available.',
'update_invoiceninja_decide_update_download' => 'You can decide to update directly to :version or to just download the new relase and update later.',
'update_invoiceninja_update_start' => 'Update now',
'update_invoiceninja_download_start' => 'Download :version',
'create_new' => 'Create New',
'toggle_navigation' => 'Toggle Navigation',
'toggle_history' => 'Toggle History',
'unassigned' => 'Unassigned',
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
'facebook_and_twitter_help' => 'Follow our feeds to help support our project',
'reseller_text' => 'Note: the white-label license is intended for personal use, please email us at :email if you\'d like to resell our app.',
'unnamed_client' => 'Unnamed Client',
'day' => 'Day',
'week' => 'Week',
'month' => 'Month',
'inactive_logout' => 'You have been logged out due to inactivity',
'reports' => 'Reports',
'total_profit' => 'Total Profit',
'total_expenses' => 'Total Expenses',
'quote_to' => 'Quote to',
); );

View File

@ -507,7 +507,7 @@ $LANG = array(
'payment_type_paypal' => 'PayPal', 'payment_type_paypal' => 'PayPal',
'payment_type_bitcoin' => 'Bitcoin', 'payment_type_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Knowledge Base', 'knowledge_base' => 'Knowledge Base',
'partial' => 'Partial', 'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial of :balance', 'partial_remaining' => ':partial of :balance',
'more_fields' => 'More Fields', 'more_fields' => 'More Fields',
'less_fields' => 'Less Fields', 'less_fields' => 'Less Fields',
@ -995,7 +995,7 @@ $LANG = array(
'overdue' => 'Overdue', 'overdue' => 'Overdue',
'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the invoice and client portal.',
'user_email_footer' => 'To adjust your email notification settings please visit :link', 'user_email_footer' => 'To adjust your email notification settings please visit :link',
'reset_password_footer' => 'If you did not request this password reset please email our support: :email', 'reset_password_footer' => 'If you did not request this password reset please email our support: :email',
'limit_users' => 'Sorry, this will exceed the limit of :limit users', 'limit_users' => 'Sorry, this will exceed the limit of :limit users',
@ -1695,6 +1695,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish', 'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain', 'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish', 'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies // Frequencies
'freq_weekly' => 'Weekly', 'freq_weekly' => 'Weekly',
@ -2095,6 +2096,19 @@ $LANG = array(
'city_state_postal' => 'City/State/Postal', 'city_state_postal' => 'City/State/Postal',
'custom_field' => 'Custom Field', 'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields', 'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
'facebook_and_twitter_help' => 'Follow our feeds to help support our project',
'reseller_text' => 'Note: the white-label license is intended for personal use, please email us at :email if you\'d like to resell our app.',
'unnamed_client' => 'Unnamed Client',
'day' => 'Day',
'week' => 'Week',
'month' => 'Month',
'inactive_logout' => 'You have been logged out due to inactivity',
'reports' => 'Reports',
'total_profit' => 'Total Profit',
'total_expenses' => 'Total Expenses',
'quote_to' => 'Quote to',
// Limits // Limits
'limit' => 'Limit', 'limit' => 'Limit',

View File

@ -501,7 +501,7 @@ $LANG = array(
'payment_type_paypal' => 'PayPal', 'payment_type_paypal' => 'PayPal',
'payment_type_bitcoin' => 'Bitcoin', 'payment_type_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Base de Conocimiento', 'knowledge_base' => 'Base de Conocimiento',
'partial' => 'Parcial', 'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial de :balance', 'partial_remaining' => ':partial de :balance',
'more_fields' => ' Más Campos', 'more_fields' => ' Más Campos',
'less_fields' => 'Menos Campos', 'less_fields' => 'Menos Campos',
@ -989,7 +989,7 @@ $LANG = array(
'overdue' => 'Overdue', 'overdue' => 'Overdue',
'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the invoice and client portal.',
'user_email_footer' => 'Para ajustar la configuración de las notificaciones de tu correo, visita :link', 'user_email_footer' => 'Para ajustar la configuración de las notificaciones de tu correo, visita :link',
'reset_password_footer' => 'Si no has solicitado un cambio de contraseña, por favor contactate con nosostros: :email', 'reset_password_footer' => 'Si no has solicitado un cambio de contraseña, por favor contactate con nosostros: :email',
'limit_users' => 'Lo sentimos, esta acción excederá el límite de :limit usarios', 'limit_users' => 'Lo sentimos, esta acción excederá el límite de :limit usarios',
@ -1689,6 +1689,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish', 'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain', 'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish', 'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies // Frequencies
'freq_weekly' => 'Weekly', 'freq_weekly' => 'Weekly',
@ -2037,7 +2038,71 @@ $LANG = array(
'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.', 'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.',
'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.', 'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.',
'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less', 'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less',
'error_title' => 'Something went wrong',
'error_contact_text' => 'If you\'d like help please email us at :mailaddress',
'no_undo' => 'Warning: this can\'t be undone.',
'no_contact_selected' => 'Please select a contact',
'no_client_selected' => 'Please select a client',
'gateway_config_error' => 'It may help to set new passwords or generate new API keys.',
'payment_type_on_file' => ':type on file',
'invoice_for_client' => 'Invoice :invoice for :client',
'intent_not_found' => 'Sorry, I\'m not sure what you\'re asking.',
'intent_not_supported' => 'Sorry, I\'m not able to do that.',
'client_not_found' => 'I wasn\'t able to find the client',
'not_allowed' => 'Sorry, you don\'t have the needed permissions',
'bot_emailed_invoice' => 'Your invoice has been sent.',
'bot_emailed_notify_viewed' => 'I\'ll email you when it\'s viewed.',
'bot_emailed_notify_paid' => 'I\'ll email you when it\'s paid.',
'add_product_to_invoice' => 'Add 1 :product',
'not_authorized' => 'Your are not authorized',
'bot_get_email' => 'Hi! (wave)<br/>Thanks for trying the Invoice Ninja Bot.<br/>Send me your account email to get started.',
'bot_get_code' => 'Thanks! I\'ve sent a you an email with your security code.',
'bot_welcome' => 'That\'s it, your account is verified.<br/>',
'email_not_found' => 'I wasn\'t able to find an available account for :email',
'invalid_code' => 'The code is not correct',
'security_code_email_subject' => 'Security code for Invoice Ninja Bot',
'security_code_email_line1' => 'This is your Invoice Ninja Bot security code.',
'security_code_email_line2' => 'Note: it will expire in 10 minutes.',
'bot_help_message' => 'I currently support:<br/>• Create\update\email an invoice<br/>• List products<br/>For example:<br/><i>invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent</i>',
'list_products' => 'List Products',
'include_item_taxes_inline' => 'Include <b>line item taxes in line total</b>',
'created_quotes' => 'Successfully created :count quotes(s)',
'limited_gateways' => 'Note: we support one credit card gateway per company.',
'warning' => 'Warning',
'self-update' => 'Update Invoice Ninja',
'update_invoiceninja_title' => 'Update Invoice Ninja',
'update_invoiceninja_warning' => 'Before start upgrading Invoice Ninja create a backup of your database and files!',
'update_invoiceninja_available' => 'A new version of Invoice Ninja is available.',
'update_invoiceninja_unavailable' => 'No new version of Invoice Ninja available.',
'update_invoiceninja_decide_update_download' => 'You can decide to update directly to :version or to just download the new relase and update later.',
'update_invoiceninja_update_start' => 'Update now',
'update_invoiceninja_download_start' => 'Download :version',
'create_new' => 'Create New',
'toggle_navigation' => 'Toggle Navigation',
'toggle_history' => 'Toggle History',
'unassigned' => 'Unassigned',
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
'facebook_and_twitter_help' => 'Follow our feeds to help support our project',
'reseller_text' => 'Note: the white-label license is intended for personal use, please email us at :email if you\'d like to resell our app.',
'unnamed_client' => 'Unnamed Client',
'day' => 'Day',
'week' => 'Week',
'month' => 'Month',
'inactive_logout' => 'You have been logged out due to inactivity',
'reports' => 'Reports',
'total_profit' => 'Total Profit',
'total_expenses' => 'Total Expenses',
'quote_to' => 'Quote to',
); );

View File

@ -501,7 +501,7 @@ $LANG = array(
'payment_type_paypal' => 'PayPal', 'payment_type_paypal' => 'PayPal',
'payment_type_bitcoin' => 'Bitcoin', 'payment_type_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Ayuda', 'knowledge_base' => 'Ayuda',
'partial' => 'Parcial', 'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial de :balance', 'partial_remaining' => ':partial de :balance',
'more_fields' => 'Mas campos', 'more_fields' => 'Mas campos',
'less_fields' => 'Menos campos', 'less_fields' => 'Menos campos',
@ -988,7 +988,7 @@ $LANG = array(
'overdue' => 'Overdue', 'overdue' => 'Overdue',
'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the invoice and client portal.',
'user_email_footer' => 'Para ajustar la configuración de las notificaciones de tu email, visita :link', 'user_email_footer' => 'Para ajustar la configuración de las notificaciones de tu email, visita :link',
'reset_password_footer' => 'Si no has solicitado un cambio de contraseña, por favor contactate con nosostros: :email', 'reset_password_footer' => 'Si no has solicitado un cambio de contraseña, por favor contactate con nosostros: :email',
'limit_users' => 'Lo sentimos, esta acción excederá el límite de :limit usarios', 'limit_users' => 'Lo sentimos, esta acción excederá el límite de :limit usarios',
@ -1688,6 +1688,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish', 'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain', 'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish', 'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies // Frequencies
'freq_weekly' => 'Weekly', 'freq_weekly' => 'Weekly',
@ -2036,7 +2037,71 @@ $LANG = array(
'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.', 'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.',
'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.', 'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.',
'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less', 'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less',
'error_title' => 'Something went wrong',
'error_contact_text' => 'If you\'d like help please email us at :mailaddress',
'no_undo' => 'Warning: this can\'t be undone.',
'no_contact_selected' => 'Please select a contact',
'no_client_selected' => 'Please select a client',
'gateway_config_error' => 'It may help to set new passwords or generate new API keys.',
'payment_type_on_file' => ':type on file',
'invoice_for_client' => 'Invoice :invoice for :client',
'intent_not_found' => 'Sorry, I\'m not sure what you\'re asking.',
'intent_not_supported' => 'Sorry, I\'m not able to do that.',
'client_not_found' => 'I wasn\'t able to find the client',
'not_allowed' => 'Sorry, you don\'t have the needed permissions',
'bot_emailed_invoice' => 'Your invoice has been sent.',
'bot_emailed_notify_viewed' => 'I\'ll email you when it\'s viewed.',
'bot_emailed_notify_paid' => 'I\'ll email you when it\'s paid.',
'add_product_to_invoice' => 'Add 1 :product',
'not_authorized' => 'Your are not authorized',
'bot_get_email' => 'Hi! (wave)<br/>Thanks for trying the Invoice Ninja Bot.<br/>Send me your account email to get started.',
'bot_get_code' => 'Thanks! I\'ve sent a you an email with your security code.',
'bot_welcome' => 'That\'s it, your account is verified.<br/>',
'email_not_found' => 'I wasn\'t able to find an available account for :email',
'invalid_code' => 'The code is not correct',
'security_code_email_subject' => 'Security code for Invoice Ninja Bot',
'security_code_email_line1' => 'This is your Invoice Ninja Bot security code.',
'security_code_email_line2' => 'Note: it will expire in 10 minutes.',
'bot_help_message' => 'I currently support:<br/>• Create\update\email an invoice<br/>• List products<br/>For example:<br/><i>invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent</i>',
'list_products' => 'List Products',
'include_item_taxes_inline' => 'Include <b>line item taxes in line total</b>',
'created_quotes' => 'Successfully created :count quotes(s)',
'limited_gateways' => 'Note: we support one credit card gateway per company.',
'warning' => 'Warning',
'self-update' => 'Update Invoice Ninja',
'update_invoiceninja_title' => 'Update Invoice Ninja',
'update_invoiceninja_warning' => 'Before start upgrading Invoice Ninja create a backup of your database and files!',
'update_invoiceninja_available' => 'A new version of Invoice Ninja is available.',
'update_invoiceninja_unavailable' => 'No new version of Invoice Ninja available.',
'update_invoiceninja_decide_update_download' => 'You can decide to update directly to :version or to just download the new relase and update later.',
'update_invoiceninja_update_start' => 'Update now',
'update_invoiceninja_download_start' => 'Download :version',
'create_new' => 'Create New',
'toggle_navigation' => 'Toggle Navigation',
'toggle_history' => 'Toggle History',
'unassigned' => 'Unassigned',
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
'facebook_and_twitter_help' => 'Follow our feeds to help support our project',
'reseller_text' => 'Note: the white-label license is intended for personal use, please email us at :email if you\'d like to resell our app.',
'unnamed_client' => 'Unnamed Client',
'day' => 'Day',
'week' => 'Week',
'month' => 'Month',
'inactive_logout' => 'You have been logged out due to inactivity',
'reports' => 'Reports',
'total_profit' => 'Total Profit',
'total_expenses' => 'Total Expenses',
'quote_to' => 'Quote to',
); );

View File

@ -501,7 +501,7 @@ $LANG = array(
'payment_type_paypal' => 'PayPal', 'payment_type_paypal' => 'PayPal',
'payment_type_bitcoin' => 'Bitcoin', 'payment_type_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Base de connaissances', 'knowledge_base' => 'Base de connaissances',
'partial' => 'Partiel', 'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial de :balance', 'partial_remaining' => ':partial de :balance',
'more_fields' => 'Plus de champs', 'more_fields' => 'Plus de champs',
'less_fields' => 'Moins de champs', 'less_fields' => 'Moins de champs',
@ -989,7 +989,7 @@ $LANG = array(
'overdue' => 'Impayé', 'overdue' => 'Impayé',
'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the invoice and client portal.',
'user_email_footer' => 'Pour modifier vos paramètres de notification par courriel, veuillez visiter :link', 'user_email_footer' => 'Pour modifier vos paramètres de notification par courriel, veuillez visiter :link',
'reset_password_footer' => 'Si vous n\'avez pas effectué de demande de réinitalisation de mot de passe veuillez contacter notre support : :email', 'reset_password_footer' => 'Si vous n\'avez pas effectué de demande de réinitalisation de mot de passe veuillez contacter notre support : :email',
'limit_users' => 'Désolé, ceci excédera la limite de :limit utilisateurs', 'limit_users' => 'Désolé, ceci excédera la limite de :limit utilisateurs',
@ -1689,6 +1689,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish', 'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain', 'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish', 'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies // Frequencies
'freq_weekly' => 'Weekly', 'freq_weekly' => 'Weekly',
@ -2037,7 +2038,71 @@ $LANG = array(
'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.', 'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.',
'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.', 'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.',
'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less', 'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less',
'error_title' => 'Something went wrong',
'error_contact_text' => 'If you\'d like help please email us at :mailaddress',
'no_undo' => 'Warning: this can\'t be undone.',
'no_contact_selected' => 'Please select a contact',
'no_client_selected' => 'Please select a client',
'gateway_config_error' => 'It may help to set new passwords or generate new API keys.',
'payment_type_on_file' => ':type on file',
'invoice_for_client' => 'Invoice :invoice for :client',
'intent_not_found' => 'Sorry, I\'m not sure what you\'re asking.',
'intent_not_supported' => 'Sorry, I\'m not able to do that.',
'client_not_found' => 'I wasn\'t able to find the client',
'not_allowed' => 'Sorry, you don\'t have the needed permissions',
'bot_emailed_invoice' => 'Your invoice has been sent.',
'bot_emailed_notify_viewed' => 'I\'ll email you when it\'s viewed.',
'bot_emailed_notify_paid' => 'I\'ll email you when it\'s paid.',
'add_product_to_invoice' => 'Add 1 :product',
'not_authorized' => 'Your are not authorized',
'bot_get_email' => 'Hi! (wave)<br/>Thanks for trying the Invoice Ninja Bot.<br/>Send me your account email to get started.',
'bot_get_code' => 'Thanks! I\'ve sent a you an email with your security code.',
'bot_welcome' => 'That\'s it, your account is verified.<br/>',
'email_not_found' => 'I wasn\'t able to find an available account for :email',
'invalid_code' => 'The code is not correct',
'security_code_email_subject' => 'Security code for Invoice Ninja Bot',
'security_code_email_line1' => 'This is your Invoice Ninja Bot security code.',
'security_code_email_line2' => 'Note: it will expire in 10 minutes.',
'bot_help_message' => 'I currently support:<br/>• Create\update\email an invoice<br/>• List products<br/>For example:<br/><i>invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent</i>',
'list_products' => 'List Products',
'include_item_taxes_inline' => 'Include <b>line item taxes in line total</b>',
'created_quotes' => 'Successfully created :count quotes(s)',
'limited_gateways' => 'Note: we support one credit card gateway per company.',
'warning' => 'Warning',
'self-update' => 'Update Invoice Ninja',
'update_invoiceninja_title' => 'Update Invoice Ninja',
'update_invoiceninja_warning' => 'Before start upgrading Invoice Ninja create a backup of your database and files!',
'update_invoiceninja_available' => 'A new version of Invoice Ninja is available.',
'update_invoiceninja_unavailable' => 'No new version of Invoice Ninja available.',
'update_invoiceninja_decide_update_download' => 'You can decide to update directly to :version or to just download the new relase and update later.',
'update_invoiceninja_update_start' => 'Update now',
'update_invoiceninja_download_start' => 'Download :version',
'create_new' => 'Create New',
'toggle_navigation' => 'Toggle Navigation',
'toggle_history' => 'Toggle History',
'unassigned' => 'Unassigned',
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
'facebook_and_twitter_help' => 'Follow our feeds to help support our project',
'reseller_text' => 'Note: the white-label license is intended for personal use, please email us at :email if you\'d like to resell our app.',
'unnamed_client' => 'Unnamed Client',
'day' => 'Day',
'week' => 'Week',
'month' => 'Month',
'inactive_logout' => 'You have been logged out due to inactivity',
'reports' => 'Reports',
'total_profit' => 'Total Profit',
'total_expenses' => 'Total Expenses',
'quote_to' => 'Quote to',
); );

View File

@ -501,7 +501,7 @@ $LANG = array(
'payment_type_paypal' => 'PayPal', 'payment_type_paypal' => 'PayPal',
'payment_type_bitcoin' => 'Bitcoin', 'payment_type_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Base de connaissance', 'knowledge_base' => 'Base de connaissance',
'partial' => 'Partiel', 'partial' => 'Partial/Deposit',
'partial_remaining' => ':partiel de :balance', 'partial_remaining' => ':partiel de :balance',
'more_fields' => 'Plus de champs', 'more_fields' => 'Plus de champs',
'less_fields' => 'Moins de champs', 'less_fields' => 'Moins de champs',
@ -986,7 +986,7 @@ $LANG = array(
'overdue' => 'En souffrance', 'overdue' => 'En souffrance',
'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the invoice and client portal.',
'user_email_footer' => 'Pour modifier vos paramètres de notification par courriel, veuillez visiter :link', 'user_email_footer' => 'Pour modifier vos paramètres de notification par courriel, veuillez visiter :link',
'reset_password_footer' => 'Si vous n\'avez pas effectué de demande de réinitalisation de mot de passe veuillez contacter notre support : :email', 'reset_password_footer' => 'Si vous n\'avez pas effectué de demande de réinitalisation de mot de passe veuillez contacter notre support : :email',
'limit_users' => 'Désolé, ceci excédera la limite de :limit utilisateurs', 'limit_users' => 'Désolé, ceci excédera la limite de :limit utilisateurs',
@ -1686,6 +1686,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'lang_Spanish' => 'Spanish', 'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain', 'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish', 'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies // Frequencies
'freq_weekly' => 'Weekly', 'freq_weekly' => 'Weekly',
@ -2034,7 +2035,71 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.', 'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.',
'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.', 'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.',
'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less', 'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less',
'error_title' => 'Something went wrong',
'error_contact_text' => 'If you\'d like help please email us at :mailaddress',
'no_undo' => 'Warning: this can\'t be undone.',
'no_contact_selected' => 'Please select a contact',
'no_client_selected' => 'Please select a client',
'gateway_config_error' => 'It may help to set new passwords or generate new API keys.',
'payment_type_on_file' => ':type on file',
'invoice_for_client' => 'Invoice :invoice for :client',
'intent_not_found' => 'Sorry, I\'m not sure what you\'re asking.',
'intent_not_supported' => 'Sorry, I\'m not able to do that.',
'client_not_found' => 'I wasn\'t able to find the client',
'not_allowed' => 'Sorry, you don\'t have the needed permissions',
'bot_emailed_invoice' => 'Your invoice has been sent.',
'bot_emailed_notify_viewed' => 'I\'ll email you when it\'s viewed.',
'bot_emailed_notify_paid' => 'I\'ll email you when it\'s paid.',
'add_product_to_invoice' => 'Add 1 :product',
'not_authorized' => 'Your are not authorized',
'bot_get_email' => 'Hi! (wave)<br/>Thanks for trying the Invoice Ninja Bot.<br/>Send me your account email to get started.',
'bot_get_code' => 'Thanks! I\'ve sent a you an email with your security code.',
'bot_welcome' => 'That\'s it, your account is verified.<br/>',
'email_not_found' => 'I wasn\'t able to find an available account for :email',
'invalid_code' => 'The code is not correct',
'security_code_email_subject' => 'Security code for Invoice Ninja Bot',
'security_code_email_line1' => 'This is your Invoice Ninja Bot security code.',
'security_code_email_line2' => 'Note: it will expire in 10 minutes.',
'bot_help_message' => 'I currently support:<br/>• Create\update\email an invoice<br/>• List products<br/>For example:<br/><i>invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent</i>',
'list_products' => 'List Products',
'include_item_taxes_inline' => 'Include <b>line item taxes in line total</b>',
'created_quotes' => 'Successfully created :count quotes(s)',
'limited_gateways' => 'Note: we support one credit card gateway per company.',
'warning' => 'Warning',
'self-update' => 'Update Invoice Ninja',
'update_invoiceninja_title' => 'Update Invoice Ninja',
'update_invoiceninja_warning' => 'Before start upgrading Invoice Ninja create a backup of your database and files!',
'update_invoiceninja_available' => 'A new version of Invoice Ninja is available.',
'update_invoiceninja_unavailable' => 'No new version of Invoice Ninja available.',
'update_invoiceninja_decide_update_download' => 'You can decide to update directly to :version or to just download the new relase and update later.',
'update_invoiceninja_update_start' => 'Update now',
'update_invoiceninja_download_start' => 'Download :version',
'create_new' => 'Create New',
'toggle_navigation' => 'Toggle Navigation',
'toggle_history' => 'Toggle History',
'unassigned' => 'Unassigned',
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
'facebook_and_twitter_help' => 'Follow our feeds to help support our project',
'reseller_text' => 'Note: the white-label license is intended for personal use, please email us at :email if you\'d like to resell our app.',
'unnamed_client' => 'Unnamed Client',
'day' => 'Day',
'week' => 'Week',
'month' => 'Month',
'inactive_logout' => 'You have been logged out due to inactivity',
'reports' => 'Reports',
'total_profit' => 'Total Profit',
'total_expenses' => 'Total Expenses',
'quote_to' => 'Quote to',
); );

View File

@ -507,7 +507,7 @@ $LANG = array(
'payment_type_paypal' => 'PayPal', 'payment_type_paypal' => 'PayPal',
'payment_type_bitcoin' => 'Bitcoin', 'payment_type_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Baza znanja', 'knowledge_base' => 'Baza znanja',
'partial' => 'Parcijalno', 'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial od :balance', 'partial_remaining' => ':partial od :balance',
'more_fields' => 'Više polja', 'more_fields' => 'Više polja',
'less_fields' => 'Manje polja', 'less_fields' => 'Manje polja',
@ -995,7 +995,7 @@ $LANG = array(
'overdue' => 'Van valute', 'overdue' => 'Van valute',
'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the invoice and client portal.',
'user_email_footer' => 'To adjust your email notification settings please visit :link', 'user_email_footer' => 'To adjust your email notification settings please visit :link',
'reset_password_footer' => 'If you did not request this password reset please email our support: :email', 'reset_password_footer' => 'If you did not request this password reset please email our support: :email',
'limit_users' => 'Sorry, this will exceed the limit of :limit users', 'limit_users' => 'Sorry, this will exceed the limit of :limit users',
@ -1695,6 +1695,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish', 'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain', 'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish', 'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies // Frequencies
'freq_weekly' => 'Weekly', 'freq_weekly' => 'Weekly',
@ -2043,7 +2044,71 @@ $LANG = array(
'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.', 'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.',
'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.', 'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.',
'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less', 'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less',
'error_title' => 'Something went wrong',
'error_contact_text' => 'If you\'d like help please email us at :mailaddress',
'no_undo' => 'Warning: this can\'t be undone.',
'no_contact_selected' => 'Please select a contact',
'no_client_selected' => 'Please select a client',
'gateway_config_error' => 'It may help to set new passwords or generate new API keys.',
'payment_type_on_file' => ':type on file',
'invoice_for_client' => 'Invoice :invoice for :client',
'intent_not_found' => 'Sorry, I\'m not sure what you\'re asking.',
'intent_not_supported' => 'Sorry, I\'m not able to do that.',
'client_not_found' => 'I wasn\'t able to find the client',
'not_allowed' => 'Sorry, you don\'t have the needed permissions',
'bot_emailed_invoice' => 'Your invoice has been sent.',
'bot_emailed_notify_viewed' => 'I\'ll email you when it\'s viewed.',
'bot_emailed_notify_paid' => 'I\'ll email you when it\'s paid.',
'add_product_to_invoice' => 'Add 1 :product',
'not_authorized' => 'Your are not authorized',
'bot_get_email' => 'Hi! (wave)<br/>Thanks for trying the Invoice Ninja Bot.<br/>Send me your account email to get started.',
'bot_get_code' => 'Thanks! I\'ve sent a you an email with your security code.',
'bot_welcome' => 'That\'s it, your account is verified.<br/>',
'email_not_found' => 'I wasn\'t able to find an available account for :email',
'invalid_code' => 'The code is not correct',
'security_code_email_subject' => 'Security code for Invoice Ninja Bot',
'security_code_email_line1' => 'This is your Invoice Ninja Bot security code.',
'security_code_email_line2' => 'Note: it will expire in 10 minutes.',
'bot_help_message' => 'I currently support:<br/>• Create\update\email an invoice<br/>• List products<br/>For example:<br/><i>invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent</i>',
'list_products' => 'List Products',
'include_item_taxes_inline' => 'Include <b>line item taxes in line total</b>',
'created_quotes' => 'Successfully created :count quotes(s)',
'limited_gateways' => 'Note: we support one credit card gateway per company.',
'warning' => 'Warning',
'self-update' => 'Update Invoice Ninja',
'update_invoiceninja_title' => 'Update Invoice Ninja',
'update_invoiceninja_warning' => 'Before start upgrading Invoice Ninja create a backup of your database and files!',
'update_invoiceninja_available' => 'A new version of Invoice Ninja is available.',
'update_invoiceninja_unavailable' => 'No new version of Invoice Ninja available.',
'update_invoiceninja_decide_update_download' => 'You can decide to update directly to :version or to just download the new relase and update later.',
'update_invoiceninja_update_start' => 'Update now',
'update_invoiceninja_download_start' => 'Download :version',
'create_new' => 'Create New',
'toggle_navigation' => 'Toggle Navigation',
'toggle_history' => 'Toggle History',
'unassigned' => 'Unassigned',
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
'facebook_and_twitter_help' => 'Follow our feeds to help support our project',
'reseller_text' => 'Note: the white-label license is intended for personal use, please email us at :email if you\'d like to resell our app.',
'unnamed_client' => 'Unnamed Client',
'day' => 'Day',
'week' => 'Week',
'month' => 'Month',
'inactive_logout' => 'You have been logged out due to inactivity',
'reports' => 'Reports',
'total_profit' => 'Total Profit',
'total_expenses' => 'Total Expenses',
'quote_to' => 'Quote to',
); );

View File

@ -501,7 +501,7 @@ $LANG = array(
'payment_type_paypal' => 'PayPal', 'payment_type_paypal' => 'PayPal',
'payment_type_bitcoin' => 'Bitcoin', 'payment_type_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Knowledge Base', 'knowledge_base' => 'Knowledge Base',
'partial' => 'Partial', 'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial di :balance', 'partial_remaining' => ':partial di :balance',
'more_fields' => 'More Fields', 'more_fields' => 'More Fields',
'less_fields' => 'Less Fields', 'less_fields' => 'Less Fields',
@ -989,7 +989,7 @@ $LANG = array(
'overdue' => 'Overdue', 'overdue' => 'Overdue',
'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the invoice and client portal.',
'user_email_footer' => 'Per modificare le impostazioni di notifiche via email per favore accedi a: :link', 'user_email_footer' => 'Per modificare le impostazioni di notifiche via email per favore accedi a: :link',
'reset_password_footer' => 'Se non sei stato tu a voler resettare la password per favore invia un\'email di assistenza a: :email', 'reset_password_footer' => 'Se non sei stato tu a voler resettare la password per favore invia un\'email di assistenza a: :email',
'limit_users' => 'Sorry, this will exceed the limit of :limit users', 'limit_users' => 'Sorry, this will exceed the limit of :limit users',
@ -1689,6 +1689,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish', 'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain', 'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish', 'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies // Frequencies
'freq_weekly' => 'Weekly', 'freq_weekly' => 'Weekly',
@ -2037,7 +2038,71 @@ $LANG = array(
'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.', 'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.',
'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.', 'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.',
'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less', 'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less',
'error_title' => 'Something went wrong',
'error_contact_text' => 'If you\'d like help please email us at :mailaddress',
'no_undo' => 'Warning: this can\'t be undone.',
'no_contact_selected' => 'Please select a contact',
'no_client_selected' => 'Please select a client',
'gateway_config_error' => 'It may help to set new passwords or generate new API keys.',
'payment_type_on_file' => ':type on file',
'invoice_for_client' => 'Invoice :invoice for :client',
'intent_not_found' => 'Sorry, I\'m not sure what you\'re asking.',
'intent_not_supported' => 'Sorry, I\'m not able to do that.',
'client_not_found' => 'I wasn\'t able to find the client',
'not_allowed' => 'Sorry, you don\'t have the needed permissions',
'bot_emailed_invoice' => 'Your invoice has been sent.',
'bot_emailed_notify_viewed' => 'I\'ll email you when it\'s viewed.',
'bot_emailed_notify_paid' => 'I\'ll email you when it\'s paid.',
'add_product_to_invoice' => 'Add 1 :product',
'not_authorized' => 'Your are not authorized',
'bot_get_email' => 'Hi! (wave)<br/>Thanks for trying the Invoice Ninja Bot.<br/>Send me your account email to get started.',
'bot_get_code' => 'Thanks! I\'ve sent a you an email with your security code.',
'bot_welcome' => 'That\'s it, your account is verified.<br/>',
'email_not_found' => 'I wasn\'t able to find an available account for :email',
'invalid_code' => 'The code is not correct',
'security_code_email_subject' => 'Security code for Invoice Ninja Bot',
'security_code_email_line1' => 'This is your Invoice Ninja Bot security code.',
'security_code_email_line2' => 'Note: it will expire in 10 minutes.',
'bot_help_message' => 'I currently support:<br/>• Create\update\email an invoice<br/>• List products<br/>For example:<br/><i>invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent</i>',
'list_products' => 'List Products',
'include_item_taxes_inline' => 'Include <b>line item taxes in line total</b>',
'created_quotes' => 'Successfully created :count quotes(s)',
'limited_gateways' => 'Note: we support one credit card gateway per company.',
'warning' => 'Warning',
'self-update' => 'Update Invoice Ninja',
'update_invoiceninja_title' => 'Update Invoice Ninja',
'update_invoiceninja_warning' => 'Before start upgrading Invoice Ninja create a backup of your database and files!',
'update_invoiceninja_available' => 'A new version of Invoice Ninja is available.',
'update_invoiceninja_unavailable' => 'No new version of Invoice Ninja available.',
'update_invoiceninja_decide_update_download' => 'You can decide to update directly to :version or to just download the new relase and update later.',
'update_invoiceninja_update_start' => 'Update now',
'update_invoiceninja_download_start' => 'Download :version',
'create_new' => 'Create New',
'toggle_navigation' => 'Toggle Navigation',
'toggle_history' => 'Toggle History',
'unassigned' => 'Unassigned',
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
'facebook_and_twitter_help' => 'Follow our feeds to help support our project',
'reseller_text' => 'Note: the white-label license is intended for personal use, please email us at :email if you\'d like to resell our app.',
'unnamed_client' => 'Unnamed Client',
'day' => 'Day',
'week' => 'Week',
'month' => 'Month',
'inactive_logout' => 'You have been logged out due to inactivity',
'reports' => 'Reports',
'total_profit' => 'Total Profit',
'total_expenses' => 'Total Expenses',
'quote_to' => 'Quote to',
); );

View File

@ -507,7 +507,7 @@ $LANG = array(
'payment_type_paypal' => 'PayPal', 'payment_type_paypal' => 'PayPal',
'payment_type_bitcoin' => 'Bitcoin', 'payment_type_bitcoin' => 'Bitcoin',
'knowledge_base' => 'ナレッジベース', 'knowledge_base' => 'ナレッジベース',
'partial' => 'Partial', 'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial of :balance', 'partial_remaining' => ':partial of :balance',
'more_fields' => '項目を増やす', 'more_fields' => '項目を増やす',
'less_fields' => '項目を減らす', 'less_fields' => '項目を減らす',
@ -995,7 +995,7 @@ $LANG = array(
'overdue' => 'Overdue', 'overdue' => 'Overdue',
'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the invoice and client portal.',
'user_email_footer' => 'To adjust your email notification settings please visit :link', 'user_email_footer' => 'To adjust your email notification settings please visit :link',
'reset_password_footer' => 'If you did not request this password reset please email our support: :email', 'reset_password_footer' => 'If you did not request this password reset please email our support: :email',
'limit_users' => 'Sorry, this will exceed the limit of :limit users', 'limit_users' => 'Sorry, this will exceed the limit of :limit users',
@ -1695,6 +1695,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish', 'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain', 'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish', 'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies // Frequencies
'freq_weekly' => 'Weekly', 'freq_weekly' => 'Weekly',
@ -2043,7 +2044,71 @@ $LANG = array(
'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.', 'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.',
'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.', 'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.',
'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less', 'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less',
'error_title' => 'Something went wrong',
'error_contact_text' => 'If you\'d like help please email us at :mailaddress',
'no_undo' => 'Warning: this can\'t be undone.',
'no_contact_selected' => 'Please select a contact',
'no_client_selected' => 'Please select a client',
'gateway_config_error' => 'It may help to set new passwords or generate new API keys.',
'payment_type_on_file' => ':type on file',
'invoice_for_client' => 'Invoice :invoice for :client',
'intent_not_found' => 'Sorry, I\'m not sure what you\'re asking.',
'intent_not_supported' => 'Sorry, I\'m not able to do that.',
'client_not_found' => 'I wasn\'t able to find the client',
'not_allowed' => 'Sorry, you don\'t have the needed permissions',
'bot_emailed_invoice' => 'Your invoice has been sent.',
'bot_emailed_notify_viewed' => 'I\'ll email you when it\'s viewed.',
'bot_emailed_notify_paid' => 'I\'ll email you when it\'s paid.',
'add_product_to_invoice' => 'Add 1 :product',
'not_authorized' => 'Your are not authorized',
'bot_get_email' => 'Hi! (wave)<br/>Thanks for trying the Invoice Ninja Bot.<br/>Send me your account email to get started.',
'bot_get_code' => 'Thanks! I\'ve sent a you an email with your security code.',
'bot_welcome' => 'That\'s it, your account is verified.<br/>',
'email_not_found' => 'I wasn\'t able to find an available account for :email',
'invalid_code' => 'The code is not correct',
'security_code_email_subject' => 'Security code for Invoice Ninja Bot',
'security_code_email_line1' => 'This is your Invoice Ninja Bot security code.',
'security_code_email_line2' => 'Note: it will expire in 10 minutes.',
'bot_help_message' => 'I currently support:<br/>• Create\update\email an invoice<br/>• List products<br/>For example:<br/><i>invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent</i>',
'list_products' => 'List Products',
'include_item_taxes_inline' => 'Include <b>line item taxes in line total</b>',
'created_quotes' => 'Successfully created :count quotes(s)',
'limited_gateways' => 'Note: we support one credit card gateway per company.',
'warning' => 'Warning',
'self-update' => 'Update Invoice Ninja',
'update_invoiceninja_title' => 'Update Invoice Ninja',
'update_invoiceninja_warning' => 'Before start upgrading Invoice Ninja create a backup of your database and files!',
'update_invoiceninja_available' => 'A new version of Invoice Ninja is available.',
'update_invoiceninja_unavailable' => 'No new version of Invoice Ninja available.',
'update_invoiceninja_decide_update_download' => 'You can decide to update directly to :version or to just download the new relase and update later.',
'update_invoiceninja_update_start' => 'Update now',
'update_invoiceninja_download_start' => 'Download :version',
'create_new' => 'Create New',
'toggle_navigation' => 'Toggle Navigation',
'toggle_history' => 'Toggle History',
'unassigned' => 'Unassigned',
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
'facebook_and_twitter_help' => 'Follow our feeds to help support our project',
'reseller_text' => 'Note: the white-label license is intended for personal use, please email us at :email if you\'d like to resell our app.',
'unnamed_client' => 'Unnamed Client',
'day' => 'Day',
'week' => 'Week',
'month' => 'Month',
'inactive_logout' => 'You have been logged out due to inactivity',
'reports' => 'Reports',
'total_profit' => 'Total Profit',
'total_expenses' => 'Total Expenses',
'quote_to' => 'Quote to',
); );

View File

@ -507,7 +507,7 @@ $LANG = array(
'payment_type_paypal' => 'PayPal', 'payment_type_paypal' => 'PayPal',
'payment_type_bitcoin' => 'Bitcoin', 'payment_type_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Knowledge Base', 'knowledge_base' => 'Knowledge Base',
'partial' => 'Partial', 'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial of :balance', 'partial_remaining' => ':partial of :balance',
'more_fields' => 'More Fields', 'more_fields' => 'More Fields',
'less_fields' => 'Less Fields', 'less_fields' => 'Less Fields',
@ -774,8 +774,8 @@ $LANG = array(
'activity_35' => ':user sukurtas :vendor', 'activity_35' => ':user sukurtas :vendor',
'activity_36' => ':user sukurtas :vendor', 'activity_36' => ':user sukurtas :vendor',
'activity_37' => ':user sukurtas :vendor', 'activity_37' => ':user sukurtas :vendor',
'activity_42' => ':user created task ":task"', 'activity_42' => ':user sukurtos užduotys ":task"',
'activity_43' => ':user updated task ":task"', 'activity_43' => ':user atnaujintos užduotys ":task"',
'payment' => 'Payment', 'payment' => 'Payment',
'system' => 'System', 'system' => 'System',
'signature' => 'Email Signature', 'signature' => 'Email Signature',
@ -995,7 +995,7 @@ $LANG = array(
'overdue' => 'Overdue', 'overdue' => 'Overdue',
'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the invoice and client portal.',
'user_email_footer' => 'To adjust your email notification settings please visit :link', 'user_email_footer' => 'To adjust your email notification settings please visit :link',
'reset_password_footer' => 'If you did not request this password reset please email our support: :email', 'reset_password_footer' => 'If you did not request this password reset please email our support: :email',
'limit_users' => 'Sorry, this will exceed the limit of :limit users', 'limit_users' => 'Sorry, this will exceed the limit of :limit users',
@ -1296,7 +1296,7 @@ $LANG = array(
'wepay_tos_agree' => 'Sutinku :link.', 'wepay_tos_agree' => 'Sutinku :link.',
'wepay_tos_link_text' => 'WePay paslaugų teikimo sąlygos', 'wepay_tos_link_text' => 'WePay paslaugų teikimo sąlygos',
'resend_confirmation_email' => 'Persiųsti patvirtinimo laišką', 'resend_confirmation_email' => 'Persiųsti patvirtinimo laišką',
'manage_account' => 'Manage Account', 'manage_account' => 'Valdyti paskyrą',
'action_required' => 'Reikalingas veiksmas', 'action_required' => 'Reikalingas veiksmas',
'finish_setup' => 'Baigti nustatymus', 'finish_setup' => 'Baigti nustatymus',
'created_wepay_confirmation_required' => 'Prašome patikrinti savo el. paštą ir patvirtinkite el. pašto adresą WePay.', 'created_wepay_confirmation_required' => 'Prašome patikrinti savo el. paštą ir patvirtinkite el. pašto adresą WePay.',
@ -1310,61 +1310,61 @@ $LANG = array(
'debit_cards' => 'Debetinė kortelė', 'debit_cards' => 'Debetinė kortelė',
'warn_start_date_changed' => 'The next invoice will be sent on the new start date.', 'warn_start_date_changed' => 'The next invoice will be sent on the new start date.',
'original_start_date' => 'Original start date', 'original_start_date' => 'Originali pradžios data',
'new_start_date' => 'New start date', 'new_start_date' => 'Nauja pradžios data',
'security' => 'Security', 'security' => 'Sauga',
'see_whats_new' => 'See what\'s new in v:version', 'see_whats_new' => 'Kas naujo versijoje v:version',
'wait_for_upload' => 'Please wait for the document upload to complete.', 'wait_for_upload' => 'Prašome palaukti kol įksikels dokumentas',
'upgrade_for_permissions' => 'Upgrade to our Enterprise plan to enable permissions.', 'upgrade_for_permissions' => 'Pasirinkite Įmonės planą norėdami įjungti leidimus.',
'enable_second_tax_rate' => 'Enable specifying a <b>second tax rate</b>', 'enable_second_tax_rate' => 'Enable specifying a <b>second tax rate</b>',
'payment_file' => 'Payment File', 'payment_file' => 'Išrašo failas',
'expense_file' => 'Expense File', 'expense_file' => 'Expense File',
'product_file' => 'Product File', 'product_file' => 'Prekės failas',
'import_products' => 'Import Products', 'import_products' => 'Importuoti prekes',
'products_will_create' => 'products will be created.', 'products_will_create' => 'prekė sukurta.',
'product_key' => 'Product', 'product_key' => 'Prekė',
'created_products' => 'Successfully created :count product(s)', 'created_products' => 'Sėkmingai sukurta :count prekė(-s)',
'export_help' => 'Use JSON if you plan to import the data into Invoice Ninja.', 'export_help' => 'Use JSON if you plan to import the data into Invoice Ninja.',
'JSON_file' => 'JSON File', 'JSON_file' => 'JSON failas',
'view_dashboard' => 'View Dashboard', 'view_dashboard' => 'Rodyti darbastalį',
'client_session_expired' => 'Session Expired', 'client_session_expired' => 'Sesija pasibaigė',
'client_session_expired_message' => 'Your session has expired. Please click the link in your email again.', 'client_session_expired_message' => 'Your session has expired. Please click the link in your email again.',
'auto_bill_notification' => 'This invoice will automatically be billed to your :payment_method on file on :due_date.', 'auto_bill_notification' => 'This invoice will automatically be billed to your :payment_method on file on :due_date.',
'auto_bill_payment_method_bank_transfer' => 'bank account', 'auto_bill_payment_method_bank_transfer' => 'banko sąskaita',
'auto_bill_payment_method_credit_card' => 'credit card', 'auto_bill_payment_method_credit_card' => 'kreditinė kortelė',
'auto_bill_payment_method_paypal' => 'PayPal account', 'auto_bill_payment_method_paypal' => 'PayPal sąskaita',
'auto_bill_notification_placeholder' => 'This invoice will automatically be billed to your credit card on file on the due date.', 'auto_bill_notification_placeholder' => 'This invoice will automatically be billed to your credit card on file on the due date.',
'payment_settings' => 'Payment Settings', 'payment_settings' => 'Apmokėjimo sąlygos',
'on_send_date' => 'On send date', 'on_send_date' => 'Pagal išsiuntimo datą',
'on_due_date' => 'On due date', 'on_due_date' => 'Pagal atlikimo datą',
'auto_bill_ach_date_help' => 'ACH auto bill will always happen on the due date', 'auto_bill_ach_date_help' => 'ACH auto bill will always happen on the due date',
'warn_change_auto_bill' => 'Due to NACHA rules, changes to this invoice may prevent ACH auto bill.', 'warn_change_auto_bill' => 'Due to NACHA rules, changes to this invoice may prevent ACH auto bill.',
'bank_account' => 'Bank Account', 'bank_account' => 'Banko sąskaita',
'payment_processed_through_wepay' => 'ACH payments will be processed using WePay.', 'payment_processed_through_wepay' => 'ACH payments will be processed using WePay.',
'wepay_payment_tos_agree' => 'I agree to the WePay :terms and :privacy_policy.', 'wepay_payment_tos_agree' => 'I agree to the WePay :terms and :privacy_policy.',
'privacy_policy' => 'Privacy Policy', 'privacy_policy' => 'Privatumo politika',
'wepay_payment_tos_agree_required' => 'You must agree to the WePay Terms of Service and Privacy Policy.', 'wepay_payment_tos_agree_required' => 'You must agree to the WePay Terms of Service and Privacy Policy.',
'payment_settings_supported_gateways' => 'These options are supported by the WePay, Stripe, and Braintree gateways.', 'payment_settings_supported_gateways' => 'These options are supported by the WePay, Stripe, and Braintree gateways.',
'ach_email_prompt' => 'Please enter your email address:', 'ach_email_prompt' => 'Please enter your email address:',
'verification_pending' => 'Verification Pending', 'verification_pending' => 'Laukia patvirtinimo',
'update_font_cache' => 'Please force refresh the page to update the font cache.', 'update_font_cache' => 'Please force refresh the page to update the font cache.',
'more_options' => 'More options', 'more_options' => 'Daugiau parinkčių',
'credit_card' => 'Credit Card', 'credit_card' => 'Kreditinė kortelė',
'bank_transfer' => 'Bank Transfer', 'bank_transfer' => 'Pavedimu',
'no_transaction_reference' => 'We did not recieve a payment transaction reference from the gateway.', 'no_transaction_reference' => 'We did not recieve a payment transaction reference from the gateway.',
'use_bank_on_file' => 'Use Bank on File', 'use_bank_on_file' => 'Use Bank on File',
'auto_bill_email_message' => 'This invoice will automatically be billed to the payment method on file on the due date.', 'auto_bill_email_message' => 'This invoice will automatically be billed to the payment method on file on the due date.',
'bitcoin' => 'Bitcoin', 'bitcoin' => 'Bitcoin',
'added_on' => 'Added :date', 'added_on' => 'Sukurta :date',
'failed_remove_payment_method' => 'Failed to remove the payment method', 'failed_remove_payment_method' => 'Failed to remove the payment method',
'gateway_exists' => 'This gateway already exists', 'gateway_exists' => 'Ši mokėjimo sąsaja jau yra',
'manual_entry' => 'Manual entry', 'manual_entry' => 'Įrašyti rankiniu būdu',
'start_of_week' => 'First day of the week', 'start_of_week' => 'Savaitės pirma diena',
// Frequencies // Frequencies
'freq_weekly' => 'Weekly', 'freq_weekly' => 'Weekly',
@ -1377,7 +1377,7 @@ $LANG = array(
// Payment types // Payment types
'payment_type_Apply Credit' => 'Apply Credit', 'payment_type_Apply Credit' => 'Apply Credit',
'payment_type_Bank Transfer' => 'Bank Transfer', 'payment_type_Bank Transfer' => 'Pavedimu',
'payment_type_Cash' => 'Cash', 'payment_type_Cash' => 'Cash',
'payment_type_Debit' => 'Debit', 'payment_type_Debit' => 'Debit',
'payment_type_ACH' => 'ACH', 'payment_type_ACH' => 'ACH',
@ -1412,13 +1412,13 @@ $LANG = array(
'industry_Government' => 'Government', 'industry_Government' => 'Government',
'industry_Healthcare & Life Sciences' => 'Healthcare & Life Sciences', 'industry_Healthcare & Life Sciences' => 'Healthcare & Life Sciences',
'industry_Insurance' => 'Insurance', 'industry_Insurance' => 'Insurance',
'industry_Manufacturing' => 'Manufacturing', 'industry_Manufacturing' => 'Gamyba',
'industry_Marketing' => 'Marketing', 'industry_Marketing' => 'Marketingas',
'industry_Media' => 'Media', 'industry_Media' => 'Media',
'industry_Nonprofit & Higher Ed' => 'Nonprofit & Higher Ed', 'industry_Nonprofit & Higher Ed' => 'Nonprofit & Higher Ed',
'industry_Pharmaceuticals' => 'Pharmaceuticals', 'industry_Pharmaceuticals' => 'Pharmaceuticals',
'industry_Professional Services & Consulting' => 'Professional Services & Consulting', 'industry_Professional Services & Consulting' => 'Professional Services & Consulting',
'industry_Real Estate' => 'Real Estate', 'industry_Real Estate' => 'Nekilnojamas turtas',
'industry_Retail & Wholesale' => 'Retail & Wholesale', 'industry_Retail & Wholesale' => 'Retail & Wholesale',
'industry_Sports' => 'Sports', 'industry_Sports' => 'Sports',
'industry_Transportation' => 'Transportation', 'industry_Transportation' => 'Transportation',
@ -1427,31 +1427,31 @@ $LANG = array(
'industry_Photography' =>'Photography', 'industry_Photography' =>'Photography',
// Countries // Countries
'country_Afghanistan' => 'Afghanistan', 'country_Afghanistan' => 'Afganistanas',
'country_Albania' => 'Albania', 'country_Albania' => 'Albania',
'country_Antarctica' => 'Antarctica', 'country_Antarctica' => 'Antarktika',
'country_Algeria' => 'Algeria', 'country_Algeria' => 'Algeria',
'country_American Samoa' => 'American Samoa', 'country_American Samoa' => 'American Samoa',
'country_Andorra' => 'Andorra', 'country_Andorra' => 'Andora',
'country_Angola' => 'Angola', 'country_Angola' => 'Angola',
'country_Antigua and Barbuda' => 'Antigua and Barbuda', 'country_Antigua and Barbuda' => 'Antigua and Barbuda',
'country_Azerbaijan' => 'Azerbaijan', 'country_Azerbaijan' => 'Azerbaidžanas',
'country_Argentina' => 'Argentina', 'country_Argentina' => 'Argentina',
'country_Australia' => 'Australia', 'country_Australia' => 'Australija',
'country_Austria' => 'Austria', 'country_Austria' => 'Austrija',
'country_Bahamas' => 'Bahamas', 'country_Bahamas' => 'Bahamas',
'country_Bahrain' => 'Bahrain', 'country_Bahrain' => 'Bahrain',
'country_Bangladesh' => 'Bangladesh', 'country_Bangladesh' => 'Bangladesh',
'country_Armenia' => 'Armenia', 'country_Armenia' => 'Armėnija',
'country_Barbados' => 'Barbados', 'country_Barbados' => 'Barbados',
'country_Belgium' => 'Belgium', 'country_Belgium' => 'Belgija',
'country_Bermuda' => 'Bermuda', 'country_Bermuda' => 'Bermuda',
'country_Bhutan' => 'Bhutan', 'country_Bhutan' => 'Bhutan',
'country_Bolivia, Plurinational State of' => 'Bolivia, Plurinational State of', 'country_Bolivia, Plurinational State of' => 'Bolivia, Plurinational State of',
'country_Bosnia and Herzegovina' => 'Bosnia and Herzegovina', 'country_Bosnia and Herzegovina' => 'Bosnija ir Hercegovina',
'country_Botswana' => 'Botswana', 'country_Botswana' => 'Botswana',
'country_Bouvet Island' => 'Bouvet Island', 'country_Bouvet Island' => 'Bouvet Island',
'country_Brazil' => 'Brazil', 'country_Brazil' => 'Brazilija',
'country_Belize' => 'Belize', 'country_Belize' => 'Belize',
'country_British Indian Ocean Territory' => 'British Indian Ocean Territory', 'country_British Indian Ocean Territory' => 'British Indian Ocean Territory',
'country_Solomon Islands' => 'Solomon Islands', 'country_Solomon Islands' => 'Solomon Islands',
@ -1460,7 +1460,7 @@ $LANG = array(
'country_Bulgaria' => 'Bulgaria', 'country_Bulgaria' => 'Bulgaria',
'country_Myanmar' => 'Myanmar', 'country_Myanmar' => 'Myanmar',
'country_Burundi' => 'Burundi', 'country_Burundi' => 'Burundi',
'country_Belarus' => 'Belarus', 'country_Belarus' => 'Baltarusija',
'country_Cambodia' => 'Cambodia', 'country_Cambodia' => 'Cambodia',
'country_Cameroon' => 'Cameroon', 'country_Cameroon' => 'Cameroon',
'country_Canada' => 'Canada', 'country_Canada' => 'Canada',
@ -1480,13 +1480,13 @@ $LANG = array(
'country_Congo' => 'Congo', 'country_Congo' => 'Congo',
'country_Congo, the Democratic Republic of the' => 'Congo, the Democratic Republic of the', 'country_Congo, the Democratic Republic of the' => 'Congo, the Democratic Republic of the',
'country_Cook Islands' => 'Cook Islands', 'country_Cook Islands' => 'Cook Islands',
'country_Costa Rica' => 'Costa Rica', 'country_Costa Rica' => 'Kosta Rika',
'country_Croatia' => 'Croatia', 'country_Croatia' => 'Kroatija',
'country_Cuba' => 'Cuba', 'country_Cuba' => 'Kuba',
'country_Cyprus' => 'Cyprus', 'country_Cyprus' => 'Kipras',
'country_Czech Republic' => 'Czech Republic', 'country_Czech Republic' => 'Čekoslovakija',
'country_Benin' => 'Benin', 'country_Benin' => 'Benin',
'country_Denmark' => 'Denmark', 'country_Denmark' => 'Danija',
'country_Dominica' => 'Dominica', 'country_Dominica' => 'Dominica',
'country_Dominican Republic' => 'Dominican Republic', 'country_Dominican Republic' => 'Dominican Republic',
'country_Ecuador' => 'Ecuador', 'country_Ecuador' => 'Ecuador',
@ -1494,27 +1494,27 @@ $LANG = array(
'country_Equatorial Guinea' => 'Equatorial Guinea', 'country_Equatorial Guinea' => 'Equatorial Guinea',
'country_Ethiopia' => 'Ethiopia', 'country_Ethiopia' => 'Ethiopia',
'country_Eritrea' => 'Eritrea', 'country_Eritrea' => 'Eritrea',
'country_Estonia' => 'Estonia', 'country_Estonia' => 'Estija',
'country_Faroe Islands' => 'Faroe Islands', 'country_Faroe Islands' => 'Faroe Islands',
'country_Falkland Islands (Malvinas)' => 'Falkland Islands (Malvinas)', 'country_Falkland Islands (Malvinas)' => 'Falkland Islands (Malvinas)',
'country_South Georgia and the South Sandwich Islands' => 'South Georgia and the South Sandwich Islands', 'country_South Georgia and the South Sandwich Islands' => 'South Georgia and the South Sandwich Islands',
'country_Fiji' => 'Fiji', 'country_Fiji' => 'Fiji',
'country_Finland' => 'Finland', 'country_Finland' => 'Suomija',
'country_Åland Islands' => 'Åland Islands', 'country_Åland Islands' => 'Åland Islands',
'country_France' => 'France', 'country_France' => 'Prancūzija',
'country_French Guiana' => 'French Guiana', 'country_French Guiana' => 'French Guiana',
'country_French Polynesia' => 'French Polynesia', 'country_French Polynesia' => 'French Polynesia',
'country_French Southern Territories' => 'French Southern Territories', 'country_French Southern Territories' => 'French Southern Territories',
'country_Djibouti' => 'Djibouti', 'country_Djibouti' => 'Djibouti',
'country_Gabon' => 'Gabon', 'country_Gabon' => 'Gabon',
'country_Georgia' => 'Georgia', 'country_Georgia' => 'Gruzija',
'country_Gambia' => 'Gambia', 'country_Gambia' => 'Gambia',
'country_Palestinian Territory, Occupied' => 'Palestinian Territory, Occupied', 'country_Palestinian Territory, Occupied' => 'Palestinian Territory, Occupied',
'country_Germany' => 'Germany', 'country_Germany' => 'Germany',
'country_Ghana' => 'Ghana', 'country_Ghana' => 'Ghana',
'country_Gibraltar' => 'Gibraltar', 'country_Gibraltar' => 'Gibraltar',
'country_Kiribati' => 'Kiribati', 'country_Kiribati' => 'Kiribati',
'country_Greece' => 'Greece', 'country_Greece' => 'Graikija',
'country_Greenland' => 'Greenland', 'country_Greenland' => 'Greenland',
'country_Grenada' => 'Grenada', 'country_Grenada' => 'Grenada',
'country_Guadeloupe' => 'Guadeloupe', 'country_Guadeloupe' => 'Guadeloupe',
@ -1527,33 +1527,33 @@ $LANG = array(
'country_Holy See (Vatican City State)' => 'Holy See (Vatican City State)', 'country_Holy See (Vatican City State)' => 'Holy See (Vatican City State)',
'country_Honduras' => 'Honduras', 'country_Honduras' => 'Honduras',
'country_Hong Kong' => 'Hong Kong', 'country_Hong Kong' => 'Hong Kong',
'country_Hungary' => 'Hungary', 'country_Hungary' => 'Vengrija',
'country_Iceland' => 'Iceland', 'country_Iceland' => 'Iceland',
'country_India' => 'India', 'country_India' => 'Indija',
'country_Indonesia' => 'Indonesia', 'country_Indonesia' => 'Indonesia',
'country_Iran, Islamic Republic of' => 'Iran, Islamic Republic of', 'country_Iran, Islamic Republic of' => 'Iran, Islamic Republic of',
'country_Iraq' => 'Iraq', 'country_Iraq' => 'Irakas',
'country_Ireland' => 'Ireland', 'country_Ireland' => 'Airija',
'country_Israel' => 'Israel', 'country_Israel' => 'Izrajelis',
'country_Italy' => 'Italy', 'country_Italy' => 'Italija',
'country_Côte d\'Ivoire' => 'Côte d\'Ivoire', 'country_Côte d\'Ivoire' => 'Côte d\'Ivoire',
'country_Jamaica' => 'Jamaica', 'country_Jamaica' => 'Jamaica',
'country_Japan' => 'Japan', 'country_Japan' => 'Japonija',
'country_Kazakhstan' => 'Kazakhstan', 'country_Kazakhstan' => 'Kazachstanas',
'country_Jordan' => 'Jordan', 'country_Jordan' => 'Jordan',
'country_Kenya' => 'Kenya', 'country_Kenya' => 'Kenya',
'country_Korea, Democratic People\'s Republic of' => 'Korea, Democratic People\'s Republic of', 'country_Korea, Democratic People\'s Republic of' => 'Korea, Democratic People\'s Republic of',
'country_Korea, Republic of' => 'Korea, Republic of', 'country_Korea, Republic of' => 'Korea, Republic of',
'country_Kuwait' => 'Kuwait', 'country_Kuwait' => 'Kuwait',
'country_Kyrgyzstan' => 'Kyrgyzstan', 'country_Kyrgyzstan' => 'Kirgizija',
'country_Lao People\'s Democratic Republic' => 'Lao People\'s Democratic Republic', 'country_Lao People\'s Democratic Republic' => 'Lao People\'s Democratic Republic',
'country_Lebanon' => 'Lebanon', 'country_Lebanon' => 'Lebanon',
'country_Lesotho' => 'Lesotho', 'country_Lesotho' => 'Lesotho',
'country_Latvia' => 'Latvia', 'country_Latvia' => 'Latvija',
'country_Liberia' => 'Liberia', 'country_Liberia' => 'Liberia',
'country_Libya' => 'Libya', 'country_Libya' => 'Libya',
'country_Liechtenstein' => 'Liechtenstein', 'country_Liechtenstein' => 'Liechtenstein',
'country_Lithuania' => 'Lithuania', 'country_Lithuania' => 'Lietuva',
'country_Luxembourg' => 'Luxembourg', 'country_Luxembourg' => 'Luxembourg',
'country_Macao' => 'Macao', 'country_Macao' => 'Macao',
'country_Madagascar' => 'Madagascar', 'country_Madagascar' => 'Madagascar',
@ -1603,7 +1603,7 @@ $LANG = array(
'country_Peru' => 'Peru', 'country_Peru' => 'Peru',
'country_Philippines' => 'Philippines', 'country_Philippines' => 'Philippines',
'country_Pitcairn' => 'Pitcairn', 'country_Pitcairn' => 'Pitcairn',
'country_Poland' => 'Poland', 'country_Poland' => 'Lenkija',
'country_Portugal' => 'Portugal', 'country_Portugal' => 'Portugal',
'country_Guinea-Bissau' => 'Guinea-Bissau', 'country_Guinea-Bissau' => 'Guinea-Bissau',
'country_Timor-Leste' => 'Timor-Leste', 'country_Timor-Leste' => 'Timor-Leste',
@ -1611,7 +1611,7 @@ $LANG = array(
'country_Qatar' => 'Qatar', 'country_Qatar' => 'Qatar',
'country_Réunion' => 'Réunion', 'country_Réunion' => 'Réunion',
'country_Romania' => 'Romania', 'country_Romania' => 'Romania',
'country_Russian Federation' => 'Russian Federation', 'country_Russian Federation' => 'Rusija',
'country_Rwanda' => 'Rwanda', 'country_Rwanda' => 'Rwanda',
'country_Saint Barthélemy' => 'Saint Barthélemy', 'country_Saint Barthélemy' => 'Saint Barthélemy',
'country_Saint Helena, Ascension and Tristan da Cunha' => 'Saint Helena, Ascension and Tristan da Cunha', 'country_Saint Helena, Ascension and Tristan da Cunha' => 'Saint Helena, Ascension and Tristan da Cunha',
@ -1642,8 +1642,8 @@ $LANG = array(
'country_Suriname' => 'Suriname', 'country_Suriname' => 'Suriname',
'country_Svalbard and Jan Mayen' => 'Svalbard and Jan Mayen', 'country_Svalbard and Jan Mayen' => 'Svalbard and Jan Mayen',
'country_Swaziland' => 'Swaziland', 'country_Swaziland' => 'Swaziland',
'country_Sweden' => 'Sweden', 'country_Sweden' => 'Švedija',
'country_Switzerland' => 'Switzerland', 'country_Switzerland' => 'Šveicarija',
'country_Syrian Arab Republic' => 'Syrian Arab Republic', 'country_Syrian Arab Republic' => 'Syrian Arab Republic',
'country_Tajikistan' => 'Tajikistan', 'country_Tajikistan' => 'Tajikistan',
'country_Thailand' => 'Thailand', 'country_Thailand' => 'Thailand',
@ -1653,7 +1653,7 @@ $LANG = array(
'country_Trinidad and Tobago' => 'Trinidad and Tobago', 'country_Trinidad and Tobago' => 'Trinidad and Tobago',
'country_United Arab Emirates' => 'United Arab Emirates', 'country_United Arab Emirates' => 'United Arab Emirates',
'country_Tunisia' => 'Tunisia', 'country_Tunisia' => 'Tunisia',
'country_Turkey' => 'Turkey', 'country_Turkey' => 'Turkija',
'country_Turkmenistan' => 'Turkmenistan', 'country_Turkmenistan' => 'Turkmenistan',
'country_Turks and Caicos Islands' => 'Turks and Caicos Islands', 'country_Turks and Caicos Islands' => 'Turks and Caicos Islands',
'country_Tuvalu' => 'Tuvalu', 'country_Tuvalu' => 'Tuvalu',
@ -1689,12 +1689,13 @@ $LANG = array(
'lang_German' => 'German', 'lang_German' => 'German',
'lang_Italian' => 'Italian', 'lang_Italian' => 'Italian',
'lang_Japanese' => 'Japanese', 'lang_Japanese' => 'Japanese',
'lang_Lithuanian' => 'Lithuanian', 'lang_Lithuanian' => 'Lietuviškai',
'lang_Norwegian' => 'Norwegian', 'lang_Norwegian' => 'Norwegian',
'lang_Polish' => 'Polish', 'lang_Polish' => 'Lenkiškai',
'lang_Spanish' => 'Spanish', 'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain', 'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish', 'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies // Frequencies
'freq_weekly' => 'Weekly', 'freq_weekly' => 'Weekly',
@ -1707,7 +1708,7 @@ $LANG = array(
// Payment types // Payment types
'payment_type_Apply Credit' => 'Apply Credit', 'payment_type_Apply Credit' => 'Apply Credit',
'payment_type_Bank Transfer' => 'Bank Transfer', 'payment_type_Bank Transfer' => 'Pavedimu',
'payment_type_Cash' => 'Cash', 'payment_type_Cash' => 'Cash',
'payment_type_Debit' => 'Debit', 'payment_type_Debit' => 'Debit',
'payment_type_ACH' => 'ACH', 'payment_type_ACH' => 'ACH',
@ -1742,13 +1743,13 @@ $LANG = array(
'industry_Government' => 'Government', 'industry_Government' => 'Government',
'industry_Healthcare & Life Sciences' => 'Healthcare & Life Sciences', 'industry_Healthcare & Life Sciences' => 'Healthcare & Life Sciences',
'industry_Insurance' => 'Insurance', 'industry_Insurance' => 'Insurance',
'industry_Manufacturing' => 'Manufacturing', 'industry_Manufacturing' => 'Gamyba',
'industry_Marketing' => 'Marketing', 'industry_Marketing' => 'Marketingas',
'industry_Media' => 'Media', 'industry_Media' => 'Media',
'industry_Nonprofit & Higher Ed' => 'Nonprofit & Higher Ed', 'industry_Nonprofit & Higher Ed' => 'Nonprofit & Higher Ed',
'industry_Pharmaceuticals' => 'Pharmaceuticals', 'industry_Pharmaceuticals' => 'Pharmaceuticals',
'industry_Professional Services & Consulting' => 'Professional Services & Consulting', 'industry_Professional Services & Consulting' => 'Professional Services & Consulting',
'industry_Real Estate' => 'Real Estate', 'industry_Real Estate' => 'Nekilnojamas turtas',
'industry_Retail & Wholesale' => 'Retail & Wholesale', 'industry_Retail & Wholesale' => 'Retail & Wholesale',
'industry_Sports' => 'Sports', 'industry_Sports' => 'Sports',
'industry_Transportation' => 'Transportation', 'industry_Transportation' => 'Transportation',
@ -1757,31 +1758,31 @@ $LANG = array(
'industry_Photography' =>'Photography', 'industry_Photography' =>'Photography',
// Countries // Countries
'country_Afghanistan' => 'Afghanistan', 'country_Afghanistan' => 'Afganistanas',
'country_Albania' => 'Albania', 'country_Albania' => 'Albania',
'country_Antarctica' => 'Antarctica', 'country_Antarctica' => 'Antarktika',
'country_Algeria' => 'Algeria', 'country_Algeria' => 'Algeria',
'country_American Samoa' => 'American Samoa', 'country_American Samoa' => 'American Samoa',
'country_Andorra' => 'Andorra', 'country_Andorra' => 'Andora',
'country_Angola' => 'Angola', 'country_Angola' => 'Angola',
'country_Antigua and Barbuda' => 'Antigua and Barbuda', 'country_Antigua and Barbuda' => 'Antigua and Barbuda',
'country_Azerbaijan' => 'Azerbaijan', 'country_Azerbaijan' => 'Azerbaidžanas',
'country_Argentina' => 'Argentina', 'country_Argentina' => 'Argentina',
'country_Australia' => 'Australia', 'country_Australia' => 'Australija',
'country_Austria' => 'Austria', 'country_Austria' => 'Austrija',
'country_Bahamas' => 'Bahamas', 'country_Bahamas' => 'Bahamas',
'country_Bahrain' => 'Bahrain', 'country_Bahrain' => 'Bahrain',
'country_Bangladesh' => 'Bangladesh', 'country_Bangladesh' => 'Bangladesh',
'country_Armenia' => 'Armenia', 'country_Armenia' => 'Armėnija',
'country_Barbados' => 'Barbados', 'country_Barbados' => 'Barbados',
'country_Belgium' => 'Belgium', 'country_Belgium' => 'Belgija',
'country_Bermuda' => 'Bermuda', 'country_Bermuda' => 'Bermuda',
'country_Bhutan' => 'Bhutan', 'country_Bhutan' => 'Bhutan',
'country_Bolivia, Plurinational State of' => 'Bolivia, Plurinational State of', 'country_Bolivia, Plurinational State of' => 'Bolivia, Plurinational State of',
'country_Bosnia and Herzegovina' => 'Bosnia and Herzegovina', 'country_Bosnia and Herzegovina' => 'Bosnija ir Hercegovina',
'country_Botswana' => 'Botswana', 'country_Botswana' => 'Botswana',
'country_Bouvet Island' => 'Bouvet Island', 'country_Bouvet Island' => 'Bouvet Island',
'country_Brazil' => 'Brazil', 'country_Brazil' => 'Brazilija',
'country_Belize' => 'Belize', 'country_Belize' => 'Belize',
'country_British Indian Ocean Territory' => 'British Indian Ocean Territory', 'country_British Indian Ocean Territory' => 'British Indian Ocean Territory',
'country_Solomon Islands' => 'Solomon Islands', 'country_Solomon Islands' => 'Solomon Islands',
@ -1790,7 +1791,7 @@ $LANG = array(
'country_Bulgaria' => 'Bulgaria', 'country_Bulgaria' => 'Bulgaria',
'country_Myanmar' => 'Myanmar', 'country_Myanmar' => 'Myanmar',
'country_Burundi' => 'Burundi', 'country_Burundi' => 'Burundi',
'country_Belarus' => 'Belarus', 'country_Belarus' => 'Baltarusija',
'country_Cambodia' => 'Cambodia', 'country_Cambodia' => 'Cambodia',
'country_Cameroon' => 'Cameroon', 'country_Cameroon' => 'Cameroon',
'country_Canada' => 'Canada', 'country_Canada' => 'Canada',
@ -1810,13 +1811,13 @@ $LANG = array(
'country_Congo' => 'Congo', 'country_Congo' => 'Congo',
'country_Congo, the Democratic Republic of the' => 'Congo, the Democratic Republic of the', 'country_Congo, the Democratic Republic of the' => 'Congo, the Democratic Republic of the',
'country_Cook Islands' => 'Cook Islands', 'country_Cook Islands' => 'Cook Islands',
'country_Costa Rica' => 'Costa Rica', 'country_Costa Rica' => 'Kosta Rika',
'country_Croatia' => 'Croatia', 'country_Croatia' => 'Kroatija',
'country_Cuba' => 'Cuba', 'country_Cuba' => 'Kuba',
'country_Cyprus' => 'Cyprus', 'country_Cyprus' => 'Kipras',
'country_Czech Republic' => 'Czech Republic', 'country_Czech Republic' => 'Čekoslovakija',
'country_Benin' => 'Benin', 'country_Benin' => 'Benin',
'country_Denmark' => 'Denmark', 'country_Denmark' => 'Danija',
'country_Dominica' => 'Dominica', 'country_Dominica' => 'Dominica',
'country_Dominican Republic' => 'Dominican Republic', 'country_Dominican Republic' => 'Dominican Republic',
'country_Ecuador' => 'Ecuador', 'country_Ecuador' => 'Ecuador',
@ -1824,27 +1825,27 @@ $LANG = array(
'country_Equatorial Guinea' => 'Equatorial Guinea', 'country_Equatorial Guinea' => 'Equatorial Guinea',
'country_Ethiopia' => 'Ethiopia', 'country_Ethiopia' => 'Ethiopia',
'country_Eritrea' => 'Eritrea', 'country_Eritrea' => 'Eritrea',
'country_Estonia' => 'Estonia', 'country_Estonia' => 'Estija',
'country_Faroe Islands' => 'Faroe Islands', 'country_Faroe Islands' => 'Faroe Islands',
'country_Falkland Islands (Malvinas)' => 'Falkland Islands (Malvinas)', 'country_Falkland Islands (Malvinas)' => 'Falkland Islands (Malvinas)',
'country_South Georgia and the South Sandwich Islands' => 'South Georgia and the South Sandwich Islands', 'country_South Georgia and the South Sandwich Islands' => 'South Georgia and the South Sandwich Islands',
'country_Fiji' => 'Fiji', 'country_Fiji' => 'Fiji',
'country_Finland' => 'Finland', 'country_Finland' => 'Suomija',
'country_Åland Islands' => 'Åland Islands', 'country_Åland Islands' => 'Åland Islands',
'country_France' => 'France', 'country_France' => 'Prancūzija',
'country_French Guiana' => 'French Guiana', 'country_French Guiana' => 'French Guiana',
'country_French Polynesia' => 'French Polynesia', 'country_French Polynesia' => 'French Polynesia',
'country_French Southern Territories' => 'French Southern Territories', 'country_French Southern Territories' => 'French Southern Territories',
'country_Djibouti' => 'Djibouti', 'country_Djibouti' => 'Djibouti',
'country_Gabon' => 'Gabon', 'country_Gabon' => 'Gabon',
'country_Georgia' => 'Georgia', 'country_Georgia' => 'Gruzija',
'country_Gambia' => 'Gambia', 'country_Gambia' => 'Gambia',
'country_Palestinian Territory, Occupied' => 'Palestinian Territory, Occupied', 'country_Palestinian Territory, Occupied' => 'Palestinian Territory, Occupied',
'country_Germany' => 'Germany', 'country_Germany' => 'Germany',
'country_Ghana' => 'Ghana', 'country_Ghana' => 'Ghana',
'country_Gibraltar' => 'Gibraltar', 'country_Gibraltar' => 'Gibraltar',
'country_Kiribati' => 'Kiribati', 'country_Kiribati' => 'Kiribati',
'country_Greece' => 'Greece', 'country_Greece' => 'Graikija',
'country_Greenland' => 'Greenland', 'country_Greenland' => 'Greenland',
'country_Grenada' => 'Grenada', 'country_Grenada' => 'Grenada',
'country_Guadeloupe' => 'Guadeloupe', 'country_Guadeloupe' => 'Guadeloupe',
@ -1857,33 +1858,33 @@ $LANG = array(
'country_Holy See (Vatican City State)' => 'Holy See (Vatican City State)', 'country_Holy See (Vatican City State)' => 'Holy See (Vatican City State)',
'country_Honduras' => 'Honduras', 'country_Honduras' => 'Honduras',
'country_Hong Kong' => 'Hong Kong', 'country_Hong Kong' => 'Hong Kong',
'country_Hungary' => 'Hungary', 'country_Hungary' => 'Vengrija',
'country_Iceland' => 'Iceland', 'country_Iceland' => 'Iceland',
'country_India' => 'India', 'country_India' => 'Indija',
'country_Indonesia' => 'Indonesia', 'country_Indonesia' => 'Indonesia',
'country_Iran, Islamic Republic of' => 'Iran, Islamic Republic of', 'country_Iran, Islamic Republic of' => 'Iran, Islamic Republic of',
'country_Iraq' => 'Iraq', 'country_Iraq' => 'Irakas',
'country_Ireland' => 'Ireland', 'country_Ireland' => 'Airija',
'country_Israel' => 'Israel', 'country_Israel' => 'Izrajelis',
'country_Italy' => 'Italy', 'country_Italy' => 'Italija',
'country_Côte d\'Ivoire' => 'Côte d\'Ivoire', 'country_Côte d\'Ivoire' => 'Côte d\'Ivoire',
'country_Jamaica' => 'Jamaica', 'country_Jamaica' => 'Jamaica',
'country_Japan' => 'Japan', 'country_Japan' => 'Japonija',
'country_Kazakhstan' => 'Kazakhstan', 'country_Kazakhstan' => 'Kazachstanas',
'country_Jordan' => 'Jordan', 'country_Jordan' => 'Jordan',
'country_Kenya' => 'Kenya', 'country_Kenya' => 'Kenya',
'country_Korea, Democratic People\'s Republic of' => 'Korea, Democratic People\'s Republic of', 'country_Korea, Democratic People\'s Republic of' => 'Korea, Democratic People\'s Republic of',
'country_Korea, Republic of' => 'Korea, Republic of', 'country_Korea, Republic of' => 'Korea, Republic of',
'country_Kuwait' => 'Kuwait', 'country_Kuwait' => 'Kuwait',
'country_Kyrgyzstan' => 'Kyrgyzstan', 'country_Kyrgyzstan' => 'Kirgizija',
'country_Lao People\'s Democratic Republic' => 'Lao People\'s Democratic Republic', 'country_Lao People\'s Democratic Republic' => 'Lao People\'s Democratic Republic',
'country_Lebanon' => 'Lebanon', 'country_Lebanon' => 'Lebanon',
'country_Lesotho' => 'Lesotho', 'country_Lesotho' => 'Lesotho',
'country_Latvia' => 'Latvia', 'country_Latvia' => 'Latvija',
'country_Liberia' => 'Liberia', 'country_Liberia' => 'Liberia',
'country_Libya' => 'Libya', 'country_Libya' => 'Libya',
'country_Liechtenstein' => 'Liechtenstein', 'country_Liechtenstein' => 'Liechtenstein',
'country_Lithuania' => 'Lithuania', 'country_Lithuania' => 'Lietuva',
'country_Luxembourg' => 'Luxembourg', 'country_Luxembourg' => 'Luxembourg',
'country_Macao' => 'Macao', 'country_Macao' => 'Macao',
'country_Madagascar' => 'Madagascar', 'country_Madagascar' => 'Madagascar',
@ -1933,7 +1934,7 @@ $LANG = array(
'country_Peru' => 'Peru', 'country_Peru' => 'Peru',
'country_Philippines' => 'Philippines', 'country_Philippines' => 'Philippines',
'country_Pitcairn' => 'Pitcairn', 'country_Pitcairn' => 'Pitcairn',
'country_Poland' => 'Poland', 'country_Poland' => 'Lenkija',
'country_Portugal' => 'Portugal', 'country_Portugal' => 'Portugal',
'country_Guinea-Bissau' => 'Guinea-Bissau', 'country_Guinea-Bissau' => 'Guinea-Bissau',
'country_Timor-Leste' => 'Timor-Leste', 'country_Timor-Leste' => 'Timor-Leste',
@ -1941,7 +1942,7 @@ $LANG = array(
'country_Qatar' => 'Qatar', 'country_Qatar' => 'Qatar',
'country_Réunion' => 'Réunion', 'country_Réunion' => 'Réunion',
'country_Romania' => 'Romania', 'country_Romania' => 'Romania',
'country_Russian Federation' => 'Russian Federation', 'country_Russian Federation' => 'Rusija',
'country_Rwanda' => 'Rwanda', 'country_Rwanda' => 'Rwanda',
'country_Saint Barthélemy' => 'Saint Barthélemy', 'country_Saint Barthélemy' => 'Saint Barthélemy',
'country_Saint Helena, Ascension and Tristan da Cunha' => 'Saint Helena, Ascension and Tristan da Cunha', 'country_Saint Helena, Ascension and Tristan da Cunha' => 'Saint Helena, Ascension and Tristan da Cunha',
@ -1972,8 +1973,8 @@ $LANG = array(
'country_Suriname' => 'Suriname', 'country_Suriname' => 'Suriname',
'country_Svalbard and Jan Mayen' => 'Svalbard and Jan Mayen', 'country_Svalbard and Jan Mayen' => 'Svalbard and Jan Mayen',
'country_Swaziland' => 'Swaziland', 'country_Swaziland' => 'Swaziland',
'country_Sweden' => 'Sweden', 'country_Sweden' => 'Švedija',
'country_Switzerland' => 'Switzerland', 'country_Switzerland' => 'Šveicarija',
'country_Syrian Arab Republic' => 'Syrian Arab Republic', 'country_Syrian Arab Republic' => 'Syrian Arab Republic',
'country_Tajikistan' => 'Tajikistan', 'country_Tajikistan' => 'Tajikistan',
'country_Thailand' => 'Thailand', 'country_Thailand' => 'Thailand',
@ -1983,7 +1984,7 @@ $LANG = array(
'country_Trinidad and Tobago' => 'Trinidad and Tobago', 'country_Trinidad and Tobago' => 'Trinidad and Tobago',
'country_United Arab Emirates' => 'United Arab Emirates', 'country_United Arab Emirates' => 'United Arab Emirates',
'country_Tunisia' => 'Tunisia', 'country_Tunisia' => 'Tunisia',
'country_Turkey' => 'Turkey', 'country_Turkey' => 'Turkija',
'country_Turkmenistan' => 'Turkmenistan', 'country_Turkmenistan' => 'Turkmenistan',
'country_Turks and Caicos Islands' => 'Turks and Caicos Islands', 'country_Turks and Caicos Islands' => 'Turks and Caicos Islands',
'country_Tuvalu' => 'Tuvalu', 'country_Tuvalu' => 'Tuvalu',
@ -2007,16 +2008,16 @@ $LANG = array(
'country_Yemen' => 'Yemen', 'country_Yemen' => 'Yemen',
'country_Zambi' => 'Zambi', 'country_Zambi' => 'Zambi',
'view_client_portal' => 'View client portal', 'view_client_portal' => 'Rodyti kliento tinklapį',
'view_portal' => 'View Portal', 'view_portal' => 'Rodyti tinklapį',
'vendor_contacts' => 'Vendor Contacts', 'vendor_contacts' => 'Tiekėjo kontaktai',
'all' => 'All', 'all' => 'Visi',
'selected' => 'Selected', 'selected' => 'Pasirinkita',
'category' => 'Category', 'category' => 'Kategorija',
'categories' => 'Categories', 'categories' => 'Kategorijos',
'new_expense_category' => 'New Expense Category', 'new_expense_category' => 'New Expense Category',
'edit_category' => 'Edit Category', 'edit_category' => 'Keisti kategoriją',
'archive_expense_category' => 'Archive Category', 'archive_expense_category' => 'Archyvo kategorija',
'expense_categories' => 'Expense Categories', 'expense_categories' => 'Expense Categories',
'list_expense_categories' => 'List Expense Categories', 'list_expense_categories' => 'List Expense Categories',
'updated_expense_category' => 'Successfully updated expense category', 'updated_expense_category' => 'Successfully updated expense category',
@ -2025,25 +2026,89 @@ $LANG = array(
'archived_expense_categories' => 'Successfully archived :count expense category', 'archived_expense_categories' => 'Successfully archived :count expense category',
'restore_expense_category' => 'Restore expense category', 'restore_expense_category' => 'Restore expense category',
'restored_expense_category' => 'Successfully restored expense category', 'restored_expense_category' => 'Successfully restored expense category',
'apply_taxes' => 'Apply taxes', 'apply_taxes' => 'Naudoti mokesčius',
'min_to_max_users' => ':min to :max users', 'min_to_max_users' => ':min iki :max klientų',
'max_users_reached' => 'The maximum number of users has been reached.', 'max_users_reached' => 'Pasiektas maksimalus galimų vartotojų skaičius.',
'buy_now_buttons' => 'Buy Now Buttons', 'buy_now_buttons' => 'Pirkti dabar mygtukas',
'landing_page' => 'Landing Page', 'landing_page' => 'Nukreipimo puslapis',
'payment_type' => 'Payment Type', 'payment_type' => 'Mokėjimo tipas',
'form' => 'Form', 'form' => 'Forma',
'link' => 'Link', 'link' => 'Nuoroda',
'fields' => 'Fields', 'fields' => 'Laukai',
'dwolla' => 'Dwolla', 'dwolla' => 'Dwolla',
'buy_now_buttons_warning' => 'Note: client and invoice records are created even if the transaction isn\'t completed.', 'buy_now_buttons_warning' => 'Note: client and invoice records are created even if the transaction isn\'t completed.',
'buy_now_buttons_disabled' => 'This feature requires that a product is created and a payment gateway is configured.', 'buy_now_buttons_disabled' => 'This feature requires that a product is created and a payment gateway is configured.',
'enable_buy_now_buttons_help' => 'Enable support for buy now buttons', 'enable_buy_now_buttons_help' => 'Enable support for buy now buttons',
'changes_take_effect_immediately' => 'Note: changes take effect immediately', 'changes_take_effect_immediately' => 'Note: changes take effect immediately',
'wepay_account_description' => 'Payment gateway for Invoice Ninja', 'wepay_account_description' => 'Mokėjimo sąsajos Invoice Ninja',
'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.', 'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.',
'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.', 'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.',
'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less', 'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less',
'error_title' => 'Kažkas negerai',
'error_contact_text' => 'If you\'d like help please email us at :mailaddress',
'no_undo' => 'Warning: this can\'t be undone.',
'no_contact_selected' => 'Prašome pasirinkti kontaktą',
'no_client_selected' => 'Prašome pasirinkti klientą',
'gateway_config_error' => 'It may help to set new passwords or generate new API keys.',
'payment_type_on_file' => ':type faile',
'invoice_for_client' => 'Invoice :invoice for :client',
'intent_not_found' => 'Sorry, I\'m not sure what you\'re asking.',
'intent_not_supported' => 'Sorry, I\'m not able to do that.',
'client_not_found' => 'I wasn\'t able to find the client',
'not_allowed' => 'Sorry, you don\'t have the needed permissions',
'bot_emailed_invoice' => 'Your invoice has been sent.',
'bot_emailed_notify_viewed' => 'I\'ll email you when it\'s viewed.',
'bot_emailed_notify_paid' => 'I\'ll email you when it\'s paid.',
'add_product_to_invoice' => 'Add 1 :product',
'not_authorized' => 'Your are not authorized',
'bot_get_email' => 'Hi! (wave)<br/>Thanks for trying the Invoice Ninja Bot.<br/>Send me your account email to get started.',
'bot_get_code' => 'Thanks! I\'ve sent a you an email with your security code.',
'bot_welcome' => 'That\'s it, your account is verified.<br/>',
'email_not_found' => 'I wasn\'t able to find an available account for :email',
'invalid_code' => 'The code is not correct',
'security_code_email_subject' => 'Security code for Invoice Ninja Bot',
'security_code_email_line1' => 'This is your Invoice Ninja Bot security code.',
'security_code_email_line2' => 'Note: it will expire in 10 minutes.',
'bot_help_message' => 'I currently support:<br/>• Create\update\email an invoice<br/>• List products<br/>For example:<br/><i>invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent</i>',
'list_products' => 'List Products',
'include_item_taxes_inline' => 'Include <b>line item taxes in line total</b>',
'created_quotes' => 'Successfully created :count quotes(s)',
'limited_gateways' => 'Note: we support one credit card gateway per company.',
'warning' => 'Warning',
'self-update' => 'Update Invoice Ninja',
'update_invoiceninja_title' => 'Update Invoice Ninja',
'update_invoiceninja_warning' => 'Before start upgrading Invoice Ninja create a backup of your database and files!',
'update_invoiceninja_available' => 'A new version of Invoice Ninja is available.',
'update_invoiceninja_unavailable' => 'No new version of Invoice Ninja available.',
'update_invoiceninja_decide_update_download' => 'You can decide to update directly to :version or to just download the new relase and update later.',
'update_invoiceninja_update_start' => 'Update now',
'update_invoiceninja_download_start' => 'Download :version',
'create_new' => 'Create New',
'toggle_navigation' => 'Toggle Navigation',
'toggle_history' => 'Toggle History',
'unassigned' => 'Unassigned',
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
'facebook_and_twitter_help' => 'Follow our feeds to help support our project',
'reseller_text' => 'Note: the white-label license is intended for personal use, please email us at :email if you\'d like to resell our app.',
'unnamed_client' => 'Unnamed Client',
'day' => 'Day',
'week' => 'Week',
'month' => 'Month',
'inactive_logout' => 'You have been logged out due to inactivity',
'reports' => 'Reports',
'total_profit' => 'Total Profit',
'total_expenses' => 'Total Expenses',
'quote_to' => 'Quote to',
); );

View File

@ -507,7 +507,7 @@ $LANG = array(
'payment_type_paypal' => 'PayPal', 'payment_type_paypal' => 'PayPal',
'payment_type_bitcoin' => 'Bitcoin', 'payment_type_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Kunnskapsbase', 'knowledge_base' => 'Kunnskapsbase',
'partial' => 'Delvis', 'partial' => 'Partial/Deposit',
'partial_remaining' => ':delvis av :balance', 'partial_remaining' => ':delvis av :balance',
'more_fields' => 'Flere Felt', 'more_fields' => 'Flere Felt',
'less_fields' => 'Mindre Felt', 'less_fields' => 'Mindre Felt',
@ -995,7 +995,7 @@ $LANG = array(
'overdue' => 'Overdue', 'overdue' => 'Overdue',
'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the invoice and client portal.',
'user_email_footer' => 'For å justere varslingsinnstillingene vennligst besøk :link', 'user_email_footer' => 'For å justere varslingsinnstillingene vennligst besøk :link',
'reset_password_footer' => 'Hvis du ikke ba om å få nullstillt ditt passord, vennligst kontakt kundeservice: :email', 'reset_password_footer' => 'Hvis du ikke ba om å få nullstillt ditt passord, vennligst kontakt kundeservice: :email',
'limit_users' => 'Dessverre, vil dette overstige grensen på :limit brukere', 'limit_users' => 'Dessverre, vil dette overstige grensen på :limit brukere',
@ -1695,6 +1695,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish', 'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain', 'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish', 'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies // Frequencies
'freq_weekly' => 'Weekly', 'freq_weekly' => 'Weekly',
@ -2043,7 +2044,71 @@ $LANG = array(
'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.', 'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.',
'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.', 'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.',
'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less', 'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less',
'error_title' => 'Something went wrong',
'error_contact_text' => 'If you\'d like help please email us at :mailaddress',
'no_undo' => 'Warning: this can\'t be undone.',
'no_contact_selected' => 'Please select a contact',
'no_client_selected' => 'Please select a client',
'gateway_config_error' => 'It may help to set new passwords or generate new API keys.',
'payment_type_on_file' => ':type on file',
'invoice_for_client' => 'Invoice :invoice for :client',
'intent_not_found' => 'Sorry, I\'m not sure what you\'re asking.',
'intent_not_supported' => 'Sorry, I\'m not able to do that.',
'client_not_found' => 'I wasn\'t able to find the client',
'not_allowed' => 'Sorry, you don\'t have the needed permissions',
'bot_emailed_invoice' => 'Your invoice has been sent.',
'bot_emailed_notify_viewed' => 'I\'ll email you when it\'s viewed.',
'bot_emailed_notify_paid' => 'I\'ll email you when it\'s paid.',
'add_product_to_invoice' => 'Add 1 :product',
'not_authorized' => 'Your are not authorized',
'bot_get_email' => 'Hi! (wave)<br/>Thanks for trying the Invoice Ninja Bot.<br/>Send me your account email to get started.',
'bot_get_code' => 'Thanks! I\'ve sent a you an email with your security code.',
'bot_welcome' => 'That\'s it, your account is verified.<br/>',
'email_not_found' => 'I wasn\'t able to find an available account for :email',
'invalid_code' => 'The code is not correct',
'security_code_email_subject' => 'Security code for Invoice Ninja Bot',
'security_code_email_line1' => 'This is your Invoice Ninja Bot security code.',
'security_code_email_line2' => 'Note: it will expire in 10 minutes.',
'bot_help_message' => 'I currently support:<br/>• Create\update\email an invoice<br/>• List products<br/>For example:<br/><i>invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent</i>',
'list_products' => 'List Products',
'include_item_taxes_inline' => 'Include <b>line item taxes in line total</b>',
'created_quotes' => 'Successfully created :count quotes(s)',
'limited_gateways' => 'Note: we support one credit card gateway per company.',
'warning' => 'Warning',
'self-update' => 'Update Invoice Ninja',
'update_invoiceninja_title' => 'Update Invoice Ninja',
'update_invoiceninja_warning' => 'Before start upgrading Invoice Ninja create a backup of your database and files!',
'update_invoiceninja_available' => 'A new version of Invoice Ninja is available.',
'update_invoiceninja_unavailable' => 'No new version of Invoice Ninja available.',
'update_invoiceninja_decide_update_download' => 'You can decide to update directly to :version or to just download the new relase and update later.',
'update_invoiceninja_update_start' => 'Update now',
'update_invoiceninja_download_start' => 'Download :version',
'create_new' => 'Create New',
'toggle_navigation' => 'Toggle Navigation',
'toggle_history' => 'Toggle History',
'unassigned' => 'Unassigned',
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
'facebook_and_twitter_help' => 'Follow our feeds to help support our project',
'reseller_text' => 'Note: the white-label license is intended for personal use, please email us at :email if you\'d like to resell our app.',
'unnamed_client' => 'Unnamed Client',
'day' => 'Day',
'week' => 'Week',
'month' => 'Month',
'inactive_logout' => 'You have been logged out due to inactivity',
'reports' => 'Reports',
'total_profit' => 'Total Profit',
'total_expenses' => 'Total Expenses',
'quote_to' => 'Quote to',
); );

View File

@ -501,7 +501,7 @@ $LANG = array(
'payment_type_paypal' => 'PayPal', 'payment_type_paypal' => 'PayPal',
'payment_type_bitcoin' => 'Bitcoin', 'payment_type_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Kennisbank', 'knowledge_base' => 'Kennisbank',
'partial' => 'Gedeeld', 'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial / :balance', 'partial_remaining' => ':partial / :balance',
'more_fields' => 'Meer velden', 'more_fields' => 'Meer velden',
'less_fields' => 'Minder velden', 'less_fields' => 'Minder velden',
@ -986,7 +986,7 @@ $LANG = array(
'overdue' => 'Verlopen', 'overdue' => 'Verlopen',
'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the invoice and client portal.',
'user_email_footer' => 'Ga alstublieft naar :link om uw e-mail notificatie instellingen aan te passen', 'user_email_footer' => 'Ga alstublieft naar :link om uw e-mail notificatie instellingen aan te passen',
'reset_password_footer' => 'Neem a.u.b. contact op met onze helpdesk indien u deze wachtwoordreset niet heeft aangevraagd. Het e-mailadres van de helpdesk is :email', 'reset_password_footer' => 'Neem a.u.b. contact op met onze helpdesk indien u deze wachtwoordreset niet heeft aangevraagd. Het e-mailadres van de helpdesk is :email',
'limit_users' => 'Sorry, dit zou de limiet van :limit gebruikers overschrijden', 'limit_users' => 'Sorry, dit zou de limiet van :limit gebruikers overschrijden',
@ -1686,6 +1686,7 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen
'lang_Spanish' => 'Spanish', 'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain', 'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish', 'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies // Frequencies
'freq_weekly' => 'Weekly', 'freq_weekly' => 'Weekly',
@ -2034,7 +2035,71 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen
'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.', 'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.',
'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.', 'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.',
'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less', 'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less',
'error_title' => 'Something went wrong',
'error_contact_text' => 'If you\'d like help please email us at :mailaddress',
'no_undo' => 'Warning: this can\'t be undone.',
'no_contact_selected' => 'Please select a contact',
'no_client_selected' => 'Please select a client',
'gateway_config_error' => 'It may help to set new passwords or generate new API keys.',
'payment_type_on_file' => ':type on file',
'invoice_for_client' => 'Invoice :invoice for :client',
'intent_not_found' => 'Sorry, I\'m not sure what you\'re asking.',
'intent_not_supported' => 'Sorry, I\'m not able to do that.',
'client_not_found' => 'I wasn\'t able to find the client',
'not_allowed' => 'Sorry, you don\'t have the needed permissions',
'bot_emailed_invoice' => 'Your invoice has been sent.',
'bot_emailed_notify_viewed' => 'I\'ll email you when it\'s viewed.',
'bot_emailed_notify_paid' => 'I\'ll email you when it\'s paid.',
'add_product_to_invoice' => 'Add 1 :product',
'not_authorized' => 'Your are not authorized',
'bot_get_email' => 'Hi! (wave)<br/>Thanks for trying the Invoice Ninja Bot.<br/>Send me your account email to get started.',
'bot_get_code' => 'Thanks! I\'ve sent a you an email with your security code.',
'bot_welcome' => 'That\'s it, your account is verified.<br/>',
'email_not_found' => 'I wasn\'t able to find an available account for :email',
'invalid_code' => 'The code is not correct',
'security_code_email_subject' => 'Security code for Invoice Ninja Bot',
'security_code_email_line1' => 'This is your Invoice Ninja Bot security code.',
'security_code_email_line2' => 'Note: it will expire in 10 minutes.',
'bot_help_message' => 'I currently support:<br/>• Create\update\email an invoice<br/>• List products<br/>For example:<br/><i>invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent</i>',
'list_products' => 'List Products',
'include_item_taxes_inline' => 'Include <b>line item taxes in line total</b>',
'created_quotes' => 'Successfully created :count quotes(s)',
'limited_gateways' => 'Note: we support one credit card gateway per company.',
'warning' => 'Warning',
'self-update' => 'Update Invoice Ninja',
'update_invoiceninja_title' => 'Update Invoice Ninja',
'update_invoiceninja_warning' => 'Before start upgrading Invoice Ninja create a backup of your database and files!',
'update_invoiceninja_available' => 'A new version of Invoice Ninja is available.',
'update_invoiceninja_unavailable' => 'No new version of Invoice Ninja available.',
'update_invoiceninja_decide_update_download' => 'You can decide to update directly to :version or to just download the new relase and update later.',
'update_invoiceninja_update_start' => 'Update now',
'update_invoiceninja_download_start' => 'Download :version',
'create_new' => 'Create New',
'toggle_navigation' => 'Toggle Navigation',
'toggle_history' => 'Toggle History',
'unassigned' => 'Unassigned',
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
'facebook_and_twitter_help' => 'Follow our feeds to help support our project',
'reseller_text' => 'Note: the white-label license is intended for personal use, please email us at :email if you\'d like to resell our app.',
'unnamed_client' => 'Unnamed Client',
'day' => 'Day',
'week' => 'Week',
'month' => 'Month',
'inactive_logout' => 'You have been logged out due to inactivity',
'reports' => 'Reports',
'total_profit' => 'Total Profit',
'total_expenses' => 'Total Expenses',
'quote_to' => 'Quote to',
); );

View File

@ -507,7 +507,7 @@ $LANG = array(
'payment_type_paypal' => 'PayPal', 'payment_type_paypal' => 'PayPal',
'payment_type_bitcoin' => 'Bitcoin', 'payment_type_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Baza wiedzy', 'knowledge_base' => 'Baza wiedzy',
'partial' => 'Zaliczka', 'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial z :balance', 'partial_remaining' => ':partial z :balance',
'more_fields' => 'Więcej pól', 'more_fields' => 'Więcej pól',
'less_fields' => 'Mniej pól', 'less_fields' => 'Mniej pól',
@ -995,7 +995,7 @@ $LANG = array(
'overdue' => 'Zaległy', 'overdue' => 'Zaległy',
'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the invoice and client portal.',
'user_email_footer' => 'Aby dostosować ustawienia powiadomień email, zobacz :link', 'user_email_footer' => 'Aby dostosować ustawienia powiadomień email, zobacz :link',
'reset_password_footer' => 'If you did not request this password reset please email our support: :email', 'reset_password_footer' => 'If you did not request this password reset please email our support: :email',
'limit_users' => 'Sorry, this will exceed the limit of :limit users', 'limit_users' => 'Sorry, this will exceed the limit of :limit users',
@ -1695,6 +1695,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish', 'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain', 'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish', 'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies // Frequencies
'freq_weekly' => 'Weekly', 'freq_weekly' => 'Weekly',
@ -2043,7 +2044,71 @@ $LANG = array(
'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.', 'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.',
'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.', 'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.',
'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less', 'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less',
'error_title' => 'Something went wrong',
'error_contact_text' => 'If you\'d like help please email us at :mailaddress',
'no_undo' => 'Warning: this can\'t be undone.',
'no_contact_selected' => 'Please select a contact',
'no_client_selected' => 'Please select a client',
'gateway_config_error' => 'It may help to set new passwords or generate new API keys.',
'payment_type_on_file' => ':type on file',
'invoice_for_client' => 'Invoice :invoice for :client',
'intent_not_found' => 'Sorry, I\'m not sure what you\'re asking.',
'intent_not_supported' => 'Sorry, I\'m not able to do that.',
'client_not_found' => 'I wasn\'t able to find the client',
'not_allowed' => 'Sorry, you don\'t have the needed permissions',
'bot_emailed_invoice' => 'Your invoice has been sent.',
'bot_emailed_notify_viewed' => 'I\'ll email you when it\'s viewed.',
'bot_emailed_notify_paid' => 'I\'ll email you when it\'s paid.',
'add_product_to_invoice' => 'Add 1 :product',
'not_authorized' => 'Your are not authorized',
'bot_get_email' => 'Hi! (wave)<br/>Thanks for trying the Invoice Ninja Bot.<br/>Send me your account email to get started.',
'bot_get_code' => 'Thanks! I\'ve sent a you an email with your security code.',
'bot_welcome' => 'That\'s it, your account is verified.<br/>',
'email_not_found' => 'I wasn\'t able to find an available account for :email',
'invalid_code' => 'The code is not correct',
'security_code_email_subject' => 'Security code for Invoice Ninja Bot',
'security_code_email_line1' => 'This is your Invoice Ninja Bot security code.',
'security_code_email_line2' => 'Note: it will expire in 10 minutes.',
'bot_help_message' => 'I currently support:<br/>• Create\update\email an invoice<br/>• List products<br/>For example:<br/><i>invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent</i>',
'list_products' => 'List Products',
'include_item_taxes_inline' => 'Include <b>line item taxes in line total</b>',
'created_quotes' => 'Successfully created :count quotes(s)',
'limited_gateways' => 'Note: we support one credit card gateway per company.',
'warning' => 'Warning',
'self-update' => 'Update Invoice Ninja',
'update_invoiceninja_title' => 'Update Invoice Ninja',
'update_invoiceninja_warning' => 'Before start upgrading Invoice Ninja create a backup of your database and files!',
'update_invoiceninja_available' => 'A new version of Invoice Ninja is available.',
'update_invoiceninja_unavailable' => 'No new version of Invoice Ninja available.',
'update_invoiceninja_decide_update_download' => 'You can decide to update directly to :version or to just download the new relase and update later.',
'update_invoiceninja_update_start' => 'Update now',
'update_invoiceninja_download_start' => 'Download :version',
'create_new' => 'Create New',
'toggle_navigation' => 'Toggle Navigation',
'toggle_history' => 'Toggle History',
'unassigned' => 'Unassigned',
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
'facebook_and_twitter_help' => 'Follow our feeds to help support our project',
'reseller_text' => 'Note: the white-label license is intended for personal use, please email us at :email if you\'d like to resell our app.',
'unnamed_client' => 'Unnamed Client',
'day' => 'Day',
'week' => 'Week',
'month' => 'Month',
'inactive_logout' => 'You have been logged out due to inactivity',
'reports' => 'Reports',
'total_profit' => 'Total Profit',
'total_expenses' => 'Total Expenses',
'quote_to' => 'Quote to',
); );

View File

@ -501,7 +501,7 @@ $LANG = array(
'payment_type_paypal' => 'PayPal', 'payment_type_paypal' => 'PayPal',
'payment_type_bitcoin' => 'Bitcoin', 'payment_type_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Base de Conhecimento', 'knowledge_base' => 'Base de Conhecimento',
'partial' => 'Parcial', 'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial de :balance', 'partial_remaining' => ':partial de :balance',
'more_fields' => 'Mais Campos', 'more_fields' => 'Mais Campos',
'less_fields' => 'Menos Campos', 'less_fields' => 'Menos Campos',
@ -986,7 +986,7 @@ $LANG = array(
'overdue' => 'Vencido', 'overdue' => 'Vencido',
'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the invoice and client portal.',
'user_email_footer' => 'Para ajustar suas configurações de notificações de e-mail acesse :link', 'user_email_footer' => 'Para ajustar suas configurações de notificações de e-mail acesse :link',
'reset_password_footer' => 'Se você não solicitou a redefinição de sua senha por favor envie um e-mail para o nosso suporte: :email', 'reset_password_footer' => 'Se você não solicitou a redefinição de sua senha por favor envie um e-mail para o nosso suporte: :email',
'limit_users' => 'Desculpe, isto irá exceder o limite de :limit usuários', 'limit_users' => 'Desculpe, isto irá exceder o limite de :limit usuários',
@ -1686,6 +1686,7 @@ Quando tiver os valores dos depósitos, volte a esta pagina e complete a verific
'lang_Spanish' => 'Spanish', 'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain', 'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish', 'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies // Frequencies
'freq_weekly' => 'Weekly', 'freq_weekly' => 'Weekly',
@ -2034,7 +2035,71 @@ Quando tiver os valores dos depósitos, volte a esta pagina e complete a verific
'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.', 'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.',
'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.', 'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.',
'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less', 'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less',
'error_title' => 'Something went wrong',
'error_contact_text' => 'If you\'d like help please email us at :mailaddress',
'no_undo' => 'Warning: this can\'t be undone.',
'no_contact_selected' => 'Please select a contact',
'no_client_selected' => 'Please select a client',
'gateway_config_error' => 'It may help to set new passwords or generate new API keys.',
'payment_type_on_file' => ':type on file',
'invoice_for_client' => 'Invoice :invoice for :client',
'intent_not_found' => 'Sorry, I\'m not sure what you\'re asking.',
'intent_not_supported' => 'Sorry, I\'m not able to do that.',
'client_not_found' => 'I wasn\'t able to find the client',
'not_allowed' => 'Sorry, you don\'t have the needed permissions',
'bot_emailed_invoice' => 'Your invoice has been sent.',
'bot_emailed_notify_viewed' => 'I\'ll email you when it\'s viewed.',
'bot_emailed_notify_paid' => 'I\'ll email you when it\'s paid.',
'add_product_to_invoice' => 'Add 1 :product',
'not_authorized' => 'Your are not authorized',
'bot_get_email' => 'Hi! (wave)<br/>Thanks for trying the Invoice Ninja Bot.<br/>Send me your account email to get started.',
'bot_get_code' => 'Thanks! I\'ve sent a you an email with your security code.',
'bot_welcome' => 'That\'s it, your account is verified.<br/>',
'email_not_found' => 'I wasn\'t able to find an available account for :email',
'invalid_code' => 'The code is not correct',
'security_code_email_subject' => 'Security code for Invoice Ninja Bot',
'security_code_email_line1' => 'This is your Invoice Ninja Bot security code.',
'security_code_email_line2' => 'Note: it will expire in 10 minutes.',
'bot_help_message' => 'I currently support:<br/>• Create\update\email an invoice<br/>• List products<br/>For example:<br/><i>invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent</i>',
'list_products' => 'List Products',
'include_item_taxes_inline' => 'Include <b>line item taxes in line total</b>',
'created_quotes' => 'Successfully created :count quotes(s)',
'limited_gateways' => 'Note: we support one credit card gateway per company.',
'warning' => 'Warning',
'self-update' => 'Update Invoice Ninja',
'update_invoiceninja_title' => 'Update Invoice Ninja',
'update_invoiceninja_warning' => 'Before start upgrading Invoice Ninja create a backup of your database and files!',
'update_invoiceninja_available' => 'A new version of Invoice Ninja is available.',
'update_invoiceninja_unavailable' => 'No new version of Invoice Ninja available.',
'update_invoiceninja_decide_update_download' => 'You can decide to update directly to :version or to just download the new relase and update later.',
'update_invoiceninja_update_start' => 'Update now',
'update_invoiceninja_download_start' => 'Download :version',
'create_new' => 'Create New',
'toggle_navigation' => 'Toggle Navigation',
'toggle_history' => 'Toggle History',
'unassigned' => 'Unassigned',
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
'facebook_and_twitter_help' => 'Follow our feeds to help support our project',
'reseller_text' => 'Note: the white-label license is intended for personal use, please email us at :email if you\'d like to resell our app.',
'unnamed_client' => 'Unnamed Client',
'day' => 'Day',
'week' => 'Week',
'month' => 'Month',
'inactive_logout' => 'You have been logged out due to inactivity',
'reports' => 'Reports',
'total_profit' => 'Total Profit',
'total_expenses' => 'Total Expenses',
'quote_to' => 'Quote to',
); );

View File

@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used during authentication for various
| messages that we need to display to the user. You are free to modify
| these language lines according to your application's requirements.
|
*/
'failed' => 'These credentials do not match our records.',
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
];

View File

@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; Prapa',
'next' => 'Para &raquo;',
];

View File

@ -0,0 +1,22 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Password Reminder Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are the default lines which match reasons
| that are given by the password broker for a password update attempt
| has failed, such as for an invalid token or invalid new password.
|
*/
'password' => 'Fjalëkalimet duhet të jenë gjashtë karaktere dhe të përputhen me konfirmimin.',
'reset' => 'Fjalëkalimi u ndryshua!',
'sent' => 'Adresa për ndryshimin e fjalëkalimit u dërgua!',
'token' => 'Ky tallon për ndryshimin e fjalëkalimit është i pasaktë.',
'user' => 'Nuk mund të gjejmë një përdorues me atë adres email-i.',
];

2115
resources/lang/sq/texts.php Executable file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,119 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| such as the size rules. Feel free to tweak each of these messages.
|
*/
'accepted' => ':attribute duhet të pranohet.',
'active_url' => ':attribute nuk është adresë e saktë.',
'after' => ':attribute duhet të jetë datë pas :date.',
'alpha' => ':attribute mund të përmbajë vetëm shkronja.',
'alpha_dash' => ':attribute mund të përmbajë vetëm shkronja, numra, dhe viza.',
'alpha_num' => ':attribute mund të përmbajë vetëm shkronja dhe numra.',
'array' => ':attribute duhet të jetë një bashkësi (array).',
'before' => ':attribute duhet të jetë datë para :date.',
'between' => [
'numeric' => ':attribute duhet të jetë midis :min - :max.',
'file' => ':attribute duhet të jetë midis :min - :max kilobajtëve.',
'string' => ':attribute duhet të jetë midis :min - :max karaktereve.',
'array' => ':attribute duhet të jetë midis :min - :max elementëve.',
],
'boolean' => 'Fusha :attribute duhet të jetë e vërtetë ose e gabuar',
'confirmed' => ':attribute konfirmimi nuk përputhet.',
'date' => ':attribute nuk është një datë e saktë.',
'date_format' => ':attribute nuk i përshtatet formatit :format.',
'different' => ':attribute dhe :other duhet të jenë të ndryshme.',
'digits' => ':attribute duhet të jetë :digits shifra.',
'digits_between' => ':attribute duhet të jetë midis :min dhe :max shifra.',
'dimensions' => 'The :attribute has invalid image dimensions.',
'distinct' => 'The :attribute field has a duplicate value.',
'email' => ':attribute formati është i pasaktë.',
'exists' => ':attribute përzgjedhur është i/e pasaktë.',
'file' => 'The :attribute must be a file.',
'filled' => 'Fusha :attribute është e kërkuar.',
'image' => ':attribute duhet të jetë imazh.',
'in' => ':attribute përzgjedhur është i/e pasaktë.',
'in_array' => 'The :attribute field does not exist in :other.',
'integer' => ':attribute duhet të jetë numër i plotë.',
'ip' => ':attribute duhet të jetë një IP adresë e saktë.',
'json' => 'The :attribute must be a valid JSON string.',
'max' => [
'numeric' => ':attribute nuk mund të jetë më tepër se :max.',
'file' => ':attribute nuk mund të jetë më tepër se :max kilobajtë.',
'string' => ':attribute nuk mund të jetë më tepër se :max karaktere.',
'array' => ':attribute nuk mund të ketë më tepër se :max elemente.',
],
'mimes' => ':attribute duhet të jetë një dokument i tipit: :values.',
'mimetypes' => ':attribute duhet të jetë një dokument i tipit: :values.',
'min' => [
'numeric' => ':attribute nuk mund të jetë më pak se :min.',
'file' => ':attribute nuk mund të jetë më pak se :min kilobajtë.',
'string' => ':attribute nuk mund të jetë më pak se :min karaktere.',
'array' => ':attribute nuk mund të ketë më pak se :min elemente.',
],
'not_in' => ':attribute përzgjedhur është i/e pasaktë.',
'numeric' => ':attribute duhet të jetë një numër.',
'present' => 'The :attribute field must be present.',
'regex' => 'Formati i :attribute është i pasaktë.',
'required' => 'Fusha :attribute është e kërkuar.',
'required_if' => 'Fusha :attribute është e kërkuar kur :other është :value.',
'required_unless' => 'The :attribute field is required unless :other is in :values.',
'required_with' => 'Fusha :attribute është e kërkuar kur :values ekziston.',
'required_with_all' => 'Fusha :attribute është e kërkuar kur :values ekziston.',
'required_without' => 'Fusha :attribute është e kërkuar kur :values nuk ekziston.',
'required_without_all' => 'Fusha :attribute është e kërkuar kur nuk ekziston asnjë nga :values.',
'same' => ':attribute dhe :other duhet të përputhen.',
'size' => [
'numeric' => ':attribute duhet të jetë :size.',
'file' => ':attribute duhet të jetë :size kilobajtë.',
'string' => ':attribute duhet të jetë :size karaktere.',
'array' => ':attribute duhet të ketë :size elemente.',
],
'string' => ':attribute duhet të jetë varg.',
'timezone' => ':attribute duhet të jetë zonë e saktë.',
'unique' => ':attribute është marrë tashmë.',
'uploaded' => 'The :attribute uploading failed.',
'url' => 'Formati i :attribute është i pasaktë.',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
|
*/
'attributes' => [
//
],
];

View File

@ -506,7 +506,7 @@ $LANG = array(
'payment_type_paypal' => 'PayPal', 'payment_type_paypal' => 'PayPal',
'payment_type_bitcoin' => 'Bitcoin', 'payment_type_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Knowledge Base', 'knowledge_base' => 'Knowledge Base',
'partial' => 'Partial', 'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial of :balance', 'partial_remaining' => ':partial of :balance',
'more_fields' => 'More Fields', 'more_fields' => 'More Fields',
'less_fields' => 'Less Fields', 'less_fields' => 'Less Fields',
@ -994,7 +994,7 @@ $LANG = array(
'overdue' => 'Overdue', 'overdue' => 'Overdue',
'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the invoice and client portal.',
'user_email_footer' => 'För att anpassa dina e-post notifieringar gå till :link', 'user_email_footer' => 'För att anpassa dina e-post notifieringar gå till :link',
'reset_password_footer' => 'Om du inte begärt en återställning av ditt lösenord så var snäll och maila vår support: :email', 'reset_password_footer' => 'Om du inte begärt en återställning av ditt lösenord så var snäll och maila vår support: :email',
'limit_users' => 'Ledsen, men du får skapa max :limit användare', 'limit_users' => 'Ledsen, men du får skapa max :limit användare',
@ -1694,6 +1694,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish', 'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain', 'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish', 'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies // Frequencies
'freq_weekly' => 'Weekly', 'freq_weekly' => 'Weekly',
@ -2042,7 +2043,71 @@ $LANG = array(
'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.', 'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.',
'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.', 'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.',
'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less', 'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less',
'error_title' => 'Something went wrong',
'error_contact_text' => 'If you\'d like help please email us at :mailaddress',
'no_undo' => 'Warning: this can\'t be undone.',
'no_contact_selected' => 'Please select a contact',
'no_client_selected' => 'Please select a client',
'gateway_config_error' => 'It may help to set new passwords or generate new API keys.',
'payment_type_on_file' => ':type on file',
'invoice_for_client' => 'Invoice :invoice for :client',
'intent_not_found' => 'Sorry, I\'m not sure what you\'re asking.',
'intent_not_supported' => 'Sorry, I\'m not able to do that.',
'client_not_found' => 'I wasn\'t able to find the client',
'not_allowed' => 'Sorry, you don\'t have the needed permissions',
'bot_emailed_invoice' => 'Your invoice has been sent.',
'bot_emailed_notify_viewed' => 'I\'ll email you when it\'s viewed.',
'bot_emailed_notify_paid' => 'I\'ll email you when it\'s paid.',
'add_product_to_invoice' => 'Add 1 :product',
'not_authorized' => 'Your are not authorized',
'bot_get_email' => 'Hi! (wave)<br/>Thanks for trying the Invoice Ninja Bot.<br/>Send me your account email to get started.',
'bot_get_code' => 'Thanks! I\'ve sent a you an email with your security code.',
'bot_welcome' => 'That\'s it, your account is verified.<br/>',
'email_not_found' => 'I wasn\'t able to find an available account for :email',
'invalid_code' => 'The code is not correct',
'security_code_email_subject' => 'Security code for Invoice Ninja Bot',
'security_code_email_line1' => 'This is your Invoice Ninja Bot security code.',
'security_code_email_line2' => 'Note: it will expire in 10 minutes.',
'bot_help_message' => 'I currently support:<br/>• Create\update\email an invoice<br/>• List products<br/>For example:<br/><i>invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent</i>',
'list_products' => 'List Products',
'include_item_taxes_inline' => 'Include <b>line item taxes in line total</b>',
'created_quotes' => 'Successfully created :count quotes(s)',
'limited_gateways' => 'Note: we support one credit card gateway per company.',
'warning' => 'Warning',
'self-update' => 'Update Invoice Ninja',
'update_invoiceninja_title' => 'Update Invoice Ninja',
'update_invoiceninja_warning' => 'Before start upgrading Invoice Ninja create a backup of your database and files!',
'update_invoiceninja_available' => 'A new version of Invoice Ninja is available.',
'update_invoiceninja_unavailable' => 'No new version of Invoice Ninja available.',
'update_invoiceninja_decide_update_download' => 'You can decide to update directly to :version or to just download the new relase and update later.',
'update_invoiceninja_update_start' => 'Update now',
'update_invoiceninja_download_start' => 'Download :version',
'create_new' => 'Create New',
'toggle_navigation' => 'Toggle Navigation',
'toggle_history' => 'Toggle History',
'unassigned' => 'Unassigned',
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
'facebook_and_twitter_help' => 'Follow our feeds to help support our project',
'reseller_text' => 'Note: the white-label license is intended for personal use, please email us at :email if you\'d like to resell our app.',
'unnamed_client' => 'Unnamed Client',
'day' => 'Day',
'week' => 'Week',
'month' => 'Month',
'inactive_logout' => 'You have been logged out due to inactivity',
'reports' => 'Reports',
'total_profit' => 'Total Profit',
'total_expenses' => 'Total Expenses',
'quote_to' => 'Quote to',
); );

View File

@ -507,7 +507,7 @@ $LANG = array(
'payment_type_paypal' => 'PayPal', 'payment_type_paypal' => 'PayPal',
'payment_type_bitcoin' => 'Bitcoin', 'payment_type_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Knowledge Base', 'knowledge_base' => 'Knowledge Base',
'partial' => 'Partial', 'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial of :balance', 'partial_remaining' => ':partial of :balance',
'more_fields' => 'More Fields', 'more_fields' => 'More Fields',
'less_fields' => 'Less Fields', 'less_fields' => 'Less Fields',
@ -995,7 +995,7 @@ $LANG = array(
'overdue' => 'Overdue', 'overdue' => 'Overdue',
'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding and help support our project.', 'white_label_text' => 'Purchase a ONE YEAR white label license for $:price to remove the Invoice Ninja branding from the invoice and client portal.',
'user_email_footer' => 'To adjust your email notification settings please visit :link', 'user_email_footer' => 'To adjust your email notification settings please visit :link',
'reset_password_footer' => 'If you did not request this password reset please email our support: :email', 'reset_password_footer' => 'If you did not request this password reset please email our support: :email',
'limit_users' => 'Sorry, this will exceed the limit of :limit users', 'limit_users' => 'Sorry, this will exceed the limit of :limit users',
@ -1695,6 +1695,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish', 'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain', 'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish', 'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies // Frequencies
'freq_weekly' => 'Weekly', 'freq_weekly' => 'Weekly',
@ -2043,7 +2044,71 @@ $LANG = array(
'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.', 'payment_error_code' => 'There was an error processing your payment [:code]. Please try again later.',
'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.', 'standard_fees_apply' => 'Standard fees apply: 2.9% + $0.30 per successful charge.',
'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less', 'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less',
'error_title' => 'Something went wrong',
'error_contact_text' => 'If you\'d like help please email us at :mailaddress',
'no_undo' => 'Warning: this can\'t be undone.',
'no_contact_selected' => 'Please select a contact',
'no_client_selected' => 'Please select a client',
'gateway_config_error' => 'It may help to set new passwords or generate new API keys.',
'payment_type_on_file' => ':type on file',
'invoice_for_client' => 'Invoice :invoice for :client',
'intent_not_found' => 'Sorry, I\'m not sure what you\'re asking.',
'intent_not_supported' => 'Sorry, I\'m not able to do that.',
'client_not_found' => 'I wasn\'t able to find the client',
'not_allowed' => 'Sorry, you don\'t have the needed permissions',
'bot_emailed_invoice' => 'Your invoice has been sent.',
'bot_emailed_notify_viewed' => 'I\'ll email you when it\'s viewed.',
'bot_emailed_notify_paid' => 'I\'ll email you when it\'s paid.',
'add_product_to_invoice' => 'Add 1 :product',
'not_authorized' => 'Your are not authorized',
'bot_get_email' => 'Hi! (wave)<br/>Thanks for trying the Invoice Ninja Bot.<br/>Send me your account email to get started.',
'bot_get_code' => 'Thanks! I\'ve sent a you an email with your security code.',
'bot_welcome' => 'That\'s it, your account is verified.<br/>',
'email_not_found' => 'I wasn\'t able to find an available account for :email',
'invalid_code' => 'The code is not correct',
'security_code_email_subject' => 'Security code for Invoice Ninja Bot',
'security_code_email_line1' => 'This is your Invoice Ninja Bot security code.',
'security_code_email_line2' => 'Note: it will expire in 10 minutes.',
'bot_help_message' => 'I currently support:<br/>• Create\update\email an invoice<br/>• List products<br/>For example:<br/><i>invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent</i>',
'list_products' => 'List Products',
'include_item_taxes_inline' => 'Include <b>line item taxes in line total</b>',
'created_quotes' => 'Successfully created :count quotes(s)',
'limited_gateways' => 'Note: we support one credit card gateway per company.',
'warning' => 'Warning',
'self-update' => 'Update Invoice Ninja',
'update_invoiceninja_title' => 'Update Invoice Ninja',
'update_invoiceninja_warning' => 'Before start upgrading Invoice Ninja create a backup of your database and files!',
'update_invoiceninja_available' => 'A new version of Invoice Ninja is available.',
'update_invoiceninja_unavailable' => 'No new version of Invoice Ninja available.',
'update_invoiceninja_decide_update_download' => 'You can decide to update directly to :version or to just download the new relase and update later.',
'update_invoiceninja_update_start' => 'Update now',
'update_invoiceninja_download_start' => 'Download :version',
'create_new' => 'Create New',
'toggle_navigation' => 'Toggle Navigation',
'toggle_history' => 'Toggle History',
'unassigned' => 'Unassigned',
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
'facebook_and_twitter_help' => 'Follow our feeds to help support our project',
'reseller_text' => 'Note: the white-label license is intended for personal use, please email us at :email if you\'d like to resell our app.',
'unnamed_client' => 'Unnamed Client',
'day' => 'Day',
'week' => 'Week',
'month' => 'Month',
'inactive_logout' => 'You have been logged out due to inactivity',
'reports' => 'Reports',
'total_profit' => 'Total Profit',
'total_expenses' => 'Total Expenses',
'quote_to' => 'Quote to',
); );

View File

@ -34,7 +34,6 @@
{{-- Former::select('recurring_hour')->options($recurringHours) --}} {{-- Former::select('recurring_hour')->options($recurringHours) --}}
@if (Utils::isNinja())
{!! Former::inline_radios('custom_invoice_link') {!! Former::inline_radios('custom_invoice_link')
->onchange('onCustomLinkChange()') ->onchange('onCustomLinkChange()')
->label(trans('texts.invoice_link')) ->label(trans('texts.invoice_link'))
@ -57,7 +56,7 @@
->addGroupClass('iframe_url') ->addGroupClass('iframe_url')
->label(' ') ->label(' ')
->help(trans('texts.subdomain_help')) !!} ->help(trans('texts.subdomain_help')) !!}
@endif
</div> </div>
</div> </div>

View File

@ -49,7 +49,7 @@
</div> </div>
<div class="panel-body"> <div class="panel-body">
{!! Former::select('format') {!! Former::select('format')
->onchange('setEntityTypesVisible()') ->onchange('setCheckboxesEnabled()')
->addOption('CSV', 'CSV') ->addOption('CSV', 'CSV')
->addOption('XLS', 'XLS') ->addOption('XLS', 'XLS')
->addOption('JSON', 'JSON') ->addOption('JSON', 'JSON')
@ -58,7 +58,7 @@
{!! Former::inline_radios('include_radio') {!! Former::inline_radios('include_radio')
->onchange('onIncludeChange()') ->onchange('setCheckboxesEnabled()')
->label(trans('texts.include')) ->label(trans('texts.include'))
->radios([ ->radios([
trans('texts.all') . ' &nbsp; ' => ['value' => 'all', 'name' => 'include'], trans('texts.all') . ' &nbsp; ' => ['value' => 'all', 'name' => 'include'],
@ -92,16 +92,17 @@
<script type="text/javascript"> <script type="text/javascript">
$(function() { $(function() {
setFileTypesVisible(); setCheckboxesEnabled();
onIncludeChange();
}); });
function setEntityTypesVisible() { function setCheckboxesEnabled() {
var selector = '.entity-types input[type=checkbox]'; var $checkboxes = $('input[type=checkbox]');
if ($('#format').val() === 'JSON') { var include = $('input[name=include]:checked').val()
$(selector).attr('disabled', true); var format = $('#format').val();
if (include === 'all' || format === 'JSON') {
$checkboxes.attr('disabled', true);
} else { } else {
$(selector).removeAttr('disabled'); $checkboxes.removeAttr('disabled');
} }
} }
@ -128,16 +129,6 @@
@endforeach @endforeach
} }
function onIncludeChange() {
var $checkboxes = $('input[type=checkbox]');
var val = $('input[name=include]:checked').val()
if (val == 'all') {
$checkboxes.attr('disabled', true);
} else {
$checkboxes.removeAttr('disabled');
}
}
</script> </script>
@stop @stop

View File

@ -24,12 +24,15 @@
</div> </div>
</div> </div>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">{!! trans('texts.facebook_and_twitter') !!}</h3>
</div>
<div class="panel-body">
<!--
{!! Former::legend(trans('texts.site_updates')) !!}
<div class="form-group"> <div class="form-group">
<label for="invoice_terms" class="control-label col-lg-4 col-sm-4"></label> <label for="notify_sent" class="control-label col-lg-4 col-sm-4">&nbsp;</label>
<div class="col-lg-8 col-sm-8"> <div class="col-lg-8 col-sm-8">
<div id="fb-root"></div> <div id="fb-root"></div>
@ -41,13 +44,18 @@
fjs.parentNode.insertBefore(js, fjs); fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script> }(document, 'script', 'facebook-jssdk'));</script>
<div class="fb-follow" data-href="https://www.facebook.com/invoiceninja" data-colorscheme="light" data-layout="button" data-show-faces="false"></div>&nbsp;&nbsp; <div class="fb-follow" data-href="https://www.facebook.com/invoiceninja" data-colorscheme="light" data-layout="button" data-show-faces="false" data-size="large"></div>&nbsp;&nbsp;
<a href="https://twitter.com/invoiceninja" class="twitter-follow-button" data-show-count="false" data-related="hillelcoren" data-size="large">Follow @invoiceninja</a> <a href="https://twitter.com/invoiceninja" class="twitter-follow-button" data-show-count="false" data-related="hillelcoren" data-size="large">Follow @invoiceninja</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script> <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
<div class="help-block">{{ trans('texts.facebook_and_twitter_help') }}</div>
</div> </div>
</div> </div>
--> </div>
</div>
{!! Former::actions( {!! Former::actions(
Button::success(trans('texts.save')) Button::success(trans('texts.save'))
@ -56,4 +64,5 @@
{!! Former::close() !!} {!! Former::close() !!}
@stop @stop

View File

@ -148,7 +148,7 @@
@if ($contact->phone) @if ($contact->phone)
<i class="fa fa-phone" style="width: 20px"></i>{{ $contact->phone }}<br/> <i class="fa fa-phone" style="width: 20px"></i>{{ $contact->phone }}<br/>
@endif @endif
@if ($client->account->enable_client_portal) @if (Auth::user()->confirmed && $client->account->enable_client_portal)
<i class="fa fa-dashboard" style="width: 20px"></i><a href="{{ $contact->link }}" target="_blank">{{ trans('texts.view_client_portal') }}</a><br/> <i class="fa fa-dashboard" style="width: 20px"></i><a href="{{ $contact->link }}" target="_blank">{{ trans('texts.view_client_portal') }}</a><br/>
@endif @endif
@endforeach @endforeach

View File

@ -1,25 +1,221 @@
@extends('header') @extends('header')
@section('head')
@parent
@include('money_script')
<script src="{!! asset('js/Chart.min.js') !!}" type="text/javascript"></script>
<script src="{{ asset('js/daterangepicker.min.js') }}" type="text/javascript"></script>
<link href="{{ asset('css/daterangepicker.css') }}" rel="stylesheet" type="text/css"/>
@stop
@section('content') @section('content')
<script type="text/javascript">
@if (Auth::user()->hasPermission('view_all'))
function loadChart(data) {
var ctx = document.getElementById('chart-canvas').getContext('2d');
if (window.myChart) {
window.myChart.config.data = data;
window.myChart.config.options.scales.xAxes[0].time.unit = chartGropuBy.toLowerCase();
window.myChart.config.options.scales.xAxes[0].time.round = chartGropuBy.toLowerCase();
window.myChart.update();
} else {
$('#progress-div').hide();
$('#chart-canvas').fadeIn();
window.myChart = new Chart(ctx, {
type: 'line',
data: data,
options: {
tooltips: {
mode: 'x-axis',
titleFontSize: 15,
titleMarginBottom: 12,
bodyFontSize: 15,
bodySpacing: 10,
callbacks: {
title: function(item) {
return moment(item[0].xLabel).format("{{ $account->getMomentDateFormat() }}");
},
label: function(item, data) {
if (item.datasetIndex == 0) {
var label = " {{ trans('texts.invoices') }}: ";
} else if (item.datasetIndex == 1) {
var label = " {{ trans('texts.payments') }}: ";
} else if (item.datasetIndex == 2) {
var label = " {{ trans('texts.expenses') }}: ";
}
return label + formatMoney(item.yLabel, chartCurrencyId, account.country_id);
}
}
},
title: {
display: false,
fontSize: 18,
text: '{{ trans('texts.total_revenue') }}'
},
scales: {
xAxes: [{
type: 'time',
time: {
unit: 'day',
round: 'day',
},
gridLines: {
display: false,
},
}],
yAxes: [{
ticks: {
beginAtZero: true,
callback: function(label, index, labels) {
return formatMoney(label, chartCurrencyId, account.country_id);
}
},
}]
}
}
});
}
}
var account = {!! $account !!};
var chartStartDate = moment().subtract(29, 'days');
var chartEndDate = moment();
var chartGropuBy = 'day';
var chartCurrencyId = {{ $account->getCurrencyId() }};
$(function() {
// Initialize date range selector
function cb(start, end) {
$('#reportrange span').html(start.format('{{ $account->getMomentDateFormat() }}') + ' - ' + end.format('{{ $account->getMomentDateFormat() }}'));
chartStartDate = start;
chartEndDate = end;
loadData();
}
$('#reportrange').daterangepicker({
locale: {
"format": "{{ $account->getMomentDateFormat() }}",
},
startDate: chartStartDate,
endDate: chartEndDate,
linkedCalendars: false,
ranges: {
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
'This Month': [moment().startOf('month'), moment().endOf('month')],
'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
}
}, cb);
cb(chartStartDate, chartEndDate);
$("#currency-btn-group > .btn").click(function(){
$(this).addClass("active").siblings().removeClass("active");
chartCurrencyId = currencyMap[$(this).text()].id;
loadData();
});
$("#group-btn-group > .btn").click(function(){
$(this).addClass("active").siblings().removeClass("active");
chartGropuBy = $(this).text();
loadData();
});
function loadData() {
var includeExpenses = "{{ count($expenses) ? 'true' : 'false' }}";
var url = "{!! url('/dashboard_chart_data') !!}/" + chartGropuBy + '/' + chartStartDate.format('YYYY-MM-DD') + '/' + chartEndDate.format('YYYY-MM-DD') + '/' + chartCurrencyId + '/' + includeExpenses;
$.get(url, function(response) {
response = JSON.parse(response);
loadChart(response.data);
var totals = response.totals;
$('.revenue-div').text(formatMoney(totals.revenue, chartCurrencyId, account.country_id));
$('.outstanding-div').text(formatMoney(totals.balance, chartCurrencyId, account.country_id));
$('.expenses-div').text(formatMoney(totals.expenses, chartCurrencyId, account.country_id));
$('.average-div').text(formatMoney(totals.average, chartCurrencyId, account.country_id));
$('.currency').hide();
$('.currency_' + chartCurrencyId).show();
})
}
});
@else
$(function() {
$('.currency').show();
})
@endif
</script>
<div class="row">
<div class="col-md-2">
<ol class="breadcrumb"><li class='active'>{{ trans('texts.dashboard') }}</li></ol>
</div>
@if (count($tasks))
<div class="col-md-2" style="padding-top:6px">
@foreach ($tasks as $task)
{!! Button::primary($task->present()->titledName)->small()->asLinkTo($task->present()->url) !!}
@endforeach
</div>
<div class="col-md-8">
@else
<div class="col-md-10">
@endif
@if (Auth::user()->hasPermission('view_all'))
<div class="pull-right">
@if (count($currencies) > 1)
<div id="currency-btn-group" class="btn-group" role="group" style="border: 1px solid #ccc;">
@foreach ($currencies as $key => $val)
<button type="button" class="btn btn-normal {{ array_values($currencies)[0] == $val ? 'active' : '' }}"
style="font-weight:normal !important;background-color:white">{{ $val }}</button>
@endforeach
</div>
@endif
<div id="group-btn-group" class="btn-group" role="group" style="border: 1px solid #ccc; margin-left:18px">
<button type="button" class="btn btn-normal active" style="font-weight:normal !important;background-color:white">{{ trans('texts.day') }}</button>
<button type="button" class="btn btn-normal" style="font-weight:normal !important;background-color:white">{{ trans('texts.week') }}</button>
<button type="button" class="btn btn-normal" style="font-weight:normal !important;background-color:white">{{ trans('texts.month') }}</button>
</div>
<div id="reportrange" class="pull-right" style="background: #fff; cursor: pointer; padding: 9px 14px; border: 1px solid #ccc; margin-top: 0px; margin-left:18px">
<i class="glyphicon glyphicon-calendar fa fa-calendar"></i>&nbsp;
<span></span> <b class="caret"></b>
</div>
</div>
@endif
</div>
</div>
<div class="row"> <div class="row">
<div class="col-md-4"> <div class="col-md-4">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-body"> <div class="panel-body">
<img src="{{ asset('images/totalinvoices.png') }}"
class="in-image" style="float:left" width="80" height="80"/>
<div style="overflow:hidden"> <div style="overflow:hidden">
<div class="in-thin"> <div class="in-thin">
{{ trans('texts.total_revenue') }} {{ trans('texts.total_revenue') }}
</div> </div>
<div class="revenue-div in-bold pull-right" style="color:#337ab7">
</div>
<div class="in-bold"> <div class="in-bold">
@if (count($paidToDate)) @if (count($paidToDate))
@foreach ($paidToDate as $item) @foreach ($paidToDate as $item)
{{ Utils::formatMoney($item->value, $item->currency_id) }}<br/> <div class="currency currency_{{ $item->currency_id ?: $account->getCurrencyId() }}" style="display:none">
{{ Utils::formatMoney($item->value, $item->currency_id) }}
</div>
@endforeach @endforeach
@else @else
<div class="currency currency_{{ $account->getCurrencyId() }}" style="display:none">
{{ Utils::formatMoney(0) }} {{ Utils::formatMoney(0) }}
</div>
@endif @endif
</div> </div>
</div> </div>
@ -29,21 +225,40 @@
<div class="col-md-4"> <div class="col-md-4">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-body"> <div class="panel-body">
<img src="{{ asset('images/clients.png') }}"
class="in-image" style="float:left" width="80" height="80"/>
<div style="overflow:hidden"> <div style="overflow:hidden">
@if (count($expenses))
<div class="in-thin">
{{ trans('texts.total_expenses') }}
</div>
<div class="expenses-div in-bold pull-right" style="color:#337ab7">
</div>
<div class="in-bold">
@foreach ($expenses as $item)
<div class="currency currency_{{ $item->currency_id ?: $account->getCurrencyId() }}" style="display:none">
{{ Utils::formatMoney($item->value, $item->currency_id) }}<br/>
</div>
@endforeach
</div>
@else
<div class="in-thin"> <div class="in-thin">
{{ trans('texts.average_invoice') }} {{ trans('texts.average_invoice') }}
</div> </div>
<div class="average-div in-bold pull-right" style="color:#337ab7">
</div>
<div class="in-bold"> <div class="in-bold">
@if (count($averageInvoice)) @if (count($averageInvoice))
@foreach ($averageInvoice as $item) @foreach ($averageInvoice as $item)
<div class="currency currency_{{ $item->currency_id ?: $account->getCurrencyId() }}" style="display:none">
{{ Utils::formatMoney($item->invoice_avg, $item->currency_id) }}<br/> {{ Utils::formatMoney($item->invoice_avg, $item->currency_id) }}<br/>
</div>
@endforeach @endforeach
@else @else
<div class="currency currency_{{ $account->getCurrencyId() }}" style="display:none">
{{ Utils::formatMoney(0) }} {{ Utils::formatMoney(0) }}
</div>
@endif @endif
</div> </div>
@endif
</div> </div>
</div> </div>
</div> </div>
@ -51,19 +266,23 @@
<div class="col-md-4"> <div class="col-md-4">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-body"> <div class="panel-body">
<img src="{{ asset('images/totalincome.png') }}"
class="in-image" style="float:left" width="80" height="80"/>
<div style="overflow:hidden"> <div style="overflow:hidden">
<div class="in-thin"> <div class="in-thin">
{{ trans('texts.outstanding') }} {{ trans('texts.outstanding') }}
</div> </div>
<div class="outstanding-div in-bold pull-right" style="color:#337ab7">
</div>
<div class="in-bold"> <div class="in-bold">
@if (count($balances)) @if (count($balances))
@foreach ($balances as $item) @foreach ($balances as $item)
<div class="currency currency_{{ $item->currency_id ?: $account->getCurrencyId() }}" style="display:none">
{{ Utils::formatMoney($item->value, $item->currency_id) }}<br/> {{ Utils::formatMoney($item->value, $item->currency_id) }}<br/>
</div>
@endforeach @endforeach
@else @else
<div class="currency currency_{{ $account->getCurrencyId() }}" style="display:none">
{{ Utils::formatMoney(0) }} {{ Utils::formatMoney(0) }}
</div>
@endif @endif
</div> </div>
</div> </div>
@ -72,13 +291,23 @@
</div> </div>
</div> </div>
@if (Auth::user()->hasPermission('view_all'))
<div class="row">
<div class="col-md-12">
<div id="progress-div" class="progress">
<div class="progress-bar progress-bar-striped active" role="progressbar"
aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width: 100%"></div>
</div>
<canvas id="chart-canvas" height="70px" style="background-color:white;padding:20px;display:none"></canvas>
</div>
</div>
<p>&nbsp;</p> <p>&nbsp;</p>
@endif
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
<div class="panel panel-default dashboard" style="height:320px"> <div class="panel panel-default dashboard" style="height:320px">
<div class="panel-heading"> <div class="panel-heading" style="background-color:#286090 !important">
<h3 class="panel-title in-bold-white"> <h3 class="panel-title in-bold-white">
<i class="glyphicon glyphicon-exclamation-sign"></i> {{ trans('texts.activity') }} <i class="glyphicon glyphicon-exclamation-sign"></i> {{ trans('texts.activity') }}
@if ($invoicesSent) @if ($invoicesSent)
@ -103,6 +332,17 @@
<div class="panel panel-default dashboard" style="height:320px;"> <div class="panel panel-default dashboard" style="height:320px;">
<div class="panel-heading" style="margin:0; background-color: #f5f5f5 !important;"> <div class="panel-heading" style="margin:0; background-color: #f5f5f5 !important;">
<h3 class="panel-title" style="color: black !important"> <h3 class="panel-title" style="color: black !important">
@if (count($expenses) && count($averageInvoice))
<div class="pull-right" style="font-size:14px;padding-top:4px;font-weight:bold">
@foreach ($averageInvoice as $item)
<span class="currency currency_{{ $item->currency_id ?: $account->getCurrencyId() }}" style="display:none">
{{ trans('texts.average_invoice') }}
{{ Utils::formatMoney($item->invoice_avg, $item->currency_id) }} |
</span>
@endforeach
<span class="average-div" style="color:#337ab7"/>
</div>
@endif
<i class="glyphicon glyphicon-ok-sign"></i> {{ trans('texts.recent_payments') }} <i class="glyphicon glyphicon-ok-sign"></i> {{ trans('texts.recent_payments') }}
</h3> </h3>
</div> </div>
@ -172,7 +412,7 @@
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<div class="panel panel-default dashboard" style="height:320px"> <div class="panel panel-default dashboard" style="height:320px">
<div class="panel-heading" style="background-color:#e37329 !important"> <div class="panel-heading" style="background-color:#777 !important">
<h3 class="panel-title in-bold-white"> <h3 class="panel-title in-bold-white">
<i class="glyphicon glyphicon-time"></i> {{ trans('texts.invoices_past_due') }} <i class="glyphicon glyphicon-time"></i> {{ trans('texts.invoices_past_due') }}
</h3> </h3>
@ -242,7 +482,7 @@
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<div class="panel panel-default dashboard" style="height:320px"> <div class="panel panel-default dashboard" style="height:320px">
<div class="panel-heading" style="background-color:#e37329 !important"> <div class="panel-heading" style="background-color:#777 !important">
<h3 class="panel-title in-bold-white"> <h3 class="panel-title in-bold-white">
<i class="glyphicon glyphicon-time"></i> {{ trans('texts.expired_quotes') }} <i class="glyphicon glyphicon-time"></i> {{ trans('texts.expired_quotes') }}
</h3> </h3>

View File

@ -6,7 +6,6 @@
<link href="{{ asset('css/built.css') }}?no_cache={{ NINJA_VERSION }}" rel="stylesheet" type="text/css"/> <link href="{{ asset('css/built.css') }}?no_cache={{ NINJA_VERSION }}" rel="stylesheet" type="text/css"/>
<style type="text/css"> <style type="text/css">
@if (Auth::check() && Auth::user()->dark_mode) @if (Auth::check() && Auth::user()->dark_mode)
body { body {
background: #000 !important; background: #000 !important;
@ -354,9 +353,9 @@
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
var target = $(e.target).attr("href") // activated tab var target = $(e.target).attr("href") // activated tab
var scrollmem = $('html,body').scrollTop(); if (history.pushState) {
window.location.hash = target; history.pushState(null, null, target);
$('html,body').scrollTop(scrollmem); }
}); });
}); });
@ -619,7 +618,8 @@
<h4>{{ trans('texts.after') }}</h4> <h4>{{ trans('texts.after') }}</h4>
<img src="{{ BLANK_IMAGE }}" data-src="{{ asset('images/pro_plan/white_label_after.png') }}" width="100%" alt="after"> <img src="{{ BLANK_IMAGE }}" data-src="{{ asset('images/pro_plan/white_label_after.png') }}" width="100%" alt="after">
</div> </div>
</div> </div><br/>
<p>{!! trans('texts.reseller_text', ['email' => HTML::mailto('contact@invoiceninja.com')]) !!}</p>
</div> </div>
<div class="modal-footer" id="signUpFooter" style="margin-top: 0px"> <div class="modal-footer" id="signUpFooter" style="margin-top: 0px">
@ -719,7 +719,9 @@
</div> </div>
<div class="col-md-11 col-md-offset-1"> <div class="col-md-11 col-md-offset-1">
@if (Utils::isNinja())
<div style="padding-top:20px;padding-bottom:10px;">{{ trans('texts.trial_message') }}</div> <div style="padding-top:20px;padding-bottom:10px;">{{ trans('texts.trial_message') }}</div>
@endif
</div> </div>
</div> </div>

View File

@ -1229,8 +1229,7 @@
if (!isEmailValid()) { if (!isEmailValid()) {
swal("{!! trans('texts.provide_email') !!}"); swal("{!! trans('texts.provide_email') !!}");
return; return;
8 } }
sweetConfirm(function() { sweetConfirm(function() {
var accountLanguageId = parseInt({{ $account->language_id ?: '0' }}); var accountLanguageId = parseInt({{ $account->language_id ?: '0' }});
@ -1469,6 +1468,8 @@
if (!hasEmpty) { if (!hasEmpty) {
model.invoice().addItem(); model.invoice().addItem();
} }
//NINJA.formIsChanged = true;
} }
function onPartialChange(silent) function onPartialChange(silent)

View File

@ -97,7 +97,8 @@
cancelButtonText: "{!! trans("texts.no") !!}", cancelButtonText: "{!! trans("texts.no") !!}",
confirmButtonText: "{!! trans("texts.yes") !!}", confirmButtonText: "{!! trans("texts.yes") !!}",
showCancelButton: true, showCancelButton: true,
closeOnConfirm: false closeOnConfirm: false,
allowOutsideClick: true,
}, function() { }, function() {
success(); success();
swal.close(); swal.close();

View File

@ -5,6 +5,7 @@
for (var i=0; i<currencies.length; i++) { for (var i=0; i<currencies.length; i++) {
var currency = currencies[i]; var currency = currencies[i];
currencyMap[currency.id] = currency; currencyMap[currency.id] = currency;
currencyMap[currency.code] = currency;
} }
var countries = {!! \Cache::get('countries') !!}; var countries = {!! \Cache::get('countries') !!};

View File

@ -4,7 +4,8 @@
@parent @parent
@if (isset($accountGateway) && $accountGateway->getPlaidEnabled()) @if (isset($accountGateway) && $accountGateway->getPlaidEnabled())
<a href="https://plaid.com/products/auth/" target="_blank" style="display:none" id="secured_by_plaid"><img src="{{ URL::to('images/plaid-logowhite.svg') }}">{{ trans('texts.secured_by_plaid') }}</a> <a href="https://plaid.com/products/auth/" target="_blank" style="display:none" id="secured_by_plaid">
<img src="{{ URL::to('images/plaid-logowhite.svg') }}">{{ trans('texts.secured_by_plaid') }}</a>
<script src="https://cdn.plaid.com/link/stable/link-initialize.js"></script> <script src="https://cdn.plaid.com/link/stable/link-initialize.js"></script>
@endif @endif

View File

@ -69,10 +69,14 @@
} else { } else {
// response contains id and card, which contains additional card details // response contains id and card, which contains additional card details
var token = response.id; var token = response.id;
if (token) {
// Insert the token into the form so it gets submitted to the server // Insert the token into the form so it gets submitted to the server
$form.append($('<input type="hidden" name="sourceToken"/>').val(token)); $form.append($('<input type="hidden" name="sourceToken"/>').val(token));
// and submit // and submit
$form.get(0).submit(); $form.get(0).submit();
} else {
logError(JSON.stringify(response));
}
} }
}; };
</script> </script>

View File

@ -1,14 +1,8 @@
@extends('header') @extends('header')
@section('head')
@parent
<script src="{!! asset('js/Chart.min.js') !!}" type="text/javascript"></script>
@stop
@section('content') @section('content')
@parent @parent
@include('accounts.nav', ['selected' => ACCOUNT_CHARTS_AND_REPORTS, 'advanced' => true]) @include('accounts.nav', ['selected' => ACCOUNT_REPORTS, 'advanced' => true])
{!! Former::open()->rules(['start_date' => 'required', 'end_date' => 'required'])->addClass('warn-on-exit') !!} {!! Former::open()->rules(['start_date' => 'required', 'end_date' => 'required'])->addClass('warn-on-exit') !!}
@ -54,18 +48,12 @@
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
{!! Former::checkbox('enable_report')->text(trans('texts.enable'))->check($enableReport)->forceValue(1) !!}
{!! Former::select('report_type')->options($reportTypes, $reportType)->label(trans('texts.type')) !!} {!! Former::select('report_type')->options($reportTypes, $reportType)->label(trans('texts.type')) !!}
<div id="dateField" style="display:{{ $reportType == ENTITY_TAX_RATE ? 'block' : 'none' }}"> <div id="dateField" style="display:{{ $reportType == ENTITY_TAX_RATE ? 'block' : 'none' }}">
{!! Former::select('date_field')->label(trans('texts.filter')) {!! Former::select('date_field')->label(trans('texts.filter'))
->addOption(trans('texts.invoice_date'), FILTER_INVOICE_DATE) ->addOption(trans('texts.invoice_date'), FILTER_INVOICE_DATE)
->addOption(trans('texts.payment_date'), FILTER_PAYMENT_DATE) !!} ->addOption(trans('texts.payment_date'), FILTER_PAYMENT_DATE) !!}
</div> </div>
<p>&nbsp;</p>
{!! Former::checkbox('enable_chart')->text(trans('texts.enable'))->check($enableChart)->forceValue(1) !!}
{!! Former::select('group_by')->options($dateTypes, $groupBy) !!}
{!! Former::select('chart_type')->options($chartTypes, $chartType) !!}
{!! Former::close() !!} {!! Former::close() !!}
</div> </div>
@ -73,7 +61,6 @@
</div> </div>
</div> </div>
@if ($enableReport)
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-body"> <div class="panel-body">
<table class="table table-striped invoice-table"> <table class="table table-striped invoice-table">
@ -128,29 +115,6 @@
</div> </div>
</div> </div>
@endif
@if ($enableChart)
<div class="panel panel-default">
<div class="panel-body">
<canvas id="monthly-reports" width="700" height="400"></canvas>
<p>&nbsp;</p>
<div style="padding-bottom:8px">
<div style="float:left; height:22px; width:60px; background-color:rgba(78,205,196,.5); border: 1px solid rgba(78,205,196,1)"></div>
<div style="vertical-align: middle">&nbsp;Invoices</div>
</div>
<div style="padding-bottom:8px; clear:both">
<div style="float:left; height:22px; width:60px; background-color:rgba(255,107,107,.5); border: 1px solid rgba(255,107,107,1)"></div>
<div style="vertical-align: middle">&nbsp;Payments</div>
</div>
<div style="clear:both">
<div style="float:left; height:22px; width:60px; background-color:rgba(199,244,100,.5); border: 1px solid rgba(199,244,100,1)"></div>
<div style="vertical-align: middle">&nbsp;Credits</div>
</div>
</div>
</div>
@endif
</div> </div>
@ -162,32 +126,6 @@
$('#action').val(''); $('#action').val('');
} }
@if ($enableChart)
var ctx = document.getElementById('monthly-reports').getContext('2d');
var chart = {
labels: {!! json_encode($labels) !!},
datasets: [
@foreach ($datasets as $dataset)
{
data: {!! json_encode($dataset['totals']) !!},
fillColor : "rgba({!! $dataset['colors'] !!},0.5)",
strokeColor : "rgba({!! $dataset['colors'] !!},1)",
},
@endforeach
]
}
var options = {
scaleOverride: true,
scaleSteps: 10,
scaleStepWidth: {!! $scaleStepWidth !!},
scaleStartValue: 0,
scaleLabel : "<%=value%>",
};
new Chart(ctx).{!! $chartType !!}(chart, options);
@endif
$(function() { $(function() {
$('.start_date .input-group-addon').click(function() { $('.start_date .input-group-addon').click(function() {
toggleDatePicker('start_date'); toggleDatePicker('start_date');

View File

@ -81,8 +81,8 @@ $I->see('Invoice Design');
$I->amOnPage('/settings/templates_and_reminders'); $I->amOnPage('/settings/templates_and_reminders');
$I->see('Invoice Email'); $I->see('Invoice Email');
$I->amOnPage('/settings/charts_and_reports'); $I->amOnPage('/settings/reports');
$I->see('Data Visualizations'); $I->see('Report Settings');
//try to logout //try to logout
//$I->click('#myAccountButton'); //$I->click('#myAccountButton');

View File

@ -163,7 +163,7 @@ class SettingsCest
public function runReport(FunctionalTester $I) public function runReport(FunctionalTester $I)
{ {
$I->wantTo('run the report'); $I->wantTo('run the report');
$I->amOnPage('/settings/charts_and_reports'); $I->amOnPage('/settings/reports');
$I->click('Run'); $I->click('Run');
$I->seeResponseCodeIs(200); $I->seeResponseCodeIs(200);