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

Merge remote-tracking branch 'upstream/master'

This commit is contained in:
rafael.sisweb 2015-11-23 08:50:49 -05:00
commit a86ba6ed36
19 changed files with 230 additions and 139 deletions

View File

@ -590,8 +590,8 @@ class AccountController extends BaseController
}
$labels = [];
foreach (['item', 'description', 'unit_cost', 'quantity', 'line_total'] as $field) {
$labels[$field] = trim(Input::get("labels_{$field}"));
foreach (['item', 'description', 'unit_cost', 'quantity', 'line_total', 'terms'] as $field) {
$labels[$field] = Input::get("labels_{$field}");
}
$account->invoice_labels = json_encode($labels);

View File

@ -79,7 +79,7 @@ class AuthController extends Controller {
$userId = Auth::check() ? Auth::user()->id : null;
$user = User::where('email', '=', $request->input('email'))->first();
if ($user && $user->failed_logins >= 3) {
if ($user && $user->failed_logins >= MAX_FAILED_LOGINS) {
Session::flash('error', trans('texts.invalid_credentials'));
return redirect()->to('login');
}

View File

@ -33,7 +33,7 @@ class StartupCheck
}
// Ensure all request are over HTTPS in production
if (App::environment() == ENV_PRODUCTION && !Request::secure()) {
if (Utils::isNinjaProd() && !Request::secure()) {
return Redirect::secure(Request::getRequestUri());
}

View File

@ -247,7 +247,6 @@ if (!defined('CONTACT_EMAIL')) {
define('ENV_DEVELOPMENT', 'local');
define('ENV_STAGING', 'staging');
define('ENV_PRODUCTION', 'fortrabbit');
define('RECENTLY_VIEWED', 'RECENTLY_VIEWED');
define('ENTITY_CLIENT', 'client');
@ -338,6 +337,7 @@ if (!defined('CONTACT_EMAIL')) {
define('MAX_SUBDOMAIN_LENGTH', 30);
define('MAX_IFRAME_URL_LENGTH', 250);
define('MAX_LOGO_FILE_SIZE', 200); // KB
define('MAX_FAILED_LOGINS', 5);
define('DEFAULT_FONT_SIZE', 9);
define('DEFAULT_SEND_RECURRING_HOUR', 8);
@ -488,6 +488,12 @@ if (!defined('CONTACT_EMAIL')) {
define('SOCIAL_GITHUB', 'GitHub');
define('SOCIAL_LINKEDIN', 'LinkedIn');
define('USER_STATE_ACTIVE', 'active');
define('USER_STATE_PENDING', 'pending');
define('USER_STATE_DISABLED', 'disabled');
define('USER_STATE_ADMIN', 'admin');
$creditCards = [
1 => ['card' => 'images/credit_cards/Test-Visa-Icon.png', 'text' => 'Visa'],
2 => ['card' => 'images/credit_cards/Test-MasterCard-Icon.png', 'text' => 'Master Card'],
@ -510,6 +516,9 @@ if (!defined('CONTACT_EMAIL')) {
'countries' => 'App\Models\Country',
'invoiceDesigns' => 'App\Models\InvoiceDesign',
'invoiceStatus' => 'App\Models\InvoiceStatus',
'frequencies' => 'App\Models\Frequency',
'gateways' => 'App\Models\Gateway',
'themes' => 'App\Models\Theme',
];
define('CACHED_TABLES', serialize($cachedTables));

View File

@ -45,11 +45,6 @@ class Utils
return file_exists(storage_path() . '/framework/down');
}
public static function isProd()
{
return App::environment() == ENV_PRODUCTION;
}
public static function isNinja()
{
return self::isNinjaProd() || self::isNinjaDev();

View File

@ -22,8 +22,7 @@ class UserRepository extends BaseRepository
$query->where('users.deleted_at', '=', null);
}
$query->where('users.public_id', '>', 0)
->select('users.public_id', 'users.first_name', 'users.last_name', 'users.email', 'users.confirmed', 'users.public_id', 'users.deleted_at');
$query->select('users.public_id', 'users.first_name', 'users.last_name', 'users.email', 'users.confirmed', 'users.public_id', 'users.deleted_at');
return $query;
}

View File

@ -69,7 +69,8 @@ class InvoiceTransformer extends EntityTransformer
'partial' => (float) $invoice->partial,
'has_tasks' => (bool) $invoice->has_tasks,
'auto_bill' => (bool) $invoice->auto_bill,
'account_key' => $this->account->account_key
'account_key' => $this->account->account_key,
'user_id' => (int) $invoice->user->public_id+1
];
}
}

View File

@ -80,7 +80,9 @@ class DatatableService
$str .= "<li class=\"divider\"></li>";
}
if ($entityType != ENTITY_USER || $model->public_id) {
$str .= "<li><a href=\"javascript:archiveEntity({$model->public_id})\">" . trans("texts.archive_{$entityType}") . "</a></li>";
}
} else {
$str .= "<li><a href=\"javascript:restoreEntity({$model->public_id})\">" . trans("texts.restore_{$entityType}") . "</a></li>";
}

View File

@ -52,7 +52,15 @@ class UserService extends BaseService
[
'confirmed',
function ($model) {
return $model->deleted_at ? trans('texts.deleted') : ($model->confirmed ? trans('texts.active') : trans('texts.pending'));
if (!$model->public_id) {
return self::getStatusLabel(USER_STATE_ADMIN);
} elseif ($model->deleted_at) {
return self::getStatusLabel(USER_STATE_DISABLED);
} elseif ($model->confirmed) {
return self::getStatusLabel(USER_STATE_ACTIVE);
} else {
return self::getStatusLabel(USER_STATE_PENDING);
}
}
],
];
@ -65,6 +73,9 @@ class UserService extends BaseService
uctrans('texts.edit_user'),
function ($model) {
return URL::to("users/{$model->public_id}/edit");
},
function ($model) {
return $model->public_id;
}
],
[
@ -73,10 +84,31 @@ class UserService extends BaseService
return URL::to("send_confirmation/{$model->public_id}");
},
function ($model) {
return !$model->confirmed;
return $model->public_id && ! $model->confirmed;
}
]
];
}
private function getStatusLabel($state)
{
$label = trans("texts.{$state}");
$class = 'default';
switch ($state) {
case USER_STATE_PENDING:
$class = 'info';
break;
case USER_STATE_ACTIVE:
$class = 'primary';
break;
case USER_STATE_DISABLED:
$class = 'warning';
break;
case USER_STATE_ADMIN:
$class = 'success';
break;
}
return "<h4><div class=\"label label-{$class}\">$label</div></h4>";
}
}

View File

@ -194,8 +194,8 @@ return array(
'email_paid' => 'Benachrichtigen, wenn eine Rechnung <strong>bezahlt</strong> wurde',
'site_updates' => 'Seiten Updates',
'custom_messages' => 'Benutzerdefinierte Nachrichten',
'default_invoice_terms' => 'Standard Rechnungsbedingungen',
'default_email_footer' => 'Standard E-Mail Signatur',
'default_invoice_terms' => 'Standard-Rechnungsbedingungen',
'default_email_footer' => 'Standard-E-Mail Signatur',
'import_clients' => 'Importiere Kundendaten',
'csv_file' => 'Wähle CSV Datei',
'export_clients' => 'Exportiere Kundendaten',
@ -838,7 +838,7 @@ return array(
'edit_tax_rate' => 'Steuersatz bearbeiten',
'archive_tax_rate' => 'Steuersatz archivieren',
'archived_tax_rate' => 'Steuersatz archiviert',
'default_tax_rate_id' => 'Standard Steuersatz',
'default_tax_rate_id' => 'Standard-Steuersatz',
'tax_rate' => 'Steuersatz',
'recurring_hour' => 'Wiederholende Stunde',

View File

@ -942,5 +942,7 @@ return array(
],
'client_portal' => 'Client Portal',
'admin' => 'Admin',
'disabled' => 'Disabled',
'show_archived_users' => 'Show archived users',
);

View File

@ -0,0 +1,22 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Password Reminder Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are the default lines which match reasons
| that are given by the password broker for a password update attempt
| has failed, such as for an invalid token or invalid new password.
|
*/
"password" => "Het wachtwoord moet minimaal zes tekens lang zijn en moet overeenkomen met de bevestiging.",
"user" => "We kunnen geen gebruiker vinden met het opgegeven e-mailadres.",
"token" => "Het wachtwoord reset token is ongeldig.",
"sent" => "We hebben u een wachtwoord reset link gemaild!",
"reset" => "Je wachtwoord is opnieuw ingesteld!",
];

View File

@ -169,7 +169,7 @@ return array(
'date' => 'Datum',
'message' => 'Bericht',
'adjustment' => 'Aanpassing',
'are_you_sure' => 'Ben je zeker?',
'are_you_sure' => 'Weet u het zeker?',
// payment pages
'payment_type_id' => 'Betalingstype',
@ -179,8 +179,8 @@ return array(
'work_email' => 'E-mail',
'language_id' => 'Taal',
'timezone_id' => 'Tijdszone',
'date_format_id' => 'Formaat datum',
'datetime_format_id' => 'Datum/Tijd Formaat',
'date_format_id' => 'Datum formaat',
'datetime_format_id' => 'Datum/Tijd formaat',
'users' => 'Gebruikers',
'localization' => 'Localisatie',
'remove_logo' => 'Verwijder logo',
@ -194,19 +194,19 @@ return array(
'site_updates' => 'Site Aanpassingen',
'custom_messages' => 'Aangepaste berichten',
'default_invoice_terms' => 'Stel standaard factuursvoorwaarden in',
'default_email_footer' => 'Stel standaard e-mail signatuur in',
'default_email_footer' => 'Stel standaard e-mail handtekening in',
'import_clients' => 'Importeer Klant Gegevens',
'csv_file' => 'Selecteer CSV bestand',
'export_clients' => 'Exporteer Klant Gegevens',
'select_file' => 'Selecteer alstublieft een bestand',
'first_row_headers' => 'Gebruik eerste rij als hoofdding',
'select_file' => 'Selecteer een bestand',
'first_row_headers' => 'Gebruik eerste rij als koppen',
'column' => 'Kolom',
'sample' => 'Voorbeeld',
'import_to' => 'Importeer naar',
'client_will_create' => 'klant zal aangemaakt worden',
'clients_will_create' => 'klanten zullen aangemaakt worden',
'email_settings' => 'Email Settings',
'pdf_email_attachment' => 'Attach PDF to Emails',
'email_settings' => 'E-mail instellingen',
'pdf_email_attachment' => 'PDF als bijlage toevoegen in e-mailberichten',
// application messages
'created_client' => 'Klant succesvol aangemaakt',
@ -217,8 +217,8 @@ return array(
'invoice_error' => 'Selecteer een klant alstublieft en corrigeer mogelijke fouten',
'limit_clients' => 'Sorry, dit zal de klantenlimiet van :count klanten overschrijden',
'payment_error' => 'Er was een fout bij het verwerken van uw betaling. Probeer later alstublieft opnieuw.',
'registration_required' => 'Meld je aan om een factuur te mailen',
'confirmation_required' => 'Bevestig je e-mail adres alstublieft',
'registration_required' => 'Meld u aan om een factuur te mailen',
'confirmation_required' => 'Bevestig uw e-mailadres alstublieft',
'updated_client' => 'Klant succesvol aangepast',
'created_client' => 'Klant succesvol aangemaakt',
@ -253,23 +253,24 @@ return array(
// E-mails
'confirmation_subject' => 'Invoice Ninja Bevestiging Account',
'confirmation_header' => 'Bevestiging Account',
'confirmation_message' => 'Ga alstublieft naar onderstaande link om je account te bevestiging.',
'invoice_message' => 'Om je factuur voor :amount te bekijken, klik op onderstaande link.',
'confirmation_message' => 'Ga alstublieft naar onderstaande link om uw account te bevestiging.',
'invoice_subject' => 'Nieuwe factuur :invoice van :account',
'invoice_message' => 'Klik op onderstaande link ow uw factuur van :amount te bekijken.',
'payment_subject' => 'Betaling ontvangen',
'payment_message' => 'Bedankt voor je betaling van :amount.',
'payment_message' => 'Bedankt voor uw betaling van :amount.',
'email_salutation' => 'Beste :name,',
'email_signature' => 'Met vriendelijke groeten,',
'email_from' => 'Het InvoiceNinja Team',
'user_email_footer' => 'Ga alstublieft naar '.SITE_URL.'/settings/notifications om je e-mail notificatie instellingen aan te passen ',
'invoice_link_message' => 'Klik op volgende link om de Factuur van je klant te bekijken:',
'user_email_footer' => 'Ga alstublieft naar '.SITE_URL.'/settings/notifications om uw e-mail notificatie instellingen aan te passen',
'invoice_link_message' => 'Klik op volgende link om de Factuur van uw klant te bekijken:',
'notification_invoice_paid_subject' => 'Factuur :invoice is betaald door :client',
'notification_invoice_sent_subject' => 'Factuur :invoice is gezonden door :client',
'notification_invoice_viewed_subject' => 'Factuur :invoice is bekeken door :client',
'notification_invoice_paid' => 'Een betaling voor :amount is gemaakt door klant :client voor Factuur :invoice.',
'notification_invoice_sent' => 'De volgende klant :client heeft Factuur :invoice voor :amount gemaild gekregen.',
'notification_invoice_viewed' => 'De volgende klant :client heeft Factuur :invoice voor :amount bekeken.',
'reset_password' => 'Je kan het paswoord van je account resetten door op volgende link te klikken:',
'reset_password_footer' => 'Als je deze paswoord reset niet aangevraagd hebt contacteer dan onze helpdesk alstublieft: ' . CONTACT_EMAIL,
'reset_password' => 'U kunt het paswoord van uw account resetten door op de volgende link te klikken:',
'reset_password_footer' => 'Neem a.u.b. contact op met onze helpdesk indien u deze paswoord reset niet heeft aangevraagd. Het e-mailadres van de helpdesk is ' . CONTACT_EMAIL,
// Payment page
'secure_payment' => 'Veilige betaling',
@ -282,10 +283,10 @@ return array(
'security' => [
'too_many_attempts' => 'Te veel pogingen. Probeer opnieuw binnen enkele minuten.',
'wrong_credentials' => 'Verkeerd e-mailadres of paswoord.',
'confirmation' => 'Je account is bevestigd!',
'confirmation' => 'Uw account is bevestigd!',
'wrong_confirmation' => 'Verkeerde bevestigingscode.',
'password_forgot' => 'De informatie over je paswoord reset is verzonden naar je e-mailadres.',
'password_reset' => 'Je paswoord is succesvol aangepast.',
'password_forgot' => 'De informatie over uw paswoord reset is verzonden naar uw e-mailadres.',
'password_reset' => 'Uw paswoord is succesvol aangepast.',
'wrong_password_reset' => 'Ongeldig paswoord. Probeer opnieuw',
],
@ -296,13 +297,13 @@ return array(
],
'logout' => 'Afmelden',
'sign_up_to_save' => 'Registreer je om je werk op te slaan',
'sign_up_to_save' => 'Registreer u om uw werk op te slaan',
'agree_to_terms' =>'Ik accepteer de Invoice Ninja :terms',
'terms_of_service' => 'Gebruiksvoorwaarden',
'email_taken' => 'Het e-mailadres is al geregistreerd',
'working' => 'Actief',
'success' => 'Succes',
'success_message' => 'Je bent succesvol geregistreerd. Ga alstublieft naar de link in de bevestigingsmail om je e-mailadres te verifi&euml;ren.',
'success_message' => 'U bent succesvol geregistreerd. Ga alstublieft naar de link in de bevestigingsmail om uw e-mailadres te verifi&euml;ren.',
'erase_data' => 'Dit zal uw data permanent verwijderen.',
'password' => 'Wachtwoord',
'invoice_subject' => 'Nieuwe factuur :invoice van :account',
@ -310,9 +311,9 @@ return array(
'pro_plan_product' => 'Pro Plan',
'pro_plan_description' => 'Één jaar abbonnement op het Invoice Ninja Pro Plan.',
'pro_plan_success' => 'Bedankt voor het aanmelden! Zodra je factuur betaald is zal je Pro Plan lidmaatschap beginnen.',
'pro_plan_success' => 'Bedankt voor het aanmelden! Zodra uw factuur betaald is zal uw Pro Plan lidmaatschap beginnen.',
'unsaved_changes' => 'Je hebt niet bewaarde wijzigingen',
'unsaved_changes' => 'U hebt niet bewaarde wijzigingen',
'custom_fields' => 'Aangepaste velden',
'company_fields' => 'Velden Bedrijf',
'client_fields' => 'Velden Klant',
@ -399,7 +400,7 @@ return array(
'hide_paid_to_date' => 'Verberg "Reeds betaald"',
'hide_paid_to_date_help' => 'Toon alleen het "Reeds betaald" gebied op je facturen als er een betaling gemaakt is.',
'charge_taxes' => 'Charge taxes',
'charge_taxes' => 'BTW berekenen',
'user_management' => 'Gebruikersbeheer',
'add_user' => 'Nieuwe gebruiker',
'send_invite' => 'Verstuur uitnodiging',
@ -441,8 +442,8 @@ return array(
'gateway_help_1' => ':link om in te schrijven voor Authorize.net.',
'gateway_help_2' => ':link om in te schrijven voor Authorize.net.',
'gateway_help_17' => ':link om je PayPal API signature te krijgen.',
'gateway_help_23' => 'Opmerking: gebruik je gehieme API key, niet je publiceerbare API key.',
'gateway_help_17' => ':link om uw PayPal API signature te krijgen.',
'gateway_help_23' => 'Opmerking: gebruik uw gehieme API key, niet uw publiceerbare API key.',
'gateway_help_27' => ':link om in te schrijven voor TwoCheckout.',
'more_designs' => 'Meer ontwerpen',
@ -458,9 +459,9 @@ return array(
'sent' => 'verzonden',
'timesheets' => 'Timesheets',
'payment_title' => 'Geef je betalingsadres en kredietkaart gegevens op',
'payment_cvv' => '*Dit is de code van 3-4 tekens op de achterkant van je kaart',
'payment_footer1' => '*Betalingsadres moet overeenkomen met het adres dat aan je kaart gekoppekd is.',
'payment_title' => 'Geef uw betalingsadres en kredietkaart gegevens op',
'payment_cvv' => '*Dit is de code van 3-4 tekens op de achterkant van uw kaart',
'payment_footer1' => '*Betalingsadres moet overeenkomen met het adres dat aan uw kaart gekoppekd is.',
'payment_footer2' => '*Klik alstublieft slechts 1 keer op "PAY NOW" - verwerking kan tot 1 minuut duren.',
'vat_number' => 'BTW Nummer',
'id_number' => 'ID Nummer',
@ -509,7 +510,7 @@ return array(
'approve' => 'Goedkeuren',
'token_billing_type_id' => 'Betalingstoken',
'token_billing_help' => 'Laat je toe om kredietkaart gegevens bij je gateway op te slaan en ze later te gebruiken.',
'token_billing_help' => 'Stelt u in staat om kredietkaart gegevens bij uw gateway op te slaan en ze later te gebruiken.',
'token_billing_1' => 'Inactief',
'token_billing_2' => 'Opt-in - checkbox is getoond maar niet geselecteerd',
'token_billing_3' => 'Opt-out - checkbox is getoond en geselecteerd',
@ -528,7 +529,7 @@ return array(
'billing_address' => 'Facturatie adres',
'billing_method' => 'Betaalmethode',
'order_overview' => 'Order overzicht',
'match_address' => '*Addres moet overeenkomen met adres van creditcard.',
'match_address' => '*Addres moet overeenkomen met adres van kredietkaart.',
'click_once' => '*Please click "PAY NOW" only once - transaction may take up to 1 minute to process.',
'default_invoice_footer' => 'Stel standaard factuur-footer in',
@ -604,7 +605,7 @@ return array(
'www' => 'www',
'logo' => 'Logo',
'subdomain' => 'Subdomein',
'provide_name_or_email' => 'Geef aub een contact naam en email op',
'provide_name_or_email' => 'Geef a.u.b. een contact naam en email op',
'charts_and_reports' => 'Grafieken & Rapporten',
'chart' => 'Grafiek',
'report' => 'Rapport',
@ -652,7 +653,7 @@ return array(
'logged' => 'Gelogd',
'running' => 'Lopend',
'task_error_multiple_clients' => 'Taken kunnen niet tot meerdere klanten behoren',
'task_error_running' => 'Stop aub de lopende taken eerst',
'task_error_running' => 'Stop a.u.b. de lopende taken eerst',
'task_error_invoiced' => 'Deze taken zijn al gefactureerd',
'restored_task' => 'Taak succesvol hersteld',
'archived_task' => 'Taak succesvol gearchiveerd',
@ -686,7 +687,7 @@ return array(
'break_duration' => 'Pauze',
'edit_details' => 'Details aanpassen',
'work' => 'Werk',
'timezone_unset' => ':link om je tijdszone aan te passen',
'timezone_unset' => ':link om uw tijdszone aan te passen',
'click_here' => 'Klik hier',
'email_receipt' => 'Mail betalingsbewijs naar de klant',
@ -701,7 +702,7 @@ return array(
'email_error' => 'Er was een probleem om de email te verzenden',
'confirm_recurring_timing' => 'Opmerking: emails worden aan het begin van het uur verzonden.',
'old_browser' => 'Gebruik aub een <a href="'.OUTDATE_BROWSER_URL.'" target="_blank">nieuwere browser</a>',
'old_browser' => 'Gebruik a.u.b. een <a href="'.OUTDATE_BROWSER_URL.'" target="_blank">nieuwere browser</a>',
'payment_terms_help' => 'Stel de standaard factuur vervaldatum in',
'unlink_account' => 'Koppel account los',
'unlink' => 'Koppel los',
@ -715,7 +716,7 @@ return array(
'dark_mode_help' => 'Toon witte tekst op een donkere achtergrond',
'add_to_invoice' => 'Toevoegen aan factuur :invoice',
'create_new_invoice' => 'Maak een nieuwe factuur',
'task_errors' => 'Pas overlappende tijden aan aub.',
'task_errors' => 'Pas overlappende tijden aan a.u.b..',
'from' => 'Van',
'to' => 'Aan',
'font_size' => 'Tekstgrootte',
@ -748,55 +749,55 @@ return array(
<p>Gebruik dot notatie om een "kind eigenschap" te gebruiken. Bijvoorbeeld voor de klant naam te tonen gebruik je <code>$client.nameValue</code>.</p>
<p>Als je ergens hulp bij nodig hebt, post dan een vraag op ons <a href="https://www.invoiceninja.com/forums/forum/support/" target="_blank">support forum</a>.</p>',
'invoice_due_date' => 'Due Date',
'quote_due_date' => 'Valid Until',
'valid_until' => 'Valid Until',
'reset_terms' => 'Reset terms',
'invoice_due_date' => 'Vervaldatum',
'quote_due_date' => 'Geldig tot',
'valid_until' => 'Geldig tot',
'reset_terms' => 'Reset voorwaarden',
'reset_footer' => 'Reset footer',
'invoices_sent' => ':count invoice sent|:count invoices sent',
'status_draft' => 'Draft',
'status_sent' => 'Sent',
'status_viewed' => 'Viewed',
'status_partial' => 'Partial',
'status_paid' => 'Paid',
'show_line_item_tax' => 'Display <b>line item taxes</b> inline',
'invoices_sent' => ':count factuur verstuurd|:count facturen verstuurd',
'status_draft' => 'Concept',
'status_sent' => 'Verstuurd',
'status_viewed' => 'Bekeken',
'status_partial' => 'Gedeeltelijk',
'status_paid' => 'Betaald',
'show_line_item_tax' => '<b>BTW tarieven per lijn</b> per regel tonen',
'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.',
'iframe_url_help1' => 'Kopieer de volgende code naar een pagina op uw site.',
'iframe_url_help2' => 'U kunt de functionaliteit testen door te klikken op \'Bekijk als ontvanger\' bij een factuur.',
'auto_bill' => 'Auto Bill',
'military_time' => '24 Hour Time',
'last_sent' => 'Last Sent',
'auto_bill' => 'Automatische incasso',
'military_time' => '24 uurs tijd',
'last_sent' => 'Laatst verstuurd',
'reminder_emails' => 'Reminder Emails',
'templates_and_reminders' => 'Templates & Reminders',
'subject' => 'Subject',
'body' => 'Body',
'first_reminder' => 'First Reminder',
'second_reminder' => 'Second Reminder',
'third_reminder' => 'Third Reminder',
'num_days_reminder' => 'Days after due date',
'reminder_subject' => 'Reminder: Invoice :invoice from :account',
'reminder_emails' => 'Herinnerings E-mails',
'templates_and_reminders' => 'Templates & herinneringen',
'subject' => 'Onderwerp',
'body' => 'Tekst',
'first_reminder' => 'Eerste herinnering',
'second_reminder' => 'Tweede herinnering',
'third_reminder' => 'Derde herinnering',
'num_days_reminder' => 'Dagen na vervaldatum',
'reminder_subject' => 'Herinnering: Factuur :invoice van :account',
'reset' => 'Reset',
'invoice_not_found' => 'The requested invoice is not available',
'invoice_not_found' => 'De opgevraagde factuur is niet beschikbaar',
'referral_program' => 'Referral Program',
'referral_code' => 'Referral Code',
'last_sent_on' => 'Last sent on :date',
'last_sent_on' => 'Laatst verstuurd op :date',
'page_expire' => 'This page will expire soon, :click_here to keep working',
'upcoming_quotes' => 'Upcoming Quotes',
'expired_quotes' => 'Expired Quotes',
'page_expire' => 'Deze pagina verloopt binnenkort, :click_here om verder te kunnen werken',
'upcoming_quotes' => 'Eersvolgende offertes',
'expired_quotes' => 'Verlopen offertes',
'sign_up_using' => 'Sign up using',
'invalid_credentials' => 'These credentials do not match our records',
'show_all_options' => 'Show all options',
'user_details' => 'User Details',
'sign_up_using' => 'Meld u aan met',
'invalid_credentials' => 'Deze credentials zijn niet bij ons bekend',
'show_all_options' => 'Alle opties tonen',
'user_details' => 'Gebruiker gegevens',
'oneclick_login' => 'One-Click Login',
'disable' => 'Disable',
'invoice_quote_number' => 'Invoice and Quote Numbers',
'invoice_charges' => 'Invoice Charges',
'disable' => 'Uitzetten',
'invoice_quote_number' => 'Factuur en offerte nummers',
'invoice_charges' => 'Facturatie kosten',
'invitation_status' => [
'sent' => 'Email Sent',
@ -808,41 +809,41 @@ return array(
'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact.',
'notification_quote_bounced_subject' => 'Unable to deliver Quote :invoice',
'custom_invoice_link' => 'Custom Invoice Link',
'custom_invoice_link' => 'Eigen factuur link',
'total_invoiced' => 'Total Invoiced',
'open_balance' => 'Open Balance',
'verify_email' => 'Please visit the link in the account confirmation email to verify your email address.',
'basic_settings' => 'Basic Settings',
'basic_settings' => 'Basis Instellingen',
'pro' => 'Pro',
'gateways' => 'Payment Gateways',
'recurring_too_soon' => 'Het is te vroeg om de volgende wederkerende factuur aan te maken, it\'s scheduled for :date',
'recurring_too_soon' => 'Het is te vroeg om de volgende wederkerende factuur aan te maken, dit is gepland voor :date',
'next_send_on' => 'Send Next: :date',
'no_longer_running' => 'This invoice is not scheduled to run',
'general_settings' => 'General Settings',
'customize' => 'Customize',
'oneclick_login_help' => 'Connect an account to login without a password',
'referral_code_help' => 'Earn money by sharing our app online',
'oneclick_login_help' => 'Verbind een account om zonder wachtwoord in te kunnen loggen',
'referral_code_help' => 'Verdien geld door onze applicatie online te delen',
'enable_with_stripe' => 'Enable | Requires Stripe',
'tax_settings' => 'Tax Settings',
'create_tax_rate' => 'Add Tax Rate',
'updated_tax_rate' => 'Successfully updated tax rate',
'created_tax_rate' => 'Successfully created tax rate',
'edit_tax_rate' => 'Edit tax rate',
'archive_tax_rate' => 'Archive tax rate',
'archived_tax_rate' => 'Successfully archived the tax rate',
'default_tax_rate_id' => 'Default Tax Rate',
'tax_rate' => 'Tax Rate',
'recurring_hour' => 'Recurring Hour',
'pattern' => 'Pattern',
'pattern_help_title' => 'Pattern Help',
'pattern_help_1' => 'Create custom invoice and quote numbers by specifying a pattern',
'pattern_help_2' => 'Available variables:',
'pattern_help_3' => 'For example, :example would be converted to :value',
'see_options' => 'See options',
'invoice_counter' => 'Invoice Counter',
'quote_counter' => 'Quote Counter',
'enable_with_stripe' => 'Aanzetten | Vereist Stripe',
'tax_settings' => 'BTW Instellingen',
'create_tax_rate' => 'Voeg een tarief toe',
'updated_tax_rate' => 'Het tarief is bijgewerkt',
'created_tax_rate' => 'Het tarief is aangemaakt',
'edit_tax_rate' => 'Bewerk tarief',
'archive_tax_rate' => 'Archiveer tarief',
'archived_tax_rate' => 'Het tarief is gearchiveerd',
'default_tax_rate_id' => 'Standaard BTW tarief',
'tax_rate' => 'BTW Tarief',
'recurring_hour' => 'Uur van de dag voor het aanmaken van terugkerende facturen',
'pattern' => 'Patroon',
'pattern_help_title' => 'Help bij Patroon',
'pattern_help_1' => 'Definieer factuur en offerte nummers op basis van een patroon',
'pattern_help_2' => 'Beschikbare variabelen:',
'pattern_help_3' => 'Bijvoorbeeld, :example wordt omgezet naar :value',
'see_options' => 'Zie opties',
'invoice_counter' => 'Factuur teller',
'quote_counter' => 'Offerte teller',
'type' => 'Type',
'activity_1' => ':user created client :client',

View File

@ -32,8 +32,11 @@ return array(
"countbetween" => ":attribute moet tussen :min en :max geselecteerde elementen bevatten.",
"countmax" => ":attribute moet minder dan :max geselecteerde elementen bevatten.",
"countmin" => ":attribute moet minimaal :min geselecteerde elementen bevatten.",
"date" => ":attribute is een ongeldige datum.",
"date_format" => ":attribute moet een geldig datum formaat bevatten.",
"different" => ":attribute en :other moeten verschillend zijn.",
"digits" => ":attribute moet :digits cijfers bevatten.",
"digits_between" => ":attribute moet minimaal :min en maximaal :max cijfers bevatten.",
"email" => ":attribute is geen geldig e-mailadres.",
"exists" => ":attribute bestaat niet.",
"image" => ":attribute moet een afbeelding zijn.",
@ -54,10 +57,12 @@ return array(
"string" => ":attribute moet minimaal :min karakters zijn.",
"array" => ":attribute moet minimaal :min items bevatten."
),
"not_in" => "Het formaat van :attribute is ongeldig.",
"not_in" => "Het geselecteerde :attribute is ongeldig.",
"numeric" => ":attribute moet een nummer zijn.",
"regex" => ":attribute formaat is ongeldig.",
"required" => ":attribute is verplicht.",
"required_with" => ":attribute is verplicht i.c.m. :values",
"required_if" => ":attribute is verplicht wanneer in het veld :other gekozen is voor :value.",
"required_with" => ":attribute is verplicht wanneer :values ingevuld is.",
"required_with_all" => ":attribute is verplicht i.c.m. :values",
"required_without" => ":attribute is verplicht als :values niet ingevuld is.",
"required_without_all" => ":attribute is verplicht als :values niet ingevuld zijn.",
@ -65,7 +70,7 @@ return array(
"size" => array(
"numeric" => ":attribute moet :size zijn.",
"file" => ":attribute moet :size kilobyte zijn.",
"string" => ":attribute moet :size characters zijn.",
"string" => ":attribute moet :size karakters lang zijn.",
"array" => ":attribute moet :size items bevatten."
),
"unique" => ":attribute is al in gebruik.",
@ -75,9 +80,9 @@ return array(
"has_credit" => "De klant heeft niet voldoende krediet.",
"notmasked" => "De waarden zijn verborgen",
"less_than" => 'Het :attribute moet minder zijn dan :value',
"has_counter" => 'The value must contain {$counter}',
"valid_contacts" => "All of the contacts must have either an email or name",
"valid_invoice_items" => "The invoice exceeds the maximum amount",
"has_counter" => 'De waarde moet {$counter} bevatten',
"valid_contacts" => "Alle contacten moeten een e-mailadres of een naam hebben",
"valid_invoice_items" => "De factuur overschrijd het maximale aantal",
/*
|--------------------------------------------------------------------------

View File

@ -37,7 +37,7 @@
NINJA.secondaryColor = $('#secondary_color').val();
NINJA.fontSize = parseInt($('#font_size').val());
var fields = ['item', 'description', 'unit_cost', 'quantity', 'line_total'];
var fields = ['item', 'description', 'unit_cost', 'quantity', 'line_total', 'terms'];
invoiceLabels.old = {};
for (var i=0; i<fields.length; i++) {
var field = fields[i];
@ -102,12 +102,22 @@
<div class="panel-body">
@if (!Utils::isPro() || \App\Models\InvoiceDesign::count() == COUNT_FREE_DESIGNS_SELF_HOST)
{!! Former::select('invoice_design_id')->style('display:inline')->fromQuery($invoiceDesigns, 'name', 'id')->addOption(trans('texts.more_designs') . '...', '-1') !!}
{!! Former::select('invoice_design_id')
->style('display:inline; width:300px')
->fromQuery($invoiceDesigns, 'name', 'id')
->addOption(trans('texts.more_designs') . '...', '-1') !!}
@else
{!! Former::select('invoice_design_id')->style('display:inline')->fromQuery($invoiceDesigns, 'name', 'id') !!}
{!! Former::select('invoice_design_id')
->style('display:inline; width:300px')
->fromQuery($invoiceDesigns, 'name', 'id') !!}
@endif
{!! Former::text('font_size')->type('number')->min('0')->step('1') !!}
{!! Former::text('font_size')
->style('width:300px')
->type('number')
->min('0')
->step('1') !!}
{!! Former::text('primary_color') !!}
{!! Former::text('secondary_color') !!}
@ -116,13 +126,18 @@
<div role="tabpanel" class="tab-pane" id="invoiceLabels">
<div class="panel-body">
<div class="row">
<div class="col-md-6">
{!! Former::text('labels_item')->label(trans('texts.item')) !!}
{!! Former::text('labels_description')->label(trans('texts.description')) !!}
{!! Former::text('labels_unit_cost')->label(trans('texts.unit_cost')) !!}
</div>
<div class="col-md-6">
{!! Former::text('labels_quantity')->label(trans('texts.quantity')) !!}
{!! Former::text('labels_line_total')->label(trans('texts.line_total')) !!}
{!! Former::text('labels_terms')->label(trans('texts.terms')) !!}
</div>
</div>
</div>
</div>

View File

@ -14,7 +14,7 @@
<label for="trashed" style="font-weight:normal; margin-left: 10px;">
<input id="trashed" type="checkbox" onclick="setTrashVisible()"
{!! Session::get('show_trash:user') ? 'checked' : ''!!}/> {!! trans('texts.show_deleted_users')!!}
{!! Session::get('show_trash:user') ? 'checked' : ''!!}/> {!! trans('texts.show_archived_users')!!}
</label>
@include('partials.bulk_form', ['entityType' => ENTITY_USER])

View File

@ -68,7 +68,7 @@
<div class="form-group" style="margin-bottom: 8px">
<div class="col-lg-8 col-sm-8 col-lg-offset-4 col-sm-offset-4">
<a id="createClientLink" class="pointer" data-bind="click: $root.showClientForm, html: $root.clientLinkText"></a>
<span data-bind="visible: $root.invoice().client().public_id() > 0">|
<span data-bind="visible: $root.invoice().client().public_id() > 0" style="display:none">|
<a data-bind="attr: {href: '{{ url('/clients') }}/' + $root.invoice().client().public_id()}" target="_blank">{{ trans('texts.view_client') }}</a>
</span>
</div>

View File

@ -72,7 +72,7 @@
@endif
var NINJA = NINJA || {};
@if (Utils::isPro())
@if ($account->isPro())
NINJA.primaryColor = "{{ $account->primary_color }}";
NINJA.secondaryColor = "{{ $account->secondary_color }}";
NINJA.fontSize = {{ $account->font_size }};

View File

@ -50,12 +50,20 @@
return generatePDF(invoice, invoice.invoice_design.javascript, true, cb);
}
if (window.hasOwnProperty('pjsc_meta')) {
window['pjsc_meta'].remainingTasks++;
}
$(function() {
@if (Input::has('phantomjs'))
doc = getPDFString();
doc.getDataUrl(function(pdfString) {
document.write(pdfString);
document.close();
if (window.hasOwnProperty('pjsc_meta')) {
window['pjsc_meta'].remainingTasks--;
}
});
@else
refreshPDF();