diff --git a/.env.example b/.env.example index ec281e283601..ce6f298ebdf7 100644 --- a/.env.example +++ b/.env.example @@ -45,6 +45,7 @@ FCM_API_TOKEN= #CACHE_DRIVER= #CACHE_HOST= +#REDIS_HOST= #CACHE_PORT1= #CACHE_PORT2= diff --git a/README.md b/README.md index 934637117002..2f5942acef4f 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ All contributors are welcome! For information on how contribute to Invoice Ninja, please see our [contributing guide](CONTRIBUTING.md). ## Credits -* [Hillel Coren](https://github.com/hillelcoren) +* [Hillel Coren](https://hillelcoren.com/) * [All contributors](https://github.com/invoiceninja/invoiceninja/graphs/contributors) **Special thanks to:** diff --git a/app/Constants.php b/app/Constants.php index 75634ad9da1e..2e0570972749 100644 --- a/app/Constants.php +++ b/app/Constants.php @@ -296,7 +296,7 @@ if (! defined('APP_NAME')) { 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', '3.2.0' . env('NINJA_VERSION_SUFFIX')); + define('NINJA_VERSION', '3.2.1' . 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')); @@ -321,10 +321,13 @@ if (! defined('APP_NAME')) { define('FIREFOX_PDF_HELP_URL', 'https://support.mozilla.org/en-US/kb/view-pdf-files-firefox'); define('MSBOT_LOGIN_URL', 'https://login.microsoftonline.com/common/oauth2/v2.0/token'); - define('MSBOT_LUIS_URL', 'https://api.projectoxford.ai/luis/v1/application'); + define('MSBOT_LUIS_URL', 'https://westus.api.cognitive.microsoft.com/luis/v2.0/apps'); define('SKYPE_API_URL', 'https://apis.skype.com/v3'); define('MSBOT_STATE_URL', 'https://state.botframework.com/v3'); + define('BOT_PLATFORM_WEB_APP', 'WebApp'); + define('BOT_PLATFORM_SKYPE', 'Skype'); + define('BLANK_IMAGE', 'data:image/png;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs='); define('COUNT_FREE_DESIGNS', 4); diff --git a/app/Http/Controllers/BotController.php b/app/Http/Controllers/BotController.php index 02267924f23a..0a32a5b1f9e1 100644 --- a/app/Http/Controllers/BotController.php +++ b/app/Http/Controllers/BotController.php @@ -80,7 +80,7 @@ class BotController extends Controller $user->account->loadLocalizationSettings(); $data = $this->parseMessage($text); - $intent = BaseIntent::createIntent($state, $data); + $intent = BaseIntent::createIntent($platform, $state, $data); $response = $intent->process(); $state = $intent->getState(); } @@ -97,6 +97,20 @@ class BotController extends Controller return RESULT_SUCCESS; } + public function handleCommand() + { + $command = request()->command; + $data = $this->parseMessage($command); + + try { + $intent = BaseIntent::createIntent(BOT_PLATFORM_WEB_APP, false, $data); + return $intent->process(); + } catch (Exception $exception) { + $message = sprintf('"%s"
%s', $command, $exception->getMessage()); + return redirect()->back()->withWarning($message); + } + } + private function authenticate($input) { $token = isset($_SERVER['HTTP_AUTHORIZATION']) ? $_SERVER['HTTP_AUTHORIZATION'] : false; @@ -146,7 +160,8 @@ class BotController extends Controller $subKey = env('MSBOT_LUIS_SUBSCRIPTION_KEY'); $message = rawurlencode($message); - $url = sprintf('%s?id=%s&subscription-key=%s&q=%s', MSBOT_LUIS_URL, $appId, $subKey, $message); + $url = sprintf('%s/%s?subscription-key=%s&verbose=true&q=%s', MSBOT_LUIS_URL, $appId, $subKey, $message); + //$url = sprintf('%s?id=%s&subscription-key=%s&q=%s', MSBOT_LUIS_URL, $appId, $subKey, $message); $data = file_get_contents($url); $data = json_decode($data); diff --git a/app/Http/Controllers/ClientPortalController.php b/app/Http/Controllers/ClientPortalController.php index c583835fd49d..9800a1ed1651 100644 --- a/app/Http/Controllers/ClientPortalController.php +++ b/app/Http/Controllers/ClientPortalController.php @@ -326,14 +326,20 @@ class ClientPortalController extends BaseController } $color = $account->primary_color ? $account->primary_color : '#0b4d78'; + $columns = ['frequency', 'start_date', 'end_date', 'invoice_total']; + $client = $contact->client; + + if ($client->hasAutoBillConfigurableInvoices()) { + $columns[] = 'auto_bill'; + } $data = [ 'color' => $color, 'account' => $account, - 'client' => $contact->client, + 'client' => $client, 'title' => trans('texts.recurring_invoices'), 'entityType' => ENTITY_RECURRING_INVOICE, - 'columns' => Utils::trans(['frequency', 'start_date', 'end_date', 'invoice_total', 'auto_bill']), + 'columns' => Utils::trans($columns), ]; return response()->view('public_list', $data); diff --git a/app/Http/Controllers/InvoiceController.php b/app/Http/Controllers/InvoiceController.php index 18d562dfbedc..fea15293ab57 100644 --- a/app/Http/Controllers/InvoiceController.php +++ b/app/Http/Controllers/InvoiceController.php @@ -194,6 +194,7 @@ class InvoiceController extends BaseController $invoice = $account->createInvoice($entityType, $clientId); $invoice->public_id = 0; + $invoice->loadFromRequest(); $clients = Client::scope()->with('contacts', 'country')->orderBy('name'); if (! Auth::user()->hasPermission('view_all')) { diff --git a/app/Http/routes.php b/app/Http/routes.php index 2a4258f8c43a..614954aa3d02 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -127,6 +127,7 @@ Route::group(['middleware' => 'auth:user'], function () { Route::get('check_invoice_number/{invoice_id?}', 'InvoiceController@checkInvoiceNumber'); Route::post('save_sidebar_state', 'UserController@saveSidebarState'); Route::post('contact_us', 'HomeController@contactUs'); + Route::post('handle_command', 'BotController@handleCommand'); Route::get('settings/user_details', 'AccountController@showUserDetails'); Route::post('settings/user_details', 'AccountController@saveUserDetails'); diff --git a/app/Models/Client.php b/app/Models/Client.php index 5a42983d38ba..7f886fc96879 100644 --- a/app/Models/Client.php +++ b/app/Models/Client.php @@ -543,7 +543,15 @@ class Client extends EntityModel */ public function hasAutoBillConfigurableInvoices() { - return $this->invoices()->whereIn('auto_bill', [AUTO_BILL_OPT_IN, AUTO_BILL_OPT_OUT])->count() > 0; + return $this->invoices()->whereIsPublic(true)->whereIn('auto_bill', [AUTO_BILL_OPT_IN, AUTO_BILL_OPT_OUT])->count() > 0; + } + + /** + * @return bool + */ + public function hasRecurringInvoices() + { + return $this->invoices()->whereIsPublic(true)->whereIsRecurring(true)->count() > 0; } public function defaultDaysDue() diff --git a/app/Models/EntityModel.php b/app/Models/EntityModel.php index 3cb8a052cc19..36220a53b1d2 100644 --- a/app/Models/EntityModel.php +++ b/app/Models/EntityModel.php @@ -319,6 +319,15 @@ class EntityModel extends Eloquent return array_get($icons, $entityType); } + public function loadFromRequest() + { + foreach (static::$requestFields as $field) { + if ($value = request()->$field) { + $this->$field = strpos($field, 'date') ? Utils::fromSqlDate($value) : $value; + } + } + } + // isDirty return true if the field's new value is the same as the old one public function isChanged() { diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php index 7e5b3b66c67f..83e6912205ab 100644 --- a/app/Models/Invoice.php +++ b/app/Models/Invoice.php @@ -73,6 +73,18 @@ class Invoice extends EntityModel implements BalanceAffecting 'date:', ]; + /** + * @var array + */ + public static $requestFields = [ + 'invoice_number', + 'invoice_date', + 'due_date', + 'po_number', + 'discount', + 'partial', + ]; + public static $statusClasses = [ INVOICE_STATUS_SENT => 'info', INVOICE_STATUS_VIEWED => 'warning', diff --git a/app/Models/InvoiceStatus.php b/app/Models/InvoiceStatus.php index 4a4dddb5eecb..302b79ca9fc3 100644 --- a/app/Models/InvoiceStatus.php +++ b/app/Models/InvoiceStatus.php @@ -13,4 +13,26 @@ class InvoiceStatus extends Eloquent * @var bool */ public $timestamps = false; + + public static function getIdFromAlias($status) + { + switch ($status) { + case 'draft': + return INVOICE_STATUS_DRAFT; + case 'sent': + return INVOICE_STATUS_SENT; + case 'viewed': + return INVOICE_STATUS_VIEWED; + case 'approved': + return INVOICE_STATUS_APPROVED; + case 'partial': + return INVOICE_STATUS_PARTIAL; + case 'overdue': + return INVOICE_STATUS_OVERDUE; + case 'unpaid': + return INVOICE_STATUS_UNPAID; + default: + return false; + } + } } diff --git a/app/Ninja/Intents/BaseIntent.php b/app/Ninja/Intents/BaseIntent.php index 012a75d46eb1..f65407283431 100644 --- a/app/Ninja/Intents/BaseIntent.php +++ b/app/Ninja/Intents/BaseIntent.php @@ -3,6 +3,7 @@ namespace App\Ninja\Intents; use App\Libraries\Skype\SkypeResponse; +use App\Models\Client; use Exception; use stdClass; @@ -28,11 +29,22 @@ class BaseIntent $this->state = $state; $this->data = $data; + + // If they're viewing a client set it as the current state + if (! $this->hasField('Filter', 'all')) { + $url = url()->previous(); + preg_match('/clients\/(\d*)/', $url, $matches); + if (count($matches) >= 2) { + if ($client = Client::scope($matches[1])->first()) { + $this->state->current->client = $client; + } + } + } //var_dump($state); } - public static function createIntent($state, $data) + public static function createIntent($platform, $state, $data) { if (! count($data->intents)) { throw new Exception(trans('texts.intent_not_found')); @@ -43,20 +55,26 @@ class BaseIntent foreach ($data->entities as $entity) { if ($entity->type === 'EntityType') { - $entityType = $entity->entity; + $entityType = rtrim($entity->entity, 's'); break; } } - if (! $entityType) { + if ($state && ! $entityType) { $entityType = $state->current->entityType; } - + $entityType = $entityType ?: 'client'; $entityType = ucwords(strtolower($entityType)); + if ($entityType == 'Recurring') { + $entityType = 'RecurringInvoice'; + } $intent = str_replace('Entity', $entityType, $intent); - $className = "App\\Ninja\\Intents\\{$intent}Intent"; - //echo "Intent: $intent

"; + if ($platform == BOT_PLATFORM_WEB_APP) { + $className = "App\\Ninja\\Intents\\WebApp\\{$intent}Intent"; + } else { + $className = "App\\Ninja\\Intents\\{$intent}Intent"; + } if (! class_exists($className)) { throw new Exception(trans('texts.intent_not_supported')); @@ -65,6 +83,52 @@ class BaseIntent return new $className($state, $data); } + protected function getField($field) + { + foreach ($this->data->entities as $entity) { + if ($entity->type === $field) { + return $entity->entity; + } + } + + return false; + } + + protected function getFields($field) + { + $data = []; + + foreach ($this->data->entities as $entity) { + if ($entity->type === $field) { + $data[] = $entity->entity; + } + } + + return $data; + } + + protected function loadStates($entityType) + { + $states = array_filter($this->getFields('Filter'), function($state) { + return in_array($state, [STATUS_ACTIVE, STATUS_ARCHIVED, STATUS_DELETED]); + }); + + if (count($states) || $this->hasField('Filter', 'all')) { + session(['entity_state_filter:' . $entityType => join(',', $states)]); + } + } + + protected function hasField($field, $value = false) + { + $fieldValue = $this->getField($field); + + if ($value) { + return $fieldValue && $fieldValue == $value; + } else { + return $fieldValue ? true : false; + } + } + public function process() { throw new Exception(trans('texts.intent_not_supported')); @@ -128,13 +192,32 @@ class BaseIntent foreach ($this->data->entities as $param) { if ($param->type == 'Name') { + $param->type = rtrim($param->type, ' \' s'); $client = $clientRepo->findPhonetically($param->entity); } } + if (! $client) { + $client = $this->state->current->client; + } + return $client; } + protected function requestInvoice() + { + $invoiceRepo = app('App\Ninja\Repositories\InvoiceRepository'); + $invoice = false; + + foreach ($this->data->entities as $param) { + if ($param->type == 'builtin.number') { + return $invoiceRepo->findPhonetically($param->entity); + } + } + + return false; + } + protected function requestFields() { $data = []; @@ -178,13 +261,31 @@ class BaseIntent return $data; } + protected function requestFieldsAsString($fields) + { + $str = ''; + + foreach ($this->requestFields() as $field => $value) { + if (in_array($field, $fields)) { + $str .= $field . '=' . urlencode($value) . '&'; + } + } + + $str = rtrim($str, '?'); + $str = rtrim($str, '&'); + + return $str; + } + protected function processField($field) { $field = str_replace(' ', '_', $field); + /* Shouldn't be need any more if (strpos($field, 'date') !== false) { $field .= '_sql'; } + */ return $field; } diff --git a/app/Ninja/Intents/InvoiceIntent.php b/app/Ninja/Intents/InvoiceIntent.php index 9421e32e0a4e..a6b712c01304 100644 --- a/app/Ninja/Intents/InvoiceIntent.php +++ b/app/Ninja/Intents/InvoiceIntent.php @@ -3,6 +3,7 @@ namespace App\Ninja\Intents; use App\Models\Invoice; +use App\Models\InvoiceStatus; use Auth; use Exception; @@ -104,4 +105,20 @@ class InvoiceIntent extends BaseIntent return $invoiceItems; } + + protected function loadStatuses($entityType) + { + $statusIds = []; + $statuses = $this->getFields('Filter'); + + foreach ($statuses as $status) { + if ($statusId = InvoiceStatus::getIdFromAlias($status)) { + $statusIds[] = $statusId; + } + } + + if (count($statusIds) || $this->hasField('Filter', 'all')) { + session(['entity_status_filter:' . $entityType => join(',', $statusIds)]); + } + } } diff --git a/app/Ninja/Intents/WebApp/CreateClientIntent.php b/app/Ninja/Intents/WebApp/CreateClientIntent.php new file mode 100644 index 000000000000..f8b05eaed6ac --- /dev/null +++ b/app/Ninja/Intents/WebApp/CreateClientIntent.php @@ -0,0 +1,18 @@ +requestFieldsAsString(Invoice::$requestFields); + + return redirect($url); + } +} diff --git a/app/Ninja/Intents/WebApp/CreateCreditIntent.php b/app/Ninja/Intents/WebApp/CreateCreditIntent.php new file mode 100644 index 000000000000..dc3bec7c0c0c --- /dev/null +++ b/app/Ninja/Intents/WebApp/CreateCreditIntent.php @@ -0,0 +1,21 @@ +requestClient(); + $clientPublicId = $client ? $client->public_id : null; + + //$invoiceItems = $this->requestInvoiceItems(); + + $url = '/credits/create/' . $clientPublicId; + //$url .= $this->requestFieldsAsString(Invoice::$requestFields); + + return redirect($url); + } +} diff --git a/app/Ninja/Intents/WebApp/CreateExpenseIntent.php b/app/Ninja/Intents/WebApp/CreateExpenseIntent.php new file mode 100644 index 000000000000..f247937451c7 --- /dev/null +++ b/app/Ninja/Intents/WebApp/CreateExpenseIntent.php @@ -0,0 +1,18 @@ +requestFieldsAsString(Invoice::$requestFields); + + return redirect($url); + } +} diff --git a/app/Ninja/Intents/WebApp/CreateInvoiceIntent.php b/app/Ninja/Intents/WebApp/CreateInvoiceIntent.php new file mode 100644 index 000000000000..395b5a78ca08 --- /dev/null +++ b/app/Ninja/Intents/WebApp/CreateInvoiceIntent.php @@ -0,0 +1,27 @@ +requestClient(); + $clientPublicId = $client ? $client->public_id : null; + + //$invoiceItems = $this->requestInvoiceItems(); + + $url = '/invoices/create/' . $clientPublicId . '?'; + $url .= $this->requestFieldsAsString(Invoice::$requestFields); + + $url = rtrim($url, '?'); + $url = rtrim($url, '&'); + + return redirect($url); + } +} diff --git a/app/Ninja/Intents/WebApp/CreatePaymentIntent.php b/app/Ninja/Intents/WebApp/CreatePaymentIntent.php new file mode 100644 index 000000000000..63cb631de1b1 --- /dev/null +++ b/app/Ninja/Intents/WebApp/CreatePaymentIntent.php @@ -0,0 +1,27 @@ +requestInvoice()) { + $invoicePublicId = $invoice->public_id; + } elseif ($client = $this->requestClient()) { + $clientPublicId = $client->public_id; + } + + //$invoiceItems = $this->requestInvoiceItems(); + + $url = sprintf('/payments/create/%s/%s', $clientPublicId, $invoicePublicId); + //$url .= $this->requestFieldsAsString(Invoice::$requestFields); + + return redirect($url); + } +} diff --git a/app/Ninja/Intents/WebApp/CreateProductIntent.php b/app/Ninja/Intents/WebApp/CreateProductIntent.php new file mode 100644 index 000000000000..d8989b3f0c05 --- /dev/null +++ b/app/Ninja/Intents/WebApp/CreateProductIntent.php @@ -0,0 +1,21 @@ +requestFieldsAsString(Invoice::$requestFields); + + return redirect($url); + } +} diff --git a/app/Ninja/Intents/WebApp/CreateQuoteIntent.php b/app/Ninja/Intents/WebApp/CreateQuoteIntent.php new file mode 100644 index 000000000000..cd93d4a06d61 --- /dev/null +++ b/app/Ninja/Intents/WebApp/CreateQuoteIntent.php @@ -0,0 +1,25 @@ +requestClient(); + $clientPublicId = $client ? $client->public_id : null; + + //$invoiceItems = $this->requestInvoiceItems(); + + $url = '/quotes/create/' . $clientPublicId . '?'; + $url .= $this->requestFieldsAsString(Invoice::$requestFields); + + $url = rtrim($url, '?'); + $url = rtrim($url, '&'); + + return redirect($url); + } +} diff --git a/app/Ninja/Intents/WebApp/CreateRecurringInvoiceIntent.php b/app/Ninja/Intents/WebApp/CreateRecurringInvoiceIntent.php new file mode 100644 index 000000000000..db09f8ff4778 --- /dev/null +++ b/app/Ninja/Intents/WebApp/CreateRecurringInvoiceIntent.php @@ -0,0 +1,25 @@ +requestClient(); + $clientPublicId = $client ? $client->public_id : null; + + //$invoiceItems = $this->requestInvoiceItems(); + + $url = '/recurring_invoices/create/' . $clientPublicId . '?'; + $url .= $this->requestFieldsAsString(Invoice::$requestFields); + + $url = rtrim($url, '?'); + $url = rtrim($url, '&'); + + return redirect($url); + } +} diff --git a/app/Ninja/Intents/WebApp/CreateTaskIntent.php b/app/Ninja/Intents/WebApp/CreateTaskIntent.php new file mode 100644 index 000000000000..b1ff8266d40e --- /dev/null +++ b/app/Ninja/Intents/WebApp/CreateTaskIntent.php @@ -0,0 +1,21 @@ +requestClient(); + $clientPublicId = $client ? $client->public_id : null; + + //$invoiceItems = $this->requestInvoiceItems(); + + $url = '/tasks/create/' . $clientPublicId . '?'; + //$url .= $this->requestFieldsAsString(Invoice::$requestFields); + + return redirect($url); + } +} diff --git a/app/Ninja/Intents/WebApp/CreateVendorIntent.php b/app/Ninja/Intents/WebApp/CreateVendorIntent.php new file mode 100644 index 000000000000..ef187567e70b --- /dev/null +++ b/app/Ninja/Intents/WebApp/CreateVendorIntent.php @@ -0,0 +1,18 @@ +requestFieldsAsString(Invoice::$requestFields); + + return redirect($url); + } +} diff --git a/app/Ninja/Intents/WebApp/FindClientIntent.php b/app/Ninja/Intents/WebApp/FindClientIntent.php new file mode 100644 index 000000000000..baa438193921 --- /dev/null +++ b/app/Ninja/Intents/WebApp/FindClientIntent.php @@ -0,0 +1,17 @@ +requestClient(); + + $url = $client ? $client->present()->url : '/clients'; + + return redirect($url); + } +} diff --git a/app/Ninja/Intents/WebApp/FindInvoiceIntent.php b/app/Ninja/Intents/WebApp/FindInvoiceIntent.php new file mode 100644 index 000000000000..158cdd023482 --- /dev/null +++ b/app/Ninja/Intents/WebApp/FindInvoiceIntent.php @@ -0,0 +1,17 @@ +requestInvoice(); + + $url = $invoice ? $invoice->present()->url : '/invoices'; + + return redirect($url); + } +} diff --git a/app/Ninja/Intents/WebApp/FindQuoteIntent.php b/app/Ninja/Intents/WebApp/FindQuoteIntent.php new file mode 100644 index 000000000000..0222c15dddc3 --- /dev/null +++ b/app/Ninja/Intents/WebApp/FindQuoteIntent.php @@ -0,0 +1,17 @@ +requestInvoice(); + + $url = $invoice ? $invoice->present()->url : '/quotes'; + + return redirect($url); + } +} diff --git a/app/Ninja/Intents/WebApp/ListClientIntent.php b/app/Ninja/Intents/WebApp/ListClientIntent.php new file mode 100644 index 000000000000..6cb087d2af59 --- /dev/null +++ b/app/Ninja/Intents/WebApp/ListClientIntent.php @@ -0,0 +1,15 @@ +loadStates(ENTITY_CLIENT); + + return redirect('/clients'); + } +} diff --git a/app/Ninja/Intents/WebApp/ListCreditIntent.php b/app/Ninja/Intents/WebApp/ListCreditIntent.php new file mode 100644 index 000000000000..dadc36080189 --- /dev/null +++ b/app/Ninja/Intents/WebApp/ListCreditIntent.php @@ -0,0 +1,21 @@ +loadStates(ENTITY_CREDIT); + + if ($client = $this->requestClient()) { + $url = $client->present()->url . '#credits'; + } else { + $url = '/credits'; + } + + return redirect($url); + } +} diff --git a/app/Ninja/Intents/WebApp/ListExpenseIntent.php b/app/Ninja/Intents/WebApp/ListExpenseIntent.php new file mode 100644 index 000000000000..5b6e6f7dff3c --- /dev/null +++ b/app/Ninja/Intents/WebApp/ListExpenseIntent.php @@ -0,0 +1,15 @@ +loadStates(ENTITY_EXPENSE); + + return redirect('/expenses'); + } +} diff --git a/app/Ninja/Intents/WebApp/ListInvoiceIntent.php b/app/Ninja/Intents/WebApp/ListInvoiceIntent.php new file mode 100644 index 000000000000..339493bb00f9 --- /dev/null +++ b/app/Ninja/Intents/WebApp/ListInvoiceIntent.php @@ -0,0 +1,22 @@ +loadStates(ENTITY_INVOICE); + $this->loadStatuses(ENTITY_INVOICE); + + if ($client = $this->requestClient()) { + $url = $client->present()->url . '#invoices'; + } else { + $url = '/invoices'; + } + + return redirect($url); + } +} diff --git a/app/Ninja/Intents/WebApp/ListPaymentIntent.php b/app/Ninja/Intents/WebApp/ListPaymentIntent.php new file mode 100644 index 000000000000..a545bd8559b3 --- /dev/null +++ b/app/Ninja/Intents/WebApp/ListPaymentIntent.php @@ -0,0 +1,21 @@ +loadStates(ENTITY_PAYMENT); + + if ($client = $this->requestClient()) { + $url = $client->present()->url . '#payments'; + } else { + $url = '/payments'; + } + + return redirect($url); + } +} diff --git a/app/Ninja/Intents/WebApp/ListProductIntent.php b/app/Ninja/Intents/WebApp/ListProductIntent.php new file mode 100644 index 000000000000..70bfac9c6703 --- /dev/null +++ b/app/Ninja/Intents/WebApp/ListProductIntent.php @@ -0,0 +1,15 @@ +loadStates(ENTITY_PRODUCT); + + return redirect('/products'); + } +} diff --git a/app/Ninja/Intents/WebApp/ListQuoteIntent.php b/app/Ninja/Intents/WebApp/ListQuoteIntent.php new file mode 100644 index 000000000000..1867d34e0dfe --- /dev/null +++ b/app/Ninja/Intents/WebApp/ListQuoteIntent.php @@ -0,0 +1,22 @@ +loadStates(ENTITY_QUOTE); + $this->loadStatuses(ENTITY_QUOTE); + + if ($client = $this->requestClient()) { + $url = $client->present()->url . '#quotes'; + } else { + $url = '/quotes'; + } + + return redirect($url); + } +} diff --git a/app/Ninja/Intents/WebApp/ListRecurringInvoiceIntent.php b/app/Ninja/Intents/WebApp/ListRecurringInvoiceIntent.php new file mode 100644 index 000000000000..d8823dd7bbcb --- /dev/null +++ b/app/Ninja/Intents/WebApp/ListRecurringInvoiceIntent.php @@ -0,0 +1,21 @@ +loadStates(ENTITY_RECURRING_INVOICE); + + if ($client = $this->requestClient()) { + $url = $client->present()->url . '#recurring_invoices'; + } else { + $url = '/recurring_invoices'; + } + + return redirect($url); + } +} diff --git a/app/Ninja/Intents/WebApp/ListTaskIntent.php b/app/Ninja/Intents/WebApp/ListTaskIntent.php new file mode 100644 index 000000000000..05574761c836 --- /dev/null +++ b/app/Ninja/Intents/WebApp/ListTaskIntent.php @@ -0,0 +1,21 @@ +loadStates(ENTITY_TASK); + + if ($client = $this->requestClient()) { + $url = $client->present()->url . '#tasks'; + } else { + $url = '/tasks'; + } + + return redirect($url); + } +} diff --git a/app/Ninja/Intents/WebApp/ListVendorIntent.php b/app/Ninja/Intents/WebApp/ListVendorIntent.php new file mode 100644 index 000000000000..0b98d5cbdd3c --- /dev/null +++ b/app/Ninja/Intents/WebApp/ListVendorIntent.php @@ -0,0 +1,15 @@ +loadStates(ENTITY_VENDOR); + + return redirect('/vendors'); + } +} diff --git a/app/Ninja/Intents/WebApp/NavigateToIntent.php b/app/Ninja/Intents/WebApp/NavigateToIntent.php new file mode 100644 index 000000000000..53ea8f72caeb --- /dev/null +++ b/app/Ninja/Intents/WebApp/NavigateToIntent.php @@ -0,0 +1,27 @@ +getField('Location'); + $location = str_replace(' ', '_', $location); + + if (in_array($location, array_merge(Account::$basicSettings, Account::$advancedSettings))) { + $location = '/settings/' . $location; + } elseif (in_array($location, ['report', 'reports'])) { + $location = '/reports'; + } elseif ($location == 'settings') { + $location = '/settings'; + } else { + $location = '/dashboard'; + } + + return redirect($location); + } +} diff --git a/app/Ninja/Repositories/InvoiceRepository.php b/app/Ninja/Repositories/InvoiceRepository.php index 7bed6377013a..0a6ea25ec70c 100644 --- a/app/Ninja/Repositories/InvoiceRepository.php +++ b/app/Ninja/Repositories/InvoiceRepository.php @@ -211,7 +211,6 @@ class InvoiceRepository extends BaseRepository ->where('clients.deleted_at', '=', null) ->where('invoices.is_recurring', '=', true) ->where('invoices.is_public', '=', true) - ->whereIn('invoices.auto_bill', [AUTO_BILL_OPT_IN, AUTO_BILL_OPT_OUT]) //->where('invoices.start_date', '>=', date('Y-m-d H:i:s')) ->select( DB::raw('COALESCE(clients.currency_id, accounts.currency_id) currency_id'), @@ -225,6 +224,7 @@ class InvoiceRepository extends BaseRepository 'invoices.amount', 'invoices.start_date', 'invoices.end_date', + 'invoices.auto_bill', 'invoices.client_enable_auto_bill', 'frequencies.name as frequency' ); @@ -243,7 +243,11 @@ class InvoiceRepository extends BaseRepository return Utils::formatMoney($model->amount, $model->currency_id, $model->country_id); }) ->addColumn('client_enable_auto_bill', function ($model) { - if ($model->client_enable_auto_bill) { + if ($model->auto_bill == AUTO_BILL_OFF) { + return trans('texts.disabled'); + } elseif ($model->auto_bill == AUTO_BILL_ALWAYS) { + return trans('texts.enabled'); + } elseif ($model->client_enable_auto_bill) { return trans('texts.enabled') . ' - '.trans('texts.disable').''; } else { return trans('texts.disabled') . ' - '.trans('texts.enable').''; @@ -1122,4 +1126,26 @@ class InvoiceRepository extends BaseRepository $this->save($data, $invoice); $invoice->load('invoice_items'); } + + public function findPhonetically($invoiceNumber) + { + $map = []; + $max = SIMILAR_MIN_THRESHOLD; + $invoiceId = 0; + + $invoices = Invoice::scope()->get(['id', 'invoice_number', 'public_id']); + + foreach ($invoices as $invoice) { + $map[$invoice->id] = $invoice; + $similar = similar_text($invoiceNumber, $invoice->invoice_number, $percent); + var_dump($similar); + if ($percent > $max) { + $invoiceId = $invoice->id; + $max = $percent; + } + } + + return ($invoiceId && isset($map[$invoiceId])) ? $map[$invoiceId] : null; + } + } diff --git a/database/seeds/CurrenciesSeeder.php b/database/seeds/CurrenciesSeeder.php index 5e6ed9039691..b4051e16a242 100644 --- a/database/seeds/CurrenciesSeeder.php +++ b/database/seeds/CurrenciesSeeder.php @@ -68,6 +68,7 @@ class CurrenciesSeeder extends Seeder ['name' => 'Mozambican Metical', 'code' => 'MZN', 'symbol' => 'MT', 'precision' => '2', 'thousand_separator' => '.', 'decimal_separator' => ',', 'swap_currency_symbol' => true], ['name' => 'Omani Rial', 'code' => 'OMR', 'symbol' => '', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], ['name' => 'Ukrainian Hryvnia', 'code' => 'UAH', 'symbol' => '', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], + ['name' => 'Macanese Pataca', 'code' => 'MOP', 'symbol' => 'MOP$', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'], ]; foreach ($currencies as $currency) { diff --git a/database/seeds/PaymentTypesSeeder.php b/database/seeds/PaymentTypesSeeder.php index 8b39c26b0c04..0d50023db7ca 100644 --- a/database/seeds/PaymentTypesSeeder.php +++ b/database/seeds/PaymentTypesSeeder.php @@ -34,6 +34,7 @@ class PaymentTypesSeeder extends Seeder ['name' => 'Switch', 'gateway_type_id' => GATEWAY_TYPE_CREDIT_CARD], ['name' => 'iZettle', 'gateway_type_id' => GATEWAY_TYPE_CREDIT_CARD], ['name' => 'Swish', 'gateway_type_id' => GATEWAY_TYPE_BANK_TRANSFER], + ['name' => 'Venmo'], ]; foreach ($paymentTypes as $paymentType) { diff --git a/database/setup.sql b/database/setup.sql index cf63b132b74d..ebe86b7c7fc7 100644 --- a/database/setup.sql +++ b/database/setup.sql @@ -831,7 +831,7 @@ CREATE TABLE `currencies` ( `code` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `swap_currency_symbol` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=60 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -840,7 +840,7 @@ CREATE TABLE `currencies` ( LOCK TABLES `currencies` WRITE; /*!40000 ALTER TABLE `currencies` DISABLE KEYS */; -INSERT INTO `currencies` VALUES (1,'US Dollar','$','2',',','.','USD',0),(2,'British Pound','£','2',',','.','GBP',0),(3,'Euro','€','2','.',',','EUR',0),(4,'South African Rand','R','2','.',',','ZAR',0),(5,'Danish Krone','kr','2','.',',','DKK',1),(6,'Israeli Shekel','NIS ','2',',','.','ILS',0),(7,'Swedish Krona','kr','2','.',',','SEK',1),(8,'Kenyan Shilling','KSh ','2',',','.','KES',0),(9,'Canadian Dollar','C$','2',',','.','CAD',0),(10,'Philippine Peso','P ','2',',','.','PHP',0),(11,'Indian Rupee','Rs. ','2',',','.','INR',0),(12,'Australian Dollar','$','2',',','.','AUD',0),(13,'Singapore Dollar','','2',',','.','SGD',0),(14,'Norske Kroner','kr','2','.',',','NOK',1),(15,'New Zealand Dollar','$','2',',','.','NZD',0),(16,'Vietnamese Dong','','0','.',',','VND',0),(17,'Swiss Franc','','2','\'','.','CHF',0),(18,'Guatemalan Quetzal','Q','2',',','.','GTQ',0),(19,'Malaysian Ringgit','RM','2',',','.','MYR',0),(20,'Brazilian Real','R$','2','.',',','BRL',0),(21,'Thai Baht','','2',',','.','THB',0),(22,'Nigerian Naira','','2',',','.','NGN',0),(23,'Argentine Peso','$','2','.',',','ARS',0),(24,'Bangladeshi Taka','Tk','2',',','.','BDT',0),(25,'United Arab Emirates Dirham','DH ','2',',','.','AED',0),(26,'Hong Kong Dollar','','2',',','.','HKD',0),(27,'Indonesian Rupiah','Rp','2',',','.','IDR',0),(28,'Mexican Peso','$','2',',','.','MXN',0),(29,'Egyptian Pound','E£','2',',','.','EGP',0),(30,'Colombian Peso','$','2','.',',','COP',0),(31,'West African Franc','CFA ','2',',','.','XOF',0),(32,'Chinese Renminbi','RMB ','2',',','.','CNY',0),(33,'Rwandan Franc','RF ','2',',','.','RWF',0),(34,'Tanzanian Shilling','TSh ','2',',','.','TZS',0),(35,'Netherlands Antillean Guilder','','2','.',',','ANG',0),(36,'Trinidad and Tobago Dollar','TT$','2',',','.','TTD',0),(37,'East Caribbean Dollar','EC$','2',',','.','XCD',0),(38,'Ghanaian Cedi','','2',',','.','GHS',0),(39,'Bulgarian Lev','','2',' ','.','BGN',0),(40,'Aruban Florin','Afl. ','2',' ','.','AWG',0),(41,'Turkish Lira','TL ','2','.',',','TRY',0),(42,'Romanian New Leu','','2',',','.','RON',0),(43,'Croatian Kuna','kn','2','.',',','HRK',0),(44,'Saudi Riyal','','2',',','.','SAR',0),(45,'Japanese Yen','¥','0',',','.','JPY',0),(46,'Maldivian Rufiyaa','','2',',','.','MVR',0),(47,'Costa Rican Colón','','2',',','.','CRC',0),(48,'Pakistani Rupee','Rs ','0',',','.','PKR',0),(49,'Polish Zloty','zł','2',' ',',','PLN',1),(50,'Sri Lankan Rupee','LKR','2',',','.','LKR',1),(51,'Czech Koruna','Kč','2',' ',',','CZK',1),(52,'Uruguayan Peso','$','2','.',',','UYU',0),(53,'Namibian Dollar','$','2',',','.','NAD',0),(54,'Tunisian Dinar','','2',',','.','TND',0),(55,'Russian Ruble','','2',',','.','RUB',0),(56,'Mozambican Metical','MT','2','.',',','MZN',1),(57,'Omani Rial','','2',',','.','OMR',0),(58,'Ukrainian Hryvnia','','2',',','.','UAH',0); +INSERT INTO `currencies` VALUES (1,'US Dollar','$','2',',','.','USD',0),(2,'British Pound','£','2',',','.','GBP',0),(3,'Euro','€','2','.',',','EUR',0),(4,'South African Rand','R','2','.',',','ZAR',0),(5,'Danish Krone','kr','2','.',',','DKK',1),(6,'Israeli Shekel','NIS ','2',',','.','ILS',0),(7,'Swedish Krona','kr','2','.',',','SEK',1),(8,'Kenyan Shilling','KSh ','2',',','.','KES',0),(9,'Canadian Dollar','C$','2',',','.','CAD',0),(10,'Philippine Peso','P ','2',',','.','PHP',0),(11,'Indian Rupee','Rs. ','2',',','.','INR',0),(12,'Australian Dollar','$','2',',','.','AUD',0),(13,'Singapore Dollar','','2',',','.','SGD',0),(14,'Norske Kroner','kr','2','.',',','NOK',1),(15,'New Zealand Dollar','$','2',',','.','NZD',0),(16,'Vietnamese Dong','','0','.',',','VND',0),(17,'Swiss Franc','','2','\'','.','CHF',0),(18,'Guatemalan Quetzal','Q','2',',','.','GTQ',0),(19,'Malaysian Ringgit','RM','2',',','.','MYR',0),(20,'Brazilian Real','R$','2','.',',','BRL',0),(21,'Thai Baht','','2',',','.','THB',0),(22,'Nigerian Naira','','2',',','.','NGN',0),(23,'Argentine Peso','$','2','.',',','ARS',0),(24,'Bangladeshi Taka','Tk','2',',','.','BDT',0),(25,'United Arab Emirates Dirham','DH ','2',',','.','AED',0),(26,'Hong Kong Dollar','','2',',','.','HKD',0),(27,'Indonesian Rupiah','Rp','2',',','.','IDR',0),(28,'Mexican Peso','$','2',',','.','MXN',0),(29,'Egyptian Pound','E£','2',',','.','EGP',0),(30,'Colombian Peso','$','2','.',',','COP',0),(31,'West African Franc','CFA ','2',',','.','XOF',0),(32,'Chinese Renminbi','RMB ','2',',','.','CNY',0),(33,'Rwandan Franc','RF ','2',',','.','RWF',0),(34,'Tanzanian Shilling','TSh ','2',',','.','TZS',0),(35,'Netherlands Antillean Guilder','','2','.',',','ANG',0),(36,'Trinidad and Tobago Dollar','TT$','2',',','.','TTD',0),(37,'East Caribbean Dollar','EC$','2',',','.','XCD',0),(38,'Ghanaian Cedi','','2',',','.','GHS',0),(39,'Bulgarian Lev','','2',' ','.','BGN',0),(40,'Aruban Florin','Afl. ','2',' ','.','AWG',0),(41,'Turkish Lira','TL ','2','.',',','TRY',0),(42,'Romanian New Leu','','2',',','.','RON',0),(43,'Croatian Kuna','kn','2','.',',','HRK',0),(44,'Saudi Riyal','','2',',','.','SAR',0),(45,'Japanese Yen','¥','0',',','.','JPY',0),(46,'Maldivian Rufiyaa','','2',',','.','MVR',0),(47,'Costa Rican Colón','','2',',','.','CRC',0),(48,'Pakistani Rupee','Rs ','0',',','.','PKR',0),(49,'Polish Zloty','zł','2',' ',',','PLN',1),(50,'Sri Lankan Rupee','LKR','2',',','.','LKR',1),(51,'Czech Koruna','Kč','2',' ',',','CZK',1),(52,'Uruguayan Peso','$','2','.',',','UYU',0),(53,'Namibian Dollar','$','2',',','.','NAD',0),(54,'Tunisian Dinar','','2',',','.','TND',0),(55,'Russian Ruble','','2',',','.','RUB',0),(56,'Mozambican Metical','MT','2','.',',','MZN',1),(57,'Omani Rial','','2',',','.','OMR',0),(58,'Ukrainian Hryvnia','','2',',','.','UAH',0),(59,'Macanese Pataca','MOP$','2',',','.','MOP',0); /*!40000 ALTER TABLE `currencies` ENABLE KEYS */; UNLOCK TABLES; @@ -1176,7 +1176,7 @@ CREATE TABLE `gateways` ( LOCK TABLES `gateways` WRITE; /*!40000 ALTER TABLE `gateways` DISABLE KEYS */; -INSERT INTO `gateways` VALUES (1,'2017-04-02 16:31:14','2017-04-02 16:31:14','Authorize.Net AIM','AuthorizeNet_AIM',1,1,4,0,NULL,0,0),(2,'2017-04-02 16:31:14','2017-04-02 16:31:14','Authorize.Net SIM','AuthorizeNet_SIM',1,2,10000,0,NULL,0,0),(3,'2017-04-02 16:31:14','2017-04-02 16:31:14','CardSave','CardSave',1,1,10000,0,NULL,0,0),(4,'2017-04-02 16:31:14','2017-04-02 16:31:14','Eway Rapid','Eway_RapidShared',1,1,10000,0,NULL,1,0),(5,'2017-04-02 16:31:14','2017-04-02 16:31:14','FirstData Connect','FirstData_Connect',1,1,10000,0,NULL,0,0),(6,'2017-04-02 16:31:14','2017-04-02 16:31:14','GoCardless','GoCardless',1,1,10000,0,NULL,1,0),(7,'2017-04-02 16:31:14','2017-04-02 16:31:14','Migs ThreeParty','Migs_ThreeParty',1,1,10000,0,NULL,0,0),(8,'2017-04-02 16:31:14','2017-04-02 16:31:14','Migs TwoParty','Migs_TwoParty',1,1,10000,0,NULL,0,0),(9,'2017-04-02 16:31:14','2017-04-02 16:31:14','Mollie','Mollie',1,1,7,0,NULL,1,0),(10,'2017-04-02 16:31:14','2017-04-02 16:31:14','MultiSafepay','MultiSafepay',1,1,10000,0,NULL,0,0),(11,'2017-04-02 16:31:14','2017-04-02 16:31:14','Netaxept','Netaxept',1,1,10000,0,NULL,0,0),(12,'2017-04-02 16:31:14','2017-04-02 16:31:14','NetBanx','NetBanx',1,1,10000,0,NULL,0,0),(13,'2017-04-02 16:31:14','2017-04-02 16:31:14','PayFast','PayFast',1,1,10000,0,NULL,1,0),(14,'2017-04-02 16:31:14','2017-04-02 16:31:14','Payflow Pro','Payflow_Pro',1,1,10000,0,NULL,0,0),(15,'2017-04-02 16:31:14','2017-04-02 16:31:14','PaymentExpress PxPay','PaymentExpress_PxPay',1,1,10000,0,NULL,0,0),(16,'2017-04-02 16:31:14','2017-04-02 16:31:14','PaymentExpress PxPost','PaymentExpress_PxPost',1,1,10000,0,NULL,0,0),(17,'2017-04-02 16:31:14','2017-04-02 16:31:14','PayPal Express','PayPal_Express',1,1,3,0,NULL,1,0),(18,'2017-04-02 16:31:14','2017-04-02 16:31:14','PayPal Pro','PayPal_Pro',1,1,10000,0,NULL,0,0),(19,'2017-04-02 16:31:14','2017-04-02 16:31:14','Pin','Pin',1,1,10000,0,NULL,0,0),(20,'2017-04-02 16:31:14','2017-04-02 16:31:14','SagePay Direct','SagePay_Direct',1,1,10000,0,NULL,0,0),(21,'2017-04-02 16:31:14','2017-04-02 16:31:14','SagePay Server','SagePay_Server',1,1,10000,0,NULL,0,0),(22,'2017-04-02 16:31:14','2017-04-02 16:31:14','SecurePay DirectPost','SecurePay_DirectPost',1,1,10000,0,NULL,0,0),(23,'2017-04-02 16:31:14','2017-04-02 16:31:14','Stripe','Stripe',1,1,1,0,NULL,0,0),(24,'2017-04-02 16:31:14','2017-04-02 16:31:14','TargetPay Direct eBanking','TargetPay_Directebanking',1,1,10000,0,NULL,0,0),(25,'2017-04-02 16:31:14','2017-04-02 16:31:14','TargetPay Ideal','TargetPay_Ideal',1,1,10000,0,NULL,0,0),(26,'2017-04-02 16:31:14','2017-04-02 16:31:14','TargetPay Mr Cash','TargetPay_Mrcash',1,1,10000,0,NULL,0,0),(27,'2017-04-02 16:31:14','2017-04-02 16:31:14','TwoCheckout','TwoCheckout',1,1,10000,0,NULL,1,0),(28,'2017-04-02 16:31:14','2017-04-02 16:31:14','WorldPay','WorldPay',1,1,10000,0,NULL,0,0),(29,'2017-04-02 16:31:14','2017-04-02 16:31:14','BeanStream','BeanStream',1,2,10000,0,NULL,0,0),(30,'2017-04-02 16:31:14','2017-04-02 16:31:14','Psigate','Psigate',1,2,10000,0,NULL,0,0),(31,'2017-04-02 16:31:14','2017-04-02 16:31:14','moolah','AuthorizeNet_AIM',1,1,10000,0,NULL,0,0),(32,'2017-04-02 16:31:14','2017-04-02 16:31:14','Alipay','Alipay_Express',1,1,10000,0,NULL,0,0),(33,'2017-04-02 16:31:14','2017-04-02 16:31:14','Buckaroo','Buckaroo_CreditCard',1,1,10000,0,NULL,0,0),(34,'2017-04-02 16:31:14','2017-04-02 16:31:14','Coinbase','Coinbase',1,1,10000,0,NULL,0,0),(35,'2017-04-02 16:31:14','2017-04-02 16:31:14','DataCash','DataCash',1,1,10000,0,NULL,0,0),(36,'2017-04-02 16:31:14','2017-04-02 16:31:14','Neteller','Neteller',1,2,10000,0,NULL,0,0),(37,'2017-04-02 16:31:14','2017-04-02 16:31:14','Pacnet','Pacnet',1,1,10000,0,NULL,0,0),(38,'2017-04-02 16:31:14','2017-04-02 16:31:14','PaymentSense','PaymentSense',1,2,10000,0,NULL,0,0),(39,'2017-04-02 16:31:14','2017-04-02 16:31:14','Realex','Realex_Remote',1,1,10000,0,NULL,0,0),(40,'2017-04-02 16:31:14','2017-04-02 16:31:14','Sisow','Sisow',1,1,10000,0,NULL,0,0),(41,'2017-04-02 16:31:14','2017-04-02 16:31:14','Skrill','Skrill',1,1,10000,0,NULL,1,0),(42,'2017-04-02 16:31:14','2017-04-02 16:31:14','BitPay','BitPay',1,1,6,0,NULL,1,0),(43,'2017-04-02 16:31:14','2017-04-02 16:31:14','Dwolla','Dwolla',1,1,5,0,NULL,1,0),(44,'2017-04-02 16:31:14','2017-04-02 16:31:14','AGMS','Agms',1,1,10000,0,NULL,0,0),(45,'2017-04-02 16:31:14','2017-04-02 16:31:14','Barclays','BarclaysEpdq\\Essential',1,1,10000,0,NULL,0,0),(46,'2017-04-02 16:31:14','2017-04-02 16:31:14','Cardgate','Cardgate',1,1,10000,0,NULL,0,0),(47,'2017-04-02 16:31:14','2017-04-02 16:31:14','Checkout.com','CheckoutCom',1,1,10000,0,NULL,0,0),(48,'2017-04-02 16:31:14','2017-04-02 16:31:14','Creditcall','Creditcall',1,1,10000,0,NULL,0,0),(49,'2017-04-02 16:31:14','2017-04-02 16:31:14','Cybersource','Cybersource',1,1,10000,0,NULL,0,0),(50,'2017-04-02 16:31:14','2017-04-02 16:31:14','ecoPayz','Ecopayz',1,1,10000,0,NULL,0,0),(51,'2017-04-02 16:31:14','2017-04-02 16:31:14','Fasapay','Fasapay',1,1,10000,0,NULL,0,0),(52,'2017-04-02 16:31:14','2017-04-02 16:31:14','Komoju','Komoju',1,1,10000,0,NULL,0,0),(53,'2017-04-02 16:31:14','2017-04-02 16:31:14','Multicards','Multicards',1,1,10000,0,NULL,0,0),(54,'2017-04-02 16:31:14','2017-04-02 16:31:14','Pagar.Me','Pagarme',1,2,10000,0,NULL,0,0),(55,'2017-04-02 16:31:14','2017-04-02 16:31:14','Paysafecard','Paysafecard',1,1,10000,0,NULL,0,0),(56,'2017-04-02 16:31:14','2017-04-02 16:31:14','Paytrace','Paytrace_CreditCard',1,1,10000,0,NULL,0,0),(57,'2017-04-02 16:31:14','2017-04-02 16:31:14','Secure Trading','SecureTrading',1,1,10000,0,NULL,0,0),(58,'2017-04-02 16:31:14','2017-04-02 16:31:14','SecPay','SecPay',1,1,10000,0,NULL,0,0),(59,'2017-04-02 16:31:14','2017-04-02 16:31:14','WeChat Express','WeChat_Express',1,2,10000,0,NULL,0,0),(60,'2017-04-02 16:31:14','2017-04-02 16:31:14','WePay','WePay',1,1,10000,0,NULL,0,0),(61,'2017-04-02 16:31:14','2017-04-02 16:31:14','Braintree','Braintree',1,1,2,0,NULL,0,0),(62,'2017-04-02 16:31:14','2017-04-02 16:31:14','Custom','Custom',1,1,8,0,NULL,1,0); +INSERT INTO `gateways` VALUES (1,'2017-04-06 10:56:18','2017-04-06 10:56:18','Authorize.Net AIM','AuthorizeNet_AIM',1,1,4,0,NULL,0,0),(2,'2017-04-06 10:56:18','2017-04-06 10:56:18','Authorize.Net SIM','AuthorizeNet_SIM',1,2,10000,0,NULL,0,0),(3,'2017-04-06 10:56:18','2017-04-06 10:56:18','CardSave','CardSave',1,1,10000,0,NULL,0,0),(4,'2017-04-06 10:56:18','2017-04-06 10:56:18','Eway Rapid','Eway_RapidShared',1,1,10000,0,NULL,1,0),(5,'2017-04-06 10:56:18','2017-04-06 10:56:18','FirstData Connect','FirstData_Connect',1,1,10000,0,NULL,0,0),(6,'2017-04-06 10:56:18','2017-04-06 10:56:18','GoCardless','GoCardless',1,1,10000,0,NULL,1,0),(7,'2017-04-06 10:56:18','2017-04-06 10:56:18','Migs ThreeParty','Migs_ThreeParty',1,1,10000,0,NULL,0,0),(8,'2017-04-06 10:56:18','2017-04-06 10:56:18','Migs TwoParty','Migs_TwoParty',1,1,10000,0,NULL,0,0),(9,'2017-04-06 10:56:18','2017-04-06 10:56:18','Mollie','Mollie',1,1,7,0,NULL,1,0),(10,'2017-04-06 10:56:18','2017-04-06 10:56:18','MultiSafepay','MultiSafepay',1,1,10000,0,NULL,0,0),(11,'2017-04-06 10:56:18','2017-04-06 10:56:18','Netaxept','Netaxept',1,1,10000,0,NULL,0,0),(12,'2017-04-06 10:56:18','2017-04-06 10:56:18','NetBanx','NetBanx',1,1,10000,0,NULL,0,0),(13,'2017-04-06 10:56:18','2017-04-06 10:56:18','PayFast','PayFast',1,1,10000,0,NULL,1,0),(14,'2017-04-06 10:56:18','2017-04-06 10:56:18','Payflow Pro','Payflow_Pro',1,1,10000,0,NULL,0,0),(15,'2017-04-06 10:56:18','2017-04-06 10:56:18','PaymentExpress PxPay','PaymentExpress_PxPay',1,1,10000,0,NULL,0,0),(16,'2017-04-06 10:56:18','2017-04-06 10:56:18','PaymentExpress PxPost','PaymentExpress_PxPost',1,1,10000,0,NULL,0,0),(17,'2017-04-06 10:56:18','2017-04-06 10:56:18','PayPal Express','PayPal_Express',1,1,3,0,NULL,1,0),(18,'2017-04-06 10:56:18','2017-04-06 10:56:18','PayPal Pro','PayPal_Pro',1,1,10000,0,NULL,0,0),(19,'2017-04-06 10:56:18','2017-04-06 10:56:18','Pin','Pin',1,1,10000,0,NULL,0,0),(20,'2017-04-06 10:56:18','2017-04-06 10:56:18','SagePay Direct','SagePay_Direct',1,1,10000,0,NULL,0,0),(21,'2017-04-06 10:56:18','2017-04-06 10:56:18','SagePay Server','SagePay_Server',1,1,10000,0,NULL,0,0),(22,'2017-04-06 10:56:18','2017-04-06 10:56:18','SecurePay DirectPost','SecurePay_DirectPost',1,1,10000,0,NULL,0,0),(23,'2017-04-06 10:56:18','2017-04-06 10:56:18','Stripe','Stripe',1,1,1,0,NULL,0,0),(24,'2017-04-06 10:56:18','2017-04-06 10:56:18','TargetPay Direct eBanking','TargetPay_Directebanking',1,1,10000,0,NULL,0,0),(25,'2017-04-06 10:56:18','2017-04-06 10:56:18','TargetPay Ideal','TargetPay_Ideal',1,1,10000,0,NULL,0,0),(26,'2017-04-06 10:56:19','2017-04-06 10:56:19','TargetPay Mr Cash','TargetPay_Mrcash',1,1,10000,0,NULL,0,0),(27,'2017-04-06 10:56:19','2017-04-06 10:56:19','TwoCheckout','TwoCheckout',1,1,10000,0,NULL,1,0),(28,'2017-04-06 10:56:19','2017-04-06 10:56:19','WorldPay','WorldPay',1,1,10000,0,NULL,0,0),(29,'2017-04-06 10:56:19','2017-04-06 10:56:19','BeanStream','BeanStream',1,2,10000,0,NULL,0,0),(30,'2017-04-06 10:56:19','2017-04-06 10:56:19','Psigate','Psigate',1,2,10000,0,NULL,0,0),(31,'2017-04-06 10:56:19','2017-04-06 10:56:19','moolah','AuthorizeNet_AIM',1,1,10000,0,NULL,0,0),(32,'2017-04-06 10:56:19','2017-04-06 10:56:19','Alipay','Alipay_Express',1,1,10000,0,NULL,0,0),(33,'2017-04-06 10:56:19','2017-04-06 10:56:19','Buckaroo','Buckaroo_CreditCard',1,1,10000,0,NULL,0,0),(34,'2017-04-06 10:56:19','2017-04-06 10:56:19','Coinbase','Coinbase',1,1,10000,0,NULL,0,0),(35,'2017-04-06 10:56:19','2017-04-06 10:56:19','DataCash','DataCash',1,1,10000,0,NULL,0,0),(36,'2017-04-06 10:56:19','2017-04-06 10:56:19','Neteller','Neteller',1,2,10000,0,NULL,0,0),(37,'2017-04-06 10:56:19','2017-04-06 10:56:19','Pacnet','Pacnet',1,1,10000,0,NULL,0,0),(38,'2017-04-06 10:56:19','2017-04-06 10:56:19','PaymentSense','PaymentSense',1,2,10000,0,NULL,0,0),(39,'2017-04-06 10:56:19','2017-04-06 10:56:19','Realex','Realex_Remote',1,1,10000,0,NULL,0,0),(40,'2017-04-06 10:56:19','2017-04-06 10:56:19','Sisow','Sisow',1,1,10000,0,NULL,0,0),(41,'2017-04-06 10:56:19','2017-04-06 10:56:19','Skrill','Skrill',1,1,10000,0,NULL,1,0),(42,'2017-04-06 10:56:19','2017-04-06 10:56:19','BitPay','BitPay',1,1,6,0,NULL,1,0),(43,'2017-04-06 10:56:19','2017-04-06 10:56:19','Dwolla','Dwolla',1,1,5,0,NULL,1,0),(44,'2017-04-06 10:56:19','2017-04-06 10:56:19','AGMS','Agms',1,1,10000,0,NULL,0,0),(45,'2017-04-06 10:56:19','2017-04-06 10:56:19','Barclays','BarclaysEpdq\\Essential',1,1,10000,0,NULL,0,0),(46,'2017-04-06 10:56:19','2017-04-06 10:56:19','Cardgate','Cardgate',1,1,10000,0,NULL,0,0),(47,'2017-04-06 10:56:19','2017-04-06 10:56:19','Checkout.com','CheckoutCom',1,1,10000,0,NULL,0,0),(48,'2017-04-06 10:56:19','2017-04-06 10:56:19','Creditcall','Creditcall',1,1,10000,0,NULL,0,0),(49,'2017-04-06 10:56:19','2017-04-06 10:56:19','Cybersource','Cybersource',1,1,10000,0,NULL,0,0),(50,'2017-04-06 10:56:19','2017-04-06 10:56:19','ecoPayz','Ecopayz',1,1,10000,0,NULL,0,0),(51,'2017-04-06 10:56:19','2017-04-06 10:56:19','Fasapay','Fasapay',1,1,10000,0,NULL,0,0),(52,'2017-04-06 10:56:19','2017-04-06 10:56:19','Komoju','Komoju',1,1,10000,0,NULL,0,0),(53,'2017-04-06 10:56:19','2017-04-06 10:56:19','Multicards','Multicards',1,1,10000,0,NULL,0,0),(54,'2017-04-06 10:56:19','2017-04-06 10:56:19','Pagar.Me','Pagarme',1,2,10000,0,NULL,0,0),(55,'2017-04-06 10:56:19','2017-04-06 10:56:19','Paysafecard','Paysafecard',1,1,10000,0,NULL,0,0),(56,'2017-04-06 10:56:19','2017-04-06 10:56:19','Paytrace','Paytrace_CreditCard',1,1,10000,0,NULL,0,0),(57,'2017-04-06 10:56:19','2017-04-06 10:56:19','Secure Trading','SecureTrading',1,1,10000,0,NULL,0,0),(58,'2017-04-06 10:56:19','2017-04-06 10:56:19','SecPay','SecPay',1,1,10000,0,NULL,0,0),(59,'2017-04-06 10:56:19','2017-04-06 10:56:19','WeChat Express','WeChat_Express',1,2,10000,0,NULL,0,0),(60,'2017-04-06 10:56:19','2017-04-06 10:56:19','WePay','WePay',1,1,10000,0,NULL,0,0),(61,'2017-04-06 10:56:19','2017-04-06 10:56:19','Braintree','Braintree',1,1,2,0,NULL,0,0),(62,'2017-04-06 10:56:19','2017-04-06 10:56:19','Custom','Custom',1,1,8,0,NULL,1,0); /*!40000 ALTER TABLE `gateways` ENABLE KEYS */; UNLOCK TABLES; @@ -1594,7 +1594,7 @@ CREATE TABLE `payment_libraries` ( LOCK TABLES `payment_libraries` WRITE; /*!40000 ALTER TABLE `payment_libraries` DISABLE KEYS */; -INSERT INTO `payment_libraries` VALUES (1,'2017-04-02 16:31:13','2017-04-02 16:31:13','Omnipay',1),(2,'2017-04-02 16:31:13','2017-04-02 16:31:13','PHP-Payments [Deprecated]',1); +INSERT INTO `payment_libraries` VALUES (1,'2017-04-06 10:56:17','2017-04-06 10:56:17','Omnipay',1),(2,'2017-04-06 10:56:17','2017-04-06 10:56:17','PHP-Payments [Deprecated]',1); /*!40000 ALTER TABLE `payment_libraries` ENABLE KEYS */; UNLOCK TABLES; @@ -1704,7 +1704,7 @@ CREATE TABLE `payment_terms` ( LOCK TABLES `payment_terms` WRITE; /*!40000 ALTER TABLE `payment_terms` DISABLE KEYS */; -INSERT INTO `payment_terms` VALUES (1,7,'Net 7','2017-04-02 16:31:13','2017-04-02 16:31:13',NULL,0,0,1),(2,10,'Net 10','2017-04-02 16:31:13','2017-04-02 16:31:13',NULL,0,0,2),(3,14,'Net 14','2017-04-02 16:31:13','2017-04-02 16:31:13',NULL,0,0,3),(4,15,'Net 15','2017-04-02 16:31:13','2017-04-02 16:31:13',NULL,0,0,4),(5,30,'Net 30','2017-04-02 16:31:13','2017-04-02 16:31:13',NULL,0,0,5),(6,60,'Net 60','2017-04-02 16:31:13','2017-04-02 16:31:13',NULL,0,0,6),(7,90,'Net 90','2017-04-02 16:31:13','2017-04-02 16:31:13',NULL,0,0,7),(8,-1,'Net 0','2017-04-02 16:31:16','2017-04-02 16:31:16',NULL,0,0,0); +INSERT INTO `payment_terms` VALUES (1,7,'Net 7','2017-04-06 10:56:17','2017-04-06 10:56:17',NULL,0,0,1),(2,10,'Net 10','2017-04-06 10:56:17','2017-04-06 10:56:17',NULL,0,0,2),(3,14,'Net 14','2017-04-06 10:56:17','2017-04-06 10:56:17',NULL,0,0,3),(4,15,'Net 15','2017-04-06 10:56:17','2017-04-06 10:56:17',NULL,0,0,4),(5,30,'Net 30','2017-04-06 10:56:17','2017-04-06 10:56:17',NULL,0,0,5),(6,60,'Net 60','2017-04-06 10:56:17','2017-04-06 10:56:17',NULL,0,0,6),(7,90,'Net 90','2017-04-06 10:56:17','2017-04-06 10:56:17',NULL,0,0,7),(8,-1,'Net 0','2017-04-06 10:56:22','2017-04-06 10:56:22',NULL,0,0,0); /*!40000 ALTER TABLE `payment_terms` ENABLE KEYS */; UNLOCK TABLES; @@ -1722,7 +1722,7 @@ CREATE TABLE `payment_types` ( PRIMARY KEY (`id`), KEY `payment_types_gateway_type_id_foreign` (`gateway_type_id`), CONSTRAINT `payment_types_gateway_type_id_foreign` FOREIGN KEY (`gateway_type_id`) REFERENCES `gateway_types` (`id`) ON DELETE CASCADE -) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -1731,7 +1731,7 @@ CREATE TABLE `payment_types` ( LOCK TABLES `payment_types` WRITE; /*!40000 ALTER TABLE `payment_types` DISABLE KEYS */; -INSERT INTO `payment_types` VALUES (1,'Apply Credit',NULL),(2,'Bank Transfer',2),(3,'Cash',NULL),(4,'Debit',1),(5,'ACH',2),(6,'Visa Card',1),(7,'MasterCard',1),(8,'American Express',1),(9,'Discover Card',1),(10,'Diners Card',1),(11,'EuroCard',1),(12,'Nova',1),(13,'Credit Card Other',1),(14,'PayPal',3),(15,'Google Wallet',NULL),(16,'Check',NULL),(17,'Carte Blanche',1),(18,'UnionPay',1),(19,'JCB',1),(20,'Laser',1),(21,'Maestro',1),(22,'Solo',1),(23,'Switch',1),(24,'iZettle',1),(25,'Swish',2); +INSERT INTO `payment_types` VALUES (1,'Apply Credit',NULL),(2,'Bank Transfer',2),(3,'Cash',NULL),(4,'Debit',1),(5,'ACH',2),(6,'Visa Card',1),(7,'MasterCard',1),(8,'American Express',1),(9,'Discover Card',1),(10,'Diners Card',1),(11,'EuroCard',1),(12,'Nova',1),(13,'Credit Card Other',1),(14,'PayPal',3),(15,'Google Wallet',NULL),(16,'Check',NULL),(17,'Carte Blanche',1),(18,'UnionPay',1),(19,'JCB',1),(20,'Laser',1),(21,'Maestro',1),(22,'Solo',1),(23,'Switch',1),(24,'iZettle',1),(25,'Swish',2),(26,'Venmo',NULL); /*!40000 ALTER TABLE `payment_types` ENABLE KEYS */; UNLOCK TABLES; @@ -2299,4 +2299,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2017-04-02 22:31:16 +-- Dump completed on 2017-04-06 16:56:22 diff --git a/docs/conf.py b/docs/conf.py index 556af9b289ae..278b9c9319cb 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -59,7 +59,7 @@ author = u'Invoice Ninja' # The short X.Y version. version = u'3.2' # The full version, including alpha/beta/rc tags. -release = u'3.2.0' +release = u'3.2.1' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/install.rst b/docs/install.rst index d8708539ee71..f5eb71e61b22 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -29,7 +29,7 @@ Step 1: Download the code You can either download the zip file below or checkout the code from our GitHub repository. The zip includes all third party libraries whereas using GitHub requires you to use Composer to install the dependencies. -https://download.invoiceninja.com/ninja-v3.1.3.zip +https://download.invoiceninja.com/ninja-v3.2.0.zip .. Note:: All Pro and Enterprise features from our hosted app are included in both the zip file and the GitHub repository. We offer a $20 per year white-label license to remove our branding. diff --git a/resources/lang/ca/texts.php b/resources/lang/ca/texts.php index 498255eba8b6..c57f7cbcf478 100644 --- a/resources/lang/ca/texts.php +++ b/resources/lang/ca/texts.php @@ -851,6 +851,7 @@ $LANG = array( 'dark' => 'Dark', 'industry_help' => 'Used to provide comparisons against the averages of companies of similar size and industry.', 'subdomain_help' => 'Set the subdomain or display the invoice on your own website.', + 'website_help' => 'Display the invoice in an iFrame on your own website', 'invoice_number_help' => 'Specify a prefix or use a custom pattern to dynamically set the invoice number.', 'quote_number_help' => 'Specify a prefix or use a custom pattern to dynamically set the quote number.', 'custom_client_fields_helps' => 'Add a field when creating a client and display the label and value on the PDF.', @@ -1041,7 +1042,7 @@ $LANG = array( 'invoiced_amount' => 'Invoiced Amount', 'invoice_item_fields' => 'Invoice Item Fields', 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', - 'recurring_invoice_number' => 'Recurring Invoice Number', + 'recurring_invoice_number' => 'Recurring Number', 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', // Client Passwords @@ -2463,6 +2464,12 @@ $LANG = array( 'import_complete' => 'Your import has successfully completed.', 'confirm_account_to_import' => 'Please confirm your account to import data.', 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'listening' => 'Listening...', + 'microphone_help' => 'Say \'new invoice for...\'', + 'voice_commands' => 'Voice Commands', + 'sample_commands' => 'Sample commands', + 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'payment_type_Venmo' => 'Venmo', ); diff --git a/resources/lang/cs/texts.php b/resources/lang/cs/texts.php index dbcfc1098752..597f9ff7ba9c 100644 --- a/resources/lang/cs/texts.php +++ b/resources/lang/cs/texts.php @@ -852,6 +852,7 @@ $LANG = array( 'dark' => 'Tmavý', 'industry_help' => 'Používá se pro porovnání proti průměru u firem podobné velikosti a podobného odvětví.', 'subdomain_help' => 'Set the subdomain or display the invoice on your own website.', + 'website_help' => 'Display the invoice in an iFrame on your own website', 'invoice_number_help' => 'Určete prefix nebo použijte upravitelný vzorec pro nastavení číslování faktur.', 'quote_number_help' => 'Určete prefix nebo použijte upravitelný vzorec pro nastavení číslování nabídek.', 'custom_client_fields_helps' => 'Když vytváříte klienta - přidejte nové pole a jeho popis a hodnotu pro zobrazení v PDF.', @@ -1043,7 +1044,7 @@ $LANG = array( 'invoiced_amount' => 'Fakturovaná částka', 'invoice_item_fields' => 'Pole položky faktury', 'custom_invoice_item_fields_help' => 'Během vytváření faktury si přidejte pole a zobrazte si jeho popis a hodnotu v PDF.', - 'recurring_invoice_number' => 'Číslo pravidelné faktury', + 'recurring_invoice_number' => 'Recurring Number', 'recurring_invoice_number_prefix_help' => 'Určete prefix, který se přidá k číslu pravidelných faktur. Výchozí hodnota je \'R\'.', // Client Passwords @@ -2465,6 +2466,12 @@ $LANG = array( 'import_complete' => 'Your import has successfully completed.', 'confirm_account_to_import' => 'Please confirm your account to import data.', 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'listening' => 'Listening...', + 'microphone_help' => 'Say \'new invoice for...\'', + 'voice_commands' => 'Voice Commands', + 'sample_commands' => 'Sample commands', + 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'payment_type_Venmo' => 'Venmo', ); diff --git a/resources/lang/da/texts.php b/resources/lang/da/texts.php index 335c881c47cb..ebed07af95ce 100644 --- a/resources/lang/da/texts.php +++ b/resources/lang/da/texts.php @@ -851,6 +851,7 @@ $LANG = array( 'dark' => 'Dark', 'industry_help' => 'Used to provide comparisons against the averages of companies of similar size and industry.', 'subdomain_help' => 'Set the subdomain or display the invoice on your own website.', + 'website_help' => 'Display the invoice in an iFrame on your own website', 'invoice_number_help' => 'Specify a prefix or use a custom pattern to dynamically set the invoice number.', 'quote_number_help' => 'Specify a prefix or use a custom pattern to dynamically set the quote number.', 'custom_client_fields_helps' => 'Add a text input to the client create/edit page and display the label and value on the PDF.', @@ -1041,7 +1042,7 @@ $LANG = array( 'invoiced_amount' => 'Invoiced Amount', 'invoice_item_fields' => 'Invoice Item Fields', 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', - 'recurring_invoice_number' => 'Recurring Invoice Number', + 'recurring_invoice_number' => 'Recurring Number', 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', // Client Passwords @@ -2463,6 +2464,12 @@ $LANG = array( 'import_complete' => 'Your import has successfully completed.', 'confirm_account_to_import' => 'Please confirm your account to import data.', 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'listening' => 'Listening...', + 'microphone_help' => 'Say \'new invoice for...\'', + 'voice_commands' => 'Voice Commands', + 'sample_commands' => 'Sample commands', + 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'payment_type_Venmo' => 'Venmo', ); diff --git a/resources/lang/de/texts.php b/resources/lang/de/texts.php index b61eba1a79be..5aecdab3e51f 100644 --- a/resources/lang/de/texts.php +++ b/resources/lang/de/texts.php @@ -2,7 +2,7 @@ $LANG = array( - 'organization' => 'Organisation', + 'organization' => 'Unternehmen', 'name' => 'Name', 'website' => 'Webseite', 'work_phone' => 'Telefon', @@ -151,7 +151,7 @@ $LANG = array( 'last_logged_in' => 'Zuletzt eingeloggt', 'details' => 'Details', 'standing' => 'Aktueller Stand', - 'credit' => 'Guthaben', + 'credit' => 'Gutschrift', 'activity' => 'Aktivität', 'date' => 'Datum', 'message' => 'Nachricht', @@ -266,7 +266,7 @@ $LANG = array( 'working' => 'Wird bearbeitet', 'success' => 'Erfolg', 'success_message' => 'Du hast dich erfolgreich registriert. Bitte besuche den Link in deiner Bestätigungsmail um deine E-Mail-Adresse zu verifizieren.', - 'erase_data' => 'Your account is not registered, this will permanently erase your data.', + 'erase_data' => 'Ihr Konto ist nicht registriert, diese Aktion wird Ihre Daten unwiederbringlich löschen.', 'password' => 'Passwort', 'pro_plan_product' => 'Pro Plan', 'pro_plan_success' => 'Danke, dass Sie Invoice Ninja\'s Pro gewählt haben!

 
@@ -369,7 +369,7 @@ $LANG = array( 'confirm_email_quote' => 'Bist du sicher, dass du dieses Angebot per E-Mail versenden möchtest', 'confirm_recurring_email_invoice' => 'Wiederkehrende Rechnung ist aktiv. Bis du sicher, dass du diese Rechnung weiterhin als E-Mail verschicken möchtest?', 'cancel_account' => 'Konto Kündigen', - 'cancel_account_message' => 'Warning: This will permanently delete your account, there is no undo.', + 'cancel_account_message' => 'Warnung: Diese Aktion wird Ihr Konto unwiederbringlich löschen.', 'go_back' => 'Zurück', 'data_visualizations' => 'Datenvisualisierungen', 'sample_data' => 'Beispieldaten werden angezeigt', @@ -663,8 +663,8 @@ $LANG = array( 'valid_until' => 'Gültig bis', 'reset_terms' => 'Zahlungsbedingungen zurücksetzen', 'reset_footer' => 'Fußzeile zurücksetzen', - 'invoice_sent' => ':count invoice sent', - 'invoices_sent' => ':count invoices sent', + 'invoice_sent' => ':count Rechnung versendet', + 'invoices_sent' => ':count Rechnungen versendet', 'status_draft' => 'Entwurf', 'status_sent' => 'Versendet', 'status_viewed' => 'Angesehen', @@ -701,7 +701,7 @@ $LANG = array( 'oneclick_login' => 'Ein Klick Login', 'disable' => 'Deaktivieren', 'invoice_quote_number' => 'Rechnungs- und Angebotsnummern', - 'invoice_charges' => 'Invoice Surcharges', + 'invoice_charges' => 'Rechnungsgebühren', 'notification_invoice_bounced' => 'Die Rechnung :invoice an :contact konnte nicht zugestellt werden.', 'notification_invoice_bounced_subject' => 'Rechnung :invoice nicht zugestellt.', 'notification_quote_bounced' => 'Das Angebot :invoice an :contact konnte nicht zugestellt werden.', @@ -792,7 +792,7 @@ $LANG = array( 'default_invoice_footer' => 'Standard-Fußzeile festlegen', 'quote_footer' => 'Angebots-Fußzeile', 'free' => 'Kostenlos', - 'quote_is_approved' => 'The quote has been approved', + 'quote_is_approved' => 'Dem Angebot wurde zugestimmt', 'apply_credit' => 'Guthaben anwenden', 'system_settings' => 'Systemeinstellungen', 'archive_token' => 'Token archivieren', @@ -851,6 +851,7 @@ $LANG = array( 'dark' => 'Dunkel', 'industry_help' => 'Wird genutzt um Vergleiche zwischen den Durchschnittswerten von Firmen ähnlicher Größe und Branche ermitteln zu können.', 'subdomain_help' => 'Passen Sie die Rechnungslink-Subdomäne an oder stellen Sie die Rechnung auf Ihrer eigenen Webseite zur Verfügung.', + 'website_help' => 'Display the invoice in an iFrame on your own website', 'invoice_number_help' => 'Geben Sie einen Präfix oder ein benutzerdefiniertes Schema an, um die Rechnungsnummer dynamisch zu erzeugen.', 'quote_number_help' => 'Geben Sie einen Präfix oder ein benutzerdefiniertes Schema an, um die Angebotsnummer dynamisch zu erzeugen.', 'custom_client_fields_helps' => 'Füge ein Feld hinzu, wenn ein neuer Kunde erstellt wird und zeige die Bezeichnung und den Wert auf der PDF-Datei an.', @@ -1041,7 +1042,7 @@ $LANG = array( 'invoiced_amount' => 'Rechnungsbetrag', 'invoice_item_fields' => 'Rechnungspositionsfeld', 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', - 'recurring_invoice_number' => 'Wiederkehrende Rechnungsnummer', + 'recurring_invoice_number' => 'Recurring Number', 'recurring_invoice_number_prefix_help' => 'Geben Sie einen Präfix für wiederkehrende Rechnungen an. Standard ist \'R\'.', // Client Passwords @@ -2324,7 +2325,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese 'sort_by' => 'Sortiere nach', 'draft' => 'Entwurf', 'unpaid' => 'Unbezahlt', - 'aging' => 'Altern', + 'aging' => 'Versendet', 'age' => 'Alter', 'days' => 'Tage', 'age_group_0' => '0 - 30 Tage', @@ -2398,28 +2399,28 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese 'mark_ready' => 'Mark Ready', 'limits' => 'Limits', - 'fees' => 'Fees', - 'fee' => 'Fee', + 'fees' => 'Gebühren', + 'fee' => 'Gebühr', 'set_limits_fees' => 'Set :gateway_type Limits/Fees', 'fees_tax_help' => 'Enable line item taxes to set the fee tax rates.', 'fees_sample' => 'The fee for a :amount invoice would be :total.', 'discount_sample' => 'The discount for a :amount invoice would be :total.', - 'no_fees' => 'No Fees', + 'no_fees' => 'Keine Gebühren', 'gateway_fees_disclaimer' => 'Warning: not all states/payment gateways allow adding fees, please review local laws/terms of service.', - 'percent' => 'Percent', - 'location' => 'Location', + 'percent' => 'Prozent', + 'location' => 'Ort', 'line_item' => 'Line Item', - 'surcharge' => 'Surcharge', + 'surcharge' => 'Gebühr', 'location_first_surcharge' => 'Enabled - First surcharge', 'location_second_surcharge' => 'Enabled - Second surcharge', 'location_line_item' => 'Enabled - Line item', 'online_payment_surcharge' => 'Online Payment Surcharge', 'gateway_fees' => 'Gateway Fees', - 'fees_disabled' => 'Fees are disabled', + 'fees_disabled' => 'Gebühren sind deaktiviert', 'gateway_fees_help' => 'Automatically add an online payment surcharge/discount.', 'gateway' => 'Gateway', 'gateway_fee_change_warning' => 'If there are unpaid invoices with fees they need to be updated manually.', - 'fees_surcharge_help' => 'Customize surcharge :link.', + 'fees_surcharge_help' => 'Gebühren anpassen :link.', 'label_and_taxes' => 'label and taxes', 'billable' => 'Billable', 'logo_warning_too_large' => 'The image file is too large.', @@ -2428,41 +2429,47 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese 'error_refresh_page' => 'An error occurred, please refresh the page and try again.', 'data' => 'Data', - 'imported_settings' => 'Successfully imported settings', - 'lang_Greek' => 'Greek', + 'imported_settings' => 'Einstellungen erfolgreich aktualisiert', + 'lang_Greek' => 'Griechisch', 'reset_counter' => 'Reset Counter', 'next_reset' => 'Next Reset', 'reset_counter_help' => 'Automatically reset the invoice and quote counters.', 'auto_bill_failed' => 'Auto-billing for invoice :invoice_number failed', - 'online_payment_discount' => 'Online Payment Discount', - 'created_new_company' => 'Successfully created new company', - 'fees_disabled_for_gateway' => 'Fees are disabled for this gateway.', - 'logout_and_delete' => 'Log Out/Delete Account', + 'online_payment_discount' => 'Online-Zahlungsrabatt', + 'created_new_company' => 'Neues Unternehmen erfolgreich erstellt', + 'fees_disabled_for_gateway' => 'Gebühren sind für diesen Gateway deaktiviert.', + 'logout_and_delete' => 'Ausloggen/Konto löschen', 'tax_rate_type_help' => 'Inclusive taxes adjust the line item cost when selected.', - 'invoice_footer_help' => 'Use $pageNumber and $pageCount to display the page information.', + 'invoice_footer_help' => 'Verwende $pageNumber und $pageCount um Seiteninformationen anzuzeigen.', 'credit_note' => 'Credit Note', 'credit_issued_to' => 'Credit issued to', 'credit_to' => 'Credit to', 'your_credit' => 'Your Credit', 'credit_number' => 'Credit Number', 'create_credit_note' => 'Create Credit Note', - 'menu' => 'Menu', + 'menu' => 'Menü', 'error_incorrect_gateway_ids' => 'Error: The gateways table has incorrect ids.', - 'purge_data' => 'Purge Data', - 'delete_data' => 'Delete Data', - 'purge_data_help' => 'Permanently delete all data in the account, keeping the account and settings.', - 'cancel_account_help' => 'Permanently delete the account along with all data and setting.', - 'purge_successful' => 'Successfully purged account data', - 'forbidden' => 'Forbidden', + 'purge_data' => 'Daten säubern', + 'delete_data' => 'Daten löschen', + 'purge_data_help' => 'Lösche unwiederbringlich alle Daten des Kontos, wobei das Konto und die Einstellungen erhalten bleiben.', + 'cancel_account_help' => 'Lösche unwiederbringlich das Konto, mitsamt aller Daten und Einstellungen.', + 'purge_successful' => 'Erfolgreich Kontodaten gelöscht', + 'forbidden' => 'Verboten', 'purge_data_message' => 'Warning: This will permanently erase your data, there is no undo.', - 'contact_phone' => 'Contact Phone', - 'contact_email' => 'Contact Email', - 'reply_to_email' => 'Reply-To Email', - 'reply_to_email_help' => 'Specify the reply-to address for client emails.', - 'bcc_email_help' => 'Privately include this address with client emails.', - 'import_complete' => 'Your import has successfully completed.', - 'confirm_account_to_import' => 'Please confirm your account to import data.', - 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'contact_phone' => 'Telefonnummer des Kontakts', + 'contact_email' => 'E-Mail-Adresse des Kontakts', + 'reply_to_email' => 'Antwort-E-Mail-Adresse', + 'reply_to_email_help' => 'Gib die Antwort-E-Mail-Adresse an, die für den Kundenkontakt genutzt werden soll.', + 'bcc_email_help' => 'Sende unsichtbar zusätzlich alle ausgehenden E-Mails an die hier angegebene Adresse.', + 'import_complete' => 'Ihr Import wurde erfolgreich abgeschlossen.', + 'confirm_account_to_import' => 'Bitte bestätigen Sie Ihr Konto um Daten zu importieren.', + 'import_started' => 'Ihr Import wurde gestartet, wir senden Ihnen eine E-Mail zu, sobald er abgeschlossen wurde.', + 'listening' => 'Listening...', + 'microphone_help' => 'Say \'new invoice for...\'', + 'voice_commands' => 'Voice Commands', + 'sample_commands' => 'Sample commands', + 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'payment_type_Venmo' => 'Venmo', ); diff --git a/resources/lang/el/texts.php b/resources/lang/el/texts.php index f5df4906e1cc..5e9ca1057c12 100644 --- a/resources/lang/el/texts.php +++ b/resources/lang/el/texts.php @@ -369,7 +369,7 @@ email που είναι συνδεδεμένη με το λογαριασμό σ 'confirm_email_quote' => 'Είστε σίγουροι ότι θέλετε να αποστείλετε αυτή την προσφορά;', 'confirm_recurring_email_invoice' => 'Είστε σίγουροι ότι θέλετε να αποστέλλεται αυτό το παραστατικό;', 'cancel_account' => 'Διαγραφή Λογαριασμού', - 'cancel_account_message' => 'Warning: This will permanently delete your account, there is no undo.', + 'cancel_account_message' => 'Προσοχή: Αυτό θα σβήσει το λογαριασμό σας, χωρίς δυνατότητα αναίρεσης.', 'go_back' => 'Επιστροφή', 'data_visualizations' => 'Απεικονίσεις Δεδομένων', 'sample_data' => 'Εμφάνιση δείγματος δεδομένων', @@ -732,7 +732,7 @@ email που είναι συνδεδεμένη με το λογαριασμό σ 'recurring_hour' => 'Επαναλαμβανόμενη Ώρα', 'pattern' => 'Μοτίβο', 'pattern_help_title' => 'Βοήθεια Μοτίβων', - 'pattern_help_1' => 'Create custom numbers by specifying a pattern', + 'pattern_help_1' => 'Δημιουργείστε προσαρμοσμένους αριθμούς καθορίζοντας ένα πρότυπο', 'pattern_help_2' => 'Διαθέσιμες μεταβλητές:', 'pattern_help_3' => 'Για παράδειγμα, το :example θα μετατραπεί σε :value', 'see_options' => 'Προβολή επιλογών', @@ -851,6 +851,7 @@ email που είναι συνδεδεμένη με το λογαριασμό σ 'dark' => 'Σκούρο', 'industry_help' => 'Χρησιμοποιείται για να παρέχει συγκρίσεις μέσων όρων εταιριών ίδιου μεγέθους στους ίδιους επαγγελματικούς τομείς.', 'subdomain_help' => 'Ορίστε τον υποτομέα ή εμφάνιστε το τιμολόγιο στη δική σας ιστοσελίδα', + 'website_help' => 'Display the invoice in an iFrame on your own website', 'invoice_number_help' => 'Ορίστε ένα πρόθεμα ή χρησιμοποιήστε ένα προσαρμοσμένο μοτίβο για να καθορίζετε δυναμικά τον αριθμό τιμολογίου.', 'quote_number_help' => 'Ορίστε ένα πρόθεμα ή χρησιμοποιήστε ένα προσαρμοσμένο μοτίβο για να καθορίζετε δυναμικά τον αριθμό προσφοράς.', 'custom_client_fields_helps' => 'Προσθέστε ένα πεδίο όταν δημιουργείτε ένα πελάτη και εμφανίστε την ετικέτα και την τιμή στο αρχείο PDF.', @@ -1041,7 +1042,7 @@ email που είναι συνδεδεμένη με το λογαριασμό σ 'invoiced_amount' => 'Τιμολογημένο Ποσό', 'invoice_item_fields' => 'Πεδία Προϊόντων Τιμολογίου', 'custom_invoice_item_fields_help' => 'Προσθέστε ένα πεδίο όταν δημιουργείτε ένα προϊόν τιμολογίου και εμφανίστε την ετικέτα και την τιμή στο αρχείο PDF.', - 'recurring_invoice_number' => 'Αριθμός Επαναλαμβανόμενου Τιμολογίου', + 'recurring_invoice_number' => 'Recurring Number', 'recurring_invoice_number_prefix_help' => 'Ορίστε ένα πρόθεμα που να περιλαμβάνεται στον αριθμό τιμολογίου των επαναλαμβανόμενων τιμολογίων. Η εξ\'ορισμού τιμή είναι \'R\'.', // Client Passwords @@ -2448,21 +2449,27 @@ email που είναι συνδεδεμένη με το λογαριασμό σ 'create_credit_note' => 'Δημιουργία Πιστωτικού Σημειώματος', 'menu' => 'Μενού', 'error_incorrect_gateway_ids' => 'Σφάλμα: Ο πίνακας των πυλών (gateways) έχει λάθος αριθμούς.', - 'purge_data' => 'Purge Data', - 'delete_data' => 'Delete Data', - 'purge_data_help' => 'Permanently delete all data in the account, keeping the account and settings.', - 'cancel_account_help' => 'Permanently delete the account along with all data and setting.', - 'purge_successful' => 'Successfully purged account data', - 'forbidden' => 'Forbidden', - 'purge_data_message' => 'Warning: This will permanently erase your data, there is no undo.', - 'contact_phone' => 'Contact Phone', - 'contact_email' => 'Contact Email', - 'reply_to_email' => 'Reply-To Email', - 'reply_to_email_help' => 'Specify the reply-to address for client emails.', - 'bcc_email_help' => 'Privately include this address with client emails.', - 'import_complete' => 'Your import has successfully completed.', - 'confirm_account_to_import' => 'Please confirm your account to import data.', - 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'purge_data' => 'Εκκαθάριση Δεδομένων', + 'delete_data' => 'Διαγραφή Δεδομένων', + 'purge_data_help' => 'Οριστική διαγραφή όλων των δεδομένων στο λογαριασμό, κρατώντας μόνο το λογαριασμό και τις ρυθμίσεις.', + 'cancel_account_help' => 'Οριστική διαγραφή του λογαριασμού με όλα τα δεδομένα και τις ρυθμίσεις.', + 'purge_successful' => 'Επιτυχής εκκαθάριση δεδομένων λογαριασμού', + 'forbidden' => 'Απαγορευμένο', + 'purge_data_message' => 'Προσοχή: Αυτό θα σβήσει όλα σας τα δεδομένα, χωρίς δυνατότητα αναίρεσης.', + 'contact_phone' => 'Τηλέφωνο Επικοινωνίας', + 'contact_email' => 'Email Επικοινωνίας', + 'reply_to_email' => 'Email Απάντησης', + 'reply_to_email_help' => 'Ορίστε τη διεύθυνση απάντησης για τα emails που απευθύνονται στους πελάτες.', + 'bcc_email_help' => 'Ορίστε τη διεύθυνση κρυφής αποστολής για τα emails που απευθύνονται στους πελάτες.', + 'import_complete' => 'Επιτυχής ολοκλήρωση της εισαγωγής', + 'confirm_account_to_import' => 'Παρακαλώ επιβεβαιώστε το λογαριασμό σας για εισαγωγή δεδομένων', + 'import_started' => 'Η εισαγωγή δεδομένων ξεκίνησε, θα σας αποσταλεί email με την ολοκλήρωση.', + 'listening' => 'Listening...', + 'microphone_help' => 'Say \'new invoice for...\'', + 'voice_commands' => 'Voice Commands', + 'sample_commands' => 'Sample commands', + 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'payment_type_Venmo' => 'Venmo', ); diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php index 498255eba8b6..c57f7cbcf478 100644 --- a/resources/lang/en/texts.php +++ b/resources/lang/en/texts.php @@ -851,6 +851,7 @@ $LANG = array( 'dark' => 'Dark', 'industry_help' => 'Used to provide comparisons against the averages of companies of similar size and industry.', 'subdomain_help' => 'Set the subdomain or display the invoice on your own website.', + 'website_help' => 'Display the invoice in an iFrame on your own website', 'invoice_number_help' => 'Specify a prefix or use a custom pattern to dynamically set the invoice number.', 'quote_number_help' => 'Specify a prefix or use a custom pattern to dynamically set the quote number.', 'custom_client_fields_helps' => 'Add a field when creating a client and display the label and value on the PDF.', @@ -1041,7 +1042,7 @@ $LANG = array( 'invoiced_amount' => 'Invoiced Amount', 'invoice_item_fields' => 'Invoice Item Fields', 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', - 'recurring_invoice_number' => 'Recurring Invoice Number', + 'recurring_invoice_number' => 'Recurring Number', 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', // Client Passwords @@ -2463,6 +2464,12 @@ $LANG = array( 'import_complete' => 'Your import has successfully completed.', 'confirm_account_to_import' => 'Please confirm your account to import data.', 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'listening' => 'Listening...', + 'microphone_help' => 'Say \'new invoice for...\'', + 'voice_commands' => 'Voice Commands', + 'sample_commands' => 'Sample commands', + 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'payment_type_Venmo' => 'Venmo', ); diff --git a/resources/lang/es/texts.php b/resources/lang/es/texts.php index bc6668e17d35..8c9c6b5f65c8 100644 --- a/resources/lang/es/texts.php +++ b/resources/lang/es/texts.php @@ -845,6 +845,7 @@ $LANG = array( 'dark' => 'Oscuro', 'industry_help' => 'Usado para proporcionar comparaciones de las medias de las empresas de tamaño y industria similar.', 'subdomain_help' => 'Asigne el suubdominio o mostrar la factura en su propio sitio web.', + 'website_help' => 'Display the invoice in an iFrame on your own website', 'invoice_number_help' => 'Especifique un prefijo o utilice un patrón a medida para establecer dinámicamente el número de factura.', 'quote_number_help' => 'Especifique un prefijo o utilice un patrón a medida para establecer dinámicamente el número de presupuesto.', 'custom_client_fields_helps' => 'Agregar una entrada de texto a la pagina de crear/editar cliente y mostrar la etiqueta y el valor en el PDF.', @@ -1034,7 +1035,7 @@ $LANG = array( 'invoiced_amount' => 'Importe Facturado', 'invoice_item_fields' => 'Campos de Ítem de Factura', 'custom_invoice_item_fields_help' => 'Agregar un campo al crear un ítem de factura y mostrar la etiqueta y valor en el PDF.', - 'recurring_invoice_number' => 'Número de Factura Recurrente', + 'recurring_invoice_number' => 'Recurring Number', 'recurring_invoice_number_prefix_help' => 'Especificar un prefijo para las facturas recurrentes. Por defecto es \'R\'.', // Client Passwords @@ -2456,6 +2457,12 @@ $LANG = array( 'import_complete' => 'Your import has successfully completed.', 'confirm_account_to_import' => 'Please confirm your account to import data.', 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'listening' => 'Listening...', + 'microphone_help' => 'Say \'new invoice for...\'', + 'voice_commands' => 'Voice Commands', + 'sample_commands' => 'Sample commands', + 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'payment_type_Venmo' => 'Venmo', ); diff --git a/resources/lang/es_ES/texts.php b/resources/lang/es_ES/texts.php index baa7f5be627f..9e99d2fdfc56 100644 --- a/resources/lang/es_ES/texts.php +++ b/resources/lang/es_ES/texts.php @@ -846,6 +846,7 @@ Acceder a 10 hermosos diseños de Factura', 'dark' => 'Oscuro', 'industry_help' => 'Usado para proporcionar comparaciones de las medias de empresas de sectores y tamaño similares.', 'subdomain_help' => 'Set the subdomain or display the invoice on your own website.', + 'website_help' => 'Display the invoice in an iFrame on your own website', 'invoice_number_help' => 'Especifique un prefijo o utilice un patrón a medida para establecer dinámicamente el número de factura.', 'quote_number_help' => 'Especifique un prefijo o utilice un patrón a medida para establecer dinámicamente el número de presupuesto.', 'custom_client_fields_helps' => 'Añadir un campo al crear un cliente y mostrar la etiqueta y su valor en el PDF.', @@ -1037,7 +1038,7 @@ Atención! tu password puede estar transmitida como texto plano, considera habil 'invoiced_amount' => 'Invoiced Amount', 'invoice_item_fields' => 'Campos de concepto de factura', 'custom_invoice_item_fields_help' => 'Añadir un campo al crear un concepto de factura y mostrar la etiqueta y su valor en el PDF.', - 'recurring_invoice_number' => 'Número de factura recurrente', + 'recurring_invoice_number' => 'Recurring Number', 'recurring_invoice_number_prefix_help' => 'Especifique un prefijo que se antepondrá al número de factura sólo para las facturas recurrentes. El valor predeterminado es \'R\'.', // Client Passwords @@ -2459,6 +2460,12 @@ Atención! tu password puede estar transmitida como texto plano, considera habil 'import_complete' => 'Your import has successfully completed.', 'confirm_account_to_import' => 'Please confirm your account to import data.', 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'listening' => 'Listening...', + 'microphone_help' => 'Say \'new invoice for...\'', + 'voice_commands' => 'Voice Commands', + 'sample_commands' => 'Sample commands', + 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'payment_type_Venmo' => 'Venmo', ); diff --git a/resources/lang/fr/texts.php b/resources/lang/fr/texts.php index c236f9952f6c..af41a78adf1a 100644 --- a/resources/lang/fr/texts.php +++ b/resources/lang/fr/texts.php @@ -845,6 +845,7 @@ Si vous avez besoin d\'aide à ce sujet, vous pouvez publier une question sur no 'dark' => 'Sombre', 'industry_help' => 'Utilisé dans le but de fournir des statistiques la taille et le secteur de l\'entreprise.', 'subdomain_help' => 'Définissez un sous-domaine ou affichez la facture sur votre propre site web.', + 'website_help' => 'Display the invoice in an iFrame on your own website', 'invoice_number_help' => 'Specify a prefix or use a custom pattern to dynamically set the invoice number.', 'quote_number_help' => 'Specify a prefix or use a custom pattern to dynamically set the quote number.', 'custom_client_fields_helps' => 'Add a text input to the client create/edit page and display the label and value on the PDF.', @@ -1035,7 +1036,7 @@ Si vous avez besoin d\'aide à ce sujet, vous pouvez publier une question sur no 'invoiced_amount' => 'Montant de la facture', 'invoice_item_fields' => 'Invoice Item Fields', 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', - 'recurring_invoice_number' => 'Numéros de Factures Récurrentes', + 'recurring_invoice_number' => 'Recurring Number', 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', // Client Passwords @@ -2457,6 +2458,12 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'import_complete' => 'Your import has successfully completed.', 'confirm_account_to_import' => 'Please confirm your account to import data.', 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'listening' => 'Listening...', + 'microphone_help' => 'Say \'new invoice for...\'', + 'voice_commands' => 'Voice Commands', + 'sample_commands' => 'Sample commands', + 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'payment_type_Venmo' => 'Venmo', ); diff --git a/resources/lang/fr_CA/texts.php b/resources/lang/fr_CA/texts.php index 8d910df4353c..a173c45dc600 100644 --- a/resources/lang/fr_CA/texts.php +++ b/resources/lang/fr_CA/texts.php @@ -845,6 +845,7 @@ $LANG = array( 'dark' => 'Foncé', 'industry_help' => 'Pour des fins de comparaison entre des entreprises de même taille et du même secteur d\'activité.', 'subdomain_help' => 'Définissez le sous-domaine ou affichez la facture sur votre site web.', + 'website_help' => 'Display the invoice in an iFrame on your own website', 'invoice_number_help' => 'Spécifiez un préfixe ou utilisez un modèle personnalisé pour la création du numéro de facture.', 'quote_number_help' => 'Spécifiez un préfixe ou utilisez un modèle personnalisé pour la création du numéro de soumission.', 'custom_client_fields_helps' => 'Ajoutez un champ personnalisé à la page de création/édition de client et affichez le titre et la valeur dans le fichier PDF.', @@ -1032,7 +1033,7 @@ $LANG = array( 'invoiced_amount' => 'Montant facturé', 'invoice_item_fields' => 'Champs d\'items de facture', 'custom_invoice_item_fields_help' => 'Ajoutez un champ lors de la création d\'une facture pour afficher le libellé et la valeur du champ sur le PDF.', - 'recurring_invoice_number' => 'Numéro de facture récurrente', + 'recurring_invoice_number' => 'Numéro récurrent', 'recurring_invoice_number_prefix_help' => 'Spécifiez un préfixe qui sera ajouté au numéro de la facture récurrente. La valeur par défaut est \'R\'.', // Client Passwords @@ -2452,9 +2453,15 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'reply_to_email' => 'Courriel de réponse', 'reply_to_email_help' => 'Spécifie une adresse courriel de réponse', 'bcc_email_help' => 'Inclut de façon privée cette adresse avec les courriels du client.', - 'import_complete' => 'Your import has successfully completed.', - 'confirm_account_to_import' => 'Please confirm your account to import data.', - 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'import_complete' => 'L\'importation est réussie.', + 'confirm_account_to_import' => 'Veuillez confirmer votre compte pour l\'importation des données.', + 'import_started' => 'L\'importation est en cours. Vous recevrez un courriel lorsqu\'elle sera complétée.', + 'listening' => 'En écoute...', + 'microphone_help' => 'Dites \'Nouvelle facture pour...\'', + 'voice_commands' => 'Voice Commands', + 'sample_commands' => 'Sample commands', + 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'payment_type_Venmo' => 'Venmo', ); diff --git a/resources/lang/hr/texts.php b/resources/lang/hr/texts.php index c9d9f0ceae76..26558d3e8b27 100644 --- a/resources/lang/hr/texts.php +++ b/resources/lang/hr/texts.php @@ -851,6 +851,7 @@ $LANG = array( 'dark' => 'Tamno', 'industry_help' => 'Koristi se za usporedbe između prosjeka poduzeća sličnih veličina i djelatnosti.', 'subdomain_help' => 'Set the subdomain or display the invoice on your own website.', + 'website_help' => 'Display the invoice in an iFrame on your own website', 'invoice_number_help' => 'Odredite prefiks ili koristite prilagođeni uzorak za dinamično postavljanje brojeva računa.', 'quote_number_help' => 'Odredite prefiks ili koristite prilagođeni uzorak za dinamično postavljanje brojeva ponuda.', 'custom_client_fields_helps' => 'Add a field when creating a client and display the label and value on the PDF.', @@ -1041,7 +1042,7 @@ $LANG = array( 'invoiced_amount' => 'Invoiced Amount', 'invoice_item_fields' => 'Invoice Item Fields', 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', - 'recurring_invoice_number' => 'Recurring Invoice Number', + 'recurring_invoice_number' => 'Recurring Number', 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', // Client Passwords @@ -2463,6 +2464,12 @@ $LANG = array( 'import_complete' => 'Your import has successfully completed.', 'confirm_account_to_import' => 'Please confirm your account to import data.', 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'listening' => 'Listening...', + 'microphone_help' => 'Say \'new invoice for...\'', + 'voice_commands' => 'Voice Commands', + 'sample_commands' => 'Sample commands', + 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'payment_type_Venmo' => 'Venmo', ); diff --git a/resources/lang/it/texts.php b/resources/lang/it/texts.php index 3e26f18a625e..0fc9e5b05096 100644 --- a/resources/lang/it/texts.php +++ b/resources/lang/it/texts.php @@ -845,6 +845,7 @@ $LANG = array( 'dark' => 'Dark', 'industry_help' => 'Used to provide comparisons against the averages of companies of similar size and industry.', 'subdomain_help' => 'Set the subdomain or display the invoice on your own website.', + 'website_help' => 'Display the invoice in an iFrame on your own website', 'invoice_number_help' => 'Specify a prefix or use a custom pattern to dynamically set the invoice number.', 'quote_number_help' => 'Specify a prefix or use a custom pattern to dynamically set the quote number.', 'custom_client_fields_helps' => 'Add a text input to the client create/edit page and display the label and value on the PDF.', @@ -1035,7 +1036,7 @@ $LANG = array( 'invoiced_amount' => 'Invoiced Amount', 'invoice_item_fields' => 'Invoice Item Fields', 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', - 'recurring_invoice_number' => 'Recurring Invoice Number', + 'recurring_invoice_number' => 'Recurring Number', 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', // Client Passwords @@ -2456,6 +2457,12 @@ $LANG = array( 'import_complete' => 'Your import has successfully completed.', 'confirm_account_to_import' => 'Please confirm your account to import data.', 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'listening' => 'Listening...', + 'microphone_help' => 'Say \'new invoice for...\'', + 'voice_commands' => 'Voice Commands', + 'sample_commands' => 'Sample commands', + 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'payment_type_Venmo' => 'Venmo', ); diff --git a/resources/lang/ja/texts.php b/resources/lang/ja/texts.php index fe86f3f1729a..5fe9c05af652 100644 --- a/resources/lang/ja/texts.php +++ b/resources/lang/ja/texts.php @@ -851,6 +851,7 @@ $LANG = array( 'dark' => 'ダーク', 'industry_help' => 'Used to provide comparisons against the averages of companies of similar size and industry.', 'subdomain_help' => 'Set the subdomain or display the invoice on your own website.', + 'website_help' => 'Display the invoice in an iFrame on your own website', 'invoice_number_help' => 'Specify a prefix or use a custom pattern to dynamically set the invoice number.', 'quote_number_help' => 'Specify a prefix or use a custom pattern to dynamically set the quote number.', 'custom_client_fields_helps' => 'Add a field when creating a client and display the label and value on the PDF.', @@ -1041,7 +1042,7 @@ $LANG = array( 'invoiced_amount' => 'Invoiced Amount', 'invoice_item_fields' => 'Invoice Item Fields', 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', - 'recurring_invoice_number' => 'Recurring Invoice Number', + 'recurring_invoice_number' => 'Recurring Number', 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', // Client Passwords @@ -2463,6 +2464,12 @@ $LANG = array( 'import_complete' => 'Your import has successfully completed.', 'confirm_account_to_import' => 'Please confirm your account to import data.', 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'listening' => 'Listening...', + 'microphone_help' => 'Say \'new invoice for...\'', + 'voice_commands' => 'Voice Commands', + 'sample_commands' => 'Sample commands', + 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'payment_type_Venmo' => 'Venmo', ); diff --git a/resources/lang/lt/texts.php b/resources/lang/lt/texts.php index 773bfe61d32c..957e35d426a3 100644 --- a/resources/lang/lt/texts.php +++ b/resources/lang/lt/texts.php @@ -851,6 +851,7 @@ $LANG = array( 'dark' => 'Dark', 'industry_help' => 'Used to provide comparisons against the averages of companies of similar size and industry.', 'subdomain_help' => 'Set the subdomain or display the invoice on your own website.', + 'website_help' => 'Display the invoice in an iFrame on your own website', 'invoice_number_help' => 'Specify a prefix or use a custom pattern to dynamically set the invoice number.', 'quote_number_help' => 'Specify a prefix or use a custom pattern to dynamically set the quote number.', 'custom_client_fields_helps' => 'Add a text input to the client create/edit page and display the label and value on the PDF.', @@ -1041,7 +1042,7 @@ $LANG = array( 'invoiced_amount' => 'Invoiced Amount', 'invoice_item_fields' => 'Invoice Item Fields', 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', - 'recurring_invoice_number' => 'Recurring Invoice Number', + 'recurring_invoice_number' => 'Recurring Number', 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', // Client Passwords @@ -2463,6 +2464,12 @@ $LANG = array( 'import_complete' => 'Your import has successfully completed.', 'confirm_account_to_import' => 'Please confirm your account to import data.', 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'listening' => 'Listening...', + 'microphone_help' => 'Say \'new invoice for...\'', + 'voice_commands' => 'Voice Commands', + 'sample_commands' => 'Sample commands', + 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'payment_type_Venmo' => 'Venmo', ); diff --git a/resources/lang/nb_NO/texts.php b/resources/lang/nb_NO/texts.php index dc349a242674..0cefa8461cec 100644 --- a/resources/lang/nb_NO/texts.php +++ b/resources/lang/nb_NO/texts.php @@ -851,6 +851,7 @@ $LANG = array( 'dark' => 'Dark', 'industry_help' => 'Used to provide comparisons against the averages of companies of similar size and industry.', 'subdomain_help' => 'Set the subdomain or display the invoice on your own website.', + 'website_help' => 'Display the invoice in an iFrame on your own website', 'invoice_number_help' => 'Specify a prefix or use a custom pattern to dynamically set the invoice number.', 'quote_number_help' => 'Specify a prefix or use a custom pattern to dynamically set the quote number.', 'custom_client_fields_helps' => 'Add a text input to the client create/edit page and display the label and value on the PDF.', @@ -1041,7 +1042,7 @@ $LANG = array( 'invoiced_amount' => 'Invoiced Amount', 'invoice_item_fields' => 'Invoice Item Fields', 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', - 'recurring_invoice_number' => 'Recurring Invoice Number', + 'recurring_invoice_number' => 'Recurring Number', 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', // Client Passwords @@ -2463,6 +2464,12 @@ $LANG = array( 'import_complete' => 'Your import has successfully completed.', 'confirm_account_to_import' => 'Please confirm your account to import data.', 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'listening' => 'Listening...', + 'microphone_help' => 'Say \'new invoice for...\'', + 'voice_commands' => 'Voice Commands', + 'sample_commands' => 'Sample commands', + 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'payment_type_Venmo' => 'Venmo', ); diff --git a/resources/lang/nl/texts.php b/resources/lang/nl/texts.php index 401e7cbec9ee..91f3f3c083e5 100644 --- a/resources/lang/nl/texts.php +++ b/resources/lang/nl/texts.php @@ -845,6 +845,7 @@ $LANG = array( 'dark' => 'Donker', 'industry_help' => 'Wordt gebruikt om een vergelijking te kunnen maken met de gemiddelden van andere bedrijven uit dezelfde sector en van dezelfde grootte.', 'subdomain_help' => 'Stel het subdomein in of toon het factuur op uw eigen website.', + 'website_help' => 'Display the invoice in an iFrame on your own website', 'invoice_number_help' => 'Kies een voorvoegsel of gebruik een patroon om het factuurnummer dynamisch te genereren.', 'quote_number_help' => 'Kies een voorvoegsel of gebruik een patroon om het offertenummer dynamisch te genereren.', 'custom_client_fields_helps' => 'Plaatst een tekstveld op de klanten aanmaak-/bewerkpagina en toont het gekozen label op de PDF.', @@ -1032,7 +1033,7 @@ $LANG = array( 'invoiced_amount' => 'Gefactureerd bedrag', 'invoice_item_fields' => 'Factuurregels', 'custom_invoice_item_fields_help' => 'Voeg een veld toe bij het aanmaken van een factuurregel en toon het label met de waarde op de PDF.', - 'recurring_invoice_number' => 'Nummer terugkerende factuur', + 'recurring_invoice_number' => 'Terugkerend nummer', 'recurring_invoice_number_prefix_help' => 'Kies een voorvoegsel voor het factuurnummer van terugkerende facturen. De standaard is: \'R\'.', // Client Passwords @@ -2452,9 +2453,15 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen 'reply_to_email' => 'Antwoord naar e-mail', 'reply_to_email_help' => 'Geef het antwoord-aan adres voor klant e-mails.', 'bcc_email_help' => 'Dit adres heimelijk gebruiken met klant e-mails.', - 'import_complete' => 'Your import has successfully completed.', - 'confirm_account_to_import' => 'Please confirm your account to import data.', - 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'import_complete' => 'Het importeren is succesvol uitgevoerd.', + 'confirm_account_to_import' => 'Gelieve uw account te bevestigen om de gegevens te importeren.', + 'import_started' => 'Het importeren is gestart, we sturen u een e-mail van zodra het proces afgerond is.', + 'listening' => 'Luisteren...', + 'microphone_help' => 'Zeg \'nieuw factuur voor...\'', + 'voice_commands' => 'Voice Commands', + 'sample_commands' => 'Sample commands', + 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'payment_type_Venmo' => 'Venmo', ); diff --git a/resources/lang/pl/texts.php b/resources/lang/pl/texts.php index a90f0b13e6a6..88ca00b8cc57 100644 --- a/resources/lang/pl/texts.php +++ b/resources/lang/pl/texts.php @@ -851,6 +851,7 @@ $LANG = array( 'dark' => 'Ciemny', 'industry_help' => 'Informacje używane w celach porównawczych przy obliczaniu statystyk firm podobnych rozmiarów i branż.', 'subdomain_help' => 'Ustaw subdomenę lub wyświetl fakturę na swojej stronie.', + 'website_help' => 'Display the invoice in an iFrame on your own website', 'invoice_number_help' => 'Specify a prefix or use a custom pattern to dynamically set the invoice number.', 'quote_number_help' => 'Specify a prefix or use a custom pattern to dynamically set the quote number.', 'custom_client_fields_helps' => 'Add a field when creating a client and display the label and value on the PDF.', @@ -1041,7 +1042,7 @@ $LANG = array( 'invoiced_amount' => 'Fakturowana kwota', 'invoice_item_fields' => 'Invoice Item Fields', 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', - 'recurring_invoice_number' => 'Numer faktury okresowej', + 'recurring_invoice_number' => 'Recurring Number', 'recurring_invoice_number_prefix_help' => 'Dodaj własny prefix do numeru faktury okresowej. Wartość domyślna to \'R\'.', // Client Passwords @@ -2463,6 +2464,12 @@ Gdy przelewy zostaną zaksięgowane na Twoim koncie, wróć do tej strony i klik 'import_complete' => 'Your import has successfully completed.', 'confirm_account_to_import' => 'Please confirm your account to import data.', 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'listening' => 'Listening...', + 'microphone_help' => 'Say \'new invoice for...\'', + 'voice_commands' => 'Voice Commands', + 'sample_commands' => 'Sample commands', + 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'payment_type_Venmo' => 'Venmo', ); diff --git a/resources/lang/pt_BR/texts.php b/resources/lang/pt_BR/texts.php index f53971a55538..14730d11d332 100644 --- a/resources/lang/pt_BR/texts.php +++ b/resources/lang/pt_BR/texts.php @@ -845,6 +845,7 @@ $LANG = array( 'dark' => 'Escuro', 'industry_help' => 'Usado para fornecer comparações contra as médias das empresas de tamanho e indústria similar.', 'subdomain_help' => 'Set the subdomain or display the invoice on your own website.', + 'website_help' => 'Display the invoice in an iFrame on your own website', 'invoice_number_help' => 'Especifique um prefixo ou usar um padrão personalizado para definir dinamicamente o número da fatura.', 'quote_number_help' => 'Especifique um prefixo ou usar um padrão personalizado para definir dinamicamente o número do orçamento.', 'custom_client_fields_helps' => 'Adicionar uma entrada de texto na página Criar/Editar Cliente e exibir no PDF.', @@ -1032,7 +1033,7 @@ $LANG = array( 'invoiced_amount' => 'Total Faturado', 'invoice_item_fields' => 'Campos de Ítens da Fatura', 'custom_invoice_item_fields_help' => 'Adicionar um campo ao adicionar um ítem na fatura e exibir no PDF.', - 'recurring_invoice_number' => 'Número da Fatura Recorrente', + 'recurring_invoice_number' => 'Recurring Number', 'recurring_invoice_number_prefix_help' => 'Informe um prefixo para a numeração das faturas recorrentes. O valor padrão é \'R\'.', // Client Passwords @@ -2454,6 +2455,12 @@ Quando tiver os valores dos depósitos, volte a esta pagina e complete a verific 'import_complete' => 'Your import has successfully completed.', 'confirm_account_to_import' => 'Please confirm your account to import data.', 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'listening' => 'Listening...', + 'microphone_help' => 'Say \'new invoice for...\'', + 'voice_commands' => 'Voice Commands', + 'sample_commands' => 'Sample commands', + 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'payment_type_Venmo' => 'Venmo', ); diff --git a/resources/lang/sq/texts.php b/resources/lang/sq/texts.php index 27672d566b6b..7dd7fe9e48f1 100755 --- a/resources/lang/sq/texts.php +++ b/resources/lang/sq/texts.php @@ -848,6 +848,7 @@ $LANG = array( 'dark' => 'E mbylltë', 'industry_help' => 'Përdoret për të realizuar krahasime ndaj kompanive mesatere me numër puntorësh të ngjashëm.', 'subdomain_help' => 'Set the subdomain or display the invoice on your own website.', + 'website_help' => 'Display the invoice in an iFrame on your own website', 'invoice_number_help' => 'Caktoni një prefiks ose ndonjë shabllon të caktuar për të dinamizuar numrin e faturave.', 'quote_number_help' => 'Caktoni një prefiks ose ndonjë shabllon të caktuar për të dinamizuar numrin e ofertave.', 'custom_client_fields_helps' => 'Shtoni një fushë ë kur të zgjedhni klientin të shfaqet vlera në PDF.', @@ -1039,7 +1040,7 @@ $LANG = array( 'invoice_item_fields' => ' Fushat e njësive në faturë', 'custom_invoice_item_fields_help' => 'Shtoni një fushë ë kur të krijoni faturë dhe etiketa me vlerë të shfaqen në PDF.', - 'recurring_invoice_number' => 'Numri i faturës së përsëritshme', + 'recurring_invoice_number' => 'Recurring Number', 'recurring_invoice_number_prefix_help' => 'Cakto një prefiks që i shtohet numrit të faturave të përsëritshme. Vlera e paracaktuar është "R".', // Client Passwords @@ -2461,6 +2462,12 @@ Pasi të keni pranuar shumat, kthehuni në faqen e metodave të pagesës dhe kli 'import_complete' => 'Your import has successfully completed.', 'confirm_account_to_import' => 'Please confirm your account to import data.', 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'listening' => 'Listening...', + 'microphone_help' => 'Say \'new invoice for...\'', + 'voice_commands' => 'Voice Commands', + 'sample_commands' => 'Sample commands', + 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'payment_type_Venmo' => 'Venmo', ); diff --git a/resources/lang/sv/texts.php b/resources/lang/sv/texts.php index 1dc558d53db5..f2e8964ecae4 100644 --- a/resources/lang/sv/texts.php +++ b/resources/lang/sv/texts.php @@ -850,6 +850,7 @@ $LANG = array( 'dark' => 'Mörk', 'industry_help' => 'Används för att ge jämförelser mot genomsnitten för företag med liknande storlek och bransch.', 'subdomain_help' => 'Ställ in subdomänen eller visa fakturorna på din egen hemsida', + 'website_help' => 'Display the invoice in an iFrame on your own website', 'invoice_number_help' => 'Specifiera ett prefix eller anpassat mönster för att dynamiskt sätta fakturanummer.', 'quote_number_help' => 'Specifiera ett prefix eller använd ett anpassat mönster för att dynamiskt sätta offert nummer.', 'custom_client_fields_helps' => 'Lägga till ett fält när du skapar en klient och visa etiketten och värdet på PDF.', @@ -1040,7 +1041,7 @@ $LANG = array( 'invoiced_amount' => 'Fakturerad summa', 'invoice_item_fields' => 'Fakturerat varu belopp', 'custom_invoice_item_fields_help' => 'Lägg till ett fält när fakturan skapas och visa namn samt värde på PDF´n', - 'recurring_invoice_number' => 'Återkommande faktura nummer', + 'recurring_invoice_number' => 'Recurring Number', 'recurring_invoice_number_prefix_help' => 'Specificera ett prefix att lägga till på återkommande fakturor. Standard värde är \'R\'', // Client Passwords @@ -2476,6 +2477,12 @@ Den här funktionen kräver att en produkt skapas och en betalningsgateway är k 'import_complete' => 'Your import has successfully completed.', 'confirm_account_to_import' => 'Please confirm your account to import data.', 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'listening' => 'Listening...', + 'microphone_help' => 'Say \'new invoice for...\'', + 'voice_commands' => 'Voice Commands', + 'sample_commands' => 'Sample commands', + 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'payment_type_Venmo' => 'Venmo', ); diff --git a/resources/lang/th/texts.php b/resources/lang/th/texts.php index 4a1a3c30e678..c5d1a97851a4 100644 --- a/resources/lang/th/texts.php +++ b/resources/lang/th/texts.php @@ -851,6 +851,7 @@ $LANG = array( 'dark' => 'Dark', 'industry_help' => 'Used to provide comparisons against the averages of companies of similar size and industry.', 'subdomain_help' => 'Set the subdomain or display the invoice on your own website.', + 'website_help' => 'Display the invoice in an iFrame on your own website', 'invoice_number_help' => 'Specify a prefix or use a custom pattern to dynamically set the invoice number.', 'quote_number_help' => 'Specify a prefix or use a custom pattern to dynamically set the quote number.', 'custom_client_fields_helps' => 'Add a field when creating a client and display the label and value on the PDF.', @@ -1041,7 +1042,7 @@ $LANG = array( 'invoiced_amount' => 'Invoiced Amount', 'invoice_item_fields' => 'Invoice Item Fields', 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', - 'recurring_invoice_number' => 'Recurring Invoice Number', + 'recurring_invoice_number' => 'Recurring Number', 'recurring_invoice_number_prefix_help' => 'Speciy a prefix to be added to the invoice number for recurring invoices. The default value is \'R\'.', // Client Passwords @@ -2463,6 +2464,12 @@ $LANG = array( 'import_complete' => 'Your import has successfully completed.', 'confirm_account_to_import' => 'Please confirm your account to import data.', 'import_started' => 'Your import has started, we\'ll send you an email once it completes.', + 'listening' => 'Listening...', + 'microphone_help' => 'Say \'new invoice for...\'', + 'voice_commands' => 'Voice Commands', + 'sample_commands' => 'Sample commands', + 'voice_commands_feedback' => 'We\'re actively working to improve this feature, if there\'s a command you\'d like us to support please email us at :email.', + 'payment_type_Venmo' => 'Venmo', ); diff --git a/resources/views/accounts/client_portal.blade.php b/resources/views/accounts/client_portal.blade.php index dc9e4d491b73..6cd7da575101 100644 --- a/resources/views/accounts/client_portal.blade.php +++ b/resources/views/accounts/client_portal.blade.php @@ -51,12 +51,10 @@

- @if (Utils::isNinja()) - @endif -