1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-11-08 12:12:48 +01:00

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

@ -10,12 +10,12 @@
## [Hosted](https://www.invoiceninja.com) | [Self-hosted](https://www.invoiceninja.org)
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.
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...
[![Invoice Ninja - Overview](https://app.invoiceninja.com/youtube.png)](https://www.youtube.com/watch?v=xHGKvadapbA)
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.
## Affiliates Programs
* Referral program (we pay you): $100 per signup paid over 3 years - [Learn more](https://www.invoiceninja.com/referral-program/)
* White-label reseller (you pay us): 10% of revenue with a $500 sign up fee

View File

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

View File

@ -135,7 +135,8 @@ class CreateTestData extends Command
$data = [
'invoice_id' => $invoice->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);

View File

@ -155,18 +155,6 @@ class ClientPortalController extends BaseController
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)
{
$links = [];
@ -201,9 +189,14 @@ class ClientPortalController extends BaseController
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();
}
@ -212,8 +205,10 @@ class ClientPortalController extends BaseController
$color = $account->primary_color ? $account->primary_color : '#0b4d78';
$customer = false;
if (!$account->enable_client_portal || !$account->enable_client_portal_dashboard) {
if (!$account->enable_client_portal) {
return $this->returnError();
} elseif (!$account->enable_client_portal_dashboard) {
return redirect()->to('/client/invoices/');
}
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,
'balances' => $balances[0]->value ? $balances[0]->value : 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,
'invoicesSent' => $metrics ? $metrics->invoices_sent : 0,
'activeClients' => $metrics ? $metrics->active_clients : 0,

View File

@ -4,6 +4,8 @@ use stdClass;
use Auth;
use DB;
use View;
use Utils;
use App\Models\Client;
use App\Models\Invoice;
use App\Models\Payment;
use App\Ninja\Repositories\DashboardRepository;
@ -26,7 +28,8 @@ class DashboardController extends BaseController
$user = Auth::user();
$viewAll = $user->hasPermission('view_all');
$userId = $user->id;
$accountId = $user->account->id;
$account = $user->account;
$accountId = $account->id;
$dashboardRepo = $this->dashboardRepo;
$metrics = $dashboardRepo->totals($accountId, $userId, $viewAll);
@ -37,7 +40,10 @@ class DashboardController extends BaseController
$pastDue = $dashboardRepo->pastDue($accountId, $userId, $viewAll);
$upcoming = $dashboardRepo->upcoming($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;
foreach ([$upcoming, $pastDue] as $data) {
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 = [
'account' => $user->account,
'paidToDate' => $paidToDate,
@ -60,8 +86,20 @@ class DashboardController extends BaseController
'payments' => $payments,
'title' => trans('texts.dashboard'),
'hasQuotes' => $hasQuotes,
'showBreadcrumbs' => false,
'currencies' => $currencies,
'expenses' => $expenses,
'tasks' => $tasks,
];
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 Auth;
use URL;
use Crawler;
use Exception;
use Validator;
use App\Models\Invitation;
@ -241,6 +242,10 @@ class OnlinePaymentController extends BaseController
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();
$redirectUrl = Input::get('redirect_url', URL::previous());
@ -274,6 +279,8 @@ class OnlinePaymentController extends BaseController
$data = [
'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' => [[
'product_key' => $product->product_key,
'notes' => $product->notes,

View File

@ -5,8 +5,6 @@ use Config;
use Input;
use Utils;
use DB;
use DateInterval;
use DatePeriod;
use Session;
use View;
use App\Models\Account;
@ -56,36 +54,17 @@ class ReportController extends BaseController
$action = Input::get('action');
if (Input::all()) {
$groupBy = Input::get('group_by');
$chartType = Input::get('chart_type');
$reportType = Input::get('report_type');
$dateField = Input::get('date_field');
$startDate = Utils::toSqlDate(Input::get('start_date'), false);
$endDate = Utils::toSqlDate(Input::get('end_date'), false);
$enableReport = boolval(Input::get('enable_report'));
$enableChart = boolval(Input::get('enable_chart'));
} else {
$groupBy = 'MONTH';
$chartType = 'Bar';
$reportType = ENTITY_INVOICE;
$dateField = FILTER_INVOICE_DATE;
$startDate = Utils::today(false)->modify('-3 month');
$endDate = Utils::today(false);
$enableReport = true;
$enableChart = true;
}
$dateTypes = [
'DAYOFYEAR' => 'Daily',
'WEEK' => 'Weekly',
'MONTH' => 'Monthly',
];
$chartTypes = [
'Bar' => 'Bar',
'Line' => 'Line',
];
$reportTypes = [
ENTITY_CLIENT => trans('texts.client'),
ENTITY_INVOICE => trans('texts.invoice'),
@ -96,148 +75,29 @@ class ReportController extends BaseController
];
$params = [
'dateTypes' => $dateTypes,
'chartTypes' => $chartTypes,
'chartType' => $chartType,
'startDate' => $startDate->format(Session::get(SESSION_DATE_FORMAT)),
'endDate' => $endDate->format(Session::get(SESSION_DATE_FORMAT)),
'groupBy' => $groupBy,
'reportTypes' => $reportTypes,
'reportType' => $reportType,
'enableChart' => $enableChart,
'enableReport' => $enableReport,
'title' => trans('texts.charts_and_reports'),
];
if (Auth::user()->account->hasFeature(FEATURE_REPORTS)) {
if ($enableReport) {
$isExport = $action == 'export';
$params = array_merge($params, self::generateReport($reportType, $startDate, $endDate, $dateField, $isExport));
$isExport = $action == 'export';
$params = array_merge($params, self::generateReport($reportType, $startDate, $endDate, $dateField, $isExport));
if ($isExport) {
self::export($reportType, $params['displayData'], $params['columns'], $params['reportTotals']);
}
}
if ($enableChart) {
$params = array_merge($params, self::generateChart($groupBy, $startDate, $endDate));
if ($isExport) {
self::export($reportType, $params['displayData'], $params['columns'], $params['reportTotals']);
}
} else {
$params['columns'] = [];
$params['displayData'] = [];
$params['reportTotals'] = [];
$params['labels'] = [];
$params['datasets'] = [];
$params['scaleStepWidth'] = 100;
}
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 $startDate

View File

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

View File

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

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\InvoiceDesign;
use App\Events\UserSettingsChanged;
use App\Libraries\CurlUtils;
/**
* Class StartupCheck
@ -71,7 +72,7 @@ class StartupCheck
if (Utils::isNinja()) {
$data = Utils::getNewsFeedResponse();
} 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);
}
if ($data) {
@ -128,7 +129,7 @@ class StartupCheck
$productId = Input::get('product_id');
$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 ($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::get('client/documents', 'ClientPortalController@documentIndex');
Route::get('client/payments', 'ClientPortalController@paymentIndex');
Route::get('client/dashboard', 'ClientPortalController@dashboard');
Route::get('client/dashboard/{contact_key}', 'ClientPortalController@contactIndex');
Route::get('client/dashboard/{contact_key?}', 'ClientPortalController@dashboard');
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}/{filename?}', 'ClientPortalController@getInvoiceDocumentsZip');
@ -123,6 +122,7 @@ if (Utils::isReseller()) {
Route::group(['middleware' => 'auth:user'], function() {
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('hide_message', 'HomeController@hideMessage');
Route::get('force_inline_pdf', 'UserController@forcePDFJS');
@ -239,8 +239,8 @@ Route::group([
Route::get('settings/email_preview', 'AccountController@previewEmail');
Route::get('company/{section}/{subSection?}', 'AccountController@redirectLegacy');
Route::get('settings/data_visualizations', 'ReportController@d3');
Route::get('settings/charts_and_reports', 'ReportController@showReports');
Route::post('settings/charts_and_reports', 'ReportController@showReports');
Route::get('settings/reports', 'ReportController@showReports');
Route::post('settings/reports', 'ReportController@showReports');
Route::post('settings/change_plan', 'AccountController@changePlan');
Route::post('settings/cancel_account', 'AccountController@cancelAccount');
@ -412,7 +412,7 @@ if (!defined('CONTACT_EMAIL')) {
define('ACCOUNT_INVOICE_DESIGN', 'invoice_design');
define('ACCOUNT_CLIENT_PORTAL', 'client_portal');
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_DATA_VISUALIZATIONS', 'data_visualizations');
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_DOCS_URL', env('NINJA_DOCS_URL', 'http://docs.invoiceninja.com/en/latest'));
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_TWITTER', env('SOCIAL_LINK_TWITTER', 'https://twitter.com/invoiceninja'));

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -156,6 +156,15 @@ class Task extends EntityModel
{
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',
'to',
'invoice_to',
'quote_to',
'details',
'invoice_no',
'valid_until',

View File

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

View File

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

View File

@ -1,10 +1,148 @@
<?php namespace App\Ninja\Repositories;
use stdClass;
use DB;
use App\Models\Activity;
use App\Models\Invoice;
use App\Models\Task;
use DateInterval;
use DatePeriod;
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)
{
// total_income, billed_clients, invoice_sent and active_clients
@ -182,15 +320,45 @@ class DashboardRepository
->where('invoices.is_deleted', '=', false)
->where('clients.is_deleted', '=', false)
->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){
$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')
->take(50)
->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",
"dropzone": "~4.3.0",
"sweetalert": "~1.1.3",
"nouislider": "~8.5.1"
"nouislider": "~8.5.1",
"bootstrap-daterangepicker": "~2.1.24"
},
"resolutions": {
"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,

View File

@ -8,6 +8,9 @@ class LanguageSeeder extends Seeder
{
Eloquent::unguard();
// https://github.com/caouecs/Laravel-lang
// https://www.loc.gov/standards/iso639-2/php/code_list.php
$languages = [
['name' => 'English', 'locale' => 'en'],
['name' => 'Italian', 'locale' => 'it'],
@ -26,6 +29,7 @@ class LanguageSeeder extends Seeder
['name' => 'Polish', 'locale' => 'pl'],
['name' => 'Czech', 'locale' => 'cs'],
['name' => 'Croatian', 'locale' => 'hr'],
['name' => 'Albanian', 'locale' => 'sq'],
];
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:
.. toctree::
:maxdepth: 2
:maxdepth: 1
:caption: Basic Features
introduction
@ -17,12 +17,14 @@ Want to find out everything there is to know about how to use your Invoice Ninja
credits
quotes
tasks
expenses
vendors
settings
.. _advanced-settings:
.. toctree::
:maxdepth: 2
:maxdepth: 1
:caption: Advanced 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
templates_and_reminders
client_portal
charts_and_reports
reports
data_visualizations
api_tokens
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.
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
"""""""""""""""
@ -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.
- **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.
- **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>.
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.

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'
], 'public/css/built.css');
mix.styles([
bowerDir + '/bootstrap-daterangepicker/daterangepicker.css'
], 'public/css/daterangepicker.css');
/**
* JS configuration
*/
@ -71,6 +76,10 @@ elixir(function(mix) {
'vfs.js'
], 'public/pdf.built.js');
mix.scripts([
bowerDir + '/bootstrap-daterangepicker/daterangepicker.js'
], 'public/js/daterangepicker.min.js');
mix.scripts([
bowerDir + '/jquery/dist/jquery.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 {
text-indent: 8px;
font-size: 16px;
line-height: 44px;
font-size: 15px;
line-height: 42px;
}
#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_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Knowledge Base',
'partial' => 'Partial',
'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial of :balance',
'more_fields' => 'More Fields',
'less_fields' => 'Less Fields',
@ -995,7 +995,7 @@ $LANG = array(
'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',
'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',
@ -1695,6 +1695,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies
'freq_weekly' => 'Weekly',
@ -2043,7 +2044,71 @@ $LANG = array(
'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.',
'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_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Knowledge Base',
'partial' => 'Část',
'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial z :balance',
'more_fields' => 'Více polí',
'less_fields' => 'Méně polí',
@ -997,7 +997,7 @@ $LANG = array(
'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',
'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ů',
@ -1697,6 +1697,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies
'freq_weekly' => 'Weekly',
@ -2045,7 +2046,71 @@ $LANG = array(
'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.',
'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_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Vidensbase',
'partial' => 'Delvis',
'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial af :balance',
'more_fields' => 'Flere felter',
'less_fields' => 'Mindre felter',
@ -995,7 +995,7 @@ $LANG = array(
'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',
'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',
@ -1695,6 +1695,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies
'freq_weekly' => 'Weekly',
@ -2043,7 +2044,71 @@ $LANG = array(
'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.',
'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_bitcoin' => 'Bitcoin',
'knowledge_base' => 'FAQ',
'partial' => 'Partiell',
'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial von :balance',
'more_fields' => 'Weitere Felder',
'less_fields' => 'Weniger Felder',
@ -685,7 +685,7 @@ $LANG = array(
'num_days_reminder' => 'Tage nach Fälligkeit',
'reminder_subject' => 'Erinnerung: Rechnung :invoice von :account',
'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_code' => 'Referral Code',
'last_sent_on' => 'Zuletzt versendet am :date',
@ -995,7 +995,7 @@ $LANG = array(
'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',
'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',
@ -1695,6 +1695,7 @@ $LANG = array(
'lang_Spanish' => 'Spanisch',
'lang_Spanish - Spain' => 'Spanisch - Spanien',
'lang_Swedish' => 'Schwedisch',
'lang_Albanian' => 'Albanian',
// Frequencies
'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.',
'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',
'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_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Knowledge Base',
'partial' => 'Partial',
'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial of :balance',
'more_fields' => 'More Fields',
'less_fields' => 'Less Fields',
@ -995,7 +995,7 @@ $LANG = array(
'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',
'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',
@ -1695,6 +1695,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies
'freq_weekly' => 'Weekly',
@ -2095,6 +2096,19 @@ $LANG = array(
'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',
// Limits
'limit' => 'Limit',

View File

@ -501,7 +501,7 @@ $LANG = array(
'payment_type_paypal' => 'PayPal',
'payment_type_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Base de Conocimiento',
'partial' => 'Parcial',
'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial de :balance',
'more_fields' => ' Más Campos',
'less_fields' => 'Menos Campos',
@ -989,7 +989,7 @@ $LANG = array(
'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',
'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',
@ -1689,6 +1689,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies
'freq_weekly' => 'Weekly',
@ -2037,7 +2038,71 @@ $LANG = array(
'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.',
'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_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Ayuda',
'partial' => 'Parcial',
'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial de :balance',
'more_fields' => 'Mas campos',
'less_fields' => 'Menos campos',
@ -988,7 +988,7 @@ $LANG = array(
'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',
'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',
@ -1688,6 +1688,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies
'freq_weekly' => 'Weekly',
@ -2036,7 +2037,71 @@ $LANG = array(
'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.',
'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_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Base de connaissances',
'partial' => 'Partiel',
'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial de :balance',
'more_fields' => 'Plus de champs',
'less_fields' => 'Moins de champs',
@ -989,7 +989,7 @@ $LANG = array(
'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',
'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',
@ -1689,6 +1689,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies
'freq_weekly' => 'Weekly',
@ -2037,7 +2038,71 @@ $LANG = array(
'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.',
'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_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Base de connaissance',
'partial' => 'Partiel',
'partial' => 'Partial/Deposit',
'partial_remaining' => ':partiel de :balance',
'more_fields' => 'Plus de champs',
'less_fields' => 'Moins de champs',
@ -986,7 +986,7 @@ $LANG = array(
'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',
'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',
@ -1686,6 +1686,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies
'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.',
'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',
'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_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Baza znanja',
'partial' => 'Parcijalno',
'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial od :balance',
'more_fields' => 'Više polja',
'less_fields' => 'Manje polja',
@ -995,7 +995,7 @@ $LANG = array(
'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',
'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',
@ -1695,6 +1695,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies
'freq_weekly' => 'Weekly',
@ -2043,7 +2044,71 @@ $LANG = array(
'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.',
'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_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Knowledge Base',
'partial' => 'Partial',
'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial di :balance',
'more_fields' => 'More Fields',
'less_fields' => 'Less Fields',
@ -989,7 +989,7 @@ $LANG = array(
'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',
'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',
@ -1689,6 +1689,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies
'freq_weekly' => 'Weekly',
@ -2037,7 +2038,71 @@ $LANG = array(
'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.',
'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_bitcoin' => 'Bitcoin',
'knowledge_base' => 'ナレッジベース',
'partial' => 'Partial',
'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial of :balance',
'more_fields' => '項目を増やす',
'less_fields' => '項目を減らす',
@ -995,7 +995,7 @@ $LANG = array(
'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',
'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',
@ -1695,6 +1695,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies
'freq_weekly' => 'Weekly',
@ -2043,7 +2044,71 @@ $LANG = array(
'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.',
'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_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Knowledge Base',
'partial' => 'Partial',
'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial of :balance',
'more_fields' => 'More Fields',
'less_fields' => 'Less Fields',
@ -774,8 +774,8 @@ $LANG = array(
'activity_35' => ':user sukurtas :vendor',
'activity_36' => ':user sukurtas :vendor',
'activity_37' => ':user sukurtas :vendor',
'activity_42' => ':user created task ":task"',
'activity_43' => ':user updated task ":task"',
'activity_42' => ':user sukurtos užduotys ":task"',
'activity_43' => ':user atnaujintos užduotys ":task"',
'payment' => 'Payment',
'system' => 'System',
'signature' => 'Email Signature',
@ -995,7 +995,7 @@ $LANG = array(
'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',
'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',
@ -1296,7 +1296,7 @@ $LANG = array(
'wepay_tos_agree' => 'Sutinku :link.',
'wepay_tos_link_text' => 'WePay paslaugų teikimo sąlygos',
'resend_confirmation_email' => 'Persiųsti patvirtinimo laišką',
'manage_account' => 'Manage Account',
'manage_account' => 'Valdyti paskyrą',
'action_required' => 'Reikalingas veiksmas',
'finish_setup' => 'Baigti nustatymus',
'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ė',
'warn_start_date_changed' => 'The next invoice will be sent on the new start date.',
'original_start_date' => 'Original start date',
'new_start_date' => 'New start date',
'security' => 'Security',
'see_whats_new' => 'See what\'s new in v:version',
'wait_for_upload' => 'Please wait for the document upload to complete.',
'upgrade_for_permissions' => 'Upgrade to our Enterprise plan to enable permissions.',
'original_start_date' => 'Originali pradžios data',
'new_start_date' => 'Nauja pradžios data',
'security' => 'Sauga',
'see_whats_new' => 'Kas naujo versijoje v:version',
'wait_for_upload' => 'Prašome palaukti kol įksikels dokumentas',
'upgrade_for_permissions' => 'Pasirinkite Įmonės planą norėdami įjungti leidimus.',
'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',
'product_file' => 'Product File',
'import_products' => 'Import Products',
'products_will_create' => 'products will be created.',
'product_key' => 'Product',
'created_products' => 'Successfully created :count product(s)',
'product_file' => 'Prekės failas',
'import_products' => 'Importuoti prekes',
'products_will_create' => 'prekė sukurta.',
'product_key' => 'Prekė',
'created_products' => 'Sėkmingai sukurta :count prekė(-s)',
'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',
'client_session_expired' => 'Session Expired',
'view_dashboard' => 'Rodyti darbastalį',
'client_session_expired' => 'Sesija pasibaigė',
'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_payment_method_bank_transfer' => 'bank account',
'auto_bill_payment_method_credit_card' => 'credit card',
'auto_bill_payment_method_paypal' => 'PayPal account',
'auto_bill_payment_method_bank_transfer' => 'banko sąskaita',
'auto_bill_payment_method_credit_card' => 'kreditinė kortelė',
'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.',
'payment_settings' => 'Payment Settings',
'payment_settings' => 'Apmokėjimo sąlygos',
'on_send_date' => 'On send date',
'on_due_date' => 'On due date',
'on_send_date' => 'Pagal išsiuntimo datą',
'on_due_date' => 'Pagal atlikimo datą',
'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.',
'bank_account' => 'Bank Account',
'bank_account' => 'Banko sąskaita',
'payment_processed_through_wepay' => 'ACH payments will be processed using WePay.',
'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.',
'payment_settings_supported_gateways' => 'These options are supported by the WePay, Stripe, and Braintree gateways.',
'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.',
'more_options' => 'More options',
'credit_card' => 'Credit Card',
'bank_transfer' => 'Bank Transfer',
'more_options' => 'Daugiau parinkčių',
'credit_card' => 'Kreditinė kortelė',
'bank_transfer' => 'Pavedimu',
'no_transaction_reference' => 'We did not recieve a payment transaction reference from the gateway.',
'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.',
'bitcoin' => 'Bitcoin',
'added_on' => 'Added :date',
'added_on' => 'Sukurta :date',
'failed_remove_payment_method' => 'Failed to remove the payment method',
'gateway_exists' => 'This gateway already exists',
'manual_entry' => 'Manual entry',
'start_of_week' => 'First day of the week',
'gateway_exists' => 'Ši mokėjimo sąsaja jau yra',
'manual_entry' => 'Įrašyti rankiniu būdu',
'start_of_week' => 'Savaitės pirma diena',
// Frequencies
'freq_weekly' => 'Weekly',
@ -1377,7 +1377,7 @@ $LANG = array(
// Payment types
'payment_type_Apply Credit' => 'Apply Credit',
'payment_type_Bank Transfer' => 'Bank Transfer',
'payment_type_Bank Transfer' => 'Pavedimu',
'payment_type_Cash' => 'Cash',
'payment_type_Debit' => 'Debit',
'payment_type_ACH' => 'ACH',
@ -1412,13 +1412,13 @@ $LANG = array(
'industry_Government' => 'Government',
'industry_Healthcare & Life Sciences' => 'Healthcare & Life Sciences',
'industry_Insurance' => 'Insurance',
'industry_Manufacturing' => 'Manufacturing',
'industry_Marketing' => 'Marketing',
'industry_Manufacturing' => 'Gamyba',
'industry_Marketing' => 'Marketingas',
'industry_Media' => 'Media',
'industry_Nonprofit & Higher Ed' => 'Nonprofit & Higher Ed',
'industry_Pharmaceuticals' => 'Pharmaceuticals',
'industry_Professional Services & Consulting' => 'Professional Services & Consulting',
'industry_Real Estate' => 'Real Estate',
'industry_Real Estate' => 'Nekilnojamas turtas',
'industry_Retail & Wholesale' => 'Retail & Wholesale',
'industry_Sports' => 'Sports',
'industry_Transportation' => 'Transportation',
@ -1427,31 +1427,31 @@ $LANG = array(
'industry_Photography' =>'Photography',
// Countries
'country_Afghanistan' => 'Afghanistan',
'country_Afghanistan' => 'Afganistanas',
'country_Albania' => 'Albania',
'country_Antarctica' => 'Antarctica',
'country_Antarctica' => 'Antarktika',
'country_Algeria' => 'Algeria',
'country_American Samoa' => 'American Samoa',
'country_Andorra' => 'Andorra',
'country_Andorra' => 'Andora',
'country_Angola' => 'Angola',
'country_Antigua and Barbuda' => 'Antigua and Barbuda',
'country_Azerbaijan' => 'Azerbaijan',
'country_Azerbaijan' => 'Azerbaidžanas',
'country_Argentina' => 'Argentina',
'country_Australia' => 'Australia',
'country_Austria' => 'Austria',
'country_Australia' => 'Australija',
'country_Austria' => 'Austrija',
'country_Bahamas' => 'Bahamas',
'country_Bahrain' => 'Bahrain',
'country_Bangladesh' => 'Bangladesh',
'country_Armenia' => 'Armenia',
'country_Armenia' => 'Armėnija',
'country_Barbados' => 'Barbados',
'country_Belgium' => 'Belgium',
'country_Belgium' => 'Belgija',
'country_Bermuda' => 'Bermuda',
'country_Bhutan' => 'Bhutan',
'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_Bouvet Island' => 'Bouvet Island',
'country_Brazil' => 'Brazil',
'country_Brazil' => 'Brazilija',
'country_Belize' => 'Belize',
'country_British Indian Ocean Territory' => 'British Indian Ocean Territory',
'country_Solomon Islands' => 'Solomon Islands',
@ -1460,7 +1460,7 @@ $LANG = array(
'country_Bulgaria' => 'Bulgaria',
'country_Myanmar' => 'Myanmar',
'country_Burundi' => 'Burundi',
'country_Belarus' => 'Belarus',
'country_Belarus' => 'Baltarusija',
'country_Cambodia' => 'Cambodia',
'country_Cameroon' => 'Cameroon',
'country_Canada' => 'Canada',
@ -1480,13 +1480,13 @@ $LANG = array(
'country_Congo' => 'Congo',
'country_Congo, the Democratic Republic of the' => 'Congo, the Democratic Republic of the',
'country_Cook Islands' => 'Cook Islands',
'country_Costa Rica' => 'Costa Rica',
'country_Croatia' => 'Croatia',
'country_Cuba' => 'Cuba',
'country_Cyprus' => 'Cyprus',
'country_Czech Republic' => 'Czech Republic',
'country_Costa Rica' => 'Kosta Rika',
'country_Croatia' => 'Kroatija',
'country_Cuba' => 'Kuba',
'country_Cyprus' => 'Kipras',
'country_Czech Republic' => 'Čekoslovakija',
'country_Benin' => 'Benin',
'country_Denmark' => 'Denmark',
'country_Denmark' => 'Danija',
'country_Dominica' => 'Dominica',
'country_Dominican Republic' => 'Dominican Republic',
'country_Ecuador' => 'Ecuador',
@ -1494,27 +1494,27 @@ $LANG = array(
'country_Equatorial Guinea' => 'Equatorial Guinea',
'country_Ethiopia' => 'Ethiopia',
'country_Eritrea' => 'Eritrea',
'country_Estonia' => 'Estonia',
'country_Estonia' => 'Estija',
'country_Faroe Islands' => 'Faroe Islands',
'country_Falkland Islands (Malvinas)' => 'Falkland Islands (Malvinas)',
'country_South Georgia and the South Sandwich Islands' => 'South Georgia and the South Sandwich Islands',
'country_Fiji' => 'Fiji',
'country_Finland' => 'Finland',
'country_Finland' => 'Suomija',
'country_Åland Islands' => 'Åland Islands',
'country_France' => 'France',
'country_France' => 'Prancūzija',
'country_French Guiana' => 'French Guiana',
'country_French Polynesia' => 'French Polynesia',
'country_French Southern Territories' => 'French Southern Territories',
'country_Djibouti' => 'Djibouti',
'country_Gabon' => 'Gabon',
'country_Georgia' => 'Georgia',
'country_Georgia' => 'Gruzija',
'country_Gambia' => 'Gambia',
'country_Palestinian Territory, Occupied' => 'Palestinian Territory, Occupied',
'country_Germany' => 'Germany',
'country_Ghana' => 'Ghana',
'country_Gibraltar' => 'Gibraltar',
'country_Kiribati' => 'Kiribati',
'country_Greece' => 'Greece',
'country_Greece' => 'Graikija',
'country_Greenland' => 'Greenland',
'country_Grenada' => 'Grenada',
'country_Guadeloupe' => 'Guadeloupe',
@ -1527,33 +1527,33 @@ $LANG = array(
'country_Holy See (Vatican City State)' => 'Holy See (Vatican City State)',
'country_Honduras' => 'Honduras',
'country_Hong Kong' => 'Hong Kong',
'country_Hungary' => 'Hungary',
'country_Hungary' => 'Vengrija',
'country_Iceland' => 'Iceland',
'country_India' => 'India',
'country_India' => 'Indija',
'country_Indonesia' => 'Indonesia',
'country_Iran, Islamic Republic of' => 'Iran, Islamic Republic of',
'country_Iraq' => 'Iraq',
'country_Ireland' => 'Ireland',
'country_Israel' => 'Israel',
'country_Italy' => 'Italy',
'country_Iraq' => 'Irakas',
'country_Ireland' => 'Airija',
'country_Israel' => 'Izrajelis',
'country_Italy' => 'Italija',
'country_Côte d\'Ivoire' => 'Côte d\'Ivoire',
'country_Jamaica' => 'Jamaica',
'country_Japan' => 'Japan',
'country_Kazakhstan' => 'Kazakhstan',
'country_Japan' => 'Japonija',
'country_Kazakhstan' => 'Kazachstanas',
'country_Jordan' => 'Jordan',
'country_Kenya' => 'Kenya',
'country_Korea, Democratic People\'s Republic of' => 'Korea, Democratic People\'s Republic of',
'country_Korea, Republic of' => 'Korea, Republic of',
'country_Kuwait' => 'Kuwait',
'country_Kyrgyzstan' => 'Kyrgyzstan',
'country_Kyrgyzstan' => 'Kirgizija',
'country_Lao People\'s Democratic Republic' => 'Lao People\'s Democratic Republic',
'country_Lebanon' => 'Lebanon',
'country_Lesotho' => 'Lesotho',
'country_Latvia' => 'Latvia',
'country_Latvia' => 'Latvija',
'country_Liberia' => 'Liberia',
'country_Libya' => 'Libya',
'country_Liechtenstein' => 'Liechtenstein',
'country_Lithuania' => 'Lithuania',
'country_Lithuania' => 'Lietuva',
'country_Luxembourg' => 'Luxembourg',
'country_Macao' => 'Macao',
'country_Madagascar' => 'Madagascar',
@ -1603,7 +1603,7 @@ $LANG = array(
'country_Peru' => 'Peru',
'country_Philippines' => 'Philippines',
'country_Pitcairn' => 'Pitcairn',
'country_Poland' => 'Poland',
'country_Poland' => 'Lenkija',
'country_Portugal' => 'Portugal',
'country_Guinea-Bissau' => 'Guinea-Bissau',
'country_Timor-Leste' => 'Timor-Leste',
@ -1611,7 +1611,7 @@ $LANG = array(
'country_Qatar' => 'Qatar',
'country_Réunion' => 'Réunion',
'country_Romania' => 'Romania',
'country_Russian Federation' => 'Russian Federation',
'country_Russian Federation' => 'Rusija',
'country_Rwanda' => 'Rwanda',
'country_Saint Barthélemy' => 'Saint Barthélemy',
'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_Svalbard and Jan Mayen' => 'Svalbard and Jan Mayen',
'country_Swaziland' => 'Swaziland',
'country_Sweden' => 'Sweden',
'country_Switzerland' => 'Switzerland',
'country_Sweden' => 'Švedija',
'country_Switzerland' => 'Šveicarija',
'country_Syrian Arab Republic' => 'Syrian Arab Republic',
'country_Tajikistan' => 'Tajikistan',
'country_Thailand' => 'Thailand',
@ -1653,7 +1653,7 @@ $LANG = array(
'country_Trinidad and Tobago' => 'Trinidad and Tobago',
'country_United Arab Emirates' => 'United Arab Emirates',
'country_Tunisia' => 'Tunisia',
'country_Turkey' => 'Turkey',
'country_Turkey' => 'Turkija',
'country_Turkmenistan' => 'Turkmenistan',
'country_Turks and Caicos Islands' => 'Turks and Caicos Islands',
'country_Tuvalu' => 'Tuvalu',
@ -1689,12 +1689,13 @@ $LANG = array(
'lang_German' => 'German',
'lang_Italian' => 'Italian',
'lang_Japanese' => 'Japanese',
'lang_Lithuanian' => 'Lithuanian',
'lang_Lithuanian' => 'Lietuviškai',
'lang_Norwegian' => 'Norwegian',
'lang_Polish' => 'Polish',
'lang_Polish' => 'Lenkiškai',
'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies
'freq_weekly' => 'Weekly',
@ -1707,7 +1708,7 @@ $LANG = array(
// Payment types
'payment_type_Apply Credit' => 'Apply Credit',
'payment_type_Bank Transfer' => 'Bank Transfer',
'payment_type_Bank Transfer' => 'Pavedimu',
'payment_type_Cash' => 'Cash',
'payment_type_Debit' => 'Debit',
'payment_type_ACH' => 'ACH',
@ -1742,13 +1743,13 @@ $LANG = array(
'industry_Government' => 'Government',
'industry_Healthcare & Life Sciences' => 'Healthcare & Life Sciences',
'industry_Insurance' => 'Insurance',
'industry_Manufacturing' => 'Manufacturing',
'industry_Marketing' => 'Marketing',
'industry_Manufacturing' => 'Gamyba',
'industry_Marketing' => 'Marketingas',
'industry_Media' => 'Media',
'industry_Nonprofit & Higher Ed' => 'Nonprofit & Higher Ed',
'industry_Pharmaceuticals' => 'Pharmaceuticals',
'industry_Professional Services & Consulting' => 'Professional Services & Consulting',
'industry_Real Estate' => 'Real Estate',
'industry_Real Estate' => 'Nekilnojamas turtas',
'industry_Retail & Wholesale' => 'Retail & Wholesale',
'industry_Sports' => 'Sports',
'industry_Transportation' => 'Transportation',
@ -1757,31 +1758,31 @@ $LANG = array(
'industry_Photography' =>'Photography',
// Countries
'country_Afghanistan' => 'Afghanistan',
'country_Afghanistan' => 'Afganistanas',
'country_Albania' => 'Albania',
'country_Antarctica' => 'Antarctica',
'country_Antarctica' => 'Antarktika',
'country_Algeria' => 'Algeria',
'country_American Samoa' => 'American Samoa',
'country_Andorra' => 'Andorra',
'country_Andorra' => 'Andora',
'country_Angola' => 'Angola',
'country_Antigua and Barbuda' => 'Antigua and Barbuda',
'country_Azerbaijan' => 'Azerbaijan',
'country_Azerbaijan' => 'Azerbaidžanas',
'country_Argentina' => 'Argentina',
'country_Australia' => 'Australia',
'country_Austria' => 'Austria',
'country_Australia' => 'Australija',
'country_Austria' => 'Austrija',
'country_Bahamas' => 'Bahamas',
'country_Bahrain' => 'Bahrain',
'country_Bangladesh' => 'Bangladesh',
'country_Armenia' => 'Armenia',
'country_Armenia' => 'Armėnija',
'country_Barbados' => 'Barbados',
'country_Belgium' => 'Belgium',
'country_Belgium' => 'Belgija',
'country_Bermuda' => 'Bermuda',
'country_Bhutan' => 'Bhutan',
'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_Bouvet Island' => 'Bouvet Island',
'country_Brazil' => 'Brazil',
'country_Brazil' => 'Brazilija',
'country_Belize' => 'Belize',
'country_British Indian Ocean Territory' => 'British Indian Ocean Territory',
'country_Solomon Islands' => 'Solomon Islands',
@ -1790,7 +1791,7 @@ $LANG = array(
'country_Bulgaria' => 'Bulgaria',
'country_Myanmar' => 'Myanmar',
'country_Burundi' => 'Burundi',
'country_Belarus' => 'Belarus',
'country_Belarus' => 'Baltarusija',
'country_Cambodia' => 'Cambodia',
'country_Cameroon' => 'Cameroon',
'country_Canada' => 'Canada',
@ -1810,13 +1811,13 @@ $LANG = array(
'country_Congo' => 'Congo',
'country_Congo, the Democratic Republic of the' => 'Congo, the Democratic Republic of the',
'country_Cook Islands' => 'Cook Islands',
'country_Costa Rica' => 'Costa Rica',
'country_Croatia' => 'Croatia',
'country_Cuba' => 'Cuba',
'country_Cyprus' => 'Cyprus',
'country_Czech Republic' => 'Czech Republic',
'country_Costa Rica' => 'Kosta Rika',
'country_Croatia' => 'Kroatija',
'country_Cuba' => 'Kuba',
'country_Cyprus' => 'Kipras',
'country_Czech Republic' => 'Čekoslovakija',
'country_Benin' => 'Benin',
'country_Denmark' => 'Denmark',
'country_Denmark' => 'Danija',
'country_Dominica' => 'Dominica',
'country_Dominican Republic' => 'Dominican Republic',
'country_Ecuador' => 'Ecuador',
@ -1824,27 +1825,27 @@ $LANG = array(
'country_Equatorial Guinea' => 'Equatorial Guinea',
'country_Ethiopia' => 'Ethiopia',
'country_Eritrea' => 'Eritrea',
'country_Estonia' => 'Estonia',
'country_Estonia' => 'Estija',
'country_Faroe Islands' => 'Faroe Islands',
'country_Falkland Islands (Malvinas)' => 'Falkland Islands (Malvinas)',
'country_South Georgia and the South Sandwich Islands' => 'South Georgia and the South Sandwich Islands',
'country_Fiji' => 'Fiji',
'country_Finland' => 'Finland',
'country_Finland' => 'Suomija',
'country_Åland Islands' => 'Åland Islands',
'country_France' => 'France',
'country_France' => 'Prancūzija',
'country_French Guiana' => 'French Guiana',
'country_French Polynesia' => 'French Polynesia',
'country_French Southern Territories' => 'French Southern Territories',
'country_Djibouti' => 'Djibouti',
'country_Gabon' => 'Gabon',
'country_Georgia' => 'Georgia',
'country_Georgia' => 'Gruzija',
'country_Gambia' => 'Gambia',
'country_Palestinian Territory, Occupied' => 'Palestinian Territory, Occupied',
'country_Germany' => 'Germany',
'country_Ghana' => 'Ghana',
'country_Gibraltar' => 'Gibraltar',
'country_Kiribati' => 'Kiribati',
'country_Greece' => 'Greece',
'country_Greece' => 'Graikija',
'country_Greenland' => 'Greenland',
'country_Grenada' => 'Grenada',
'country_Guadeloupe' => 'Guadeloupe',
@ -1857,33 +1858,33 @@ $LANG = array(
'country_Holy See (Vatican City State)' => 'Holy See (Vatican City State)',
'country_Honduras' => 'Honduras',
'country_Hong Kong' => 'Hong Kong',
'country_Hungary' => 'Hungary',
'country_Hungary' => 'Vengrija',
'country_Iceland' => 'Iceland',
'country_India' => 'India',
'country_India' => 'Indija',
'country_Indonesia' => 'Indonesia',
'country_Iran, Islamic Republic of' => 'Iran, Islamic Republic of',
'country_Iraq' => 'Iraq',
'country_Ireland' => 'Ireland',
'country_Israel' => 'Israel',
'country_Italy' => 'Italy',
'country_Iraq' => 'Irakas',
'country_Ireland' => 'Airija',
'country_Israel' => 'Izrajelis',
'country_Italy' => 'Italija',
'country_Côte d\'Ivoire' => 'Côte d\'Ivoire',
'country_Jamaica' => 'Jamaica',
'country_Japan' => 'Japan',
'country_Kazakhstan' => 'Kazakhstan',
'country_Japan' => 'Japonija',
'country_Kazakhstan' => 'Kazachstanas',
'country_Jordan' => 'Jordan',
'country_Kenya' => 'Kenya',
'country_Korea, Democratic People\'s Republic of' => 'Korea, Democratic People\'s Republic of',
'country_Korea, Republic of' => 'Korea, Republic of',
'country_Kuwait' => 'Kuwait',
'country_Kyrgyzstan' => 'Kyrgyzstan',
'country_Kyrgyzstan' => 'Kirgizija',
'country_Lao People\'s Democratic Republic' => 'Lao People\'s Democratic Republic',
'country_Lebanon' => 'Lebanon',
'country_Lesotho' => 'Lesotho',
'country_Latvia' => 'Latvia',
'country_Latvia' => 'Latvija',
'country_Liberia' => 'Liberia',
'country_Libya' => 'Libya',
'country_Liechtenstein' => 'Liechtenstein',
'country_Lithuania' => 'Lithuania',
'country_Lithuania' => 'Lietuva',
'country_Luxembourg' => 'Luxembourg',
'country_Macao' => 'Macao',
'country_Madagascar' => 'Madagascar',
@ -1933,7 +1934,7 @@ $LANG = array(
'country_Peru' => 'Peru',
'country_Philippines' => 'Philippines',
'country_Pitcairn' => 'Pitcairn',
'country_Poland' => 'Poland',
'country_Poland' => 'Lenkija',
'country_Portugal' => 'Portugal',
'country_Guinea-Bissau' => 'Guinea-Bissau',
'country_Timor-Leste' => 'Timor-Leste',
@ -1941,7 +1942,7 @@ $LANG = array(
'country_Qatar' => 'Qatar',
'country_Réunion' => 'Réunion',
'country_Romania' => 'Romania',
'country_Russian Federation' => 'Russian Federation',
'country_Russian Federation' => 'Rusija',
'country_Rwanda' => 'Rwanda',
'country_Saint Barthélemy' => 'Saint Barthélemy',
'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_Svalbard and Jan Mayen' => 'Svalbard and Jan Mayen',
'country_Swaziland' => 'Swaziland',
'country_Sweden' => 'Sweden',
'country_Switzerland' => 'Switzerland',
'country_Sweden' => 'Švedija',
'country_Switzerland' => 'Šveicarija',
'country_Syrian Arab Republic' => 'Syrian Arab Republic',
'country_Tajikistan' => 'Tajikistan',
'country_Thailand' => 'Thailand',
@ -1983,7 +1984,7 @@ $LANG = array(
'country_Trinidad and Tobago' => 'Trinidad and Tobago',
'country_United Arab Emirates' => 'United Arab Emirates',
'country_Tunisia' => 'Tunisia',
'country_Turkey' => 'Turkey',
'country_Turkey' => 'Turkija',
'country_Turkmenistan' => 'Turkmenistan',
'country_Turks and Caicos Islands' => 'Turks and Caicos Islands',
'country_Tuvalu' => 'Tuvalu',
@ -2007,16 +2008,16 @@ $LANG = array(
'country_Yemen' => 'Yemen',
'country_Zambi' => 'Zambi',
'view_client_portal' => 'View client portal',
'view_portal' => 'View Portal',
'vendor_contacts' => 'Vendor Contacts',
'all' => 'All',
'selected' => 'Selected',
'category' => 'Category',
'categories' => 'Categories',
'view_client_portal' => 'Rodyti kliento tinklapį',
'view_portal' => 'Rodyti tinklapį',
'vendor_contacts' => 'Tiekėjo kontaktai',
'all' => 'Visi',
'selected' => 'Pasirinkita',
'category' => 'Kategorija',
'categories' => 'Kategorijos',
'new_expense_category' => 'New Expense Category',
'edit_category' => 'Edit Category',
'archive_expense_category' => 'Archive Category',
'edit_category' => 'Keisti kategoriją',
'archive_expense_category' => 'Archyvo kategorija',
'expense_categories' => 'Expense Categories',
'list_expense_categories' => 'List Expense Categories',
'updated_expense_category' => 'Successfully updated expense category',
@ -2025,25 +2026,89 @@ $LANG = array(
'archived_expense_categories' => 'Successfully archived :count expense category',
'restore_expense_category' => 'Restore expense category',
'restored_expense_category' => 'Successfully restored expense category',
'apply_taxes' => 'Apply taxes',
'min_to_max_users' => ':min to :max users',
'max_users_reached' => 'The maximum number of users has been reached.',
'buy_now_buttons' => 'Buy Now Buttons',
'landing_page' => 'Landing Page',
'payment_type' => 'Payment Type',
'form' => 'Form',
'link' => 'Link',
'fields' => 'Fields',
'apply_taxes' => 'Naudoti mokesčius',
'min_to_max_users' => ':min iki :max klientų',
'max_users_reached' => 'Pasiektas maksimalus galimų vartotojų skaičius.',
'buy_now_buttons' => 'Pirkti dabar mygtukas',
'landing_page' => 'Nukreipimo puslapis',
'payment_type' => 'Mokėjimo tipas',
'form' => 'Forma',
'link' => 'Nuoroda',
'fields' => 'Laukai',
'dwolla' => 'Dwolla',
'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.',
'enable_buy_now_buttons_help' => 'Enable support for buy now buttons',
'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.',
'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',
'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_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Kunnskapsbase',
'partial' => 'Delvis',
'partial' => 'Partial/Deposit',
'partial_remaining' => ':delvis av :balance',
'more_fields' => 'Flere Felt',
'less_fields' => 'Mindre Felt',
@ -995,7 +995,7 @@ $LANG = array(
'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',
'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',
@ -1695,6 +1695,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies
'freq_weekly' => 'Weekly',
@ -2043,7 +2044,71 @@ $LANG = array(
'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.',
'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_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Kennisbank',
'partial' => 'Gedeeld',
'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial / :balance',
'more_fields' => 'Meer velden',
'less_fields' => 'Minder velden',
@ -986,7 +986,7 @@ $LANG = array(
'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',
'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',
@ -1686,6 +1686,7 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen
'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies
'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.',
'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',
'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_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Baza wiedzy',
'partial' => 'Zaliczka',
'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial z :balance',
'more_fields' => 'Więcej pól',
'less_fields' => 'Mniej pól',
@ -995,7 +995,7 @@ $LANG = array(
'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',
'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',
@ -1695,6 +1695,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies
'freq_weekly' => 'Weekly',
@ -2043,7 +2044,71 @@ $LANG = array(
'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.',
'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_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Base de Conhecimento',
'partial' => 'Parcial',
'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial de :balance',
'more_fields' => 'Mais Campos',
'less_fields' => 'Menos Campos',
@ -986,7 +986,7 @@ $LANG = array(
'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',
'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',
@ -1686,6 +1686,7 @@ Quando tiver os valores dos depósitos, volte a esta pagina e complete a verific
'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies
'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.',
'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',
'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_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Knowledge Base',
'partial' => 'Partial',
'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial of :balance',
'more_fields' => 'More Fields',
'less_fields' => 'Less Fields',
@ -994,7 +994,7 @@ $LANG = array(
'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',
'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',
@ -1694,6 +1694,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies
'freq_weekly' => 'Weekly',
@ -2042,7 +2043,71 @@ $LANG = array(
'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.',
'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_bitcoin' => 'Bitcoin',
'knowledge_base' => 'Knowledge Base',
'partial' => 'Partial',
'partial' => 'Partial/Deposit',
'partial_remaining' => ':partial of :balance',
'more_fields' => 'More Fields',
'less_fields' => 'Less Fields',
@ -995,7 +995,7 @@ $LANG = array(
'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',
'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',
@ -1695,6 +1695,7 @@ $LANG = array(
'lang_Spanish' => 'Spanish',
'lang_Spanish - Spain' => 'Spanish - Spain',
'lang_Swedish' => 'Swedish',
'lang_Albanian' => 'Albanian',
// Frequencies
'freq_weekly' => 'Weekly',
@ -2043,7 +2044,71 @@ $LANG = array(
'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.',
'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

@ -10,7 +10,7 @@
</style>
@stop
@section('content')
@section('content')
@parent
@include('accounts.nav', ['selected' => ACCOUNT_EMAIL_SETTINGS, 'advanced' => true])
@ -29,35 +29,34 @@
<div class="panel-body form-padding-right">
{!! Former::checkbox('pdf_email_attachment')->text(trans('texts.enable')) !!}
{!! Former::checkbox('document_email_attachment')->text(trans('texts.enable')) !!}
&nbsp;
{{-- Former::select('recurring_hour')->options($recurringHours) --}}
@if (Utils::isNinja())
{!! Former::inline_radios('custom_invoice_link')
->onchange('onCustomLinkChange()')
->label(trans('texts.invoice_link'))
->radios([
trans('texts.subdomain') => ['value' => 'subdomain', 'name' => 'custom_link'],
trans('texts.website') => ['value' => 'website', 'name' => 'custom_link'],
])->check($account->iframe_url ? 'website' : 'subdomain') !!}
{{ Former::setOption('capitalize_translations', false) }}
{!! Former::text('subdomain')
->placeholder(trans('texts.www'))
->onchange('onSubdomainChange()')
->addGroupClass('subdomain')
->label(' ')
->help(trans('texts.subdomain_help')) !!}
{!! Former::inline_radios('custom_invoice_link')
->onchange('onCustomLinkChange()')
->label(trans('texts.invoice_link'))
->radios([
trans('texts.subdomain') => ['value' => 'subdomain', 'name' => 'custom_link'],
trans('texts.website') => ['value' => 'website', 'name' => 'custom_link'],
])->check($account->iframe_url ? 'website' : 'subdomain') !!}
{{ Former::setOption('capitalize_translations', false) }}
{!! Former::text('subdomain')
->placeholder(trans('texts.www'))
->onchange('onSubdomainChange()')
->addGroupClass('subdomain')
->label(' ')
->help(trans('texts.subdomain_help')) !!}
{!! Former::text('iframe_url')
->placeholder('https://www.example.com/invoice')
->appendIcon('question-sign')
->addGroupClass('iframe_url')
->label(' ')
->help(trans('texts.subdomain_help')) !!}
{!! Former::text('iframe_url')
->placeholder('https://www.example.com/invoice')
->appendIcon('question-sign')
->addGroupClass('iframe_url')
->label(' ')
->help(trans('texts.subdomain_help')) !!}
@endif
</div>
</div>
@ -66,7 +65,7 @@
<h3 class="panel-title">{!! trans('texts.email_design') !!}</h3>
</div>
<div class="panel-body form-padding-right">
{!! Former::select('email_design_id')
->appendIcon('question-sign')
->addGroupClass('email_design_id')
@ -79,7 +78,7 @@
@if (Utils::isNinja())
{!! Former::checkbox('enable_email_markup')
->text(trans('texts.enable') .
->text(trans('texts.enable') .
'<a href="'.EMAIL_MARKUP_URL.'" target="_blank" title="'.trans('texts.learn_more').'">' . Icon::create('question-sign') . '</a> ')
->help(trans('texts.enable_email_markup_help')) !!}
@endif
@ -107,7 +106,7 @@
&lt;center&gt;
&lt;script language="javascript"&gt;
var iframe = document.getElementById('invoiceIFrame');
iframe.src = '{{ SITE_URL }}/view/'
iframe.src = '{{ SITE_URL }}/view/'
+ window.location.search.substring(1);
&lt;/script&gt;</pre>
<p>{{ trans('texts.iframe_url_help2') }}</p>
@ -186,7 +185,7 @@
$('#designHelpModal').modal('show');
});
$(function() {
$(function() {
onCustomLinkChange();
$('#subdomain').change(function() {
@ -198,4 +197,4 @@
});
</script>
@stop
@stop

View File

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

View File

@ -1,7 +1,7 @@
@extends('header')
@section('content')
@parent
@section('content')
@parent
@include('accounts.nav', ['selected' => ACCOUNT_NOTIFICATIONS])
@ -19,41 +19,50 @@
<div class="panel-body">
{!! Former::checkbox('notify_sent')->label('&nbsp;')->text(trans('texts.email_sent')) !!}
{!! Former::checkbox('notify_viewed')->label('&nbsp;')->text(trans('texts.email_viewed')) !!}
{!! Former::checkbox('notify_paid')->label('&nbsp;')->text(trans('texts.email_paid')) !!}
{!! Former::checkbox('notify_paid')->label('&nbsp;')->text(trans('texts.email_paid')) !!}
{!! Former::checkbox('notify_approved')->label('&nbsp;')->text(trans('texts.email_approved')) !!}
</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">
<label for="invoice_terms" class="control-label col-lg-4 col-sm-4"></label>
<div class="col-lg-8 col-sm-8">
<div class="form-group">
<label for="notify_sent" class="control-label col-lg-4 col-sm-4">&nbsp;</label>
<div class="col-lg-8 col-sm-8">
<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=635126583203143";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=635126583203143";
fjs.parentNode.insertBefore(js, fjs);
}(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>
<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>
<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>
<div class="help-block">{{ trans('texts.facebook_and_twitter_help') }}</div>
</div>
</div>
</div>
</div>
-->
{!! Former::actions(
{!! Former::actions(
Button::success(trans('texts.save'))
->submit()->large()
->appendIcon(Icon::create('floppy-disk'))) !!}
{!! Former::close() !!}
@stop
@stop

View File

@ -148,7 +148,7 @@
@if ($contact->phone)
<i class="fa fa-phone" style="width: 20px"></i>{{ $contact->phone }}<br/>
@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/>
@endif
@endforeach

View File

@ -1,25 +1,221 @@
@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')
<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="col-md-4">
<div class="panel panel-default">
<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 class="in-thin">
{{ trans('texts.total_revenue') }}
</div>
<div class="revenue-div in-bold pull-right" style="color:#337ab7">
</div>
<div class="in-bold">
@if (count($paidToDate))
@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
@else
{{ Utils::formatMoney(0) }}
<div class="currency currency_{{ $account->getCurrencyId() }}" style="display:none">
{{ Utils::formatMoney(0) }}
</div>
@endif
</div>
</div>
@ -29,21 +225,40 @@
<div class="col-md-4">
<div class="panel panel-default">
<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 class="in-thin">
{{ trans('texts.average_invoice') }}
</div>
<div class="in-bold">
@if (count($averageInvoice))
@foreach ($averageInvoice as $item)
{{ Utils::formatMoney($item->invoice_avg, $item->currency_id) }}<br/>
@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
@else
{{ Utils::formatMoney(0) }}
@endif
</div>
</div>
@else
<div class="in-thin">
{{ trans('texts.average_invoice') }}
</div>
<div class="average-div in-bold pull-right" style="color:#337ab7">
</div>
<div class="in-bold">
@if (count($averageInvoice))
@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/>
</div>
@endforeach
@else
<div class="currency currency_{{ $account->getCurrencyId() }}" style="display:none">
{{ Utils::formatMoney(0) }}
</div>
@endif
</div>
@endif
</div>
</div>
</div>
@ -51,19 +266,23 @@
<div class="col-md-4">
<div class="panel panel-default">
<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 class="in-thin">
{{ trans('texts.outstanding') }}
</div>
<div class="outstanding-div in-bold pull-right" style="color:#337ab7">
</div>
<div class="in-bold">
@if (count($balances))
@foreach ($balances 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) }}<br/>
</div>
@endforeach
@else
{{ Utils::formatMoney(0) }}
<div class="currency currency_{{ $account->getCurrencyId() }}" style="display:none">
{{ Utils::formatMoney(0) }}
</div>
@endif
</div>
</div>
@ -72,13 +291,23 @@
</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>
@endif
<div class="row">
<div class="col-md-6">
<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">
<i class="glyphicon glyphicon-exclamation-sign"></i> {{ trans('texts.activity') }}
@if ($invoicesSent)
@ -103,6 +332,17 @@
<div class="panel panel-default dashboard" style="height:320px;">
<div class="panel-heading" style="margin:0; background-color: #f5f5f5 !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') }}
</h3>
</div>
@ -172,7 +412,7 @@
</div>
<div class="col-md-6">
<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">
<i class="glyphicon glyphicon-time"></i> {{ trans('texts.invoices_past_due') }}
</h3>
@ -242,7 +482,7 @@
</div>
<div class="col-md-6">
<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">
<i class="glyphicon glyphicon-time"></i> {{ trans('texts.expired_quotes') }}
</h3>

View File

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

View File

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

View File

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

View File

@ -5,6 +5,7 @@
for (var i=0; i<currencies.length; i++) {
var currency = currencies[i];
currencyMap[currency.id] = currency;
currencyMap[currency.code] = currency;
}
var countries = {!! \Cache::get('countries') !!};
@ -28,7 +29,7 @@
NINJA.parseFloat = function(str) {
if (!str) return '';
str = (str+'').replace(/[^0-9\.\-]/g, '');
return window.parseFloat(str);
}
@ -97,4 +98,4 @@
}
}
</script>
</script>

View File

@ -4,7 +4,8 @@
@parent
@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>
@endif

View File

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

View File

@ -1,14 +1,8 @@
@extends('header')
@section('head')
@parent
<script src="{!! asset('js/Chart.min.js') !!}" type="text/javascript"></script>
@stop
@section('content')
@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') !!}
@ -54,18 +48,12 @@
</div>
<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')) !!}
<div id="dateField" style="display:{{ $reportType == ENTITY_TAX_RATE ? 'block' : 'none' }}">
{!! Former::select('date_field')->label(trans('texts.filter'))
->addOption(trans('texts.invoice_date'), FILTER_INVOICE_DATE)
->addOption(trans('texts.payment_date'), FILTER_PAYMENT_DATE) !!}
</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() !!}
</div>
@ -73,7 +61,6 @@
</div>
</div>
@if ($enableReport)
<div class="panel panel-default">
<div class="panel-body">
<table class="table table-striped invoice-table">
@ -128,29 +115,6 @@
</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>
@ -162,32 +126,6 @@
$('#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() {
$('.start_date .input-group-addon').click(function() {
toggleDatePicker('start_date');

View File

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

View File

@ -36,7 +36,7 @@ class SettingsCest
$I->seeRecord('accounts', array('name' => $name));
}
*/
public function userDetails(FunctionalTester $I)
{
$I->wantTo('update the user details');
@ -96,7 +96,7 @@ class SettingsCest
$I->seeRecord('products', array('product_key' => $productKey));
}
public function updateProduct(FunctionalTester $I)
public function updateProduct(FunctionalTester $I)
{
return;
@ -128,7 +128,7 @@ class SettingsCest
$I->seeRecord('accounts', array('invoice_terms' => $terms));
}
*/
public function updateInvoiceSettings(FunctionalTester $I)
{
$I->wantTo('update invoice settings');
@ -163,12 +163,12 @@ class SettingsCest
public function runReport(FunctionalTester $I)
{
$I->wantTo('run the report');
$I->amOnPage('/settings/charts_and_reports');
$I->amOnPage('/settings/reports');
$I->click('Run');
$I->seeResponseCodeIs(200);
}
public function createUser(FunctionalTester $I)
{
$I->wantTo('create a user');
@ -213,7 +213,7 @@ class SettingsCest
$I->fillField(['name' => '23_apiKey'], $apiKey);
$I->click('Save');
$I->seeResponseCodeIs(200);
$I->see('Successfully created gateway');
$I->seeRecord('account_gateways', array('gateway_id' => 23));
@ -224,12 +224,12 @@ class SettingsCest
// $I->amOnPage('/gateways/1/edit');
// $I->click('Save');
// $I->seeResponseCodeIs(200);
// $I->see('Successfully updated gateway');
// $I->seeRecord('account_gateways', array('config' => '{"apiKey":"ASHHOWAH"}'));
}
*/
}