mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-09-19 16:01:34 +02:00
Merge branch 'master' of github.com:hillelcoren/invoice-ninja into laravel-5
This commit is contained in:
commit
37921e4653
@ -263,6 +263,8 @@ class AccountController extends \BaseController
|
||||
$account->invoice_number_counter = Input::get('invoice_number_counter');
|
||||
$account->quote_number_prefix = Input::get('quote_number_prefix');
|
||||
$account->share_counter = Input::get('share_counter') ? true : false;
|
||||
|
||||
$account->pdf_email_attachment = Input::get('pdf_email_attachment') ? true : false;
|
||||
|
||||
if (!$account->share_counter) {
|
||||
$account->quote_number_counter = Input::get('quote_number_counter');
|
||||
|
@ -398,6 +398,10 @@ class InvoiceController extends \BaseController
|
||||
Utils::trackViewed($client->getDisplayName(), ENTITY_CLIENT, $url);
|
||||
}
|
||||
|
||||
if (!empty(Input::get('pdfupload')) && strpos(Input::get('pdfupload'), 'data:application/pdf;base64,') === 0) {
|
||||
$this->storePDF(Input::get('pdfupload'), $input->invoice->public_id);
|
||||
}
|
||||
|
||||
if ($action == 'clone') {
|
||||
return $this->cloneInvoice($publicId);
|
||||
} elseif ($action == 'convert') {
|
||||
@ -540,4 +544,18 @@ class InvoiceController extends \BaseController
|
||||
|
||||
return View::make('invoices.history', $data);
|
||||
}
|
||||
|
||||
private function storePDF($encodedString, $public_id)
|
||||
{
|
||||
$uploadsDir = storage_path().'/pdfcache/';
|
||||
$encodedString = str_replace('data:application/pdf;base64,', '', $encodedString);
|
||||
$name = 'cache-'.$public_id.'.pdf';
|
||||
|
||||
if (file_put_contents($uploadsDir.$name, base64_decode($encodedString)) !== false) {
|
||||
$finfo = new finfo(FILEINFO_MIME);
|
||||
if ($finfo->file($uploadsDir.$name) !== 'application/pdf; charset=binary') {
|
||||
unlink($uploadsDir.$name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -93,7 +93,8 @@ class Invoice extends EntityModel
|
||||
'custom_value1',
|
||||
'custom_value2',
|
||||
'custom_taxes1',
|
||||
'custom_taxes2', ]);
|
||||
'custom_taxes2',
|
||||
]);
|
||||
|
||||
$this->client->setVisible([
|
||||
'name',
|
||||
@ -110,7 +111,8 @@ class Invoice extends EntityModel
|
||||
'country',
|
||||
'currency_id',
|
||||
'custom_value1',
|
||||
'custom_value2', ]);
|
||||
'custom_value2',
|
||||
]);
|
||||
|
||||
$this->account->setVisible([
|
||||
'name',
|
||||
@ -136,7 +138,9 @@ class Invoice extends EntityModel
|
||||
'hide_quantity',
|
||||
'hide_paid_to_date',
|
||||
'custom_invoice_label1',
|
||||
'custom_invoice_label2', ]);
|
||||
'custom_invoice_label2',
|
||||
'pdf_email_attachment',
|
||||
]);
|
||||
|
||||
foreach ($this->invoice_items as $invoiceItem) {
|
||||
$invoiceItem->setVisible([
|
||||
@ -145,7 +149,8 @@ class Invoice extends EntityModel
|
||||
'cost',
|
||||
'qty',
|
||||
'tax_name',
|
||||
'tax_rate', ]);
|
||||
'tax_rate',
|
||||
]);
|
||||
}
|
||||
|
||||
foreach ($this->client->contacts as $contact) {
|
||||
@ -153,7 +158,8 @@ class Invoice extends EntityModel
|
||||
'first_name',
|
||||
'last_name',
|
||||
'email',
|
||||
'phone', ]);
|
||||
'phone',
|
||||
]);
|
||||
}
|
||||
|
||||
return $this;
|
||||
|
@ -43,6 +43,7 @@ class ContactMailer extends Mailer
|
||||
$data['body'] = str_replace(array_keys($variables), array_values($variables), $emailTemplate);
|
||||
$data['link'] = $invitation->getLink();
|
||||
$data['entityType'] = $entityType;
|
||||
$data['id'] = $invoice->getAttributes()['id'];
|
||||
|
||||
$fromEmail = $invitation->user->email;
|
||||
$this->sendTo($invitation->contact->email, $fromEmail, $accountName, $subject, $view, $data);
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
use Mail;
|
||||
use Utils;
|
||||
use Invoice;
|
||||
|
||||
class Mailer
|
||||
{
|
||||
@ -12,13 +13,27 @@ class Mailer
|
||||
'emails.'.$view.'_text',
|
||||
];
|
||||
|
||||
Mail::send($views, $data, function ($message) use ($toEmail, $fromEmail, $fromName, $subject) {
|
||||
Mail::send($views, $data, function ($message) use ($toEmail, $fromEmail, $fromName, $subject, $data) {
|
||||
$replyEmail = $fromEmail;
|
||||
|
||||
// http://stackoverflow.com/questions/2421234/gmail-appearing-to-ignore-reply-to
|
||||
if (Utils::isNinja() && $toEmail != CONTACT_EMAIL) {
|
||||
$fromEmail = NINJA_FROM_EMAIL;
|
||||
}
|
||||
|
||||
if(isset($data['id'])) {
|
||||
$invoice = Invoice::find($data['id']);
|
||||
$invoice->load('account');
|
||||
$accountAttributes = $invoice->account()->getParent()->getRelations()['account']->getAttributes();
|
||||
$pdfPath = storage_path().'/pdfcache/cache-'.$invoice->getAttributes()['public_id'].'.pdf';
|
||||
|
||||
if($accountAttributes['pdf_email_attachment'] === 1 && file_exists($pdfPath)) {
|
||||
$message->attach(
|
||||
$pdfPath,
|
||||
array('as' => $accountAttributes['name'].'_'.$accountAttributes['invoice_number_prefix'].$invoice->getName().'.pdf', 'mime' => 'application/pdf')
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//$message->setEncoder(\Swift_Encoding::get8BitEncoding());
|
||||
$message->to($toEmail)->from($fromEmail, $fromName)->replyTo($replyEmail, $fromName)->subject($subject);
|
||||
|
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class AddPdfEmailAttachmentOption extends Migration {
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('accounts', function($table)
|
||||
{
|
||||
$table->smallInteger('pdf_email_attachment')->default(0);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('accounts', function($table)
|
||||
{
|
||||
$table->dropColumn('pdf_email_attachment');
|
||||
});
|
||||
}
|
||||
|
||||
}
|
@ -11,7 +11,7 @@ If you'd like to use our code to sell your own invoicing app we have an affiliat
|
||||
|
||||
Most online invoicing sites are expensive. They shouldn't be. The aim of this project is to provide a free, open-source alternative. Additionally, the hope is the codebase will serve as a sample site for Laravel as well as other JavaScript technologies.
|
||||
|
||||
To setup the site you can either use this [zip file](http://www.invoiceninja.com/knowledgebase/self-host/) (easier to setup) or checkout the code from GitHub following the instructions below (easier to stay up to date).
|
||||
To setup the site you can either use this [zip file](https://www.invoiceninja.com/knowledgebase/self-host/) (easier to setup) or checkout the code from GitHub following the instructions below (easier to stay up to date).
|
||||
|
||||
For a WAMP/MAMP/LAMP setup you can one-click install using Softaculous's [AMPPS](http://www.ampps.com/). To deploy the app with [Docker](http://www.docker.com/) you can use [this project](https://github.com/rollbrettler/Dockerfiles/tree/master/invoice-ninja).
|
||||
|
||||
@ -39,9 +39,9 @@ Developed by [@hillelcoren](https://twitter.com/hillelcoren) | Designed by [kant
|
||||
|
||||
### Documentation
|
||||
|
||||
* [Self Host](http://www.invoiceninja.com/knowledgebase/self-host/)
|
||||
* [API Documentation](http://www.invoiceninja.com/knowledgebase/api-documentation/)
|
||||
* [Developer Guide](http://www.invoiceninja.com/knowledgebase/developer-guide/)
|
||||
* [Self Host](https://www.invoiceninja.com/knowledgebase/self-host/)
|
||||
* [API Documentation](https://www.invoiceninja.com/knowledgebase/api-documentation/)
|
||||
* [Developer Guide](https://www.invoiceninja.com/knowledgebase/developer-guide/)
|
||||
|
||||
### Steps to setup from GitHub
|
||||
|
||||
|
@ -208,6 +208,8 @@ return array(
|
||||
'import_to' => 'Importer til',
|
||||
'client_will_create' => 'Klient vil blive oprettet',
|
||||
'clients_will_create' => 'Klienter vil blive oprettet',
|
||||
'email_settings' => 'Email Settings',
|
||||
'pdf_email_attachment' => 'Attach PDF to Emails',
|
||||
|
||||
// application messages
|
||||
'created_client' => 'Klient oprettet succesfuldt',
|
||||
|
@ -205,6 +205,8 @@ return array(
|
||||
'import_to' => 'Importieren nach',
|
||||
'client_will_create' => 'Kunde wird erstellt',
|
||||
'clients_will_create' => 'Kunden werden erstellt',
|
||||
'email_settings' => 'E-Mail Einstellungen',
|
||||
'pdf_email_attachment' => 'PDF an E-Mails anhängen',
|
||||
|
||||
// application messages
|
||||
'created_client' => 'Kunde erfolgreich angelegt',
|
||||
|
@ -206,6 +206,8 @@ return array(
|
||||
'import_to' => 'Import to',
|
||||
'client_will_create' => 'client will be created',
|
||||
'clients_will_create' => 'clients will be created',
|
||||
'email_settings' => 'Email Settings',
|
||||
'pdf_email_attachment' => 'Attach PDF to Emails',
|
||||
|
||||
// application messages
|
||||
'created_client' => 'Successfully created client',
|
||||
|
@ -205,6 +205,8 @@ return array(
|
||||
'import_to' => 'Importar a',
|
||||
'client_will_create' => 'cliente se creará', //What is this for, context of it's use
|
||||
'clients_will_create' => 'clientes se crearan', //What is this for, context of it's use
|
||||
'email_settings' => 'Email Settings',
|
||||
'pdf_email_attachment' => 'Attach PDF to Emails',
|
||||
|
||||
// application messages
|
||||
'created_client' => 'cliente creado con éxito',
|
||||
|
@ -206,6 +206,8 @@ return array(
|
||||
'import_to' => 'Importer en tant que',
|
||||
'client_will_create' => 'client sera créé',
|
||||
'clients_will_create' => 'clients seront créés',
|
||||
'email_settings' => 'Email Settings',
|
||||
'pdf_email_attachment' => 'Attach PDF to Emails',
|
||||
|
||||
// application messages
|
||||
'created_client' => 'Client créé avec succès',
|
||||
|
@ -206,6 +206,8 @@ return array(
|
||||
'import_to' => 'Importa in',
|
||||
'client_will_create' => 'il cliente sarà creato',
|
||||
'clients_will_create' => 'i clienti saranno creati',
|
||||
'email_settings' => 'Email Settings',
|
||||
'pdf_email_attachment' => 'Attach PDF to Emails',
|
||||
|
||||
// application messages
|
||||
'created_client' => 'Cliente creato con successo',
|
||||
|
@ -206,6 +206,8 @@ return array(
|
||||
'import_to' => 'Import to',
|
||||
'client_will_create' => 'client will be created',
|
||||
'clients_will_create' => 'clients will be created',
|
||||
'email_settings' => 'Email Settings',
|
||||
'pdf_email_attachment' => 'Attach PDF to Emails',
|
||||
|
||||
// application messages
|
||||
'created_client' => 'Successfully created client',
|
||||
|
@ -206,6 +206,8 @@ return array(
|
||||
'import_to' => 'Importer til',
|
||||
'client_will_create' => 'Klient vil bli opprettet',
|
||||
'clients_will_create' => 'Klienter vil bli opprettet',
|
||||
'email_settings' => 'Email Settings',
|
||||
'pdf_email_attachment' => 'Attach PDF to Emails',
|
||||
|
||||
// application messages
|
||||
'created_client' => 'Klient opprettet suksessfullt',
|
||||
|
@ -205,6 +205,8 @@ return array(
|
||||
'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',
|
||||
|
||||
// application messages
|
||||
'created_client' => 'Klant succesvol aangemaakt',
|
||||
@ -307,18 +309,18 @@ return array(
|
||||
'close' => 'Sluiten',
|
||||
|
||||
'pro_plan_product' => 'Pro Plan',
|
||||
'pro_plan_description' => 'One year enrollment in the Invoice Ninja Pro Plan.',
|
||||
'pro_plan_success' => 'Thanks for joining! Once the invoice is paid your Pro Plan membership will begin.',
|
||||
'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.',
|
||||
|
||||
'unsaved_changes' => 'You have unsaved changes',
|
||||
'unsaved_changes' => 'Je hebt niet bewaarde wijzigingen',
|
||||
'custom_fields' => 'Custom fields',
|
||||
'company_fields' => 'Company Fields',
|
||||
'client_fields' => 'Client Fields',
|
||||
'field_label' => 'Field Label',
|
||||
'field_value' => 'Field Value',
|
||||
'edit' => 'Edit',
|
||||
'view_invoice' => 'View invoice',
|
||||
'view_as_recipient' => 'View as recipient',
|
||||
'edit' => 'Bewerk',
|
||||
'view_invoice' => 'Bekijk factuur',
|
||||
'view_as_recipient' => 'Bekijk als ontvanger',
|
||||
|
||||
// product management
|
||||
'product_library' => 'Product Library',
|
||||
@ -336,105 +338,105 @@ return array(
|
||||
'archived_product' => 'Successfully archived product',
|
||||
'pro_plan_custom_fields' => ':link to enable custom fields by joining the Pro Plan',
|
||||
|
||||
'advanced_settings' => 'Advanced Settings',
|
||||
'advanced_settings' => 'Geavanceerde instellingen',
|
||||
'pro_plan_advanced_settings' => ':link to enable the advanced settings by joining the Pro Plan',
|
||||
'invoice_design' => 'Invoice Design',
|
||||
'specify_colors' => 'Specify colors',
|
||||
'specify_colors_label' => 'Select the colors used in the invoice',
|
||||
'invoice_design' => 'Factuur ontwerp',
|
||||
'specify_colors' => 'Kies kleuren',
|
||||
'specify_colors_label' => 'Kies de kleuren die in de factuur gebruikt worden',
|
||||
|
||||
'chart_builder' => 'Chart Builder',
|
||||
'ninja_email_footer' => 'Use :site to invoice your clients and get paid online for free!',
|
||||
'ninja_email_footer' => 'Gebruik :site om uw klanten gratis te factureren en betalingen te ontvangen!',
|
||||
'go_pro' => 'Go Pro',
|
||||
|
||||
// Quotes
|
||||
'quote' => 'Quote',
|
||||
'quotes' => 'Quotes',
|
||||
'quote_number' => 'Quote Number',
|
||||
'quote_number_short' => 'Quote #',
|
||||
'quote_date' => 'Quote Date',
|
||||
'quote_total' => 'Quote Total',
|
||||
'your_quote' => 'Your Quote',
|
||||
'total' => 'Total',
|
||||
'clone' => 'Clone',
|
||||
'quote' => 'Offerte',
|
||||
'quotes' => 'Offertes',
|
||||
'quote_number' => 'Offerte Number',
|
||||
'quote_number_short' => 'Offerte #',
|
||||
'quote_date' => 'Offerte Datum',
|
||||
'quote_total' => 'Offerte Totaal',
|
||||
'your_quote' => 'Uw Offerte',
|
||||
'total' => 'Totaal',
|
||||
'clone' => 'Kloon',
|
||||
|
||||
'new_quote' => 'New Quote',
|
||||
'create_quote' => 'Create Quote',
|
||||
'edit_quote' => 'Edit Quote',
|
||||
'archive_quote' => 'Archive Quote',
|
||||
'delete_quote' => 'Delete Quote',
|
||||
'save_quote' => 'Save Quote',
|
||||
'email_quote' => 'Email Quote',
|
||||
'clone_quote' => 'Clone Quote',
|
||||
'convert_to_invoice' => 'Convert to Invoice',
|
||||
'view_invoice' => 'View Invoice',
|
||||
'view_quote' => 'View Quote',
|
||||
'view_client' => 'View Client',
|
||||
'new_quote' => 'Nieuwe Offerte',
|
||||
'create_quote' => 'Maak offerte aan',
|
||||
'edit_quote' => 'Bewerk Offecte',
|
||||
'archive_quote' => 'Archiveer Offerte',
|
||||
'delete_quote' => 'Verwijder Offerte',
|
||||
'save_quote' => 'Bewaar Offerte',
|
||||
'email_quote' => 'Email Offerte',
|
||||
'clone_quote' => 'Kloon Offerte',
|
||||
'convert_to_invoice' => 'Zet om naar Factuur',
|
||||
'view_invoice' => 'Bekijk Factuur',
|
||||
'view_quote' => 'Bekijk Offerte',
|
||||
'view_client' => 'Bekijk Klant',
|
||||
|
||||
'updated_quote' => 'Successfully updated quote',
|
||||
'created_quote' => 'Successfully created quote',
|
||||
'cloned_quote' => 'Successfully cloned quote',
|
||||
'emailed_quote' => 'Successfully emailed quote',
|
||||
'archived_quote' => 'Successfully archived quote',
|
||||
'archived_quotes' => 'Successfully archived :count quotes',
|
||||
'deleted_quote' => 'Successfully deleted quote',
|
||||
'deleted_quotes' => 'Successfully deleted :count quotes',
|
||||
'converted_to_invoice' => 'Successfully converted quote to invoice',
|
||||
'updated_quote' => 'Offerte succesvol bijgewerkt',
|
||||
'created_quote' => 'Offerte succesvol aangemaakt',
|
||||
'cloned_quote' => 'Offerte succesvol gekopieerd',
|
||||
'emailed_quote' => 'Offerte succesvol gemaild',
|
||||
'archived_quote' => 'Offerte succesvol gearchiveerd',
|
||||
'archived_quotes' => ':count offertes succesvol gearchiveerd',
|
||||
'deleted_quote' => 'Offerte succesvol verwijderd',
|
||||
'deleted_quotes' => ':count offertes succesvol verwijderd',
|
||||
'converted_to_invoice' => 'Offerte succesvol omgezet naar factuur',
|
||||
|
||||
'quote_subject' => 'New quote from :account',
|
||||
'quote_message' => 'To view your quote for :amount, click the link below.',
|
||||
'quote_link_message' => 'To view your client quote click the link below:',
|
||||
'notification_quote_sent_subject' => 'Quote :invoice was sent to :client',
|
||||
'notification_quote_viewed_subject' => 'Quote :invoice was viewed by :client',
|
||||
'notification_quote_sent' => 'The following client :client was emailed Quote :invoice for :amount.',
|
||||
'notification_quote_viewed' => 'The following client :client viewed Quote :invoice for :amount.',
|
||||
'quote_subject' => 'Nieuwe offerte van :account',
|
||||
'quote_message' => 'Om uw offerte voor :amount te bekijken, klik op de link hieronder.',
|
||||
'quote_link_message' => 'Klik op de link hieronder om de offerte te bekijken:',
|
||||
'notification_quote_sent_subject' => 'Offerte :invoice is verstuurd naar :client',
|
||||
'notification_quote_viewed_subject' => 'Offerte :invoice is bekeken door :client',
|
||||
'notification_quote_sent' => 'Klant :client heeft offerte :invoice voor :amount per email ontvangen.',
|
||||
'notification_quote_viewed' => 'Klant :client heeft offerte :invoice voor :amount bekeken.',
|
||||
|
||||
'session_expired' => 'Your session has expired.',
|
||||
'session_expired' => 'Uw sessie is verlopen.',
|
||||
|
||||
'invoice_fields' => 'Invoice Fields',
|
||||
'invoice_options' => 'Invoice Options',
|
||||
'hide_quantity' => 'Hide quantity',
|
||||
'hide_quantity_help' => 'If your line items quantities are always 1, then you can declutter invoices by no longer displaying this field.',
|
||||
'invoice_fields' => 'Factuur Velden',
|
||||
'invoice_options' => 'Factuur Opties',
|
||||
'hide_quantity' => 'Verberg aantallen',
|
||||
'hide_quantity_help' => 'Als us artikel-aantallen altijd 1 zijn, kunt u uw facturen er netter uit laten zien door dit veld te verbergen.',
|
||||
'hide_paid_to_date' => 'Hide paid to date',
|
||||
'hide_paid_to_date_help' => 'Only display the "Paid to Date" area on your invoices once a payment has been received.',
|
||||
|
||||
'charge_taxes' => 'Charge taxes',
|
||||
'user_management' => 'User Management',
|
||||
'add_user' => 'Add User',
|
||||
'send_invite' => 'Send invitation',
|
||||
'sent_invite' => 'Successfully sent invitation',
|
||||
'updated_user' => 'Successfully updated user',
|
||||
'invitation_message' => 'You\'ve been invited by :invitor. ',
|
||||
'register_to_add_user' => 'Please sign up to add a user',
|
||||
'user_state' => 'State',
|
||||
'edit_user' => 'Edit User',
|
||||
'delete_user' => 'Delete User',
|
||||
'active' => 'Active',
|
||||
'user_management' => 'Gebruikersbeheer',
|
||||
'add_user' => 'Nieuwe gebruiker',
|
||||
'send_invite' => 'Verstuur uitnodiging',
|
||||
'sent_invite' => 'Uitnodiging succesvol verzonden',
|
||||
'updated_user' => 'Gebruiker succesvol aangepast',
|
||||
'invitation_message' => 'U bent uigenodigd door :invitor. ',
|
||||
'register_to_add_user' => 'Meld u aan om een gebruiker toe te voegen',
|
||||
'user_state' => 'Status',
|
||||
'edit_user' => 'Bewerk Gebruiker',
|
||||
'delete_user' => 'Verwijder Gebruiker',
|
||||
'active' => 'Actief',
|
||||
'pending' => 'Pending',
|
||||
'deleted_user' => 'Successfully deleted user',
|
||||
'limit_users' => 'Sorry, this will exceed the limit of ' . MAX_NUM_USERS . ' users',
|
||||
'deleted_user' => 'Gebruiker succesvol verwijderd',
|
||||
'limit_users' => 'Sorry, dit zou de limiet van ' . MAX_NUM_USERS . ' gebruikers overschrijden',
|
||||
|
||||
'confirm_email_invoice' => 'Are you sure you want to email this invoice?',
|
||||
'confirm_email_quote' => 'Are you sure you want to email this quote?',
|
||||
'confirm_recurring_email_invoice' => 'Recurring is enabled, are you sure you want this invoice emailed?',
|
||||
'confirm_email_invoice' => 'Weet u zeker dat u deze factuur wilt mailen?',
|
||||
'confirm_email_quote' => 'Weet u zeker dat u deze offerte wilt mailen?',
|
||||
'confirm_recurring_email_invoice' => 'Terugkeren (herhalen) staat aan, weet u zeker dat u deze factuur wilt mailen?',
|
||||
|
||||
'cancel_account' => 'Cancel Account',
|
||||
'cancel_account_message' => 'Warning: This will permanently erase all of your data, there is no undo.',
|
||||
'go_back' => 'Go Back',
|
||||
'cancel_account' => 'Zeg Account Op',
|
||||
'cancel_account_message' => 'Waarschuwing: Dit zal al uw data verwijderen. Er is geen manier om dit ongedaan te maken',
|
||||
'go_back' => 'Ga Terug',
|
||||
|
||||
'data_visualizations' => 'Data Visualizations',
|
||||
'sample_data' => 'Sample data shown',
|
||||
'hide' => 'Hide',
|
||||
'new_version_available' => 'A new version of :releases_link is available. You\'re running v:user_version, the latest is v:latest_version',
|
||||
'data_visualizations' => 'Data Visualisaties',
|
||||
'sample_data' => 'Voorbeelddata getoond',
|
||||
'hide' => 'Verberg',
|
||||
'new_version_available' => 'Een nieuwe versie van :releases_link is beschikbaar. U gebruikt nu v:user_version, de laatste versie is v:latest_version',
|
||||
|
||||
'invoice_settings' => 'Invoice Settings',
|
||||
'invoice_number_prefix' => 'Invoice Number Prefix',
|
||||
'invoice_number_counter' => 'Invoice Number Counter',
|
||||
'quote_number_prefix' => 'Quote Number Prefix',
|
||||
'quote_number_counter' => 'Quote Number Counter',
|
||||
'share_invoice_counter' => 'Share invoice counter',
|
||||
'invoice_issued_to' => 'Invoice issued to',
|
||||
'invalid_counter' => 'To prevent a possible conflict please set either an invoice or quote number prefix',
|
||||
'mark_sent' => 'Mark sent',
|
||||
'invoice_settings' => 'Factuur Instellingen',
|
||||
'invoice_number_prefix' => 'Factuurnummer Prefix',
|
||||
'invoice_number_counter' => 'Factuurnummer Teller',
|
||||
'quote_number_prefix' => 'Offertenummer Prefix',
|
||||
'quote_number_counter' => 'Offertenummer Teller',
|
||||
'share_invoice_counter' => 'Deel factuur teller',
|
||||
'invoice_issued_to' => 'Factuur uitgegeven aan',
|
||||
'invalid_counter' => 'Stel een factuurnummer prefix of offertenummer prefix in om een mogelijk conflict te voorkomen.',
|
||||
'mark_sent' => 'Markeer als verzonden',
|
||||
|
||||
|
||||
'gateway_help_1' => ':link to sign up for Authorize.net.',
|
||||
@ -443,17 +445,17 @@ return array(
|
||||
'gateway_help_23' => 'Note: use your secret API key, not your publishable API key.',
|
||||
'gateway_help_27' => ':link to sign up for TwoCheckout.',
|
||||
|
||||
'more_designs' => 'More designs',
|
||||
'more_designs_title' => 'Additional Invoice Designs',
|
||||
'more_designs' => 'Meer ontwerpen',
|
||||
'more_designs_title' => 'Aanvullende Factuur Ontwerpen',
|
||||
'more_designs_cloud_header' => 'Go Pro for more invoice designs',
|
||||
'more_designs_cloud_text' => '',
|
||||
'more_designs_self_host_header' => 'Get 6 more invoice designs for just $'.INVOICE_DESIGNS_PRICE,
|
||||
'more_designs_self_host_header' => 'Krijg 6 extra factuurontwerpen voor maar $'.INVOICE_DESIGNS_PRICE,
|
||||
'more_designs_self_host_text' => '',
|
||||
'buy' => 'Buy',
|
||||
'bought_designs' => 'Successfully added additional invoice designs',
|
||||
'buy' => 'Koop',
|
||||
'bought_designs' => 'Aanvullende factuurontwerpen succesvol toegevoegd',
|
||||
|
||||
|
||||
'sent' => 'sent',
|
||||
'sent' => 'verzonden',
|
||||
'timesheets' => 'Timesheets',
|
||||
|
||||
'payment_title' => 'Enter Your Billing Address and Credit Card information',
|
||||
@ -464,47 +466,47 @@ return array(
|
||||
'id_number' => 'ID Number',
|
||||
|
||||
'white_label_link' => 'White label',
|
||||
'white_label_text' => 'Purchase a white label license for $'.WHITE_LABEL_PRICE.' to remove the Invoice Ninja branding from the top of the client pages.',
|
||||
'white_label_text' => 'Koop een white label licentie voor $'.WHITE_LABEL_PRICE.' om de Invoice Ninja merknaam te verwijderen uit de bovenkant van de klantenpagina\'s.',
|
||||
'white_label_header' => 'White Label',
|
||||
'bought_white_label' => 'Successfully enabled white label license',
|
||||
'bought_white_label' => 'White label licentie succesvol geactiveerd',
|
||||
'white_labeled' => 'White labeled',
|
||||
|
||||
|
||||
'restore' => 'Restore',
|
||||
'restore_invoice' => 'Restore Invoice',
|
||||
'restore_quote' => 'Restore Quote',
|
||||
'restore_client' => 'Restore Client',
|
||||
'restore_credit' => 'Restore Credit',
|
||||
'restore_payment' => 'Restore Payment',
|
||||
'restore' => 'Herstel',
|
||||
'restore_invoice' => 'Herstel Factuur',
|
||||
'restore_quote' => 'Herstel Offerte',
|
||||
'restore_client' => 'Herstel Klant',
|
||||
'restore_credit' => 'Herstel Kredietnota',
|
||||
'restore_payment' => 'Herstel Betaling',
|
||||
|
||||
'restored_invoice' => 'Successfully restored invoice',
|
||||
'restored_quote' => 'Successfully restored quote',
|
||||
'restored_client' => 'Successfully restored client',
|
||||
'restored_payment' => 'Successfully restored payment',
|
||||
'restored_credit' => 'Successfully restored credit',
|
||||
'restored_invoice' => 'Factuur succesvol hersteld',
|
||||
'restored_quote' => 'Offerte succesvol hersteld',
|
||||
'restored_client' => 'Klant succesvol hersteld',
|
||||
'restored_payment' => 'Betaling succesvol hersteld',
|
||||
'restored_credit' => 'Kredietnota succesvol hersteld',
|
||||
|
||||
'reason_for_canceling' => 'Help us improve our site by telling us why you\'re leaving.',
|
||||
'discount_percent' => 'Percent',
|
||||
'discount_amount' => 'Amount',
|
||||
'reason_for_canceling' => 'Help ons om onze site te verbeteren door ons te vertellen waarom u weggaat.',
|
||||
'discount_percent' => 'Percentage',
|
||||
'discount_amount' => 'Bedrag',
|
||||
|
||||
'invoice_history' => 'Invoice History',
|
||||
'quote_history' => 'Quote History',
|
||||
'current_version' => 'Current version',
|
||||
'select_versiony' => 'Select version',
|
||||
'view_history' => 'View History',
|
||||
'invoice_history' => 'Factuur geschiedenis',
|
||||
'quote_history' => 'Offerte Geschiedenis',
|
||||
'current_version' => 'Huidige Versie',
|
||||
'select_versiony' => 'Selecteer versie',
|
||||
'view_history' => 'Bekijk Geschiedenis',
|
||||
|
||||
'edit_payment' => 'Edit Payment',
|
||||
'updated_payment' => 'Successfully updated payment',
|
||||
'deleted' => 'Deleted',
|
||||
'restore_user' => 'Restore User',
|
||||
'restored_user' => 'Successfully restored user',
|
||||
'show_deleted_users' => 'Show deleted users',
|
||||
'edit_payment' => 'Bewerk Betaling',
|
||||
'updated_payment' => 'Betaling succesvol bijgewerkt',
|
||||
'deleted' => 'Verwijderd',
|
||||
'restore_user' => 'Herstel gebruiker',
|
||||
'restored_user' => 'Gebruiker succesvol hersteld',
|
||||
'show_deleted_users' => 'Toon verwijderde gebruikers',
|
||||
'email_templates' => 'Email Templates',
|
||||
'invoice_email' => 'Invoice Email',
|
||||
'payment_email' => 'Payment Email',
|
||||
'quote_email' => 'Quote Email',
|
||||
'reset_all' => 'Reset All',
|
||||
'approve' => 'Approve',
|
||||
'invoice_email' => 'Factuur Email',
|
||||
'payment_email' => 'Betaling Email',
|
||||
'quote_email' => 'Offerte Email',
|
||||
'reset_all' => 'Reset Alles',
|
||||
'approve' => 'Goedkeuren',
|
||||
|
||||
'token_billing_type_id' => 'Token Billing',
|
||||
'token_billing_help' => 'Enables you to store credit cards with your gateway, and charge them at a later date.',
|
||||
@ -519,29 +521,29 @@ return array(
|
||||
'token_billing' => 'Save card details',
|
||||
'token_billing_secure' => 'The data is stored securely by :stripe_link',
|
||||
|
||||
'support' => 'Support',
|
||||
'contact_information' => 'Contact information',
|
||||
'256_encryption' => '256-Bit Encryption',
|
||||
'amount_due' => 'Amount due',
|
||||
'billing_address' => 'Billing address',
|
||||
'billing_method' => 'Billing method',
|
||||
'order_overview' => 'Order overview',
|
||||
'match_address' => '*Address must match address associated with credit card.',
|
||||
'support' => 'Ondersteuning',
|
||||
'contact_information' => 'Contact informatie',
|
||||
'256_encryption' => '256-Bit Encryptie',
|
||||
'amount_due' => 'Te betalen bedrag',
|
||||
'billing_address' => 'Facturatie adres',
|
||||
'billing_method' => 'Betaalmethode',
|
||||
'order_overview' => 'Order overzicht',
|
||||
'match_address' => '*Addres moet overeenkomen met adres van creditcard.',
|
||||
'click_once' => '*Please click "PAY NOW" only once - transaction may take up to 1 minute to process.',
|
||||
|
||||
'default_invoice_footer' => 'Set default invoice footer',
|
||||
'invoice_footer' => 'Invoice footer',
|
||||
'save_as_default_footer' => 'Save as default footer',
|
||||
'default_invoice_footer' => 'Stel standaard factuur-footer in',
|
||||
'invoice_footer' => 'Factuur footer',
|
||||
'save_as_default_footer' => 'Bewaar als standaard footer',
|
||||
|
||||
'token_management' => 'Token Management',
|
||||
'token_management' => 'Token Beheer',
|
||||
'tokens' => 'Tokens',
|
||||
'add_token' => 'Add Token',
|
||||
'show_deleted_tokens' => 'Show deleted tokens',
|
||||
'deleted_token' => 'Successfully deleted token',
|
||||
'created_token' => 'Successfully created token',
|
||||
'updated_token' => 'Successfully updated token',
|
||||
'edit_token' => 'Edit Token',
|
||||
'delete_token' => 'Delete Token',
|
||||
'add_token' => 'Voeg Token Toe',
|
||||
'show_deleted_tokens' => 'Toon verwijderde tokens',
|
||||
'deleted_token' => 'Token succesvol verwijderd',
|
||||
'created_token' => 'Token succesvol aangemaakt',
|
||||
'updated_token' => 'Token succesvol aangepast',
|
||||
'edit_token' => 'Bewerk Token',
|
||||
'delete_token' => 'Verwijder Token',
|
||||
'token' => 'Token',
|
||||
|
||||
'add_gateway' => 'Add Gateway',
|
||||
@ -553,25 +555,25 @@ return array(
|
||||
'pay_with_paypal' => 'PayPal',
|
||||
'pay_with_card' => 'Credit card',
|
||||
|
||||
'change_password' => 'Change password',
|
||||
'current_password' => 'Current password',
|
||||
'new_password' => 'New password',
|
||||
'confirm_password' => 'Confirm password',
|
||||
'password_error_incorrect' => 'The current password is incorrect.',
|
||||
'password_error_invalid' => 'The new password is invalid.',
|
||||
'updated_password' => 'Successfully updated password',
|
||||
'change_password' => 'Verander wachtwoord',
|
||||
'current_password' => 'Huidig wachtwoord',
|
||||
'new_password' => 'Nieuw wachtwoord',
|
||||
'confirm_password' => 'Bevestig wachtwoord',
|
||||
'password_error_incorrect' => 'Het huidige wachtwoord is niet.',
|
||||
'password_error_invalid' => 'Het nieuwe wachtwoord is ongeldig.',
|
||||
'updated_password' => 'Wachtwoord succesvol aangepast',
|
||||
|
||||
'api_tokens' => 'API Tokens',
|
||||
'users_and_tokens' => 'Users & Tokens',
|
||||
'users_and_tokens' => 'Gebruikers & Tokens',
|
||||
'account_login' => 'Account Login',
|
||||
'recover_password' => 'Recover your password',
|
||||
'forgot_password' => 'Forgot your password?',
|
||||
'email_address' => 'Email address',
|
||||
'recover_password' => 'Wachtwoordherstel',
|
||||
'forgot_password' => 'Wachtwoord vergeten?',
|
||||
'email_address' => 'Emailadres',
|
||||
'lets_go' => 'Let’s go',
|
||||
'password_recovery' => 'Password Recovery',
|
||||
'send_email' => 'Send email',
|
||||
'set_password' => 'Set Password',
|
||||
'converted' => 'Converted',
|
||||
'password_recovery' => 'Wachtwoord Herstel',
|
||||
'send_email' => 'Verstuur email',
|
||||
'set_password' => 'Stel wachtwoord in',
|
||||
'converted' => 'Omgezet',
|
||||
|
||||
|
||||
|
||||
|
@ -204,6 +204,8 @@ return array(
|
||||
'import_to' => 'Importar para',
|
||||
'client_will_create' => 'cliente será criado',
|
||||
'clients_will_create' => 'clientes serão criados',
|
||||
'email_settings' => 'Email Settings',
|
||||
'pdf_email_attachment' => 'Attach PDF to Emails',
|
||||
|
||||
// application messages
|
||||
'created_client' => 'Cliente criado com sucesso',
|
||||
|
@ -42,6 +42,10 @@
|
||||
->append(Former::checkbox('share_counter')->raw()->onclick('setQuoteNumberEnabled()') . ' ' . trans('texts.share_invoice_counter')) }}
|
||||
<p> </p>
|
||||
|
||||
{{ Former::legend('email_settings') }}
|
||||
{{ Former::checkbox('pdf_email_attachment') }}
|
||||
<p> </p>
|
||||
|
||||
@if (Auth::user()->isPro())
|
||||
{{ Former::actions( Button::lg_success_submit(trans('texts.save'))->append_with_icon('floppy-disk') ) }}
|
||||
@else
|
||||
|
@ -718,17 +718,23 @@
|
||||
}
|
||||
|
||||
function onEmailClick() {
|
||||
if (confirm('{{ trans("texts.confirm_email_$entityType") }}')) {
|
||||
if (confirm('{{ trans("texts.confirm_email_$entityType") }}')) {
|
||||
submitAction('email');
|
||||
}
|
||||
}
|
||||
|
||||
function onSaveClick() {
|
||||
if (model.invoice().is_recurring()) {
|
||||
if (confirm('{{ trans("texts.confirm_recurring_email_$entityType") }}')) {
|
||||
if (confirm('{{ trans("texts.confirm_recurring_email_$entityType") }}')) {
|
||||
submitAction('');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
var invoice = createInvoiceModel();
|
||||
var design = getDesignJavascript();
|
||||
if (!design) return;
|
||||
var doc = generatePDF(invoice, design, true);
|
||||
|
||||
$('form.form-horizontal.warn-on-exit').append('<input type="hidden" name="pdfupload" value="'+doc.output('datauristring')+'">');
|
||||
submitAction('');
|
||||
}
|
||||
}
|
||||
@ -739,7 +745,7 @@
|
||||
return;
|
||||
}
|
||||
$('#action').val(value);
|
||||
$('#submitButton').click();
|
||||
$('#submitButton').click();
|
||||
}
|
||||
|
||||
function isSaveValid() {
|
||||
|
Loading…
Reference in New Issue
Block a user