From 8826fff0f157ca082d517e36495c191abef64196 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Sat, 5 Dec 2020 20:07:02 +1100 Subject: [PATCH 1/9] Version Bump --- VERSION.txt | 2 +- config/ninja.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VERSION.txt b/VERSION.txt index 030bca2b2fe6..4ea01d15c8f5 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -5.0.32 \ No newline at end of file +5.0.33 \ No newline at end of file diff --git a/config/ninja.php b/config/ninja.php index 7321356e7c51..00d2b70a1f0c 100644 --- a/config/ninja.php +++ b/config/ninja.php @@ -12,7 +12,7 @@ return [ 'require_https' => env('REQUIRE_HTTPS', true), 'app_url' => rtrim(env('APP_URL', ''), '/').'/', 'app_domain' => env('APP_DOMAIN', ''), - 'app_version' => '5.0.32', + 'app_version' => '5.0.33', 'minimum_client_version' => '5.0.16', 'terms_version' => '1.0.1', 'api_secret' => env('API_SECRET', false), From 269fff3fc8d31f48fbda96b32d58400400c20404 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 7 Dec 2020 21:43:21 +1100 Subject: [PATCH 2/9] Changes for counters --- app/Jobs/Ninja/SendReminders.php | 3 ++ app/Models/Expense.php | 5 +++ app/Utils/Traits/GeneratesCounter.php | 45 ++++++++++++++++++--------- 3 files changed, 38 insertions(+), 15 deletions(-) diff --git a/app/Jobs/Ninja/SendReminders.php b/app/Jobs/Ninja/SendReminders.php index 299dd1e0f607..934c42c10d7f 100644 --- a/app/Jobs/Ninja/SendReminders.php +++ b/app/Jobs/Ninja/SendReminders.php @@ -16,6 +16,7 @@ use App\Events\Invoice\InvoiceWasEmailed; use App\Jobs\Entity\EmailEntity; use App\Libraries\MultiDB; use App\Models\Invoice; +use App\Models\Webhook; use App\Utils\Ninja; use App\Utils\Traits\MakesDates; use App\Utils\Traits\MakesReminders; @@ -25,6 +26,7 @@ use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Carbon; +use App\Jobs\Util\WebHookHandler; class SendReminders implements ShouldQueue { @@ -81,6 +83,7 @@ class SendReminders implements ShouldQueue if (in_array($reminder_template, ['reminder1', 'reminder2', 'reminder3', 'endless_reminder'])) { $this->sendReminder($invoice, $reminder_template); + WebHookHandler::dispatch(Webhook::EVENT_REMIND_INVOICE, $invoice, $invoice->company); } }); } diff --git a/app/Models/Expense.php b/app/Models/Expense.php index 9cc71214d1be..61c535345f86 100644 --- a/app/Models/Expense.php +++ b/app/Models/Expense.php @@ -81,4 +81,9 @@ class Expense extends BaseModel { return $this->belongsTo(Company::class); } + + public function vendor() + { + return $this->belongsTo(Vendor::class); + } } diff --git a/app/Utils/Traits/GeneratesCounter.php b/app/Utils/Traits/GeneratesCounter.php index 66d37d7257d5..7ea3ff929556 100644 --- a/app/Utils/Traits/GeneratesCounter.php +++ b/app/Utils/Traits/GeneratesCounter.php @@ -601,22 +601,37 @@ trait GeneratesCounter $replace[] = str_replace($format, $date, $matches[1]); } - if ($entity instanceof Client || $entity instanceof Vendor) { - $search[] = '{$client_custom1}'; - $replace[] = $entity->custom_value1; + if ($entity instanceof Vendor) { - $search[] = '{$client_custom2}'; - $replace[] = $entity->custom_value2; - - $search[] = '{$client_custom3}'; - $replace[] = $entity->custom_value3; - - $search[] = '{$client_custom4}'; - $replace[] = $entity->custom_value4; - - $search[] = '{$id_number}'; + $search[] = '{$vendor_id_number}'; $replace[] = $entity->id_number; - } else { + + } + + if ($entity instanceof Expense) { + + if($entity->vendor){ + $search[] = '{$vendor_id_number}'; + $replace[] = $entity->vendor->id_number; + + $search[] = '{$vendor_custom1}'; + $replace[] = $entity->vendor->custom_value1; + + $search[] = '{$vendor_custom2}'; + $replace[] = $entity->vendor->custom_value2; + + $search[] = '{$vendor_custom3}'; + $replace[] = $entity->vendor->custom_value3; + + $search[] = '{$vendor_custom4}'; + $replace[] = $entity->vendor->custom_value4; + } + + $search[] = '{$expense_id_number}'; + $replace[] = $entity->id_number; + } + + if ($entity->client) { $search[] = '{$client_custom1}'; $replace[] = $entity->client->custom_value1; @@ -629,7 +644,7 @@ trait GeneratesCounter $search[] = '{$client_custom4}'; $replace[] = $entity->client->custom_value4; - $search[] = '{$id_number}'; + $search[] = '{$client_id_number}'; $replace[] = $entity->client->id_number; } From 8107a496771a54357c36c04e9eaf2a8e81f400de Mon Sep 17 00:00:00 2001 From: David Bomba Date: Tue, 8 Dec 2020 07:21:08 +1100 Subject: [PATCH 3/9] remove trailing slash from app url --- app/DataMapper/CompanySettings.php | 1 - app/Notifications/Admin/InvoiceSentNotification.php | 2 +- app/Notifications/Admin/InvoiceViewedNotification.php | 2 +- app/Notifications/Admin/NewPartialPaymentNotification.php | 2 +- app/Notifications/Admin/NewPaymentNotification.php | 2 +- app/Utils/PhantomJS/Phantom.php | 2 +- composer.json | 2 +- config/ninja.php | 2 +- resources/views/layouts/guest.blade.php | 2 +- resources/views/layouts/master.blade.php | 2 +- resources/views/portal/ninja2020/layout/clean.blade.php | 2 +- 11 files changed, 10 insertions(+), 11 deletions(-) diff --git a/app/DataMapper/CompanySettings.php b/app/DataMapper/CompanySettings.php index b1febefdab7a..f2416ed26ba6 100644 --- a/app/DataMapper/CompanySettings.php +++ b/app/DataMapper/CompanySettings.php @@ -617,7 +617,6 @@ class CompanySettings extends BaseSettings '$quote.po_number', '$quote.date', '$quote.valid_until', - '$quote.balance_due', '$quote.total', ], 'credit_details' => [ diff --git a/app/Notifications/Admin/InvoiceSentNotification.php b/app/Notifications/Admin/InvoiceSentNotification.php index 23520c79fa2d..5f8133d0789a 100644 --- a/app/Notifications/Admin/InvoiceSentNotification.php +++ b/app/Notifications/Admin/InvoiceSentNotification.php @@ -92,7 +92,7 @@ class InvoiceSentNotification extends Notification implements ShouldQueue 'invoice' => $this->invoice->number, ] ), - 'url' => config('ninja.app_url').'invoices/'.$this->invoice->hashed_id, + 'url' => config('ninja.app_url').'/invoices/'.$this->invoice->hashed_id, 'button' => ctrans('texts.view_invoice'), 'signature' => $this->settings->email_signature, 'logo' => $this->company->present()->logo(), diff --git a/app/Notifications/Admin/InvoiceViewedNotification.php b/app/Notifications/Admin/InvoiceViewedNotification.php index e8e0ed3a8e67..793f484d8faf 100644 --- a/app/Notifications/Admin/InvoiceViewedNotification.php +++ b/app/Notifications/Admin/InvoiceViewedNotification.php @@ -92,7 +92,7 @@ class InvoiceViewedNotification extends Notification implements ShouldQueue 'invoice' => $this->invoice->number, ] ), - 'url' => config('ninja.app_url').'invoices/'.$this->invoice->hashed_id, + 'url' => config('ninja.app_url').'/invoices/'.$this->invoice->hashed_id, 'button' => ctrans('texts.view_invoice'), 'signature' => $this->settings->email_signature, 'logo' => $this->company->present()->logo(), diff --git a/app/Notifications/Admin/NewPartialPaymentNotification.php b/app/Notifications/Admin/NewPartialPaymentNotification.php index 83eba45e660f..e7023f414a4c 100644 --- a/app/Notifications/Admin/NewPartialPaymentNotification.php +++ b/app/Notifications/Admin/NewPartialPaymentNotification.php @@ -89,7 +89,7 @@ class NewPartialPaymentNotification extends Notification implements ShouldQueue 'invoice' => $invoice_texts, ] ), - 'url' => config('ninja.app_url').'payments/'.$this->payment->hashed_id, + 'url' => config('ninja.app_url').'/payments/'.$this->payment->hashed_id, 'button' => ctrans('texts.view_payment'), 'signature' => $this->settings->email_signature, 'logo' => $this->company->present()->logo(), diff --git a/app/Notifications/Admin/NewPaymentNotification.php b/app/Notifications/Admin/NewPaymentNotification.php index 867e9b818da0..ef7070dfd575 100644 --- a/app/Notifications/Admin/NewPaymentNotification.php +++ b/app/Notifications/Admin/NewPaymentNotification.php @@ -92,7 +92,7 @@ class NewPaymentNotification extends Notification implements ShouldQueue 'invoice' => $invoice_texts, ] ), - 'url' => config('ninja.app_url').'payments/'.$this->payment->hashed_id, + 'url' => config('ninja.app_url').'/payments/'.$this->payment->hashed_id, 'button' => ctrans('texts.view_payment'), 'signature' => $this->settings->email_signature, 'logo' => $this->company->present()->logo(), diff --git a/app/Utils/PhantomJS/Phantom.php b/app/Utils/PhantomJS/Phantom.php index 209ff8342730..2d02b8931ef6 100644 --- a/app/Utils/PhantomJS/Phantom.php +++ b/app/Utils/PhantomJS/Phantom.php @@ -68,7 +68,7 @@ class Phantom $file_path = $path.$entity_obj->number.'.pdf'; - $url = config('ninja.app_url').'phantom/'.$entity.'/'.$invitation->key.'?phantomjs_secret='.config('ninja.phantomjs_secret'); + $url = config('ninja.app_url').'/phantom/'.$entity.'/'.$invitation->key.'?phantomjs_secret='.config('ninja.phantomjs_secret'); info($url); $key = config('ninja.phantomjs_key'); diff --git a/composer.json b/composer.json index 08c1082e8854..0cc836b574f2 100644 --- a/composer.json +++ b/composer.json @@ -53,7 +53,7 @@ "league/omnipay": "^3.0", "livewire/livewire": "^1.3", "maennchen/zipstream-php": "^1.2", - "nwidart/laravel-modules": "^6.0", + "nwidart/laravel-modules": "^8.0", "omnipay/paypal": "^3.0", "predis/predis": "^1.1", "sentry/sentry-laravel": "^2", diff --git a/config/ninja.php b/config/ninja.php index 00d2b70a1f0c..8e2402b989e2 100644 --- a/config/ninja.php +++ b/config/ninja.php @@ -10,7 +10,7 @@ return [ 'app_name' => env('APP_NAME'), 'app_env' => env('APP_ENV', 'selfhosted'), 'require_https' => env('REQUIRE_HTTPS', true), - 'app_url' => rtrim(env('APP_URL', ''), '/').'/', + 'app_url' => rtrim(env('APP_URL', ''), '/'), 'app_domain' => env('APP_DOMAIN', ''), 'app_version' => '5.0.33', 'minimum_client_version' => '5.0.16', diff --git a/resources/views/layouts/guest.blade.php b/resources/views/layouts/guest.blade.php index 8187713a24e0..6db093859999 100644 --- a/resources/views/layouts/guest.blade.php +++ b/resources/views/layouts/guest.blade.php @@ -36,7 +36,7 @@ - + diff --git a/resources/views/layouts/master.blade.php b/resources/views/layouts/master.blade.php index 0928ce4dbbea..e4aef481b2e3 100644 --- a/resources/views/layouts/master.blade.php +++ b/resources/views/layouts/master.blade.php @@ -57,7 +57,7 @@ - + diff --git a/resources/views/portal/ninja2020/layout/clean.blade.php b/resources/views/portal/ninja2020/layout/clean.blade.php index df7c8bed0bf0..4e4213116a8e 100644 --- a/resources/views/portal/ninja2020/layout/clean.blade.php +++ b/resources/views/portal/ninja2020/layout/clean.blade.php @@ -58,7 +58,7 @@ {{-- --}} - + {{-- Feel free to push anything to header using @push('header') --}} @stack('head') From e765bcce085aac7e1b483314d9a3d129ebbe3f7d Mon Sep 17 00:00:00 2001 From: David Bomba Date: Tue, 8 Dec 2020 07:25:56 +1100 Subject: [PATCH 4/9] Fixes for swagger --- app/Http/Controllers/CreditController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/CreditController.php b/app/Http/Controllers/CreditController.php index d27e18d6a32c..3cec7da3fb94 100644 --- a/app/Http/Controllers/CreditController.php +++ b/app/Http/Controllers/CreditController.php @@ -314,7 +314,7 @@ class CreditController extends BaseController * * @throws \ReflectionException * @OA\Put( - * path="/api/v1/Credits/{id}", + * path="/api/v1/credits/{id}", * operationId="updateCredit", * tags={"Credits"}, * summary="Updates an Credit", From 594dda9b656de6a9e5e2864344a3bf834661ce04 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Tue, 8 Dec 2020 20:18:17 +1100 Subject: [PATCH 5/9] fixes for delivery notes{ --- app/Http/Controllers/InvoiceController.php | 2 +- app/Http/Middleware/QueryLogging.php | 7 +- app/Models/ClientContact.php | 2 +- app/Utils/Traits/Inviteable.php | 6 +- resources/lang/en/texts.php | 74 +++++++++++----------- 5 files changed, 46 insertions(+), 45 deletions(-) diff --git a/app/Http/Controllers/InvoiceController.php b/app/Http/Controllers/InvoiceController.php index 8ee5573f0d2d..f8978b3d55b9 100644 --- a/app/Http/Controllers/InvoiceController.php +++ b/app/Http/Controllers/InvoiceController.php @@ -843,7 +843,7 @@ class InvoiceController extends BaseController { $file_path = $invoice->service()->getInvoiceDeliveryNote($invoice, $invoice->invitations->first()->contact); - $file = base_path("storage/app/public/{$file_path}"); + $file = public_path("storage/{$file_path}"); return response()->download($file, basename($file)); } diff --git a/app/Http/Middleware/QueryLogging.php b/app/Http/Middleware/QueryLogging.php index 4843070dc947..d3c6e9479a44 100644 --- a/app/Http/Middleware/QueryLogging.php +++ b/app/Http/Middleware/QueryLogging.php @@ -34,9 +34,10 @@ class QueryLogging $timeStart = microtime(true); // Enable query logging for development - if (config('ninja.app_env') != 'production') { - DB::enableQueryLog(); - } + if (config('ninja.app_env') == 'production') + return $next($request); + + DB::enableQueryLog(); $response = $next($request); diff --git a/app/Models/ClientContact.php b/app/Models/ClientContact.php index bfa50b598555..5f1ccb4098ef 100644 --- a/app/Models/ClientContact.php +++ b/app/Models/ClientContact.php @@ -207,6 +207,6 @@ class ClientContact extends Authenticatable implements HasLocalePreference { $domain = isset($this->company->portal_domain) ?: $this->company->domain(); - return $domain . 'client/key_login/' . $this->contact_key; + return $domain . '/client/key_login/' . $this->contact_key; } } diff --git a/app/Utils/Traits/Inviteable.php b/app/Utils/Traits/Inviteable.php index 6765c3f65eb6..12188dc55626 100644 --- a/app/Utils/Traits/Inviteable.php +++ b/app/Utils/Traits/Inviteable.php @@ -50,14 +50,14 @@ trait Inviteable switch ($this->company->portal_mode) { case 'subdomain': - return $domain.'client/'.$entity_type.'/'.$this->key; + return $domain.'/client/'.$entity_type.'/'.$this->key; break; case 'iframe': - return $domain.'client/'.$entity_type.'/'.$this->key; + return $domain.'/client/'.$entity_type.'/'.$this->key; //return $domain . $entity_type .'/'. $this->contact->client->client_hash .'/'. $this->key; break; case 'domain': - return $domain.'client/'.$entity_type.'/'.$this->key; + return $domain.'/client/'.$entity_type.'/'.$this->key; break; default: diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php index bca47d23277e..85f4cff62452 100644 --- a/resources/lang/en/texts.php +++ b/resources/lang/en/texts.php @@ -72,8 +72,8 @@ return [ 'tax_rates' => 'Tax Rates', 'rate' => 'Rate', 'settings' => 'Settings', - 'enable_invoice_tax' => 'Enable specifying an invoice tax', - 'enable_line_item_tax' => 'Enable specifying line item taxes', + 'enable_invoice_tax' => 'Enable specifying an invoice tax', + 'enable_line_item_tax' => 'Enable specifying line item taxes', 'dashboard' => 'Dashboard', 'dashboard_totals_in_all_currencies_help' => 'Note: add a :link named ":name" to show the totals using a single base currency.', 'clients' => 'Clients', @@ -100,9 +100,9 @@ return [ 'powered_by' => 'Powered by', 'no_items' => 'No items', 'recurring_invoices' => 'Recurring Invoices', - 'recurring_help' => '

Automatically send clients the same invoices weekly, bi-monthly, monthly, quarterly or annually.

-

Use :MONTH, :QUARTER or :YEAR for dynamic dates. Basic math works as well, for example :MONTH-1.

-

Examples of dynamic invoice variables:

+ 'recurring_help' => 'Automatically send clients the same invoices weekly, bi-monthly, monthly, quarterly or annually. + Use :MONTH, :QUARTER or :YEAR for dynamic dates. Basic math works as well, for example :MONTH-1. + Examples of dynamic invoice variables:
  • "Gym membership for the month of :MONTH" >> "Gym membership for the month of July"
  • ":YEAR+1 yearly subscription" >> "2015 Yearly Subscription"
  • @@ -177,12 +177,12 @@ return [ 'payment_gateway' => 'Payment Gateway', 'gateway_id' => 'Gateway', 'email_notifications' => 'Email Notifications', - 'email_sent' => 'Email me when an invoice is sent', - 'email_viewed' => 'Email me when an invoice is viewed', - 'email_paid' => 'Email me when an invoice is paid', + 'email_sent' => 'Email me when an invoice is sent', + 'email_viewed' => 'Email me when an invoice is viewed', + 'email_paid' => 'Email me when an invoice is paid', 'site_updates' => 'Site Updates', 'custom_messages' => 'Custom Messages', - 'default_email_footer' => 'Set default email signature', + 'default_email_footer' => 'Set default email signature', 'select_file' => 'Please select a file', 'first_row_headers' => 'Use first row as headers', 'column' => 'Column', @@ -285,11 +285,11 @@ return [ 'erase_data' => 'Your account is not registered, this will permanently erase your data.', 'password' => 'Password', 'pro_plan_product' => 'Pro Plan', - 'pro_plan_success' => 'Thanks for choosing Invoice Ninja\'s Pro plan!

     
    - Next Steps

    A payable invoice has been sent to the email + 'pro_plan_success' => 'Thanks for choosing Invoice Ninja\'s Pro plan! 
    + Next StepsA payable invoice has been sent to the email address associated with your account. To unlock all of the awesome Pro features, please follow the instructions on the invoice to pay - for a year of Pro-level invoicing.

    + for a year of Pro-level invoicing. Can\'t find the invoice? Need further assistance? We\'re happy to help -- email us at contact@invoiceninja.com', 'unsaved_changes' => 'You have unsaved changes', @@ -305,9 +305,9 @@ return [ 'product' => 'Product', 'products' => 'Products', 'fill_products' => 'Auto-fill products', - 'fill_products_help' => 'Selecting a product will automatically fill in the description and cost', + 'fill_products_help' => 'Selecting a product will automatically fill in the description and cost', 'update_products' => 'Auto-update products', - 'update_products_help' => 'Updating an invoice will automatically update the product library', + 'update_products_help' => 'Updating an invoice will automatically update the product library', 'create_product' => 'Add Product', 'edit_product' => 'Edit Product', 'archive_product' => 'Archive Product', @@ -514,7 +514,7 @@ return [ 'send_email' => 'Send Email', 'set_password' => 'Set Password', 'converted' => 'Converted', - 'email_approved' => 'Email me when a quote is approved', + 'email_approved' => 'Email me when a quote is approved', 'notification_quote_approved_subject' => 'Quote :invoice was approved by :client', 'notification_quote_approved' => 'The following client :client approved Quote :invoice for :amount.', 'resend_confirmation' => 'Resend confirmation email', @@ -634,7 +634,7 @@ return [ 'email_error' => 'There was a problem sending the email', 'confirm_recurring_timing' => 'Note: emails are sent at the start of the hour.', 'confirm_recurring_timing_not_sent' => 'Note: invoices are created at the start of the hour.', - 'payment_terms_help' => 'Sets the default invoice due date', + 'payment_terms_help' => 'Sets the default invoice due date', 'unlink_account' => 'Unlink Account', 'unlink' => 'Unlink', 'show_address' => 'Show Address', @@ -677,8 +677,8 @@ return [ 'created_by_invoice' => 'Created by :invoice', 'primary_user' => 'Primary User', 'help' => 'Help', - 'customize_help' => '

    We use :pdfmake_link to define the invoice designs declaratively. The pdfmake :playground_link provides a great way to see the library in action.

    -

    If you need help figuring something out post a question to our :forum_link with the design you\'re using.

    ', + 'customize_help' => 'We use :pdfmake_link to define the invoice designs declaratively. The pdfmake :playground_link provides a great way to see the library in action. + If you need help figuring something out post a question to our :forum_link with the design you\'re using.', 'playground' => 'playground', 'support_forum' => 'support forum', 'invoice_due_date' => 'Due Date', @@ -695,7 +695,7 @@ return [ 'status_paid' => 'Paid', 'status_unpaid' => 'Unpaid', 'status_all' => 'All', - 'show_line_item_tax' => 'Display line item taxes inline', + 'show_line_item_tax' => 'Display line item taxes inline', 'iframe_url' => 'Website', 'iframe_url_help1' => 'Copy the following code to a page on your site.', 'iframe_url_help2' => 'You can test the feature by clicking \'View as recipient\' for an invoice.', @@ -965,10 +965,10 @@ return [ 'edit_payment_term' => 'Edit Payment Term', 'archive_payment_term' => 'Archive Payment Term', 'recurring_due_dates' => 'Recurring Invoice Due Dates', - 'recurring_due_date_help' => '

    Automatically sets a due date for the invoice.

    -

    Invoices on a monthly or yearly cycle set to be due on or before the day they are created will be due the next month. Invoices set to be due on the 29th or 30th in months that don\'t have that day will be due the last day of the month.

    -

    Invoices on a weekly cycle set to be due on the day of the week they are created will be due the next week.

    -

    For example:

    + 'recurring_due_date_help' => 'Automatically sets a due date for the invoice. + Invoices on a monthly or yearly cycle set to be due on or before the day they are created will be due the next month. Invoices set to be due on the 29th or 30th in months that don\'t have that day will be due the last day of the month. + Invoices on a weekly cycle set to be due on the day of the week they are created will be due the next week. + For example:
    • Today is the 15th, due date is 1st of the month. The due date should likely be the 1st of the next month.
    • Today is the 15th, due date is the last day of the month. The due date will be the last day of the this month. @@ -1377,7 +1377,7 @@ return [ 'see_whats_new' => 'See what\'s new in v:version', 'wait_for_upload' => 'Please wait for the document upload to complete.', 'upgrade_for_permissions' => 'Upgrade to our Enterprise plan to enable permissions.', - 'enable_second_tax_rate' => 'Enable specifying a second tax rate', + 'enable_second_tax_rate' => 'Enable specifying a second tax rate', 'payment_file' => 'Payment File', 'expense_file' => 'Expense File', 'product_file' => 'Product File', @@ -1885,10 +1885,10 @@ return [ 'security_code_email_subject' => 'Security code for Invoice Ninja Bot', 'security_code_email_line1' => 'This is your Invoice Ninja Bot security code.', 'security_code_email_line2' => 'Note: it will expire in 10 minutes.', - 'bot_help_message' => 'I currently support:
      • Create\update\email an invoice
      • List products
      For example:
      invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent', + 'bot_help_message' => 'I currently support:
      • Create\update\email an invoice
      • List products
      For example:
      invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent', 'list_products' => 'List Products', - 'include_item_taxes_inline' => 'Include line item taxes in line total', + 'include_item_taxes_inline' => 'Include line item taxes in line total', 'created_quotes' => 'Successfully created :count quotes(s)', 'limited_gateways' => 'Note: we support one credit card gateway per company.', @@ -1898,7 +1898,7 @@ return [ 'update_invoiceninja_warning' => 'Before start upgrading Invoice Ninja create a backup of your database and files!', 'update_invoiceninja_available' => 'A new version of Invoice Ninja is available.', 'update_invoiceninja_unavailable' => 'No new version of Invoice Ninja available.', - 'update_invoiceninja_instructions' => 'Please install the new version :version by clicking the Update now button below. Afterwards you\'ll be redirected to the dashboard.', + 'update_invoiceninja_instructions' => 'Please install the new version :version by clicking the Update now button below. Afterwards you\'ll be redirected to the dashboard.', 'update_invoiceninja_update_start' => 'Update now', 'update_invoiceninja_download_start' => 'Download :version', 'create_new' => 'Create New', @@ -1999,7 +1999,7 @@ return [ // BlueVine 'bluevine_promo' => 'Get flexible business lines of credit and invoice factoring using BlueVine.', 'bluevine_modal_label' => 'Sign up with BlueVine', - 'bluevine_modal_text' => '

      Fast funding for your business. No paperwork.

      + 'bluevine_modal_text' => 'Fast funding for your business. No paperwork.
      • Flexible business lines of credit and invoice factoring.
      ', 'bluevine_create_account' => 'Create an account', 'quote_types' => 'Get a quote for', @@ -2155,8 +2155,8 @@ return [ 'recipients' => 'Recipients', 'save_as_default' => 'Save as default', 'template' => 'Template', - 'start_of_week_help' => 'Used by date selectors', - 'financial_year_start_help' => 'Used by date range selectors', + 'start_of_week_help' => 'Used by date selectors', + 'financial_year_start_help' => 'Used by date range selectors', 'reports_help' => 'Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.', 'this_year' => 'This Year', @@ -2180,7 +2180,7 @@ return [ 'freq_two_months' => 'Two months', 'freq_yearly' => 'Annually', 'profile' => 'Profile', - 'payment_type_help' => 'Sets the default manual payment type.', + 'payment_type_help' => 'Sets the default manual payment type.', 'industry_Construction' => 'Construction', 'your_statement' => 'Your Statement', 'statement_issued_to' => 'Statement issued to', @@ -2273,8 +2273,8 @@ return [ 'payment_type_Venmo' => 'Venmo', 'payment_type_Money Order' => 'Money Order', 'archived_products' => 'Successfully archived :count products', - 'recommend_on' => 'We recommend enabling this setting.', - 'recommend_off' => 'We recommend disabling this setting.', + 'recommend_on' => 'We recommend enabling this setting.', + 'recommend_off' => 'We recommend disabling this setting.', 'notes_auto_billed' => 'Auto-billed', 'surcharge_label' => 'Surcharge Label', 'contact_fields' => 'Contact Fields', @@ -2362,7 +2362,7 @@ return [ 'app_version' => 'App Version', 'ofx_version' => 'OFX Version', 'gateway_help_23' => ':link to get your Stripe API keys.', - 'error_app_key_set_to_default' => 'Error: APP_KEY is set to a default value, to update it backup your database and then run php artisan ninja:update-key', + 'error_app_key_set_to_default' => 'Error: APP_KEY is set to a default value, to update it backup your database and then run php artisan ninja:update-key', 'charge_late_fee' => 'Charge Late Fee', 'late_fee_amount' => 'Late Fee Amount', 'late_fee_percent' => 'Late Fee Percent', @@ -2622,7 +2622,7 @@ return [ 'subdomain_is_set' => 'subdomain is set', 'verification_file' => 'Verification File', 'verification_file_missing' => 'The verification file is needed to accept payments.', - 'apple_pay_domain' => 'Use :domain as the domain in :link.', + 'apple_pay_domain' => 'Use :domain as the domain in :link.', 'apple_pay_not_supported' => 'Sorry, Apple/Google Pay isn\'t supported by your browser', 'optional_payment_methods' => 'Optional Payment Methods', 'add_subscription' => 'Add Subscription', @@ -2674,7 +2674,7 @@ return [ 'processing_request' => 'Processing request', 'mcrypt_warning' => 'Warning: Mcrypt is deprecated, run :command to update your cipher.', 'edit_times' => 'Edit Times', - 'inclusive_taxes_help' => 'Include taxes in the cost', + 'inclusive_taxes_help' => 'Include taxes in the cost', 'inclusive_taxes_notice' => 'This setting can not be changed once an invoice has been created.', 'inclusive_taxes_warning' => 'Warning: existing invoices will need to be resaved', 'copy_shipping' => 'Copy Shipping', @@ -2706,7 +2706,7 @@ return [ 'return_to_login' => 'Return to Login', 'convert_products_tip' => 'Note: add a :link named ":name" to see the exchange rate.', 'amount_greater_than_balance' => 'The amount is greater than the invoice balance, a credit will be created with the remaining amount.', - 'custom_fields_tip' => 'Use Label|Option1,Option2 to show a select box.', + 'custom_fields_tip' => 'Use Label|Option1,Option2 to show a select box.', 'client_information' => 'Client Information', 'client_information_text' => 'Use a permanent address where you can receive mail.', 'updated_client_details' => 'Successfully updated client details', From beccfd00c7f3a157b7969455691ab13089c94c8d Mon Sep 17 00:00:00 2001 From: David Bomba Date: Tue, 8 Dec 2020 20:32:17 +1100 Subject: [PATCH 6/9] Only send email changed notification if new and old emails are different. --- app/Http/Controllers/UserController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 6818fa65b7a4..b29620844220 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -372,7 +372,7 @@ class UserController extends BaseController $user = $this->user_repo->save($request->all(), $user); - if ($user) { + if ($old_email != $new_email) { UserEmailChanged::dispatch($new_email, $old_email, auth()->user()->company()); } From 634e5cadccb190f1d7b42f66f266c0c464f78525 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Tue, 8 Dec 2020 21:49:23 +1100 Subject: [PATCH 7/9] remove redundant code --- .../ClientPortal/PaymentHookController.php | 26 ------------------- routes/client.php | 3 --- 2 files changed, 29 deletions(-) delete mode 100644 app/Http/Controllers/ClientPortal/PaymentHookController.php diff --git a/app/Http/Controllers/ClientPortal/PaymentHookController.php b/app/Http/Controllers/ClientPortal/PaymentHookController.php deleted file mode 100644 index 59a70bc18d6b..000000000000 --- a/app/Http/Controllers/ClientPortal/PaymentHookController.php +++ /dev/null @@ -1,26 +0,0 @@ -input()); - } -} diff --git a/routes/client.php b/routes/client.php index 2a26edee87be..46075c5e334a 100644 --- a/routes/client.php +++ b/routes/client.php @@ -64,7 +64,6 @@ Route::group(['middleware' => ['auth:contact', 'locale', 'check_client_existence Route::get('credits/{credit_invitation}', 'ClientPortal\CreditController@show')->name('credits.show_invitation'); - Route::get('client/switch_company/{contact}', 'ClientPortal\SwitchCompanyController')->name('switch_company'); Route::post('documents/download_multiple', 'ClientPortal\DocumentController@downloadMultiple')->name('documents.download_multiple'); @@ -84,8 +83,6 @@ Route::group(['middleware' => ['invite_db'], 'prefix' => 'client', 'as' => 'clie Route::get('credit/{invitation_key}/download_pdf', 'CreditController@downloadPdf')->name('credit.download_invitation_key'); Route::get('{entity}/{invitation_key}/download', 'ClientPortal\InvitationController@routerForDownload'); Route::get('{entity}/{client_hash}/{invitation_key}', 'ClientPortal\InvitationController@routerForIframe')->name('invoice.client_hash_and_invitation_key'); //should never need this - - Route::get('payment_hook/{company_gateway_id}/{gateway_type_id}', 'ClientPortal\PaymentHookController@process'); }); Route::get('phantom/{entity}/{invitation_key}', '\App\Utils\PhantomJS\Phantom@displayInvitation')->middleware(['invite_db', 'phantom_secret'])->name('phantom_view'); From 7075ec5096d13617078bacc02d095309400cbcb8 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 9 Dec 2020 07:12:10 +1100 Subject: [PATCH 8/9] Reorder default includes --- app/Transformers/CompanyUserTransformer.php | 2 +- app/Transformers/UserTransformer.php | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/Transformers/CompanyUserTransformer.php b/app/Transformers/CompanyUserTransformer.php index 85dfda97f1c4..111cf0e4095b 100644 --- a/app/Transformers/CompanyUserTransformer.php +++ b/app/Transformers/CompanyUserTransformer.php @@ -23,7 +23,7 @@ class CompanyUserTransformer extends EntityTransformer * @var array */ protected $defaultIncludes = [ - 'user', + // 'user', ]; /** diff --git a/app/Transformers/UserTransformer.php b/app/Transformers/UserTransformer.php index 27e08b6d7e88..99f4519253d0 100644 --- a/app/Transformers/UserTransformer.php +++ b/app/Transformers/UserTransformer.php @@ -26,8 +26,7 @@ class UserTransformer extends EntityTransformer * @var array */ protected $defaultIncludes = [ - //'company_users', - // 'token', + //'company_user' ]; /** From ed3061fa7d9bf946493e78407783e965a63fd25b Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 9 Dec 2020 07:22:35 +1100 Subject: [PATCH 9/9] Remove html tags from texts --- resources/lang/de/texts.php | 70 ++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/resources/lang/de/texts.php b/resources/lang/de/texts.php index e7da1afbcebc..5e0de48d68a9 100644 --- a/resources/lang/de/texts.php +++ b/resources/lang/de/texts.php @@ -68,8 +68,8 @@ $LANG = [ 'tax_rates' => 'Steuersätze', 'rate' => 'Satz', 'settings' => 'Einstellungen', - 'enable_invoice_tax' => 'Ermögliche das Bestimmen einer Rechnungssteuer', - 'enable_line_item_tax' => 'Ermögliche das Bestimmen von Steuern für Belegpositionen', + 'enable_invoice_tax' => 'Ermögliche das Bestimmen einer Rechnungssteuer', + 'enable_line_item_tax' => 'Ermögliche das Bestimmen von Steuern für Belegpositionen', 'dashboard' => 'Dashboard', 'clients' => 'Kunden', 'invoices' => 'Rechnungen', @@ -95,9 +95,9 @@ $LANG = [ 'powered_by' => 'Unterstützt durch', 'no_items' => 'Keine Objekte', 'recurring_invoices' => 'Wiederkehrende Rechnungen', - 'recurring_help' => '

      Automatically send clients the same invoices weekly, bi-monthly, monthly, quarterly or annually.

      -

      Use :MONTH, :QUARTER or :YEAR for dynamic dates. Basic math works as well, for example :MONTH-1.

      -

      Examples of dynamic invoice variables:

      + 'recurring_help' => 'Automatically send clients the same invoices weekly, bi-monthly, monthly, quarterly or annually. + Use :MONTH, :QUARTER or :YEAR for dynamic dates. Basic math works as well, for example :MONTH-1. + Examples of dynamic invoice variables:
      • "Gym membership for the month of :MONTH" >> "Gym membership for the month of July"
      • ":YEAR+1 yearly subscription" >> "2015 Yearly Subscription"
      • @@ -172,9 +172,9 @@ $LANG = [ 'payment_gateway' => 'Zahlungseingang', 'gateway_id' => 'Zahlungsanbieter', 'email_notifications' => 'E-Mail Benachrichtigungen', - 'email_sent' => 'Benachrichtigen, wenn eine Rechnung versendet wurde', - 'email_viewed' => 'Benachrichtigen, wenn eine Rechnung betrachtet wurde', - 'email_paid' => 'Benachrichtigen, wenn eine Rechnung bezahlt wurde', + 'email_sent' => 'Benachrichtigen, wenn eine Rechnung versendet wurde', + 'email_viewed' => 'Benachrichtigen, wenn eine Rechnung betrachtet wurde', + 'email_paid' => 'Benachrichtigen, wenn eine Rechnung bezahlt wurde', 'site_updates' => 'Webseitenaktualisierungen', 'custom_messages' => 'Benutzerdefinierte Nachrichten', 'default_email_footer' => 'Standard-E-Mail Signatur', @@ -271,7 +271,7 @@ $LANG = [ 'password' => 'Passwort', 'pro_plan_product' => 'Pro Plan', 'pro_plan_success' => 'Danke, dass Sie Invoice Ninja\'s Pro gewählt haben!

         
        - Nächste SchritteEine bezahlbare Rechnung wurde an die Mailadresse, + Nächste SchritteEine bezahlbare Rechnung wurde an die Mailadresse, welche mit Ihrem Account verbunden ist, geschickt. Um alle der umfangreichen Pro Funktionen freizuschalten, folgen Sie bitte den Anweisungen in der Rechnung um ein Jahr die Pro Funktionen zu nutzen. @@ -290,9 +290,9 @@ $LANG = [ 'product' => 'Produkt', 'products' => 'Produkte', 'fill_products' => 'Produkte automatisch ausfüllen', - 'fill_products_help' => 'Beim Auswählen eines Produktes werden automatisch Beschreibung und Kosten ausgefüllt', + 'fill_products_help' => 'Beim Auswählen eines Produktes werden automatisch Beschreibung und Kosten ausgefüllt', 'update_products' => 'Produkte automatisch aktualisieren', - 'update_products_help' => 'Beim Aktualisieren einer Rechnung werden die Produkte automatisch aktualisiert', + 'update_products_help' => 'Beim Aktualisieren einer Rechnung werden die Produkte automatisch aktualisiert', 'create_product' => 'Produkt erstellen', 'edit_product' => 'Produkt bearbeiten', 'archive_product' => 'Produkt archivieren', @@ -498,7 +498,7 @@ $LANG = [ 'send_email' => 'E-Mail senden', 'set_password' => 'Passwort festlegen', 'converted' => 'Umgewandelt', - 'email_approved' => 'Per E-Mail benachrichtigen, wenn ein Angebot angenommen wurde', + 'email_approved' => 'Per E-Mail benachrichtigen, wenn ein Angebot angenommen wurde', 'notification_quote_approved_subject' => 'Angebot :invoice wurde von :client angenommen.', 'notification_quote_approved' => 'Der folgende Kunde :client nahm das Angebot :invoice über :amount an.', 'resend_confirmation' => 'Bestätigungsmail erneut senden', @@ -617,7 +617,7 @@ $LANG = [ 'email_error' => 'Es gab ein Problem beim Senden dieser E-Mail.', 'confirm_recurring_timing' => 'Beachten Sie: E-Mails werden zu jeder vollen Stunde versendet.', 'confirm_recurring_timing_not_sent' => 'Beachten Sie: E-Mails werden zu jeder vollen Stunde versendet.', - 'payment_terms_help' => 'Setzt das Standardfälligkeitsdatum', + 'payment_terms_help' => 'Setzt das Standardfälligkeitsdatum', 'unlink_account' => 'Konten trennen', 'unlink' => 'Trennen', 'show_address' => 'Adresse anzeigen', @@ -660,8 +660,8 @@ $LANG = [ 'created_by_invoice' => 'Erstellt durch :invoice', 'primary_user' => 'Primärer Benutzer', 'help' => 'Hilfe', - 'customize_help' => '

        We use :pdfmake_link to define the invoice designs declaratively. The pdfmake :playground_link provides a great way to see the library in action.

        -

        If you need help figuring something out post a question to our :forum_link with the design you\'re using.

        ', + 'customize_help' => 'We use :pdfmake_link to define the invoice designs declaratively. The pdfmake :playground_link provides a great way to see the library in action. + If you need help figuring something out post a question to our :forum_link with the design you\'re using.', 'playground' => 'Spielplatz', 'support_forum' => 'Support-Forum', 'invoice_due_date' => 'Fälligkeitsdatum', @@ -678,7 +678,7 @@ $LANG = [ 'status_paid' => 'Bezahlt', 'status_unpaid' => 'Unbezahlt', 'status_all' => 'Alle', - 'show_line_item_tax' => 'Steuern für Belegpositionen in der jeweiligen Zeile anzeigen', + 'show_line_item_tax' => 'Steuern für Belegpositionen in der jeweiligen Zeile anzeigen', 'iframe_url' => 'Webseite', 'iframe_url_help1' => 'Kopiere den folgenden Code in eine Seite auf deiner Website.', 'iframe_url_help2' => 'Du kannst diese Funktion testen, in dem du für eine Rechnung \'Als Empfänger betrachten\'. anklickst.', @@ -934,15 +934,15 @@ $LANG = [ 'edit_payment_term' => 'Bearbeite Zahlungsbedingungen', 'archive_payment_term' => 'Archiviere Zahlungsbedingungen', 'recurring_due_dates' => 'Wiederkehrende Rechnungen Fälligkeitsdatum', - 'recurring_due_date_help' => '

        Legt automatisch ein Fälligkeitsdatem für die Rechnung fest.

        -

        Auf einen monatlichen oder jährlichen Wiederkehrungszyklus eingestellte Rechnungen werden erst im nächsten Monat bzw. Jahr fällig, sofern das Fälligkeitsdatum älter oder gleich dem Erstellungsdatum der Rechnung ist. Am 29. oder 30. eines Monats fällige Rechnungen werden stattdessen am letzten vorhandenen Tag eines Monats fällig, wenn er diese Tage nicht beinhaltet.

        -

        Auf einen wöchentlichen Wiederkehrungszyklus eingestellte Rechnungen, werden erst in der nächsten Woche fällig, wenn der Wochentag mit dem Wochentag des Erstellungsdatums übereinstimmt.

        -

        Zum Beispiel:

        + 'recurring_due_date_help' => 'Legt automatisch ein Fälligkeitsdatem für die Rechnung fest. +Auf einen monatlichen oder jährlichen Wiederkehrungszyklus eingestellte Rechnungen werden erst im nächsten Monat bzw. Jahr fällig, sofern das Fälligkeitsdatum älter oder gleich dem Erstellungsdatum der Rechnung ist. Am 29. oder 30. eines Monats fällige Rechnungen werden stattdessen am letzten vorhandenen Tag eines Monats fällig, wenn er diese Tage nicht beinhaltet. +Auf einen wöchentlichen Wiederkehrungszyklus eingestellte Rechnungen, werden erst in der nächsten Woche fällig, wenn der Wochentag mit dem Wochentag des Erstellungsdatums übereinstimmt. +Zum Beispiel:
        • Heute ist der 15. Januar, das Fälligkeitsdatum ist der 1. eines Monats. Das nächste Fälligkeitsdatum entspricht dem 1. des nächsten Monats, also dem 1. Februar.
        • Heute ist der 15. Januar, das Fälligkeitsdatum ist der letzte Tag eines Monats. Das nächste Fälligkeitsdatum entspricht dem letzten Tag des aktuellen Monats, also dem 31. Januar.
        • -
        • Heute ist der 15. Januar, das Fälligkeitsdatum ist der 15. eines Moants. Das nächste Fälligkeitsdatum entspricht dem 15. des nächsten Monats, also dem 15. Februar. +
        • Heute ist der 15. Januar, das Fälligkeitsdatum ist der 15. eines Moants. Das nächste Fälligkeitsdatum entspricht dem 15. des nächsten Monats, also dem 15. Februar.
        • Heute ist Freitag, das Fälligkeitsdatum ist der Freitag einer jeden Woche. Das nächste Fälligkeitsdatum entspricht dem nächsten Freitag, also nicht heute.
        • @@ -1342,7 +1342,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese 'see_whats_new' => 'Neu in v:version', 'wait_for_upload' => 'Bitte warten Sie bis der Dokumentenupload abgeschlossen wurde.', 'upgrade_for_permissions' => 'Führen Sie ein Upgrade auf unseren Enterprise-Plan durch um Zugriffsrechte zu aktivieren.', - 'enable_second_tax_rate' => 'Aktiviere Spezifizierung einer zweiten Steuerrate', + 'enable_second_tax_rate' => 'Aktiviere Spezifizierung einer zweiten Steuerrate', 'payment_file' => 'Zahlungsdatei', 'expense_file' => 'Ausgabenakte', 'product_file' => 'Produktdatei', @@ -1850,10 +1850,10 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese 'security_code_email_subject' => 'Sicherheitscode für Invoice Ninja Bot', 'security_code_email_line1' => 'Dies ist Ihr Invoice Ninja Bot Sicherheitscode.', 'security_code_email_line2' => 'Anmerkung: Er wird in 10 Minuten ablaufen.', - 'bot_help_message' => 'Ich unterstütze derzeit:
          • Erstellung\Aktualisierung\E-Mail-Versand von Rechnungen
          • Auflistung von Produkten
          Zum Beispiel:
          invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent', + 'bot_help_message' => 'Ich unterstütze derzeit:
          • Erstellung\Aktualisierung\E-Mail-Versand von Rechnungen
          • Auflistung von Produkten
          Zum Beispiel:
          invoice bob for 2 tickets, set the due date to next thursday and the discount to 10 percent', 'list_products' => 'Produkte anzeigen', - 'include_item_taxes_inline' => 'Steuern für Belegpositionen in der Summe anzeigen', + 'include_item_taxes_inline' => 'Steuern für Belegpositionen in der Summe anzeigen', 'created_quotes' => 'Erfolgreich :count Angebot(e) erstellt', 'limited_gateways' => 'Anmerkung: Wir unterstützen ein Kreditkarten-Gateway pro Unternehmen.', @@ -1863,7 +1863,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese 'update_invoiceninja_warning' => 'Vor dem Update von Invoice Ninja sollte ein Backup der Datenbank und der Dateien erstellt werden!', 'update_invoiceninja_available' => 'Eine neue Version von Invoice Ninja ist verfügbar.', 'update_invoiceninja_unavailable' => 'Keine neue Version von Invoice Ninja verfügbar.', - 'update_invoiceninja_instructions' => 'Bitte benutze den Update durchführen-Button, um die neue Version :version zu installieren. Du wirst danach zum Dashboard weitergeleitet.', + 'update_invoiceninja_instructions' => 'Bitte benutze den Update durchführen-Button, um die neue Version :version zu installieren. Du wirst danach zum Dashboard weitergeleitet.', 'update_invoiceninja_update_start' => 'Update durchführen', 'update_invoiceninja_download_start' => 'Download :version', 'create_new' => 'Neu...', @@ -1963,7 +1963,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese // BlueVine 'bluevine_promo' => 'Factoring und Bonitätsauskünfte von BlueVine bestellen.', 'bluevine_modal_label' => 'Anmelden mit BlueVine', - 'bluevine_modal_text' => '

          Schnelle Finanzierung ohne Papierkram.

          + 'bluevine_modal_text' => 'Schnelle Finanzierung ohne Papierkram.
          • Flexible Bonitätsprüfung und Factoring.
          ', 'bluevine_create_account' => 'Konto erstellen', 'quote_types' => 'Angebot erhalten für', @@ -2119,8 +2119,8 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese 'recipients' => 'Empfänger', 'save_as_default' => 'Als Standard speichern', 'template' => 'Vorlage', - 'start_of_week_help' => 'Verwendet von Datumsselektoren', - 'financial_year_start_help' => 'Verwendet von Datum-Bereichsselektoren', + 'start_of_week_help' => 'Verwendet von Datumsselektoren', + 'financial_year_start_help' => 'Verwendet von Datum-Bereichsselektoren', 'reports_help' => 'Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.', 'this_year' => 'Dieses Jahr', @@ -2144,7 +2144,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese 'freq_two_months' => 'Zwei Monate', 'freq_yearly' => 'Jährlich', 'profile' => 'Profil', - 'payment_type_help' => 'Setze die Standard manuelle Zahlungsmethode.', + 'payment_type_help' => 'Setze die Standard manuelle Zahlungsmethode.', 'industry_Construction' => 'Bauwesen', 'your_statement' => 'Deine Abrechnung', 'statement_issued_to' => 'Abrechnung ausgestellt für', @@ -2236,8 +2236,8 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese 'payment_type_Venmo' => 'Venmo', 'payment_type_Money Order' => 'Zahlunganweisung', 'archived_products' => 'Archivierung erfolgreich :Produktzähler', - 'recommend_on' => 'Wir empfehlen diese Einstellung zu aktivieren.', - 'recommend_off' => 'Wir empfehlen diese Einstellung zu deaktivieren.', + 'recommend_on' => 'Wir empfehlen diese Einstellung zu aktivieren.', + 'recommend_off' => 'Wir empfehlen diese Einstellung zu deaktivieren.', 'notes_auto_billed' => 'Automatisch verrechnet', 'surcharge_label' => 'Aufschlagsfeldbezeichnung', 'contact_fields' => 'Kontaktfelder', @@ -2325,7 +2325,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese 'app_version' => 'App-Version', 'ofx_version' => 'OFX-Version', 'gateway_help_23' => ':link um Ihre Stripe API-Keys zu erhalten.', - 'error_app_key_set_to_default' => 'Fehler: APP_KEY ist auf einen Standardwert gesetzt. Um ihn zu aktualisieren, sichere deine Datenbank und führe dann php artisan ninja:update-key aus', + 'error_app_key_set_to_default' => 'Fehler: APP_KEY ist auf einen Standardwert gesetzt. Um ihn zu aktualisieren, sichere deine Datenbank und führe dann php artisan ninja:update-key aus', 'charge_late_fee' => 'Verspätungszuschlag berechnen', 'late_fee_amount' => 'Höhe des Verspätungszuschlags', 'late_fee_percent' => 'Verspätungszuschlag Prozent', @@ -2584,7 +2584,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese 'subdomain_is_set' => 'subdomain is set', 'verification_file' => 'Verifizierungsdatei', 'verification_file_missing' => 'The verification file is needed to accept payments.', - 'apple_pay_domain' => 'Use :domain as the domain in :link.', + 'apple_pay_domain' => 'Use :domain as the domain in :link.', 'apple_pay_not_supported' => 'Sorry, Apple/Google Pay isn\'t supported by your browser', 'optional_payment_methods' => 'Optionale Zahlungsmethoden', 'add_subscription' => 'Abonnement hinzufügen', @@ -2635,7 +2635,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese 'processing_request' => 'Anfrage verarbeiten', 'mcrypt_warning' => 'Warning: Mcrypt is deprecated, run :command to update your cipher.', 'edit_times' => 'Zeiten bearbeiten', - 'inclusive_taxes_help' => 'Include taxes in the cost', + 'inclusive_taxes_help' => 'Include taxes in the cost', 'inclusive_taxes_notice' => 'This setting can not be changed once an invoice has been created.', 'inclusive_taxes_warning' => 'Warning: existing invoices will need to be resaved', 'copy_shipping' => 'Copy Shipping', @@ -2667,7 +2667,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese 'return_to_login' => 'Zurück zum Login', 'convert_products_tip' => 'Note: add a :link named ":name" to see the exchange rate.', 'amount_greater_than_balance' => 'The amount is greater than the invoice balance, a credit will be created with the remaining amount.', - 'custom_fields_tip' => 'Use Label|Option1,Option2 to show a select box.', + 'custom_fields_tip' => 'Use Label|Option1,Option2 to show a select box.', 'client_information' => 'Client Information', 'updated_client_details' => 'Successfully updated client details', 'auto' => 'Auto',