1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-09-20 00:11:35 +02:00

Merge pull request #8914 from turbo124/v5-develop

v5.7.35
This commit is contained in:
David Bomba 2023-10-28 21:09:36 +11:00 committed by GitHub
commit a73e5b5d8f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
27 changed files with 616 additions and 283 deletions

View File

@ -1 +1 @@
5.7.34
5.7.35

View File

@ -63,10 +63,12 @@ class MobileLocalization extends Command
{
$resources = $this->getResources();
foreach ($resources as $key => $val) {
$transKey = "texts.{$key}";
if (trans($transKey) == $transKey) {
echo "'$key' => '$val',\n";
if(is_iterable($resources)){
foreach ($resources as $key => $val) {
$transKey = "texts.{$key}";
if (trans($transKey) == $transKey) {
echo "'$key' => '$val',\n";
}
}
}
}

View File

@ -399,8 +399,8 @@ class InvoiceItemSum
$item_tax = 0;
//$amount = $this->item->line_total - ($this->item->line_total * ($this->invoice->discount / $this->sub_total));
$amount = ($this->sub_total > 0) ? $this->item->line_total - ($this->invoice->discount * ($this->item->line_total / $this->sub_total)) : 0;
$amount = $this->item->line_total - ($this->item->line_total * ($this->invoice->discount / $this->sub_total));
//$amount = ($this->sub_total > 0) ? $this->item->line_total - ($this->invoice->discount * ($this->item->line_total / $this->sub_total)) : 0;
$item_tax_rate1_total = $this->calcAmountLineTax($this->item->tax_rate1, $amount);

View File

@ -353,7 +353,7 @@ class InvoiceItemSumInclusive
if ($this->sub_total == 0) {
$amount = $this->item->line_total;
} else {
$amount = ($this->sub_total > 0) ? $this->item->line_total - ($this->invoice->discount * ($this->item->line_total / $this->sub_total)) : 0;
$amount = $this->item->line_total - ($this->invoice->discount * ($this->item->line_total / $this->sub_total));
// $amount = $this->item->line_total - ($this->item->line_total * ($this->invoice->discount / $this->sub_total));
}

View File

@ -51,6 +51,8 @@ class YodleeController extends BaseController
$this->getAccounts($company, $token);
}
$redirect_url = isset($request->getTokenContent()['is_react']) && $request->getTokenContent()['is_react'] ? 'https://app.invoicing.co/#/' : 'https://invoicing.co/';
$data = [
'access_token' => $yodlee->getAccessToken(),
'fasttrack_url' => $yodlee->getFastTrackUrl(),
@ -59,6 +61,7 @@ class YodleeController extends BaseController
'company' => $company,
'account' => $company->account,
'completed' => $request->has('window_closed') ? true : false,
'redirect_url' => $redirect_url,
];
return view('bank.yodlee.auth', $data);

View File

@ -11,11 +11,12 @@
namespace App\Http\Controllers\Reports;
use App\Utils\Traits\MakesHash;
use App\Jobs\Report\SendToAdmin;
use App\Jobs\Report\PreviewReport;
use App\Services\Report\ARDetailReport;
use App\Http\Controllers\BaseController;
use App\Http\Requests\Report\GenericReportRequest;
use App\Jobs\Report\SendToAdmin;
use App\Services\Report\ARDetailReport;
use App\Utils\Traits\MakesHash;
class ARDetailReportController extends BaseController
{
@ -61,24 +62,21 @@ class ARDetailReportController extends BaseController
*/
public function __invoke(GenericReportRequest $request)
{
/** @var \App\Models\User $user */
$user = auth()->user();
if ($request->has('send_email') && $request->get('send_email')) {
SendToAdmin::dispatch(auth()->user()->company(), $request->all(), ARDetailReport::class, $this->filename);
SendToAdmin::dispatch($user->company(), $request->all(), ARDetailReport::class, $this->filename);
return response()->json(['message' => 'working...'], 200);
}
// expect a list of visible fields, or use the default
$export = new ARDetailReport(auth()->user()->company(), $request->all());
$hash = \Illuminate\Support\Str::uuid();
$csv = $export->run();
PreviewReport::dispatch($user->company(), $request->all(), ARDetailReport::class, $hash);
$headers = [
'Content-Disposition' => 'attachment',
'Content-Type' => 'text/csv',
];
return response()->json(['message' => $hash], 200);
return response()->streamDownload(function () use ($csv) {
echo $csv;
}, $this->filename, $headers);
}
}

View File

@ -11,11 +11,12 @@
namespace App\Http\Controllers\Reports;
use App\Http\Controllers\BaseController;
use App\Http\Requests\Report\GenericReportRequest;
use App\Jobs\Report\SendToAdmin;
use App\Services\Report\ARSummaryReport;
use App\Utils\Traits\MakesHash;
use App\Jobs\Report\SendToAdmin;
use App\Jobs\Report\PreviewReport;
use App\Http\Controllers\BaseController;
use App\Services\Report\ARSummaryReport;
use App\Http\Requests\Report\GenericReportRequest;
class ARSummaryReportController extends BaseController
{
@ -71,17 +72,11 @@ class ARSummaryReportController extends BaseController
}
// expect a list of visible fields, or use the default
$export = new ARSummaryReport($user->company(), $request->all());
$hash = \Illuminate\Support\Str::uuid();
$csv = $export->run();
PreviewReport::dispatch($user->company(), $request->all(), ARSummaryReport::class, $hash);
$headers = [
'Content-Disposition' => 'attachment',
'Content-Type' => 'text/csv',
];
return response()->json(['message' => $hash], 200);
return response()->streamDownload(function () use ($csv) {
echo $csv;
}, $this->filename, $headers);
}
}

View File

@ -11,11 +11,12 @@
namespace App\Http\Controllers\Reports;
use App\Http\Controllers\BaseController;
use App\Http\Requests\Report\GenericReportRequest;
use App\Jobs\Report\SendToAdmin;
use App\Services\Report\ClientBalanceReport;
use App\Utils\Traits\MakesHash;
use App\Jobs\Report\SendToAdmin;
use App\Jobs\Report\PreviewReport;
use App\Http\Controllers\BaseController;
use App\Services\Report\ClientBalanceReport;
use App\Http\Requests\Report\GenericReportRequest;
class ClientBalanceReportController extends BaseController
{
@ -61,24 +62,20 @@ class ClientBalanceReportController extends BaseController
*/
public function __invoke(GenericReportRequest $request)
{
/** @var \App\Models\User $user */
$user = auth()->user();
if ($request->has('send_email') && $request->get('send_email')) {
SendToAdmin::dispatch(auth()->user()->company(), $request->all(), ClientBalanceReport::class, $this->filename);
SendToAdmin::dispatch($user->company(), $request->all(), ClientBalanceReport::class, $this->filename);
return response()->json(['message' => 'working...'], 200);
}
// expect a list of visible fields, or use the default
$export = new ClientBalanceReport(auth()->user()->company(), $request->all());
$hash = \Illuminate\Support\Str::uuid();
$csv = $export->run();
PreviewReport::dispatch($user->company(), $request->all(), ClientBalanceReport::class, $hash);
$headers = [
'Content-Disposition' => 'attachment',
'Content-Type' => 'text/csv',
];
return response()->json(['message' => $hash], 200);
return response()->streamDownload(function () use ($csv) {
echo $csv;
}, $this->filename, $headers);
}
}

View File

@ -11,11 +11,12 @@
namespace App\Http\Controllers\Reports;
use App\Http\Controllers\BaseController;
use App\Http\Requests\Report\GenericReportRequest;
use App\Jobs\Report\SendToAdmin;
use App\Services\Report\ClientSalesReport;
use App\Utils\Traits\MakesHash;
use App\Jobs\Report\SendToAdmin;
use App\Jobs\Report\PreviewReport;
use App\Http\Controllers\BaseController;
use App\Services\Report\ClientSalesReport;
use App\Http\Requests\Report\GenericReportRequest;
class ClientSalesReportController extends BaseController
{
@ -61,24 +62,20 @@ class ClientSalesReportController extends BaseController
*/
public function __invoke(GenericReportRequest $request)
{
/** @var \App\Models\User $user */
$user = auth()->user();
if ($request->has('send_email') && $request->get('send_email')) {
SendToAdmin::dispatch(auth()->user()->company(), $request->all(), ClientSalesReport::class, $this->filename);
SendToAdmin::dispatch($user->company(), $request->all(), ClientSalesReport::class, $this->filename);
return response()->json(['message' => 'working...'], 200);
}
// expect a list of visible fields, or use the default
$export = new ClientSalesReport(auth()->user()->company(), $request->all());
$hash = \Illuminate\Support\Str::uuid();
$csv = $export->run();
PreviewReport::dispatch($user->company(), $request->all(), ClientSalesReport::class, $hash);
$headers = [
'Content-Disposition' => 'attachment',
'Content-Type' => 'text/csv',
];
return response()->json(['message' => $hash], 200);
return response()->streamDownload(function () use ($csv) {
echo $csv;
}, $this->filename, $headers);
}
}

View File

@ -11,13 +11,14 @@
namespace App\Http\Controllers\Reports;
use App\Models\Client;
use Illuminate\Http\Response;
use App\Utils\Traits\MakesHash;
use App\Jobs\Report\SendToAdmin;
use App\Jobs\Report\PreviewReport;
use App\Export\CSV\ProductSalesExport;
use App\Http\Controllers\BaseController;
use App\Http\Requests\Report\ProductSalesReportRequest;
use App\Jobs\Report\SendToAdmin;
use App\Models\Client;
use App\Utils\Traits\MakesHash;
use Illuminate\Http\Response;
class ProductSalesReportController extends BaseController
{
@ -63,24 +64,20 @@ class ProductSalesReportController extends BaseController
*/
public function __invoke(ProductSalesReportRequest $request)
{
/** @var \App\Models\User $user */
$user = auth()->user();
if ($request->has('send_email') && $request->get('send_email')) {
SendToAdmin::dispatch(auth()->user()->company(), $request->all(), ProductSalesExport::class, $this->filename);
SendToAdmin::dispatch($user->company(), $request->all(), ProductSalesExport::class, $this->filename);
return response()->json(['message' => 'working...'], 200);
}
// expect a list of visible fields, or use the default
$export = new ProductSalesExport(auth()->user()->company(), $request->all());
$hash = \Illuminate\Support\Str::uuid();
$csv = $export->run();
PreviewReport::dispatch($user->company(), $request->all(), ProductSalesExport::class, $hash);
$headers = [
'Content-Disposition' => 'attachment',
'Content-Type' => 'text/csv',
];
return response()->json(['message' => $hash], 200);
return response()->streamDownload(function () use ($csv) {
echo $csv;
}, $this->filename, $headers);
}
}

View File

@ -11,13 +11,14 @@
namespace App\Http\Controllers\Reports;
use App\Models\Client;
use Illuminate\Http\Response;
use App\Utils\Traits\MakesHash;
use App\Jobs\Report\SendToAdmin;
use App\Jobs\Report\PreviewReport;
use App\Services\Report\ProfitLoss;
use App\Http\Controllers\BaseController;
use App\Http\Requests\Report\ProfitLossRequest;
use App\Jobs\Report\SendToAdmin;
use App\Models\Client;
use App\Services\Report\ProfitLoss;
use App\Utils\Traits\MakesHash;
use Illuminate\Http\Response;
class ProfitAndLossController extends BaseController
{
@ -71,18 +72,13 @@ class ProfitAndLossController extends BaseController
return response()->json(['message' => 'working...'], 200);
}
// expect a list of visible fields, or use the default
$pnl = new ProfitLoss($user->company(), $request->all());
$csv = $pnl->run();
$hash = \Illuminate\Support\Str::uuid();
PreviewReport::dispatch($user->company(), $request->all(), ProfitLoss::class, $hash);
return response()->json(['message' => $hash], 200);
$headers = [
'Content-Disposition' => 'attachment',
'Content-Type' => 'text/csv',
];
return response()->streamDownload(function () use ($csv) {
echo $csv;
}, $this->filename, $headers);
}
}

View File

@ -11,11 +11,12 @@
namespace App\Http\Controllers\Reports;
use App\Http\Controllers\BaseController;
use App\Http\Requests\Report\GenericReportRequest;
use App\Jobs\Report\SendToAdmin;
use App\Services\Report\TaxSummaryReport;
use App\Utils\Traits\MakesHash;
use App\Jobs\Report\SendToAdmin;
use App\Jobs\Report\PreviewReport;
use App\Http\Controllers\BaseController;
use App\Services\Report\TaxSummaryReport;
use App\Http\Requests\Report\GenericReportRequest;
class TaxSummaryReportController extends BaseController
{
@ -61,24 +62,21 @@ class TaxSummaryReportController extends BaseController
*/
public function __invoke(GenericReportRequest $request)
{
/** @var \App\Models\User $user */
$user = auth()->user();
if ($request->has('send_email') && $request->get('send_email')) {
SendToAdmin::dispatch(auth()->user()->company(), $request->all(), TaxSummaryReport::class, $this->filename);
SendToAdmin::dispatch($user->company(), $request->all(), TaxSummaryReport::class, $this->filename);
return response()->json(['message' => 'working...'], 200);
}
// expect a list of visible fields, or use the default
$export = new TaxSummaryReport(auth()->user()->company(), $request->all());
$hash = \Illuminate\Support\Str::uuid();
$csv = $export->run();
PreviewReport::dispatch($user->company(), $request->all(), TaxSummaryReport::class, $hash);
$headers = [
'Content-Disposition' => 'attachment',
'Content-Type' => 'text/csv',
];
return response()->json(['message' => $hash], 200);
return response()->streamDownload(function () use ($csv) {
echo $csv;
}, $this->filename, $headers);
}
}

View File

@ -11,11 +11,12 @@
namespace App\Http\Controllers\Reports;
use App\Http\Controllers\BaseController;
use App\Http\Requests\Report\GenericReportRequest;
use App\Jobs\Report\SendToAdmin;
use App\Services\Report\UserSalesReport;
use App\Utils\Traits\MakesHash;
use App\Jobs\Report\SendToAdmin;
use App\Jobs\Report\PreviewReport;
use App\Http\Controllers\BaseController;
use App\Services\Report\UserSalesReport;
use App\Http\Requests\Report\GenericReportRequest;
class UserSalesReportController extends BaseController
{
@ -61,24 +62,20 @@ class UserSalesReportController extends BaseController
*/
public function __invoke(GenericReportRequest $request)
{
/** @var \App\Models\User $user */
$user = auth()->user();
if ($request->has('send_email') && $request->get('send_email')) {
SendToAdmin::dispatch(auth()->user()->company(), $request->all(), UserSalesReport::class, $this->filename);
SendToAdmin::dispatch($user->company(), $request->all(), UserSalesReport::class, $this->filename);
return response()->json(['message' => 'working...'], 200);
}
// expect a list of visible fields, or use the default
$export = new UserSalesReport(auth()->user()->company(), $request->all());
$hash = \Illuminate\Support\Str::uuid();
$csv = $export->run();
PreviewReport::dispatch($user->company(), $request->all(), UserSalesReport::class, $hash);
$headers = [
'Content-Disposition' => 'attachment',
'Content-Type' => 'text/csv',
];
return response()->json(['message' => $hash], 200);
return response()->streamDownload(function () use ($csv) {
echo $csv;
}, $this->filename, $headers);
}
}

View File

@ -27,8 +27,8 @@ class Locale
public function handle($request, Closure $next)
{
/*LOCALE SET */
if ($request->has('lang')) {
$locale = $request->input('lang');
if ($request->has('lang') && is_string($request->input('lang'))) {
$locale = $request->string('lang','en');
App::setLocale($locale);
} elseif (auth()->guard('contact')->user()) {
App::setLocale(auth()->guard('contact')->user()->client()->setEagerLoads([])->first()->locale());

View File

@ -32,7 +32,7 @@ class SetEmailDb
'errors' => new stdClass,
];
if ($request->input('email') && config('ninja.db.multi_db_enabled')) {
if ($request->input('email') && is_string($request->input('email')) && config('ninja.db.multi_db_enabled')) {
if (! MultiDB::userFindAndSetDb($request->input('email'))) {
return response()->json($error, 400);
}

View File

@ -32,7 +32,7 @@ class VendorLocale
}
/*LOCALE SET */
if ($request->has('lang')) {
if ($request->has('lang') && is_string($request->input('lang'))) {
$locale = $request->input('lang');
App::setLocale($locale);
} elseif (auth()->guard('vendor')->user()) {

View File

@ -108,7 +108,8 @@ class DirectDebit implements MethodInterface
$response = $this->go_cardless->gateway->billingRequests()->create([
"params" => [
"mandate_request" => [
"currency" => auth()->guard('contact')->user()->client->currency()->code
"currency" => auth()->guard('contact')->user()->client->currency()->code,
"verify" => "recommended"
]
]
]);

View File

@ -144,11 +144,18 @@ class GoCardlessPaymentDriver extends BaseDriver
$this->init();
if ($payment_hash->fee_invoice) {
$description = "Invoice {$payment_hash->fee_invoice->number} for {$amount} for client {$this->client->present()->name()}";
} else {
$description = "Amount {$amount} from client {$this->client->present()->name()}";
}
try {
$payment = $this->gateway->payments()->create([
'params' => [
'amount' => $converted_amount,
'currency' => $this->client->getCurrencyCode(),
'description' => $description,
'metadata' => [
'payment_hash' => $this->payment_hash->hash,
],

View File

@ -652,7 +652,7 @@ class PdfBuilder
/**
* Formats the line items for display.
*
* @param array<\App\DataMapper\InvoiceItem> $items
* @param array $items
* @param string $table_type
*
* @return array
@ -662,10 +662,10 @@ class PdfBuilder
$data = [];
$locale_info = localeconv();
// $this->service->config->entity_currency = $this->service->config->currency;
foreach ($items as $key => $item) {
/** @var \App\DataMapper\InvoiceItem $item */
if ($table_type == '$product' && $item->type_id != 1) {
if ($item->type_id != 4 && $item->type_id != 6 && $item->type_id != 5) {
continue;
@ -980,7 +980,7 @@ class PdfBuilder
return [
['element' => 'div', 'properties' => ['style' => 'display: flex; flex-direction: column;'], 'elements' => [
['element' => 'div', 'properties' => ['style' => 'margin-top: 1.5rem; display: block; align-items: flex-start; page-break-inside: avoid; visible !important;'], 'elements' => [
['element' => 'img', 'properties' => ['src' => '$invoiceninja.whitelabel', 'style' => 'height: 2.5rem;', 'hidden' => 'false', 'id' => 'invoiceninja-whitelabel-logo']],
['element' => 'img', 'properties' => ['src' => '$invoiceninja.whitelabel', 'style' => 'height: 2.5rem;', 'hidden' => $this->service->company->account->isPaid() ? 'true' : 'false', 'id' => 'invoiceninja-whitelabel-logo']],
]],
]],
];
@ -1052,7 +1052,7 @@ class PdfBuilder
]],
['element' => 'img', 'properties' => ['style' => 'max-width: 50%; height: auto;', 'src' => '$contact.signature', 'id' => 'contact-signature']],
['element' => 'div', 'properties' => ['style' => 'margin-top: 1.5rem; display: flex; align-items: flex-start; page-break-inside: auto;'], 'elements' => [
['element' => 'img', 'properties' => ['src' => '$invoiceninja.whitelabel', 'style' => 'height: 2.5rem;', 'hidden' => 'false', 'id' => 'invoiceninja-whitelabel-logo']],
['element' => 'img', 'properties' => ['src' => '$invoiceninja.whitelabel', 'style' => 'height: 2.5rem;', 'hidden' => $this->service->company->account->isPaid() ? 'true' : 'false', 'id' => 'invoiceninja-whitelabel-logo']],
]],
]],
['element' => 'div', 'properties' => ['class' => 'totals-table-right-side', 'dir' => '$dir'], 'elements' => []],

View File

@ -113,12 +113,15 @@ class TaxSummaryReport extends BaseExport
if(in_array($invoice->status_id, [Invoice::STATUS_PARTIAL,Invoice::STATUS_PAID])) {
if($invoice->status_id == Invoice::STATUS_PAID) {
$cash_map[$key]['tax_amount'] += $tax['total'];
} else {
$cash_map[$key]['tax_amount'] += (($invoice->amount - $invoice->balance) / $invoice->balance) * $tax['total'] ?? 0;
try {
if($invoice->status_id == Invoice::STATUS_PAID) {
$cash_map[$key]['tax_amount'] += $tax['total'];
} else {
$cash_map[$key]['tax_amount'] += (($invoice->amount - $invoice->balance) / $invoice->balance) * $tax['total'] ?? 0;
}
} catch(\DivisionByZeroError $e) {
$cash_map[$key]['tax_amount'] += 0;
}
}
}

View File

@ -15,8 +15,8 @@ return [
'require_https' => env('REQUIRE_HTTPS', true),
'app_url' => rtrim(env('APP_URL', ''), '/'),
'app_domain' => env('APP_DOMAIN', 'invoicing.co'),
'app_version' => env('APP_VERSION','5.7.34'),
'app_tag' => env('APP_TAG','5.7.34'),
'app_version' => env('APP_VERSION','5.7.35'),
'app_tag' => env('APP_TAG','5.7.35'),
'minimum_client_version' => '5.0.16',
'terms_version' => '1.0.1',
'api_secret' => env('API_SECRET', ''),

View File

@ -203,7 +203,7 @@ $LANG = array(
'limit_clients' => 'Entschuldigung aber das wird das Limit von :count Kunden überschreiten. Bitte führen Sie ein kostenpflichtiges Upgrade durch.',
'payment_error' => 'Es ist ein Fehler während der Zahlung aufgetreten. Bitte versuche es später noch einmal.',
'registration_required' => 'Registrierung erforderlich',
'confirmation_required' => 'Bitte verifiziere deine E-Mail Adresse, :link um die E-Mail Bestätigung erneut zu senden.',
'confirmation_required' => 'Bitte verifiziern Sie Ihre E-Mail-Adresse, :link um die E-Mail-Bestätigung erneut zu senden.',
'updated_client' => 'Kunde erfolgreich aktualisiert',
'archived_client' => 'Kunde erfolgreich archiviert',
'archived_clients' => ':count Kunden erfolgreich archiviert',
@ -239,7 +239,7 @@ $LANG = array(
'deleted_vendors' => ':count Lieferanten erfolgreich gelöscht',
'confirmation_subject' => 'Kontobestätigung',
'confirmation_header' => 'Kontobestätigung',
'confirmation_message' => 'Bitte klicke auf den folgenden Link um dein Konto zu bestätigen.',
'confirmation_message' => 'Bitte klicken Sie auf den folgenden Link, um Ihr Konto zu bestätigen.',
'invoice_subject' => 'Neue Rechnung :number von :account',
'invoice_message' => 'Um Ihre Rechnung über :amount einzusehen, klicken Sie bitte auf den folgenden Link:',
'payment_subject' => 'Zahlungseingang',
@ -247,7 +247,7 @@ $LANG = array(
'email_salutation' => 'Sehr geehrte/r :name,',
'email_signature' => 'Mit freundlichen Grüßen',
'email_from' => 'Das InvoiceNinja Team',
'invoice_link_message' => 'Um deine Kundenrechnung anzuschauen, klicke auf den folgenden Link:',
'invoice_link_message' => 'Um die Rechnung anzuschauen, bitte auf den folgenden Link klicken:',
'notification_invoice_paid_subject' => 'Die Rechnung :invoice wurde von :client bezahlt.',
'notification_invoice_sent_subject' => 'Rechnung :invoice wurde an :client versendet.',
'notification_invoice_viewed_subject' => 'Die Rechnung :invoice wurde von :client angeschaut.',
@ -256,20 +256,20 @@ $LANG = array(
'notification_invoice_viewed' => 'Der Kunde :client hat sich die Rechnung :invoice über :amount angesehen.',
'stripe_payment_text' => 'Rechnung :invoicenumber in Höhe von :amount für Kunde :client',
'stripe_payment_text_without_invoice' => 'Zahlung ohne Rechnung in Höhe von :amount für Kunde :client',
'reset_password' => 'Du kannst dein Passwort zurücksetzen, indem du auf den folgenden Link klickst:',
'reset_password' => 'Sie können Ihr Passwort zurücksetzen, indem Sie auf den folgenden Link klicken:',
'secure_payment' => 'Sichere Zahlung',
'card_number' => 'Kartennummer',
'expiration_month' => 'Ablaufmonat',
'expiration_year' => 'Ablaufjahr',
'cvv' => 'Kartenprüfziffer',
'logout' => 'Abmelden',
'sign_up_to_save' => 'Melde dich an, um deine Arbeit zu speichern',
'sign_up_to_save' => 'Melden Sie sich an, um Ihre Arbeit zu speichern',
'agree_to_terms' => 'Ich stimme den :terms zu',
'terms_of_service' => 'Service-Bedingungen',
'email_taken' => 'Diese E-Mail-Adresse ist bereits registriert',
'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.',
'success_message' => 'Sie haben sich erfolgreich registriert. Bitte rufen Sie den Link in der Bestätigungs-Mail auf, um Ihre E-Mail-Adresse zu verifizieren.',
'erase_data' => 'Ihr Konto ist nicht registriert, diese Aktion wird Ihre Daten unwiderruflich löschen.',
'password' => 'Passwort',
'pro_plan_product' => 'Pro Plan',
@ -343,12 +343,12 @@ $LANG = array(
'converted_to_invoice' => 'Angebot erfolgreich in Rechnung umgewandelt',
'quote_subject' => 'Neues Angebot :number von :account',
'quote_message' => 'Klicken Sie auf den folgenden Link um das Angebot über :amount anzuschauen.',
'quote_link_message' => 'Klicke auf den folgenden Link um das Angebot deines Kunden anzuschauen:',
'quote_link_message' => 'Um das Angebot anzuschauen, bitte auf den folgenden Link klicken:',
'notification_quote_sent_subject' => 'Angebot :invoice wurde an :client versendet',
'notification_quote_viewed_subject' => 'Angebot :invoice wurde von :client angeschaut',
'notification_quote_sent' => 'Der folgende Kunde :client erhielt das Angebot :invoice über :amount.',
'notification_quote_viewed' => 'Der folgende Kunde :client hat sich das Angebot :client über :amount angesehen.',
'session_expired' => 'Deine Sitzung ist abgelaufen.',
'session_expired' => 'Ihre Sitzung ist abgelaufen.',
'invoice_fields' => 'Rechnungsfelder',
'invoice_options' => 'Rechnungsoptionen',
'hide_paid_to_date' => '"Bereits gezahlt" ausblenden',
@ -372,7 +372,7 @@ $LANG = array(
'confirm_recurring_email_invoice' => 'Wiederkehrende Rechnung ist aktiv. Bis du sicher, dass du diese Rechnung weiterhin als E-Mail verschicken möchtest?',
'confirm_recurring_email_invoice_not_sent' => 'Sind Sie sicher, dass Sie diese wiederkehrende Rechnung aktivieren wollen?',
'cancel_account' => 'Konto kündigen',
'cancel_account_message' => 'Warnung: Diese Aktion wird dein Konto unwiderruflich löschen.',
'cancel_account_message' => 'Warnung: Diese Aktion wird Ihr Konto unwiderruflich löschen.',
'go_back' => 'Zurück',
'data_visualizations' => 'Datenvisualisierungen',
'sample_data' => 'Beispieldaten werden angezeigt',
@ -591,7 +591,7 @@ $LANG = array(
'pro_plan_call_to_action' => 'Jetzt Upgraden!',
'pro_plan_feature1' => 'Unlimitierte Anzahl Kunden erstellen',
'pro_plan_feature2' => 'Zugriff auf 10 schöne Rechnungsdesigns',
'pro_plan_feature3' => 'Benutzerdefinierte URLs - "DeineFirma.InvoiceNinja.com"',
'pro_plan_feature3' => 'Benutzerdefinierte URLs - "IhreFirma.InvoiceNinja.com"',
'pro_plan_feature4' => '"Erstellt durch Invoice Ninja" entfernen',
'pro_plan_feature5' => 'Multi-Benutzer Zugriff & Aktivitätstracking',
'pro_plan_feature6' => 'Angebote & pro-forma Rechnungen erstellen',
@ -601,7 +601,7 @@ $LANG = array(
'break_duration' => 'Pause',
'edit_details' => 'Details bearbeiten',
'work' => 'Arbeiten',
'timezone_unset' => 'Bitte :link um deine Zeitzone zu setzen',
'timezone_unset' => 'Bitte :link um Ihre Zeitzone zu setzen',
'click_here' => 'hier klicken',
'email_receipt' => 'Zahlungsbestätigung an Kunden per E-Mail senden',
'created_payment_emailed_client' => 'Zahlung erfolgreich erstellt und Kunde per E-Mail benachrichtigt',
@ -659,7 +659,7 @@ $LANG = array(
'primary_user' => 'Primärer Benutzer',
'help' => 'Hilfe',
'playground' => 'Spielplatz',
'support_forum' => 'Support Forums',
'support_forum' => 'Support-Foren',
'invoice_due_date' => 'Fälligkeitsdatum',
'quote_due_date' => 'Gültig bis',
'valid_until' => 'Gültig bis',
@ -676,7 +676,7 @@ $LANG = array(
'status_all' => 'Alle',
'show_line_item_tax' => '<b>Steuern für Belegpositionen</b> in der jeweiligen Zeile anzeigen',
'iframe_url' => 'Webseite',
'iframe_url_help1' => 'Kopiere den folgenden Code in eine Seite auf deiner Website.',
'iframe_url_help1' => 'Kopieren Sie den folgenden Code auf eine Seite Ihrer Website.',
'iframe_url_help2' => 'Du kannst diese Funktion testen, in dem du für eine Rechnung \'Als Empfänger betrachten\'. anklickst.',
'auto_bill' => 'Automatische Verrechnung',
'military_time' => '24-Stunden-Zeit',
@ -753,7 +753,7 @@ $LANG = array(
'activity_7' => ':contact schaute Rechnung :invoice für :client an',
'activity_8' => ':user archivierte Rechnung :invoice',
'activity_9' => ':user löschte Rechnung :invoice',
'activity_10' => ':user entered payment :payment for :payment_amount on invoice :invoice for :client',
'activity_10' => ':user hat die Zahlung :payment für :payment _amount der Rechnung :invoice für Kunde :client eingegeben',
'activity_11' => ':user aktualisierte Zahlung :payment',
'activity_12' => ':user archivierte Zahlung :payment',
'activity_13' => ':user löschte Zahlung :payment',
@ -866,13 +866,13 @@ $LANG = array(
'template_help_title' => 'Vorlagen Hilfe',
'template_help_1' => 'Verfügbare Variablen:',
'email_design_id' => 'E-Mail-Stil',
'email_design_help' => 'Lass deine E-Mails durch die Verwendung von HTML Layouts professioneller aussehen.',
'email_design_help' => 'Lassen Sie Ihre E-Mails durch die Verwendung von HTML-Layouts professioneller aussehen.',
'plain' => 'Einfach',
'light' => 'Hell',
'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' => 'Zeige die Rechnung als iFrame auf deiner eigenen Webseite an',
'website_help' => 'Zeigt die Rechnung als Iframe auf Ihrer eigenen Webseite an',
'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 Kundenfeld hinzu. Optional kann die Feldbezeichnung und der Feldwert auch in PDF-Dokumenten ausgegeben werden.',
@ -881,7 +881,7 @@ $LANG = array(
'custom_invoice_charges_helps' => 'Füge ein Rechnungsgebührenfeld hinzu. Erfasse die Kosten, wenn eine neue Rechnung erstellt wird und addiere sie in den Zwischensummen der Rechnung.',
'token_expired' => 'Validierungstoken ist abgelaufen. Bitte probieren Sie es erneut.',
'invoice_link' => 'Link zur Rechnung',
'button_confirmation_message' => 'Bestätige deine E-Mail-Adresse.',
'button_confirmation_message' => 'Bestätigen Sie Ihre E-Mail-Adresse.',
'confirm' => 'Bestätigen',
'email_preferences' => 'E-Mail-Einstellungen',
'created_invoices' => ':count Rechnung(en) erfolgreich erstellt',
@ -1013,9 +1013,9 @@ $LANG = array(
'enable_https' => 'Wir empfehlen dringend HTTPS zu verwenden, um Kreditkarten online zu akzeptieren.',
'quote_issued_to' => 'Angebot ausgefertigt an',
'show_currency_code' => 'Währungscode',
'free_year_message' => 'Dein Account wurde für ein Jahr kostenlos auf den PRO-Tarif hochgestuft.',
'free_year_message' => 'Ihr Account wurde für ein Jahr kostenlos auf den Pro-Tarif hochgestuft.',
'trial_message' => 'Ihr Account erhält zwei Wochen Probemitgliedschaft für unseren Pro-Plan.',
'trial_footer' => 'Die Testversion deines Pro-Tarifs endet in :count Tagen. :link jetzt hochstufen.',
'trial_footer' => 'Die Testversion Ihres Pro-Tarifs endet in :count Tagen. :link jetzt upgraden.',
'trial_footer_last_day' => 'Heute ist der letzte Tag Ihrer kostenlosen Probezeit, :link um das Upgrade jetzt durchzuführen.',
'trial_call_to_action' => 'Kostenlose Probezeit starten',
'trial_success' => 'Erfolgreich eine 2-Wochen Testversion aktiviert',
@ -1023,7 +1023,7 @@ $LANG = array(
'white_label_text' => 'Kaufen Sie eine Ein-Jahres-"White Label"-Lizenz für $:price um das Invoice Ninja Branding von den Rechnungen und dem Kundenportal zu entfernen.',
'user_email_footer' => 'Um deine E-Mail-Benachrichtigungen anzupassen besuche bitte :link',
'user_email_footer' => 'Um Ihre E-Mail-Benachrichtigungen anzupassen, klicken Sie bitte auf :link',
'reset_password_footer' => 'Wenn du das Zurücksetzen des Passworts nicht beantragt hast, benachrichtige bitte unseren Support: :email',
'limit_users' => 'Entschuldige, das würde das Limit von :limit Benutzern überschreiten',
'more_designs_self_host_header' => 'Erhalte 6 zusätzliche Rechnungsdesigns für nur $:price',
@ -1149,7 +1149,7 @@ $LANG = array(
'plan_status' => 'Plan Status',
'plan_upgrade' => 'Upgraden',
'plan_change' => 'Manage Plan',
'plan_change' => 'Tarif verwalten',
'pending_change_to' => 'Änderungen zu',
'plan_changes_to' => ':plan am :date',
'plan_term_changes_to' => ':plan (:term) am :date',
@ -1821,8 +1821,8 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'bot_emailed_notify_paid' => 'Ich schicke Ihnen nach der Zahlung eine E-Mail.',
'add_product_to_invoice' => 'Füge 1 :product hinzu',
'not_authorized' => 'Du bist nicht autorisiert',
'bot_get_code' => 'Danke! Ich habe dir eine E-Mail mit deinem Sicherheitscode geschickt.',
'bot_welcome' => 'Das war es schon, dein Account ist verifiziert.<br/>',
'bot_get_code' => 'Danke! Ich habe Ihnen eine E-Mail mit Ihrem Sicherheitscode gesendet.',
'bot_welcome' => 'Das war es schon, Ihr Account ist verifiziert.<br/>',
'email_not_found' => 'Ich konnte keinen verfügbaren Account für :email finden',
'invalid_code' => 'Der Code ist nicht korrekt',
'security_code_email_subject' => 'Sicherheitscode für Invoice Ninja Bot',
@ -1968,7 +1968,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'realtime_preview' => 'Echtzeit Vorschau',
'realtime_preview_help' => 'Echtzeit Aktualisierung der PDF Vorschau während der Rechnungs-Bearbeitung. <br/> Deaktivieren um die Performance während des Bearbeitens zu verbessern.',
'live_preview_help' => 'Live PDF Vorschau auf Rechnungsseite anzeigen.',
'force_pdfjs_help' => 'Ersetze den eingebauten PDF-Viewer in :chrome_link und :firefox_link.<br/>Aktiviere dies, wenn dein Browser die PDFs automatisch herunterlädt.',
'force_pdfjs_help' => 'Ersetze den eingebauten PDF-Viewer in :chrome_link und :firefox_link.<br/>Aktivieren Sie dies, wenn Ihr Browser die PDFs automatisch herunterlädt.',
'force_pdfjs' => 'Verhindere Download',
'redirect_url' => 'Umleitungs-URL',
'redirect_url_help' => 'Gebe optional eine URL an, zu der umgeleitet werden soll, wenn eine Zahlung getätigt wurde.',
@ -2003,8 +2003,8 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'https' => 'HTTPS',
'require' => 'Benötigt',
'license_expiring' => 'Anmerkung: Ihre Lizenz läuftin :count Tagen ab, :link um sie zu erneuern.',
'security_confirmation' => 'Deine E-Mail Adresse wurde bestätigt.',
'white_label_expired' => 'Deine White Label Lizenz ist ausgelaufen, bitte denke darüber nach diese zu verlängern um unser Projekt zu unterstützen.',
'security_confirmation' => 'Ihre E-Mail Adresse wurde bestätigt.',
'white_label_expired' => 'Ihre White-Label-Lizenz ist ausgelaufen. Bitte denken Sie darüber nach, diese zu verlängern, um unser Projekt zu unterstützen.',
'renew_license' => 'Verlängere die Lizenz',
'iphone_app_message' => 'Berücksichtigen Sie unsere :link herunterzuladen',
'iphone_app' => 'iPhone-App',
@ -2094,7 +2094,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'profile' => 'Profil',
'payment_type_help' => 'Setze die Standard <b>manuelle Zahlungsmethode</b>.',
'industry_Construction' => 'Bauwesen',
'your_statement' => 'Deine Abrechnung',
'your_statement' => 'Ihre Abrechnung',
'statement_issued_to' => 'Abrechnung ausgestellt für',
'statement_to' => 'Abrechnung für',
'customize_options' => 'Optionen anpassen',
@ -2269,7 +2269,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'product_notes' => 'Produktnotizen',
'app_version' => 'App-Version',
'ofx_version' => 'OFX-Version',
'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 <code>php artisan ninja:update-key</code> aus',
'error_app_key_set_to_default' => 'Fehler: APP_KEY ist auf einen Standardwert gesetzt. Um ihn zu aktualisieren, sicheren Sie Ihre Datenbank und führen dann <code>php artisan ninja:update-key</code> aus',
'charge_late_fee' => 'Verspätungszuschlag berechnen',
'late_fee_amount' => 'Höhe des Verspätungszuschlags',
'late_fee_percent' => 'Verspätungszuschlag Prozent',
@ -2401,8 +2401,11 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'currency_cuban_peso' => 'Kubanischer Peso',
'currency_bz_dollar' => 'Belize-Dollar',
'currency_libyan_dinar' => 'Libyscher Dinar',
'currency_silver_troy_ounce' => 'Silver Troy Ounce',
'currency_gold_troy_ounce' => 'Gold Troy Ounce',
'currency_silver_troy_ounce' => 'Silberne Feinunze',
'currency_gold_troy_ounce' => 'Goldene Feinunze',
'currency_nicaraguan_córdoba' => 'Nicaraguan Córdoba',
'currency_malagasy_ariary' => 'Malagasy ariary',
"currency_tongan_pa_anga" => "Tongan Pa'anga",
'review_app_help' => 'Wir hoffen, dass Ihnen die App gefällt. Wenn Sie :link in Betracht ziehen würden, wären wir Ihnen sehr dankbar!',
'writing_a_review' => 'Schreiben einer Rezension',
@ -2426,10 +2429,10 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'item_notes' => 'Beschreibung',
'item_cost' => 'Preis',
'item_quantity' => 'Menge',
'item_tax_rate' => 'Steuern für Position',
'item_tax_name' => 'Steuern',
'item_tax1' => 'Position Steuern 1',
'item_tax2' => 'Position Steuern 2',
'item_tax_rate' => 'Steuersatz für Position',
'item_tax_name' => 'Name der Steuer für Position',
'item_tax1' => 'Positions-Steuer 1',
'item_tax2' => 'Positions-Steuer 2',
'delete_company' => 'Firma löschen',
'delete_company_help' => 'Die Firma unwiderruflich mit allen Daten löschen.',
@ -2451,7 +2454,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'deleted_company' => 'Unternehmen erfolgreich gelöscht',
'deleted_account' => 'Konto erfolgreich gelöscht',
'deleted_company_details' => 'Ihre Firma (:account) wurde erfolgreich gelöscht.',
'deleted_account_details' => 'Dein Konto (:account) wurde erfolgreich gelöscht.',
'deleted_account_details' => 'Ihr Konto (:account) wurde erfolgreich gelöscht.',
'alipay' => 'Alipay',
'sofort' => 'SOFORT-Überweisung',
@ -2517,7 +2520,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'custom_value1' => 'Benutzerdefinierter Wert 1',
'custom_value2' => 'Benutzerdefinierter Wert 2',
'enable_two_factor' => 'Zwei-Faktor-Authentifizierung',
'enable_two_factor_help' => 'Bestätige beim Anmelden mit deinem Telefon deine Identität',
'enable_two_factor_help' => 'Bestätigen Sie beim Anmelden mit Ihrem Telefon Ihre Identität',
'two_factor_setup' => 'Zwei-Faktor Einrichtung',
'two_factor_setup_help' => 'Barcode mit :link kompatibler App scannen.',
'one_time_password' => 'Einmaliges Passwort',
@ -2529,7 +2532,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'self_host_login' => 'Eigenes-Hosting Anmeldung',
'set_self_hoat_url' => 'Eigenes-Hosting URL',
'local_storage_required' => 'Fehler: Lokaler Speicherplatz ist nicht verfügbar.',
'your_password_reset_link' => 'Dein Passwort zurücksetzen Link',
'your_password_reset_link' => 'Ihr Passwort-zurücksetzen-Link',
'subdomain_taken' => 'Die Subdomäne wird bereits verwendet',
'client_login' => 'Kundenanmeldung',
'converted_amount' => 'Umgerechneter Betrag',
@ -2744,7 +2747,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'purging' => 'Bereinigung',
'warning_local_refund' => 'Die Rückerstattung wird in der App erfasst, aber NICHT vom Zahlungs-Gateway verarbeitet.',
'email_address_changed' => 'E-Mail Adresse wurde geändert',
'email_address_changed_message' => 'Die E-Mail-Adresse für dein Konto wurde von :old_email auf :new_email geändert.',
'email_address_changed_message' => 'Die E-Mail-Adresse für Ihr Konto wurde von :old_email auf :new_email geändert.',
'test' => 'Test',
'beta' => 'Beta',
'gmp_required' => 'Exportieren zu ZIP benötigt die GMP Erweiterung',
@ -3210,7 +3213,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'welcome_to_the_new_version' => 'Herzlich willkommen zur neuen Version von Invoice Ninja',
'next_step_data_download' => 'Im nächsten Schritt können Sie Ihre Daten für die Migration herunterladen.',
'download_data' => 'Drücke den Button darunter, um die Daten herunterzuladen.',
'migration_import' => 'Fantastisch! Jetzt bist du bereit, die Migrationsdaten zu importieren. Gehe zu deiner neuen Installation, um deine Daten zu importieren.',
'migration_import' => 'Fantastisch! Jetzt sind Sie bereit, die Migrationsdaten zu importieren. Gehen Sie zu Ihrer neuen Installation, um Ihre Daten zu importieren.',
'continue' => 'Weiter',
'company1' => 'Benutzerdefinierte Firma 1',
'company2' => 'Benutzerdefinierte Firma 2',
@ -3321,7 +3324,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'three_tax_rates' => 'Drei Steuersätze',
'default_tax_rate' => 'Standard-Steuersatz',
'invoice_tax' => 'Rechnungssteuer',
'line_item_tax' => 'Belegposition Steuer',
'line_item_tax' => 'Belegpositions-Steuer',
'inclusive_taxes' => 'Inklusive Steuern',
'invoice_tax_rates' => 'Rechnungs-Steuersätze',
'item_tax_rates' => 'Element-Steuersätze',
@ -3681,9 +3684,9 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'send_date' => 'Versanddatum',
'auto_bill_on' => 'Automatische Rechnungsstellung zum',
'minimum_under_payment_amount' => 'Minimaler Unterzahlungsbetrag',
'allow_over_payment' => 'Überzahlung zulassen',
'allow_over_payment' => 'Überbezahlung erlauben',
'allow_over_payment_help' => 'Überzahlungen zulassen, beispielsweise Trinkgelder',
'allow_under_payment' => 'Unterzahlung zulassen',
'allow_under_payment' => 'Unterbezahlung erlauben',
'allow_under_payment_help' => 'Teilzahlungen zulassen',
'test_mode' => 'Test Modus',
'calculated_rate' => 'Berechneter Satz',
@ -3748,12 +3751,12 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'activity_66' => ':user mailte endlose Mahnung für Rechnung :invoice an :contact',
'expense_category_id' => 'Ausgabenkategorie ID',
'view_licenses' => 'Lizenzen anzeigen',
'fullscreen_editor' => 'Vollbild Editor',
'sidebar_editor' => 'Seitenmenü Editor',
'fullscreen_editor' => 'Vollbild-Editor',
'sidebar_editor' => 'Seitenmenü-Editor',
'please_type_to_confirm' => 'Bitte geben Sie ":value" zur Bestätigung ein',
'purge' => 'Bereinigen',
'clone_to' => 'Duplizieren zu',
'clone_to_other' => 'Zu anderen duplizieren',
'clone_to_other' => 'Als anderen Typ duplizieren',
'labels' => 'Beschriftung',
'add_custom' => 'Beschriftung hinzufügen',
'payment_tax' => 'Steuer-Zahlung',
@ -3762,9 +3765,9 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'paid_invoices_are_locked' => 'Bezahlte Rechnungen sind gesperrt',
'source_code' => 'Quellcode',
'app_platforms' => 'App-Plattformen',
'archived_task_statuses' => ' :value Aufgaben Stati erfolgreich archiviert',
'deleted_task_statuses' => ' :value Aufgaben Stati erfolgreich gelöscht',
'restored_task_statuses' => ' :value Aufgaben Stati erfolgreich wiederhergestellt',
'archived_task_statuses' => ' :value Aufgaben-Status erfolgreich archiviert',
'deleted_task_statuses' => ' :value Aufgaben-Status erfolgreich gelöscht',
'restored_task_statuses' => ' :value Aufgaben-Status erfolgreich wiederhergestellt',
'deleted_expense_categories' => ' :value Ausgabenkategorien erfolgreich gelöscht',
'restored_expense_categories' => ':value Ausgabenkategorien erfolgreich wiederhergestellt',
'archived_recurring_invoices' => ':value Wiederkehrende Rechnung erfolgreich archiviert',
@ -4070,7 +4073,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'self_update_not_available' => 'Integrierter Updater auf diesem System nicht verfügbar.',
'user_detached' => 'Nutzer wurden vom Unternehmen entkoppelt',
'create_webhook_failure' => 'Webhook konnte nicht erstellt werden',
'payment_message_extended' => 'Vielen Dank für deine Zahlung von :amount für die Rechnung :invoice',
'payment_message_extended' => 'Vielen Dank für Ihre Zahlung von :amount für die Rechnung :invoice',
'online_payments_minimum_note' => 'Hinweis: Online-Zahlungen werden nur unterstützt, wenn der Betrag größer als 1€ oder der entsprechende Währungsbetrag ist.',
'payment_token_not_found' => 'Zahlungstoken nicht gefunden, bitte versuchen Sie es erneut. Wenn das Problem weiterhin besteht, versuchen Sie es mit einer anderen Zahlungsmethode',
'vendor_address1' => 'Straße Lieferant',
@ -4121,7 +4124,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'activate_company_help' => 'E-Mails, wiederkehrende Rechnungen und Benachrichtigungen aktivieren',
'an_error_occurred_try_again' => 'Ein Fehler ist aufgetreten, bitte versuchen Sie es erneut.',
'please_first_set_a_password' => 'Bitte vergeben Sie zuerst ein Passwort.',
'changing_phone_disables_two_factor' => 'Achtung: Das Ändern deiner Telefonnummer wird die Zwei-Faktor-Authentifizierung deaktivieren',
'changing_phone_disables_two_factor' => 'Achtung: Das Ändern Ihrer Telefonnummer wird die Zwei-Faktor-Authentifizierung deaktivieren',
'help_translate' => 'Hilf mit beim Übersetzen',
'please_select_a_country' => 'Bitte wählen Sie ein Land',
'disabled_two_factor' => '2FA erfolgreich deaktiviert',
@ -4327,7 +4330,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'include_drafts' => 'Entwürfe einschließen',
'include_drafts_help' => 'Entwürfe von Aufzeichnungen in Berichte einbeziehen',
'is_invoiced' => 'Ist in Rechnung gestellt',
'change_plan' => 'Manage Plan',
'change_plan' => 'Tarif verwalten',
'persist_data' => 'Daten aufbewahren',
'customer_count' => 'Kundenzahl',
'verify_customers' => 'Kunden überprüfen',
@ -4488,17 +4491,17 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'client_currency' => 'Kundenwährung',
'company_currency' => 'Firmenwährung',
'custom_emails_disabled_help' => 'Um Spam zu verhindern braucht es ein Upgrade zu einem bezahlten Account um das E-Mail anzupassen.',
'upgrade_to_add_company' => 'Upgrade deinen Tarif um weitere Firmen hinzuzufügen',
'upgrade_to_add_company' => 'Wechseln Sie Ihren Tarif, um weitere Firmen hinzufügen zu können',
'file_saved_in_downloads_folder' => 'Die Datei wurde im Downloads-Ordner gespeichert',
'small' => 'Klein',
'quotes_backup_subject' => 'Deine Angebote stehen zum Download bereit',
'quotes_backup_subject' => 'Ihre Angebote stehen zum Download bereit',
'credits_backup_subject' => 'Die Gutschriften stehen zum Download bereit',
'document_download_subject' => 'Deine Dokumente stehen zum Download bereit',
'document_download_subject' => 'Ihre Dokumente stehen zum Download bereit',
'reminder_message' => 'Mahnung für Rechnung :number über :balance',
'gmail_credentials_invalid_subject' => 'Senden mit ungültigen GMail-Anmeldedaten',
'gmail_credentials_invalid_body' => 'Ihre GMail-Anmeldedaten sind nicht korrekt. Bitte melden Sie sich im Administratorportal an und navigieren Sie zu Einstellungen > Benutzerdetails und trennen Sie Ihr GMail-Konto und verbinden Sie es erneut. Wir werden Ihnen diese Benachrichtigung täglich senden, bis das Problem behoben ist',
'total_columns' => 'Felder insgesamt',
'view_task' => 'Aufgabe anzeugen',
'view_task' => 'Aufgabe anzeigen',
'cancel_invoice' => 'Stornieren',
'changed_status' => 'Erfolgreich Aufgabenstatus geändert',
'change_status' => 'Status ändern',
@ -4511,7 +4514,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'enable_pdf_markdown' => 'Markdown in PDFs verwenden',
'json_help' => 'Achtung: JSON-Dateien, die mit v4 der App erstellt wurden, werden nicht unterstützt',
'release_notes' => 'Versionshinweise',
'upgrade_to_view_reports' => 'Upgrade deinen Tarif um Berichte anzusehen',
'upgrade_to_view_reports' => 'Wechseln Sie Ihren Tarif, um Berichte ansehen zu können',
'started_tasks' => ':value Aufgaben erfolgreich gestartet',
'stopped_tasks' => ':value Aufgaben erfolgreich angehalten',
'approved_quote' => 'Angebot erfolgreich angenommen',
@ -4656,8 +4659,8 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'search_purchase_order' => 'Bestellung suchen',
'search_purchase_orders' => 'Bestellungen suchen',
'login_url' => 'Login-URL',
'enable_applying_payments' => 'Aktivieren Sie die Anwendung von Zahlungen',
'enable_applying_payments_help' => 'Unterstützung bei der separaten Erstellung und Anwendung von Zahlungen',
'enable_applying_payments' => 'Manuelle Überbezahlungen',
'enable_applying_payments_help' => 'Erlaubt das manuellen Hinzufügen eines Betrags, der über dem Betrag zur Zahlung liegt',
'stock_quantity' => 'Lagerbestand',
'notification_threshold' => 'Mindesbestandsmeldung',
'track_inventory' => 'Inventar verwalten',
@ -4714,7 +4717,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'enter_phone_number' => 'Bitte geben Sie eine Telefonnummer an',
'invalid_phone_number' => 'Ungültige Telefonnummer',
'verify_phone_number' => 'Telefonnummer verifizieren',
'verify_phone_number_help' => 'Bitte verifiziere deine Telefonnummer, um E-Mails versenden zu können.',
'verify_phone_number_help' => 'Bitte verifizieren Sie Ihre Telefonnummer, um E-Mails versenden zu können.',
'merged_clients' => 'Erfolgreich Kunden zusammengefasst',
'merge_into' => 'Zusammenführen in',
'php81_required' => 'Hinweis: v5.5 benötigt PHP 8.1',
@ -4952,7 +4955,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'sync_from' => 'Synchronisieren von',
'gateway_payment_text' => 'Rechnungen: :invoices über :amount für Kunde :client',
'gateway_payment_text_no_invoice' => 'Zahlung ohne Rechnung für Kunde :client über :amount',
'click_to_variables' => 'Click here to see all variables.',
'click_to_variables' => 'Hier klicken, um alle Variablen zu sehen.',
'ship_to' => 'Liefern an',
'stripe_direct_debit_details' => 'Bitte überweisen Sie den Betrag an obenstehende Bankverbindung',
'branch_name' => 'Zweigstelle',
@ -5076,7 +5079,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'e_invoice' => 'E-Rechnung',
'light_dark_mode' => 'Tag-/Nachtmodus',
'activities' => 'Aktivitäten',
'recent_transactions' => "Here are your company's most recent transactions:",
'recent_transactions' => "Hier sind die aktuellsten Transaktionen Ihrer Firma:",
'country_Palestine' => "Palestinensa",
'country_Taiwan' => 'Taiwan',
'duties' => 'Aufgaben',
@ -5087,7 +5090,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'enable_auto_bill' => 'Automatische Bezahlung aktivieren',
'email_count_invoices' => ':count Rechnungen versenden',
'invoice_task_item_description' => 'Rechnungspositionsbeschreibung',
'invoice_task_item_description_help' => 'Add the item description to the invoice line items',
'invoice_task_item_description_help' => 'Element-Beschreibung zu den Rechnungs-Positionen hinzufügen',
'next_send_time' => 'Nächster Versandzeitpunkt',
'uploaded_certificate' => 'Das Zertifikat wurde erfolgreich hochgeladen',
'certificate_set' => 'Zertifikat hochgeladen',
@ -5097,8 +5100,8 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'upload_certificate' => 'Zertifikat hochladen',
'certificate_passphrase' => 'Zertifikat Passwort',
'valid_vat_number' => 'Gültige USt-ID',
'react_notification_link' => 'React Notification Links',
'react_notification_link_help' => 'Admin emails will contain links to the react application',
'react_notification_link' => 'React-Benachrichtigungslinks',
'react_notification_link_help' => 'Admin-E-Mails werden Links zur React-Applikation beinhalten',
'show_task_billable' => 'Abrechenbare Aufgaben anzeigen',
'credit_item' => 'Gutschriftsposition',
'drop_file_here' => 'Datei hier hineinziehen',
@ -5106,38 +5109,38 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'camera' => 'Kamera',
'gallery' => 'Gallerie',
'project_location' => 'Projektstandort',
'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments',
'add_gateway_help_message' => 'Payment-Gateway hinzufügen (z. B. Stripe, WePay oder PayPal), um Online-Zahlungen anbieten zu können',
'lang_Hungarian' => 'Ungarisch',
'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan',
'item_tax3' => 'Item Tax3',
'item_tax_rate1' => 'Item Tax Rate 1',
'item_tax_rate2' => 'Item Tax Rate 2',
'item_tax_rate3' => 'Item Tax Rate 3',
'use_mobile_to_manage_plan' => 'Verwenden der Telefon-Abonnementeinstellungen, um Ihren Tarif zu verwalten',
'item_tax3' => 'Positions-Steuer 3',
'item_tax_rate1' => 'Positions-Steuersatz 1',
'item_tax_rate2' => 'Positions-Steuersatz 2',
'item_tax_rate3' => 'Positions-Steuersatz 3',
'buy_price' => 'Einkaufspreis',
'country_Macedonia' => 'Mazedonien',
'admin_initiated_payments' => 'Admin Initiated Payments',
'admin_initiated_payments_help' => 'Support entering a payment in the admin portal without an invoice',
'paid_date' => 'Paid Date',
'downloaded_entities' => 'An email will be sent with the PDFs',
'admin_initiated_payments' => 'Administrator-initiierte Zahlungen',
'admin_initiated_payments_help' => 'Aktivieren von Zahlungen ohne Rechnung im Admin-Portal',
'paid_date' => 'Zahlungsdatum',
'downloaded_entities' => 'Die PDFs werden per E-Mail versendet',
'lang_French - Swiss' => 'Französisch - Schweiz',
'currency_swazi_lilangeni' => 'Lilangeni',
'income' => 'Income',
'income' => 'Einnahmen',
'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.',
'vendor_phone' => 'Lieferanten-Telefonnummer',
'mercado_pago' => 'Mercado Pago',
'mybank' => 'MyBank',
'paypal_paylater' => 'Pay in 4',
'paid_date' => 'Paid Date',
'district' => 'District',
'mybank' => 'MeineBank',
'paypal_paylater' => 'In vier Schritten bezahlen',
'paid_date' => 'Zahlungsdatum',
'district' => 'Bezirk',
'region' => 'Region',
'county' => 'County',
'county' => 'Landkreis',
'tax_details' => 'Steuerdetails',
'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client',
'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client',
'activity_10_online' => ':contact hat die Zahlung :payment für die Rechnung :invoice des Kunden :client eingegeben',
'activity_10_manual' => ':user hat die Zahlung :payment für die Rechnung :invoice des Kunden :client eingegeben',
'default_payment_type' => 'Standard Zahlungsart',
'number_precision' => 'Number precision',
'number_precision_help' => 'Controls the number of decimals supported in the interface',
'is_tax_exempt' => 'Tax Exempt',
'number_precision' => 'Genauigkeit der Nummern',
'number_precision_help' => 'Steuert die Anzahl Dezimalstellen in der Schnittstelle',
'is_tax_exempt' => 'Steuerbefreit',
'drop_files_here' => 'Datei hier hineinziehen',
'upload_files' => 'Dateien hochladen',
'download_e_invoice' => 'E-Rechnung herunterladen',
@ -5149,28 +5152,47 @@ Leistungsempfängers',
'currency_nicaraguan_cordoba' => 'Córdoba Oro',
'public' => 'Öffentlich',
'private' => 'Privat',
'image' => 'Image',
'image' => 'Bild',
'other' => 'Andere',
'linked_to' => 'Linked To',
'file_saved_in_path' => 'The file has been saved in :path',
'unlinked_transactions' => 'Successfully unlinked :count transactions',
'unlinked_transaction' => 'Successfully unlinked transaction',
'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions',
'marked_sent_credits' => 'Successfully marked credits sent',
'show_document_preview' => 'Show Document Preview',
'cash_accounting' => 'Cash accounting',
'click_or_drop_files_here' => 'Click or drop files here',
'set_public' => 'Set public',
'set_private' => 'Set private',
'individual' => 'Individual',
'linked_to' => 'Verknüpft mit',
'file_saved_in_path' => 'Die Datei wurde unter :path gespeichert',
'unlinked_transactions' => 'Verknüpfung zu :count Transaktionen wurde erfolgreich entfernt',
'unlinked_transaction' => 'Verknüpfung zu einer Transaktion wurde erfolgreich entfernt',
'view_dashboard_permission' => 'Nutzern erlauben, auf das Dashboard zuzugreifen. Die Berechtigungen der Nutzer limitieren die angezeigten Daten.',
'marked_sent_credits' => 'Gutschrift erfolgreich als versendet markiert',
'show_document_preview' => 'Dokumentenvorschau anzeigen',
'cash_accounting' => 'Kassenbuchführung',
'click_or_drop_files_here' => 'Hier klicken oder Dateien ablegen',
'set_public' => 'Als "öffentlich" setzen',
'set_private' => 'Als "privat" setzen',
'individual' => 'Indiviuell',
'business' => 'Business',
'partnership' => 'partnership',
'trust' => 'Trust',
'partnership' => 'Partnerschaft',
'trust' => 'Vertrauen',
'charity' => 'Charity',
'government' => 'Government',
'in_stock_quantity' => 'Stock quantity',
'vendor_contact' => 'Vendor Contact',
'government' => 'Regierung',
'in_stock_quantity' => 'Lagerbestand',
'vendor_contact' => 'Lieferantenkontakt',
'expense_status_4' => 'Unbezahlt',
'expense_status_5' => 'Bezahlt',
'ziptax_help' => 'Note: this feature requires a Zip-Tax API key to lookup US sales tax by address',
'cache_data' => 'Cache Data',
'unknown' => 'Unbekannt',
'webhook_failure' => 'Webhook-Fehler',
'email_opened' => 'E-Mail geöffnet',
'email_delivered' => 'E-Mail zugestellt',
'log' => 'Log',
'classification' => 'Klassifizierung',
'stock_quantity_number' => 'Stock :quantity',
'upcoming' => 'Bevorstehend',
'client_contact' => 'Kundenkontakt',
'uncategorized' => 'Unkategorisiert',
'login_notification' => 'Login Notification',
'login_notification_help' => 'Sends an email notifying that a login has taken place.',
'payment_refund_receipt' => 'Payment Refund Receipt # :number',
'payment_receipt' => 'Payment Receipt # :number',
'load_template_description' => 'The template will be applied to following:',
'run_template' => 'Run template',
);
return $LANG;

View File

@ -652,7 +652,7 @@ $LANG = array(
'primary_user' => 'Usuario Principal',
'help' => 'Ayuda',
'playground' => 'playground',
'support_forum' => 'Support Forums',
'support_forum' => 'Foros de soporte',
'invoice_due_date' => 'Fecha Límite de Pago',
'quote_due_date' => 'Válido hasta',
'valid_until' => 'Válido hasta',
@ -1138,7 +1138,7 @@ $LANG = array(
'plan_status' => 'Estado del Plan',
'plan_upgrade' => 'Mejorar',
'plan_change' => 'Manage Plan',
'plan_change' => 'Gestionar plan',
'pending_change_to' => 'Cambios para',
'plan_changes_to' => ':plan en :date',
'plan_term_changes_to' => ':plan (:term) el :date',
@ -2392,6 +2392,9 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c
'currency_libyan_dinar' => 'dinar libio',
'currency_silver_troy_ounce' => 'Onza troy de plata',
'currency_gold_troy_ounce' => 'Onza troy de oro',
'currency_nicaraguan_córdoba' => 'Córdoba nicaragüense',
'currency_malagasy_ariary' => 'Ariary malgache',
"currency_tongan_pa_anga" => "Pa'anga tongano",
'review_app_help' => 'Esperamos que estés disfrutando con la app. <br/>Si consideras :link ¡te lo agraderemos enormemente!',
'writing_a_review' => 'escribir una reseña',
@ -3669,9 +3672,9 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c
'send_date' => 'Fecha de Envío',
'auto_bill_on' => 'Facturación Automática Activa',
'minimum_under_payment_amount' => 'Cantidad Mínima de Pago',
'allow_over_payment' => 'Permitir Sobrepago',
'allow_over_payment' => 'Permitir pago en exceso',
'allow_over_payment_help' => 'Permitir pagos extra para aceptar propinas',
'allow_under_payment' => 'Permitir Pago de Menos',
'allow_under_payment' => 'Permitir pago insuficiente',
'allow_under_payment_help' => 'Permitir pagar como mínimo la cantidad parcial/depósito',
'test_mode' => 'Modo Test',
'calculated_rate' => 'Tasa Calculada',
@ -3968,8 +3971,8 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c
'account_balance' => 'Saldo de cuenta',
'thanks' => 'Gracias',
'minimum_required_payment' => 'El mínimo pago requerido es :amount',
'under_payments_disabled' => 'La compañía no permite pagar por debajo.',
'over_payments_disabled' => 'La compañía no permite sobrepagos.',
'under_payments_disabled' => 'La empresa no admite pagos insuficientes.',
'over_payments_disabled' => 'La empresa no admite pagos en exceso.',
'saved_at' => 'Guardado el :time',
'credit_payment' => 'Crédito aplicado a la factura :invoice_number',
'credit_subject' => 'Nuevo crédito :number de :account',
@ -4315,7 +4318,7 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c
'include_drafts' => 'Incluir borradores',
'include_drafts_help' => 'Incluir borradores de registros en informes',
'is_invoiced' => 'Es facturado',
'change_plan' => 'Manage Plan',
'change_plan' => 'Gestionar plan',
'persist_data' => 'Persistir datos',
'customer_count' => 'Número de clientes',
'verify_customers' => 'Verificar clientes',
@ -4644,8 +4647,8 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c
'search_purchase_order' => 'Buscar orden de compra',
'search_purchase_orders' => 'Buscar órdenes de compra',
'login_url' => 'URL de acceso',
'enable_applying_payments' => 'Habilitar la aplicación de pagos',
'enable_applying_payments_help' => 'Admite la creación y aplicación de pagos por separado',
'enable_applying_payments' => 'Sobrepagos manuales',
'enable_applying_payments_help' => 'Admite agregar un monto de sobrepago manualmente en un pago',
'stock_quantity' => 'Cantidad de stock',
'notification_threshold' => 'Umbral de notificación',
'track_inventory' => 'Seguimiento de inventario',
@ -5144,20 +5147,39 @@ De lo contrario, este campo deberá dejarse en blanco.',
'unlinked_transaction' => 'Transacción desvinculada exitosamente',
'view_dashboard_permission' => 'Permitir que el usuario acceda al panel, los datos están limitados a los permisos disponibles',
'marked_sent_credits' => 'Créditos enviados, marcados con éxito',
'show_document_preview' => 'Show Document Preview',
'cash_accounting' => 'Cash accounting',
'click_or_drop_files_here' => 'Click or drop files here',
'set_public' => 'Set public',
'set_private' => 'Set private',
'show_document_preview' => 'Mostrar vista previa del documento',
'cash_accounting' => 'Contabilidad de caja',
'click_or_drop_files_here' => 'Haga clic o suelte archivos aquí',
'set_public' => 'Establecer público',
'set_private' => 'Establecer privado',
'individual' => 'Individual',
'business' => 'Business',
'partnership' => 'partnership',
'trust' => 'Trust',
'charity' => 'Charity',
'government' => 'Government',
'in_stock_quantity' => 'Stock quantity',
'vendor_contact' => 'Vendor Contact',
'business' => 'Negocio',
'partnership' => 'asociación',
'trust' => 'Confianza',
'charity' => 'Caridad',
'government' => 'Gobierno',
'in_stock_quantity' => 'Cantidad de stock',
'vendor_contact' => 'Contacto del proveedor',
'expense_status_4' => 'No pagado',
'expense_status_5' => 'Pagado',
'ziptax_help' => 'Nota: esta función requiere una clave API Zip-Tax para buscar impuestos sobre las ventas de EE. UU. por dirección',
'cache_data' => 'Datos de caché',
'unknown' => 'Desconocido',
'webhook_failure' => 'Fallo del webhook',
'email_opened' => 'Email abierto',
'email_delivered' => 'Email entregado',
'log' => 'Registro',
'classification' => 'Clasificación',
'stock_quantity_number' => 'Stock :quantity',
'upcoming' => 'Próximo',
'client_contact' => 'Contacto del cliente',
'uncategorized' => 'Sin categoría',
'login_notification' => 'Notificación de inicio de sesión',
'login_notification_help' => 'Envía un correo electrónico notificando que se ha realizado un inicio de sesión.',
'payment_refund_receipt' => 'Recibo de reembolso de pago Nº :number',
'payment_receipt' => 'Recibo de pago Nº :number',
'load_template_description' => 'La plantilla se aplicará a lo siguiente:',
'run_template' => 'Ejecutar plantilla',
);
return $LANG;

View File

@ -651,8 +651,6 @@ $LANG = array(
'created_by_invoice' => 'Créée par :invoice',
'primary_user' => 'Utilisateur principal',
'help' => 'Aide',
'customize_help' => '<p>Nous utilisons :pdfmake_link pour définir la présentation graphique des factures de manière déclarative. Pdfmake playground_link fournit une excellente façon de voir la librairie en action.</p>
<p>Si vous avez besoin d\'aide à ce sujet, vous pouvez publier une question sur notre :forum_link avec la présentation graphique que vous utilisez.</p>',
'playground' => 'environnement',
'support_forum' => 'Forums de support',
'invoice_due_date' => 'Échéance',
@ -1813,7 +1811,6 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'bot_emailed_notify_paid' => 'Recevez un courriel lorsqu\'elle sera payée.',
'add_product_to_invoice' => 'Ajouter 1 :product',
'not_authorized' => 'Vous n\'êtes pas autorisé',
'bot_get_email' => 'Bonjour! (wave)<br/>Thanks for trying the Invoice Ninja Bot.<br/>Vous devez vous créer un compte gratuit pour utiliser ce bot.<br/>Veuillez envoyer votre adresse courriel associée à votre compte pour démarrer.',
'bot_get_code' => 'Merci! Je vous ai envoyé un courriel avec votre code de sécurité.',
'bot_welcome' => 'Ça y est, votre compte est maintenant vérifié.>br/>',
'email_not_found' => 'Je n\'ai pas pu trouver un compte disponible pour :email',
@ -1821,7 +1818,6 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'security_code_email_subject' => 'Code de sécurité pour le Bot de Invoice Ninja',
'security_code_email_line1' => 'Ceci est votre code de sécurité pour le Bot de Invoice Ninja.',
'security_code_email_line2' => 'Note: il expirera dans 10 minutes.',
'bot_help_message' => 'Je supporte actuellement:<br/>• Créer\mettre à jour\envoyer une facture<br/>• Lister les produits<br/>Par exemple:<br/><i>Facturer 2 billets à Simon, définir la date d\'échéance au prochain jeudi et le rabais à 10 %</i>',
'list_products' => 'Liste des produits',
'include_item_taxes_inline' => 'Inclure les<b>taxes par ligne dans le total des lignes</b>',
@ -1834,7 +1830,6 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'update_invoiceninja_warning' => 'Invoice Ninja crée une sauvegarde de votre base de données et de vos fichiers avant la mise à jour.',
'update_invoiceninja_available' => 'Une nouvelle version de Invoice Ninja est disponible.',
'update_invoiceninja_unavailable' => 'Aucune mise à jour de Invoice Ninja disponible.',
'update_invoiceninja_instructions' => 'Veuillez installer la nouvelle version <strong>:version</strong> en cliquant sur le bouton <em>Mettre à jour</em> ci-dessous. Ensuite, vous serez redirigé vers le tableau de bord.',
'update_invoiceninja_update_start' => 'Mettre à jour',
'update_invoiceninja_download_start' => 'Télécharger :version',
'create_new' => 'Créer',
@ -2399,6 +2394,9 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'currency_libyan_dinar' => 'Dinar libyen',
'currency_silver_troy_ounce' => 'Once troy d\'argent',
'currency_gold_troy_ounce' => 'Once troy d\'or',
'currency_nicaraguan_córdoba' => 'Cordoba nicaraguayen',
'currency_malagasy_ariary' => 'Ariary malgache',
"currency_tongan_pa_anga" => "Pa'anga tongien",
'review_app_help' => 'Nous espérons que votre utilisation de cette application vous est agréable.<br/>Un commentaire de votre part serait grandement apprécié!',
'writing_a_review' => 'rédiger un commentaire',
@ -3676,9 +3674,9 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'send_date' => 'Date d\'envoi',
'auto_bill_on' => 'Facturer automatiquement le',
'minimum_under_payment_amount' => 'Montant minimum de sous-paiement',
'allow_over_payment' => 'Accepter Sur-paiement',
'allow_over_payment' => 'Autoriser le surpaiement',
'allow_over_payment_help' => 'Accepter paiement supplémentaire pour pourboire',
'allow_under_payment' => 'Accepter Sous-paiement',
'allow_under_payment' => 'Autoriser le souspaiement',
'allow_under_payment_help' => 'Accepter paiement au minimum le montant partiel/dépôt',
'test_mode' => 'Mode test',
'calculated_rate' => 'Taux calculé',
@ -3975,8 +3973,8 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'account_balance' => 'Solde de compte',
'thanks' => 'Merci',
'minimum_required_payment' => 'Le paiement minimum requis est :amount',
'under_payments_disabled' => 'L\'entreprise ne tolère pas le sous-paiement.',
'over_payments_disabled' => 'L\'entreprise ne tolère pas le sur-paiement.',
'under_payments_disabled' => 'L\'entreprise d\'autorise pas les surpaiements.',
'over_payments_disabled' => 'L\'entreprise d\'autorise pas les souspaiements.',
'saved_at' => 'Enregistré à :time',
'credit_payment' => 'Le crédit a été appliqué à la facture :invoice_number',
'credit_subject' => 'Nouveau crédit :credit de :account',
@ -4651,8 +4649,8 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'search_purchase_order' => 'Rechercher un bon de commande',
'search_purchase_orders' => 'Rechercher des bons de commande',
'login_url' => 'URL de connexion',
'enable_applying_payments' => 'Activer les paiements applicables',
'enable_applying_payments_help' => 'Activer la création et l\'application de paiement séparément',
'enable_applying_payments' => 'Surpaiements manuels',
'enable_applying_payments_help' => 'Prise en charge de l\'ajout manuel d\'un montant de surpaiement sur un paiement',
'stock_quantity' => 'Quantité en stock',
'notification_threshold' => 'Seuil de notification',
'track_inventory' => 'Gérer l\'inventaire',
@ -5153,6 +5151,36 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'show_document_preview' => 'Afficher la visualisation de document',
'cash_accounting' => 'Comptabilité de caisse',
'click_or_drop_files_here' => 'Cliquez ou déposez les fichiers ici',
'set_public' => 'Public',
'set_private' => 'Privé',
'individual' => 'Individuel',
'business' => 'Entreprise',
'partnership' => 'partenaire',
'trust' => 'Fiducie',
'charity' => 'Organisation caritative',
'government' => 'Gouvernement',
'in_stock_quantity' => 'Quantité en stock',
'vendor_contact' => 'Contact du fournisseur',
'expense_status_4' => 'Impayé',
'expense_status_5' => 'Payé',
'ziptax_help' => 'Note: Cette fonctionnalité requiert une clé API Zip-Tax pour obtenir les taux de taxes de vente par adresse pour les États-Unis',
'cache_data' => 'Données en cache',
'unknown' => 'Inconnu',
'webhook_failure' => 'Échec du webhook',
'email_opened' => 'Courriel ouvert',
'email_delivered' => 'Courriel livré',
'log' => 'Journal',
'classification' => 'Classification',
'stock_quantity_number' => 'Stock :quantity',
'upcoming' => 'À venir',
'client_contact' => 'Contact client',
'uncategorized' => 'Non catégorisé',
'login_notification' => 'Notification de connexion',
'login_notification_help' => 'Envoie un message par courriel lorsqu\'une connexion a été réalisée',
'payment_refund_receipt' => 'Reçu de remboursement de paiement #',
'payment_receipt' => 'Reçu de paiement #',
'load_template_description' => 'Le modèle s\'appliquera à:',
'run_template' => 'Exécuter le modèle',
);
return $LANG;

View File

@ -68,7 +68,7 @@
</div>
<div id="completed" class="mb-4">
<a class="button button-primary bg-blue-600 my-4" href="{{ config('ninja.app_url') }}">Return to admin portal.</a>
<a class="button button-primary bg-blue-600 my-4" href="{{ $redirect_url }}">Return to admin portal.</a>
</div>
</div>

View File

@ -11,11 +11,13 @@
namespace Tests\Unit;
use Tests\TestCase;
use Tests\MockAccountData;
use App\DataMapper\InvoiceItem;
use App\Factory\InvoiceFactory;
use App\Factory\InvoiceItemFactory;
use App\Helpers\Invoice\InvoiceItemSum;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Tests\MockAccountData;
use Tests\TestCase;
/**
* @test
@ -33,6 +35,272 @@ class InvoiceItemTest extends TestCase
$this->makeTestData();
}
public function testDiscountsWithInclusiveTaxes()
{
$invoice = InvoiceFactory::create($this->company->id, $this->user->id);
$invoice->client_id = $this->client->id;
$invoice->uses_inclusive_taxes = true;
$invoice->is_amount_discount =true;
$invoice->discount = 10;
$line_items = [];
$line_item = new InvoiceItem;
$line_item->quantity = 1;
$line_item->cost = 100;
$line_item->tax_rate1 = 10;
$line_item->tax_name1 = 'GST';
$line_item->product_key = 'Test';
$line_item->notes = 'Test';
$line_items[] = $line_item;
$invoice->line_items = $line_items;
$invoice->save();
$invoice = $invoice->calc()->getInvoice();
$this->assertEquals(90, $invoice->amount);
$this->assertEquals(8.18, $invoice->total_taxes);
}
public function testDiscountsWithInclusiveTaxesNegativeInvoice()
{
$invoice = InvoiceFactory::create($this->company->id, $this->user->id);
$invoice->client_id = $this->client->id;
$invoice->uses_inclusive_taxes = true;
$invoice->is_amount_discount =true;
$invoice->discount = -10;
$line_items = [];
$line_item = new InvoiceItem;
$line_item->quantity = -1;
$line_item->cost = 100;
$line_item->tax_rate1 = 10;
$line_item->tax_name1 = 'GST';
$line_item->product_key = 'Test';
$line_item->notes = 'Test';
$line_items[] = $line_item;
$invoice->line_items = $line_items;
$invoice->save();
$invoice = $invoice->calc()->getInvoice();
$this->assertEquals(-90, $invoice->amount);
$this->assertEquals(-8.18, $invoice->total_taxes);
}
public function testDicountsWithTaxes()
{
$invoice = InvoiceFactory::create($this->company->id, $this->user->id);
$invoice->client_id = $this->client->id;
$invoice->uses_inclusive_taxes = false;
$invoice->is_amount_discount =true;
$invoice->discount = 10;
$line_items = [];
$line_item = new InvoiceItem;
$line_item->quantity = 1;
$line_item->cost = 100;
$line_item->tax_rate1 = 10;
$line_item->tax_name1 = 'GST';
$line_item->product_key = 'Test';
$line_item->notes = 'Test';
$line_items[] = $line_item;
$invoice->line_items = $line_items;
$invoice->save();
$invoice = $invoice->calc()->getInvoice();
$this->assertEquals(99, $invoice->amount);
$this->assertEquals(9, $invoice->total_taxes);
}
public function testDicountsWithTaxesNegativeInvoice()
{
$invoice = InvoiceFactory::create($this->company->id, $this->user->id);
$invoice->client_id = $this->client->id;
$invoice->uses_inclusive_taxes = false;
$invoice->is_amount_discount =true;
$invoice->discount = -10;
$line_items = [];
$line_item = new InvoiceItem;
$line_item->quantity = -1;
$line_item->cost = 100;
$line_item->tax_rate1 = 10;
$line_item->tax_name1 = 'GST';
$line_item->product_key = 'Test';
$line_item->notes = 'Test';
$line_items[] = $line_item;
$invoice->line_items = $line_items;
$invoice->save();
$invoice = $invoice->calc()->getInvoice();
$this->assertEquals(-99, $invoice->amount);
$this->assertEquals(-9, $invoice->total_taxes);
}
public function testDicountsWithTaxesPercentage()
{
$invoice = InvoiceFactory::create($this->company->id, $this->user->id);
$invoice->client_id = $this->client->id;
$invoice->uses_inclusive_taxes = false;
$invoice->is_amount_discount =false;
$invoice->discount = 10;
$line_items = [];
$line_item = new InvoiceItem;
$line_item->quantity = 1;
$line_item->cost = 100;
$line_item->tax_rate1 = 10;
$line_item->tax_name1 = 'GST';
$line_item->product_key = 'Test';
$line_item->notes = 'Test';
$line_items[] = $line_item;
$invoice->line_items = $line_items;
$invoice->save();
$invoice = $invoice->calc()->getInvoice();
$this->assertEquals(99, $invoice->amount);
$this->assertEquals(9, $invoice->total_taxes);
}
public function testDicountsWithTaxesPercentageOnLine()
{
$invoice = InvoiceFactory::create($this->company->id, $this->user->id);
$invoice->client_id = $this->client->id;
$invoice->uses_inclusive_taxes = true;
$invoice->is_amount_discount =false;
$invoice->discount = 10;
$line_items = [];
$line_item = new InvoiceItem;
$line_item->quantity = 1;
$line_item->cost = 100;
$line_item->is_amount_discount = false;
$line_item->discount = 10;
$line_item->tax_rate1 = 10;
$line_item->tax_name1 = 'GST';
$line_item->product_key = 'Test';
$line_item->notes = 'Test';
$line_items[] = $line_item;
$invoice->line_items = $line_items;
$invoice->save();
$invoice = $invoice->calc()->getInvoice();
$this->assertEquals(81, $invoice->amount);
$this->assertEquals(7.36, $invoice->total_taxes);
}
public function testDicountsWithExclusiveTaxesPercentageOnLine()
{
$invoice = InvoiceFactory::create($this->company->id, $this->user->id);
$invoice->client_id = $this->client->id;
$invoice->uses_inclusive_taxes = false;
$invoice->is_amount_discount =false;
$invoice->discount = -10;
$line_items = [];
$line_item = new InvoiceItem;
$line_item->quantity = -1;
$line_item->cost = 100;
$line_item->is_amount_discount = false;
$line_item->discount = -10;
$line_item->tax_rate1 = 10;
$line_item->tax_name1 = 'GST';
$line_item->product_key = 'Test';
$line_item->notes = 'Test';
$line_items[] = $line_item;
$invoice->line_items = $line_items;
$invoice->save();
$invoice = $invoice->calc()->getInvoice();
$this->assertEquals(-133.1, $invoice->amount);
$this->assertEquals(-12.1, $invoice->total_taxes);
}
public function testDicountsWithTaxesNegativeInvoicePercentage()
{
$invoice = InvoiceFactory::create($this->company->id, $this->user->id);
$invoice->client_id = $this->client->id;
$invoice->uses_inclusive_taxes = false;
$invoice->is_amount_discount =false;
$invoice->discount = -10;
$line_items = [];
$line_item = new InvoiceItem;
$line_item->quantity = -1;
$line_item->cost = 100;
$line_item->tax_rate1 = 10;
$line_item->tax_name1 = 'GST';
$line_item->product_key = 'Test';
$line_item->notes = 'Test';
$line_items[] = $line_item;
$invoice->line_items = $line_items;
$invoice->save();
$invoice = $invoice->calc()->getInvoice();
$this->assertEquals(-121, $invoice->amount);
$this->assertEquals(-10, $invoice->discount);
$this->assertEquals(-11, $invoice->total_taxes);
}
public function testDicountPercentageWithTaxes()
{
$invoice = InvoiceFactory::create($this->company->id, $this->user->id);
$invoice->client_id = $this->client->id;
$invoice->uses_inclusive_taxes = false;
$invoice->is_amount_discount =true;
$invoice->discount = 10;
$line_items = [];
$line_item = new InvoiceItem;
$line_item->quantity = 1;
$line_item->cost = 100;
$line_item->tax_rate1 = 10;
$line_item->tax_name1 = 'GST';
$line_item->product_key = 'Test';
$line_item->notes = 'Test';
$line_items[] = $line_item;
$invoice->line_items = $line_items;
$invoice->save();
$invoice = $invoice->calc()->getInvoice();
$this->assertEquals(99, $invoice->amount);
$this->assertEquals(9, $invoice->total_taxes);
}
public function testInvoiceItemTotalSimple()
{
$item = InvoiceItemFactory::create();

View File

@ -49,6 +49,8 @@ class InvoiceTest extends TestCase
$this->invoice_calc = new InvoiceSum($this->invoice);
}
public function testMarkPaidWithPartial()
{
$item = InvoiceItemFactory::create();