diff --git a/app/controllers/InvoiceController.php b/app/controllers/InvoiceController.php index a46df2de6012..11dd20b304d8 100755 --- a/app/controllers/InvoiceController.php +++ b/app/controllers/InvoiceController.php @@ -133,23 +133,13 @@ class InvoiceController extends \BaseController public function view($invitationKey) { $invitation = Invitation::where('invitation_key', '=', $invitationKey)->firstOrFail(); - $invoice = $invitation->invoice; if (!$invoice || $invoice->is_deleted) { return View::make('invoices.deleted'); } - if ($invoice->is_quote && $invoice->quote_invoice_id) { - $invoice = Invoice::scope($invoice->quote_invoice_id, $invoice->account_id)->firstOrFail(); - - if (!$invoice || $invoice->is_deleted) { - return View::make('invoices.deleted'); - } - } - $invoice->load('user', 'invoice_items', 'invoice_design', 'account.country', 'client.contacts', 'client.country'); - $client = $invoice->client; if (!$client || $client->is_deleted) { @@ -169,7 +159,7 @@ class InvoiceController extends \BaseController $invoice->invoice_date = Utils::fromSqlDate($invoice->invoice_date); $invoice->due_date = Utils::fromSqlDate($invoice->due_date); - $invoice->is_pro = $client->account->isPro(); + $invoice->is_pro = $client->account->isPro(); $contact = $invitation->contact; $contact->setVisible([ @@ -179,6 +169,7 @@ class InvoiceController extends \BaseController 'phone', ]); $data = array( + 'isConverted' => $invoice->quote_invoice_id ? true : false, 'showClientHeader' => true, 'showBreadcrumbs' => false, 'hideLogo' => $client->account->isWhiteLabel(), diff --git a/app/controllers/PaymentController.php b/app/controllers/PaymentController.php index 5dc5a2f93662..606ba6f8979e 100755 --- a/app/controllers/PaymentController.php +++ b/app/controllers/PaymentController.php @@ -614,10 +614,6 @@ class PaymentController extends \BaseController $account->save(); } - if ($invoice->is_quote) { - $invoice = $this->invoiceRepo->cloneInvoice($invoice, $invoice->id); - } - $payment = Payment::createNew($invitation); $payment->invitation_id = $invitation->id; $payment->account_gateway_id = $accountGateway->id; diff --git a/app/controllers/QuoteController.php b/app/controllers/QuoteController.php index 9a12dc7fa54d..7753d63fa51f 100644 --- a/app/controllers/QuoteController.php +++ b/app/controllers/QuoteController.php @@ -141,7 +141,7 @@ class QuoteController extends \BaseController $clone = $this->invoiceRepo->cloneInvoice($invoice, $invoice->id); Session::flash('message', trans('texts.converted_to_invoice')); - return Redirect::to('invoices/'.$clone->public_id); + return Redirect::to('invoices/'.$clone->public_id); } $statusId = Input::get('statusId'); @@ -156,4 +156,24 @@ class QuoteController extends \BaseController return Redirect::to('quotes'); } + + public function approve($invitationKey) + { + $invitation = Invitation::with('invoice.invoice_items', 'invoice.invitations')->where('invitation_key', '=', $invitationKey)->firstOrFail(); + $invoice = $invitation->invoice; + + if ($invoice->is_quote && !$invoice->quote_invoice_id) { + Activity::approveQuote($invitation); + $invoice = $this->invoiceRepo->cloneInvoice($invoice, $invoice->id); + Session::flash('message', trans('texts.converted_to_invoice')); + + foreach ($invoice->invitations as $invitationClone) { + if ($invitation->contact_id == $invitationClone->contact_id) { + $invitationKey = $invitationClone->invitation_key; + } + } + } + + return Redirect::to("view/{$invitationKey}"); + } } diff --git a/app/lang/da/texts.php b/app/lang/da/texts.php index 747a5c4eda6d..e1f9114c53e2 100644 --- a/app/lang/da/texts.php +++ b/app/lang/da/texts.php @@ -510,6 +510,6 @@ return array( 'payment_email' => 'Payment Email', 'quote_email' => 'Quote Email', 'reset_all' => 'Reset All', + 'approve' => 'Approve', - ); diff --git a/app/lang/de/texts.php b/app/lang/de/texts.php index 3d5e33a3eb82..2e6eb200db22 100644 --- a/app/lang/de/texts.php +++ b/app/lang/de/texts.php @@ -500,6 +500,6 @@ return array( 'payment_email' => 'Payment Email', 'quote_email' => 'Quote Email', 'reset_all' => 'Reset All', - + 'approve' => 'Approve', ); diff --git a/app/lang/en/texts.php b/app/lang/en/texts.php index 39908b5e78e4..d01ba177f7d9 100644 --- a/app/lang/en/texts.php +++ b/app/lang/en/texts.php @@ -508,5 +508,6 @@ return array( 'payment_email' => 'Payment Email', 'quote_email' => 'Quote Email', 'reset_all' => 'Reset All', + 'approve' => 'Approve', ); diff --git a/app/lang/es/texts.php b/app/lang/es/texts.php index e15ed8c80ebb..80b1dacf658e 100644 --- a/app/lang/es/texts.php +++ b/app/lang/es/texts.php @@ -480,6 +480,6 @@ return array( 'payment_email' => 'Payment Email', 'quote_email' => 'Quote Email', 'reset_all' => 'Reset All', - + 'approve' => 'Approve', ); \ No newline at end of file diff --git a/app/lang/fr/texts.php b/app/lang/fr/texts.php index 7abc939fff16..0e3304f18e8e 100644 --- a/app/lang/fr/texts.php +++ b/app/lang/fr/texts.php @@ -501,6 +501,6 @@ return array( 'payment_email' => 'Payment Email', 'quote_email' => 'Quote Email', 'reset_all' => 'Reset All', - + 'approve' => 'Approve', ); \ No newline at end of file diff --git a/app/lang/it/texts.php b/app/lang/it/texts.php index b21af7c3dcd5..4aae44b0e581 100644 --- a/app/lang/it/texts.php +++ b/app/lang/it/texts.php @@ -503,6 +503,6 @@ return array( 'payment_email' => 'Payment Email', 'quote_email' => 'Quote Email', 'reset_all' => 'Reset All', - + 'approve' => 'Approve', ); diff --git a/app/lang/lt/texts.php b/app/lang/lt/texts.php index 4e673fc5229f..f17166132271 100644 --- a/app/lang/lt/texts.php +++ b/app/lang/lt/texts.php @@ -511,6 +511,7 @@ return array( 'payment_email' => 'Payment Email', 'quote_email' => 'Quote Email', 'reset_all' => 'Reset All', - + 'approve' => 'Approve', + ); diff --git a/app/lang/nb_NO/texts.php b/app/lang/nb_NO/texts.php index 5e19acc1fc06..4874c2066838 100644 --- a/app/lang/nb_NO/texts.php +++ b/app/lang/nb_NO/texts.php @@ -509,7 +509,7 @@ return array( 'payment_email' => 'Payment Email', 'quote_email' => 'Quote Email', 'reset_all' => 'Reset All', - + 'approve' => 'Approve', ); \ No newline at end of file diff --git a/app/lang/nl/texts.php b/app/lang/nl/texts.php index 793566e479a6..1f0dc0922191 100644 --- a/app/lang/nl/texts.php +++ b/app/lang/nl/texts.php @@ -504,7 +504,7 @@ return array( 'payment_email' => 'Payment Email', 'quote_email' => 'Quote Email', 'reset_all' => 'Reset All', - + 'approve' => 'Approve', ); \ No newline at end of file diff --git a/app/lang/pt_BR/texts.php b/app/lang/pt_BR/texts.php index 4673a0d6d111..8cf7074dd189 100644 --- a/app/lang/pt_BR/texts.php +++ b/app/lang/pt_BR/texts.php @@ -491,7 +491,7 @@ return array( 'payment_email' => 'Payment Email', 'quote_email' => 'Quote Email', 'reset_all' => 'Reset All', - + 'approve' => 'Approve', ); diff --git a/app/models/Activity.php b/app/models/Activity.php index 1eca289b0163..fbaac9ac4507 100755 --- a/app/models/Activity.php +++ b/app/models/Activity.php @@ -231,6 +231,19 @@ class Activity extends Eloquent $activity->save(); } + public static function approveQuote($invitation) { + + $activity = Activity::getBlank($invitation); + $activity->client_id = $invitation->invoice->client_id; + $activity->invitation_id = $invitation->id; + $activity->contact_id = $invitation->contact_id; + $activity->invoice_id = $invitation->invoice_id; + $activity->activity_type_id = ACTIVITY_TYPE_APPROVE_QUOTE; + $activity->message = Utils::encodeActivity($invitation->contact, 'approved', $invitation->invoice); + $activity->balance = $invitation->invoice->client->balance; + $activity->save(); + } + public static function createPayment($payment) { $client = $payment->client; diff --git a/app/ninja/repositories/InvoiceRepository.php b/app/ninja/repositories/InvoiceRepository.php index f59044f578b5..c099706fc717 100755 --- a/app/ninja/repositories/InvoiceRepository.php +++ b/app/ninja/repositories/InvoiceRepository.php @@ -80,7 +80,6 @@ class InvoiceRepository $query = \DB::table('invitations') ->join('invoices', 'invoices.id', '=', 'invitations.invoice_id') ->join('clients', 'clients.id', '=', 'invoices.client_id') - //->join('contacts', 'contacts.client_id', '=', 'clients.id') ->where('invitations.contact_id', '=', $contactId) ->where('invitations.deleted_at', '=', null) ->where('invoices.is_quote', '=', $entityType == ENTITY_QUOTE) @@ -99,7 +98,6 @@ class InvoiceRepository } return $table->addColumn('due_date', function ($model) { return Utils::fromSqlDate($model->due_date); }) - //->addColumn('invoice_status_name', function($model) { return $model->invoice_status_name; }) ->make(); } diff --git a/app/routes.php b/app/routes.php index 061320de5d04..5cba05888d37 100755 --- a/app/routes.php +++ b/app/routes.php @@ -46,6 +46,7 @@ Route::post('get_started', 'AccountController@getStarted'); // Client visible pages Route::get('view/{invitation_key}', 'InvoiceController@view'); +Route::get('approve/{invitation_key}', 'QuoteController@approve'); Route::get('payment/{invitation_key}', 'PaymentController@show_payment'); Route::post('payment/{invitation_key}', 'PaymentController@do_payment'); Route::get('complete', 'PaymentController@offsite_payment'); @@ -228,6 +229,7 @@ define("ACTIVITY_TYPE_RESTORE_INVOICE", 25); define("ACTIVITY_TYPE_RESTORE_CLIENT", 26); define("ACTIVITY_TYPE_RESTORE_PAYMENT", 27); define("ACTIVITY_TYPE_RESTORE_CREDIT", 28); +define("ACTIVITY_TYPE_APPROVE_QUOTE", 29); define('DEFAULT_INVOICE_NUMBER', '0001'); define('RECENTLY_VIEWED_LIMIT', 8); diff --git a/app/views/invoices/pdf.blade.php b/app/views/invoices/pdf.blade.php index 22f4ab44f73b..95ac9b26fc85 100644 --- a/app/views/invoices/pdf.blade.php +++ b/app/views/invoices/pdf.blade.php @@ -81,6 +81,7 @@ var needsRefresh = false; function refreshPDF() { + PDFJS.disableWorker = true; if ({{ Auth::check() && Auth::user()->force_pdfjs ? 'false' : 'true' }} && (isFirefox || (isChrome && !isChromium))) { var string = getPDFString(); if (!string) return; diff --git a/app/views/invoices/view.blade.php b/app/views/invoices/view.blade.php index e8337001ccdb..34952176140b 100755 --- a/app/views/invoices/view.blade.php +++ b/app/views/invoices/view.blade.php @@ -22,18 +22,20 @@
- - @if ($invoice->client->account->isGatewayConfigured() && !$invoice->isPaid() && !$invoice->is_recurring) -