1
0
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:
Jeramy Simpson 2015-03-24 09:55:21 +10:00
commit 37921e4653
19 changed files with 277 additions and 171 deletions

View File

@ -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');

View File

@ -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);
}
}
}
}

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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');
});
}
}

View File

@ -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

View File

@ -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',

View File

@ -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',

View File

@ -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',

View File

@ -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',

View File

@ -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',

View File

@ -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',

View File

@ -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',

View File

@ -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',

View File

@ -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' => 'Lets 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',

View File

@ -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',

View File

@ -42,6 +42,10 @@
->append(Former::checkbox('share_counter')->raw()->onclick('setQuoteNumberEnabled()') . ' ' . trans('texts.share_invoice_counter')) }}
<p>&nbsp;</p>
{{ Former::legend('email_settings') }}
{{ Former::checkbox('pdf_email_attachment') }}
<p>&nbsp;</p>
@if (Auth::user()->isPro())
{{ Former::actions( Button::lg_success_submit(trans('texts.save'))->append_with_icon('floppy-disk') ) }}
@else

View File

@ -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() {