From 727420dd0e3add5d917be709e1522fc9aefc8356 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 20 Dec 2021 07:16:44 +1100 Subject: [PATCH] v5.3.39 --- VERSION.txt | 2 +- app/Http/Controllers/PreviewController.php | 64 ++++++++++++++++++++-- config/ninja.php | 4 +- 3 files changed, 62 insertions(+), 8 deletions(-) diff --git a/VERSION.txt b/VERSION.txt index 7422b58bc085..5a3f9061cb11 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -5.3.38 \ No newline at end of file +5.3.39 \ No newline at end of file diff --git a/app/Http/Controllers/PreviewController.php b/app/Http/Controllers/PreviewController.php index 9978033a4430..008827dfe971 100644 --- a/app/Http/Controllers/PreviewController.php +++ b/app/Http/Controllers/PreviewController.php @@ -305,13 +305,69 @@ class PreviewController extends BaseController } - private function blankEntity() { App::forgetInstance('translator'); $t = app('translator'); $t->replace(Ninja::transformTranslations(auth()->user()->company()->settings)); + $invitation = InvoiceInvitation::where('company_id', auth()->user()->company()->id)->first(); + + /* If we don't have a valid invitation in the system - create a mock using transactions */ + if(!$invitation) + return $this->mockEntity(); + + $design_object = json_decode(json_encode(request()->input('design'))); + + if (! is_object($design_object)) { + return response()->json(['message' => 'Invalid custom design object'], 400); + } + + $html = new HtmlEngine($invitation); + + $design = new Design(Design::CUSTOM, ['custom_partials' => request()->design['design']]); + + $state = [ + 'template' => $design->elements([ + 'client' => $invitation->invoice->client, + 'entity' => $invitation->invoice, + 'pdf_variables' => (array) $invitation->invoice->company->settings->pdf_variables, + 'products' => request()->design['design']['product'], + ]), + 'variables' => $html->generateLabelsAndValues(), + 'process_markdown' => $invitation->invoice->client->company->markdown_enabled, + ]; + + $maker = new PdfMaker($state); + + $maker + ->design($design) + ->build(); + + if (request()->query('html') == 'true') { + return $maker->getCompiledHTML(); + } + + if (config('ninja.phantomjs_pdf_generation') || config('ninja.pdf_generator') == 'phantom') { + return (new Phantom)->convertHtmlToPdf($maker->getCompiledHTML(true)); + } + + if(config('ninja.invoiceninja_hosted_pdf_generation') || config('ninja.pdf_generator') == 'hosted_ninja'){ + return (new NinjaPdf())->build($maker->getCompiledHTML(true)); + } + + $file_path = PreviewPdf::dispatchNow($maker->getCompiledHTML(true), auth()->user()->company()); + + $response = Response::make($file_path, 200); + $response->header('Content-Type', 'application/pdf'); + + return $response; + + } + + private function mockEntity() + { + DB::connection(auth()->user()->company()->db)->beginTransaction(); $client = Client::factory()->create([ @@ -345,8 +401,6 @@ class PreviewController extends BaseController $invoice->setRelation('company', auth()->user()->company()); $invoice->load('client.company'); - // nlog(print_r($invoice->toArray(),1)); - $design_object = json_decode(json_encode(request()->input('design'))); if (! is_object($design_object)) { @@ -374,6 +428,8 @@ class PreviewController extends BaseController ->design($design) ->build(); + DB::connection(auth()->user()->company()->db)->rollBack(); + if (request()->query('html') == 'true') { return $maker->getCompiledHTML(); } @@ -388,8 +444,6 @@ class PreviewController extends BaseController $file_path = PreviewPdf::dispatchNow($maker->getCompiledHTML(true), auth()->user()->company()); - DB::connection(auth()->user()->company()->db)->rollBack(); - $response = Response::make($file_path, 200); $response->header('Content-Type', 'application/pdf'); diff --git a/config/ninja.php b/config/ninja.php index 4557bc9b8417..84287f042258 100644 --- a/config/ninja.php +++ b/config/ninja.php @@ -14,8 +14,8 @@ return [ 'require_https' => env('REQUIRE_HTTPS', true), 'app_url' => rtrim(env('APP_URL', ''), '/'), 'app_domain' => env('APP_DOMAIN', 'invoicing.co'), - 'app_version' => '5.3.38', - 'app_tag' => '5.3.38', + 'app_version' => '5.3.39', + 'app_tag' => '5.3.39', 'minimum_client_version' => '5.0.16', 'terms_version' => '1.0.1', 'api_secret' => env('API_SECRET', ''),