From 8bd3f54bb09da9ace0884226e8625839f39187f7 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 29 Jun 2022 10:38:48 +1000 Subject: [PATCH 1/5] Minor fixes for company imports --- app/Jobs/Company/CompanyImport.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Jobs/Company/CompanyImport.php b/app/Jobs/Company/CompanyImport.php index 3a8529262d43..1d411abf5a4e 100644 --- a/app/Jobs/Company/CompanyImport.php +++ b/app/Jobs/Company/CompanyImport.php @@ -1423,21 +1423,21 @@ class CompanyImport implements ShouldQueue $new_obj->company_id = $this->company->id; $new_obj->fill($obj_array); $new_obj->save(['timestamps' => false]); - $new_obj->number = $this->getNextInvoiceNumber($client = Client::find($obj_array['client_id']),$new_obj); + $new_obj->number = $this->getNextInvoiceNumber($client = Client::withTrashed()->find($obj_array['client_id']),$new_obj); } elseif($class == 'App\Models\Payment' && is_null($obj->{$match_key})){ $new_obj = new Payment(); $new_obj->company_id = $this->company->id; $new_obj->fill($obj_array); $new_obj->save(['timestamps' => false]); - $new_obj->number = $this->getNextPaymentNumber($client = Client::find($obj_array['client_id']), $new_obj); + $new_obj->number = $this->getNextPaymentNumber($client = Client::withTrashed()->find($obj_array['client_id']), $new_obj); } elseif($class == 'App\Models\Quote' && is_null($obj->{$match_key})){ $new_obj = new Quote(); $new_obj->company_id = $this->company->id; $new_obj->fill($obj_array); $new_obj->save(['timestamps' => false]); - $new_obj->number = $this->getNextQuoteNumber($client = Client::find($obj_array['client_id']), $new_obj); + $new_obj->number = $this->getNextQuoteNumber($client = Client::withTrashed()->find($obj_array['client_id']), $new_obj); } elseif($class == 'App\Models\ClientContact'){ $new_obj = new ClientContact(); From 776f3428ba501baa9dd261dbf6f6b70c4bcb70e6 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 29 Jun 2022 11:37:40 +1000 Subject: [PATCH 2/5] Purchase order decorators --- .../PreviewPurchaseOrderController.php | 470 ++++++++++++++++++ .../VendorPortal/InvitationController.php | 56 +-- .../Preview/PreviewPurchaseOrderRequest.php | 62 +++ app/Models/Account.php | 5 +- routes/api.php | 3 + routes/vendor.php | 3 + tests/Feature/PreviewTest.php | 25 + 7 files changed, 587 insertions(+), 37 deletions(-) create mode 100644 app/Http/Controllers/PreviewPurchaseOrderController.php create mode 100644 app/Http/Requests/Preview/PreviewPurchaseOrderRequest.php diff --git a/app/Http/Controllers/PreviewPurchaseOrderController.php b/app/Http/Controllers/PreviewPurchaseOrderController.php new file mode 100644 index 000000000000..f8b287570715 --- /dev/null +++ b/app/Http/Controllers/PreviewPurchaseOrderController.php @@ -0,0 +1,470 @@ +has('entity') && + request()->has('entity_id') && + ! empty(request()->input('entity')) && + ! empty(request()->input('entity_id')) && + request()->has('body')) { + + $design_object = json_decode(json_encode(request()->input('design'))); + + if (! is_object($design_object)) { + return response()->json(['message' => ctrans('texts.invalid_design_object')], 400); + } + + $entity_obj = PurchaseOrder::whereId($this->decodePrimaryKey(request()->input('entity_id')))->company()->first(); + + if (! $entity_obj) { + return $this->blankEntity(); + } + + App::forgetInstance('translator'); + $t = app('translator'); + App::setLocale($entity_obj->company->locale()); + $t->replace(Ninja::transformTranslations($entity_obj->company->settings)); + + $html = new VendorHtmlEngine($entity_obj->invitations()->first()); + + $design_namespace = 'App\Services\PdfMaker\Designs\\'.request()->design['name']; + + $design_class = new $design_namespace(); + + $state = [ + 'template' => $design_class->elements([ + 'client' => null, + 'vendor' => $entity_obj->vendor, + 'entity' => $entity_obj, + 'pdf_variables' => (array) $entity_obj->company->settings->pdf_variables, + 'variables' => $html->generateLabelsAndValues(), + ]), + 'variables' => $html->generateLabelsAndValues(), + 'process_markdown' => $entity_obj->company->markdown_enabled, + ]; + + $design = new Design(request()->design['name']); + $maker = new PdfMaker($state); + + $maker + ->design($design) + ->build(); + + if (request()->query('html') == 'true') { + return $maker->getCompiledHTML(); + } + + //if phantom js...... inject here.. + 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'){ + $pdf = (new NinjaPdf())->build($maker->getCompiledHTML(true)); + + $numbered_pdf = $this->pageNumbering($pdf, auth()->user()->company()); + + if($numbered_pdf) + $pdf = $numbered_pdf; + + return $pdf; + + } + + //else + $file_path = PreviewPdf::dispatchNow($maker->getCompiledHTML(true), auth()->user()->company()); + + return response()->download($file_path, basename($file_path), ['Cache-Control:' => 'no-cache'])->deleteFileAfterSend(true); + } + + return $this->blankEntity(); + } + + public function live(PreviewPurchaseOrderRequest $request) + { + $company = auth()->user()->company(); + + MultiDB::setDb($company->db); + + $repo = new PurchaseOrderRepository(); + $entity_obj = PurchaseOrderFactory::create($company->id, auth()->user()->id); + $class = PurchaseOrder::class; + + try { + + DB::connection(config('database.default'))->beginTransaction(); + + if($request->has('entity_id')){ + + $entity_obj = $class::on(config('database.default')) + ->with('vendor.company') + ->where('id', $this->decodePrimaryKey($request->input('entity_id'))) + ->where('company_id', $company->id) + ->withTrashed() + ->first(); + + } + + $entity_obj = $repo->save($request->all(), $entity_obj); + + if(!$request->has('entity_id')) + $entity_obj->service()->fillDefaults()->save(); + + App::forgetInstance('translator'); + $t = app('translator'); + App::setLocale($entity_obj->company->locale()); + $t->replace(Ninja::transformTranslations($entity_obj->company->settings)); + + $html = new VendorHtmlEngine($entity_obj->invitations()->first()); + + $design = \App\Models\Design::find($entity_obj->design_id); + + /* Catch all in case migration doesn't pass back a valid design */ + if(!$design) + $design = \App\Models\Design::find(2); + + if ($design->is_custom) { + $options = [ + 'custom_partials' => json_decode(json_encode($design->design), true) + ]; + $template = new PdfMakerDesign(PdfDesignModel::CUSTOM, $options); + } else { + $template = new PdfMakerDesign(strtolower($design->name)); + } + + $variables = $html->generateLabelsAndValues(); + + $state = [ + 'template' => $template->elements([ + 'client' => null, + 'vendor' => $entity_obj->vendor, + 'entity' => $entity_obj, + 'pdf_variables' => (array) $entity_obj->company->settings->pdf_variables, + 'variables' => $html->generateLabelsAndValues(), + '$product' => $design->design->product, + ]), + 'variables' => $html->generateLabelsAndValues(), + 'process_markdown' => $entity_obj->company->markdown_enabled, + ]; + + $maker = new PdfMaker($state); + + $maker + ->design($template) + ->build(); + + DB::connection(config('database.default'))->rollBack(); + + if (request()->query('html') == 'true') { + return $maker->getCompiledHTML(); + } + + + } + catch(\Exception $e){ + + DB::connection(config('database.default'))->rollBack(); + return; + } + + + //if phantom js...... inject here.. + 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'){ + $pdf = (new NinjaPdf())->build($maker->getCompiledHTML(true)); + + $numbered_pdf = $this->pageNumbering($pdf, auth()->user()->company()); + + if($numbered_pdf) + $pdf = $numbered_pdf; + + return $pdf; + } + + $file_path = PreviewPdf::dispatchNow($maker->getCompiledHTML(true), $company); + + + if(Ninja::isHosted()) + { + LightLogs::create(new LivePreview()) + ->increment() + ->queue(); + } + + + $response = Response::make($file_path, 200); + $response->header('Content-Type', 'application/pdf'); + + return $response; + + } + + private function blankEntity() + { + App::forgetInstance('translator'); + $t = app('translator'); + $t->replace(Ninja::transformTranslations(auth()->user()->company()->settings)); + + $invitation = PurchaseOrderInvitation::where('company_id', auth()->user()->company()->id)->orderBy('id', 'desc')->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 VendorHtmlEngine($invitation); + + $design = new Design(Design::CUSTOM, ['custom_partials' => request()->design['design']]); + + $state = [ + 'template' => $design->elements([ + 'client' => null, + 'vendor' => $invitation->purchase_order->vendor, + 'entity' => $invitation->purchase_order, + 'pdf_variables' => (array) $invitation->company->settings->pdf_variables, + 'products' => request()->design['design']['product'], + ]), + 'variables' => $html->generateLabelsAndValues(), + 'process_markdown' => $invitation->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'){ + $pdf = (new NinjaPdf())->build($maker->getCompiledHTML(true)); + + $numbered_pdf = $this->pageNumbering($pdf, auth()->user()->company()); + + if($numbered_pdf) + $pdf = $numbered_pdf; + + return $pdf; + } + + $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(); + + $vendor = Vendor::factory()->create([ + 'user_id' => auth()->user()->id, + 'company_id' => auth()->user()->company()->id, + ]); + + $contact = VendorContact::factory()->create([ + 'user_id' => auth()->user()->id, + 'company_id' => auth()->user()->company()->id, + 'vendor_id' => $vendor->id, + 'is_primary' => 1, + 'send_email' => true, + ]); + + $purchase_order = PurchaseOrder::factory()->create([ + 'user_id' => auth()->user()->id, + 'company_id' => auth()->user()->company()->id, + 'vendor_id' => $vendor->id, + 'terms' => 'Sample Terms', + 'footer' => 'Sample Footer', + 'public_notes' => 'Sample Public Notes', + ]); + + $invitation = PurchaseOrderInvitation::factory()->create([ + 'user_id' => auth()->user()->id, + 'company_id' => auth()->user()->company()->id, + 'purchase_order_id' => $purchase_order->id, + 'vendor_contact_id' => $contact->id, + ]); + + $purchase_order->setRelation('invitations', $invitation); + $purchase_order->setRelation('vendor', $vendor); + $purchase_order->setRelation('company', auth()->user()->company()); + $purchase_order->load('vendor.company'); + + $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 VendorHtmlEngine($purchase_order->invitations()->first()); + + $design = new Design(Design::CUSTOM, ['custom_partials' => request()->design['design']]); + + $state = [ + 'template' => $design->elements([ + 'client' => null, + 'vendor' => $purchase_order->vendor, + 'entity' => $purchase_order, + 'pdf_variables' => (array) $purchase_order->company->settings->pdf_variables, + 'products' => request()->design['design']['product'], + ]), + 'variables' => $html->generateLabelsAndValues(), + 'process_markdown' => $purchase_order->company->markdown_enabled, + ]; + + $maker = new PdfMaker($state); + + $maker + ->design($design) + ->build(); + + DB::connection(auth()->user()->company()->db)->rollBack(); + + 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'){ + $pdf = (new NinjaPdf())->build($maker->getCompiledHTML(true)); + + $numbered_pdf = $this->pageNumbering($pdf, auth()->user()->company()); + + if($numbered_pdf) + $pdf = $numbered_pdf; + + return $pdf; + } + + $file_path = PreviewPdf::dispatchNow($maker->getCompiledHTML(true), auth()->user()->company()); + + $response = Response::make($file_path, 200); + $response->header('Content-Type', 'application/pdf'); + + return $response; + } +} diff --git a/app/Http/Controllers/VendorPortal/InvitationController.php b/app/Http/Controllers/VendorPortal/InvitationController.php index 9f5f6ac93bb8..77824f43e798 100644 --- a/app/Http/Controllers/VendorPortal/InvitationController.php +++ b/app/Http/Controllers/VendorPortal/InvitationController.php @@ -17,11 +17,13 @@ use App\Events\Misc\InvitationWasViewed; use App\Events\Quote\QuoteWasViewed; use App\Http\Controllers\Controller; use App\Jobs\Entity\CreateRawPdf; +use App\Jobs\Vendor\CreatePurchaseOrderPdf; use App\Models\Client; use App\Models\ClientContact; use App\Models\CreditInvitation; use App\Models\InvoiceInvitation; use App\Models\Payment; +use App\Models\PurchaseOrder; use App\Models\PurchaseOrderInvitation; use App\Models\QuoteInvitation; use App\Services\ClientPortal\InstantPayment; @@ -95,50 +97,32 @@ class InvitationController extends Controller } + public function download(string $invitation_key) + { + $invitation = PurchaseOrder::withTrashed() + ->where('key', $invitation_key) + ->with('contact.vendor') + ->firstOrFail(); + if(!$invitation) + return response()->json(["message" => "no record found"], 400); - // public function routerForDownload(string $entity, string $invitation_key) - // { + $file_name = $invitation->purchase_order->numberFormatter().'.pdf'; - // set_time_limit(45); + // $file = CreateRawPdf::dispatchNow($invitation, $invitation->company->db); - // if(Ninja::isHosted()) - // return $this->returnRawPdf($entity, $invitation_key); + $file = (new CreatePurchaseOrderPdf($invitation))->handle(); - // return redirect('client/'.$entity.'/'.$invitation_key.'/download_pdf'); - // } + $headers = ['Content-Type' => 'application/pdf']; - // private function returnRawPdf(string $entity, string $invitation_key) - // { + if(request()->input('inline') == 'true') + $headers = array_merge($headers, ['Content-Disposition' => 'inline']); - // if(!in_array($entity, ['invoice', 'credit', 'quote', 'recurring_invoice'])) - // return response()->json(['message' => 'Invalid resource request']); + return response()->streamDownload(function () use($file) { + echo $file; + }, $file_name, $headers); + } - // $key = $entity.'_id'; - - // $entity_obj = 'App\Models\\'.ucfirst(Str::camel($entity)).'Invitation'; - - // $invitation = $entity_obj::where('key', $invitation_key) - // ->with('contact.client') - // ->firstOrFail(); - - // if(!$invitation) - // return response()->json(["message" => "no record found"], 400); - - // $file_name = $invitation->purchase_order->numberFormatter().'.pdf'; - - // $file = CreateRawPdf::dispatchNow($invitation, $invitation->company->db); - - // $headers = ['Content-Type' => 'application/pdf']; - - // if(request()->input('inline') == 'true') - // $headers = array_merge($headers, ['Content-Disposition' => 'inline']); - - // return response()->streamDownload(function () use($file) { - // echo $file; - // }, $file_name, $headers); - - // } diff --git a/app/Http/Requests/Preview/PreviewPurchaseOrderRequest.php b/app/Http/Requests/Preview/PreviewPurchaseOrderRequest.php new file mode 100644 index 000000000000..92b892690cd3 --- /dev/null +++ b/app/Http/Requests/Preview/PreviewPurchaseOrderRequest.php @@ -0,0 +1,62 @@ +user()->can('create', PurchaseOrder::class); + } + + public function rules() + { + $rules = []; + + $rules['number'] = ['nullable']; + + return $rules; + } + + protected function prepareForValidation() + { + $input = $this->all(); + + $input = $this->decodePrimaryKeys($input); + + $input['line_items'] = isset($input['line_items']) ? $this->cleanItems($input['line_items']) : []; + $input['amount'] = 0; + $input['balance'] = 0; + $input['number'] = ctrans('texts.live_preview') . " #". rand(0,1000); + + $this->replace($input); + } +} diff --git a/app/Models/Account.php b/app/Models/Account.php index d41ec4e95267..9cde2bf4a055 100644 --- a/app/Models/Account.php +++ b/app/Models/Account.php @@ -33,7 +33,7 @@ class Account extends BaseModel use PresentableTrait; use MakesHash; - private $free_plan_email_quota = 250; + private $free_plan_email_quota = 100; private $paid_plan_email_quota = 500; /** @@ -377,6 +377,9 @@ class Account extends BaseModel if(Carbon::createFromTimestamp($this->created_at)->diffInWeeks() == 0) return 20; + if(Carbon::createFromTimestamp($this->created_at)->diffInWeeks() <= 2 && !$this->payment_id) + return 20; + if($this->isPaid()){ $limit = $this->paid_plan_email_quota; $limit += Carbon::createFromTimestamp($this->created_at)->diffInMonths() * 100; diff --git a/routes/api.php b/routes/api.php index 38aa0208f46e..b605901d8f73 100644 --- a/routes/api.php +++ b/routes/api.php @@ -129,6 +129,9 @@ Route::group(['middleware' => ['throttle:100,1', 'api_db', 'token_auth', 'locale Route::post('preview', 'PreviewController@show')->name('preview.show'); Route::post('live_preview', 'PreviewController@live')->name('preview.live'); + Route::post('preview/purchase_order', 'PreviewPurchaseOrderController@show')->name('preview_purchase_order.show'); + Route::post('live_preview/purchase_order', 'PreviewPurchaseOrderController@live')->name('preview_purchase_order.live'); + Route::resource('products', 'ProductController'); // name = (products. index / create / show / update / destroy / edit Route::post('products/bulk', 'ProductController@bulk')->name('products.bulk'); Route::put('products/{product}/upload', 'ProductController@upload'); diff --git a/routes/vendor.php b/routes/vendor.php index 28986e8ad0ac..86559e6fc926 100644 --- a/routes/vendor.php +++ b/routes/vendor.php @@ -40,4 +40,7 @@ Route::group(['middleware' => ['auth:vendor', 'vendor_locale', 'domain_db'], 'pr }); +Route::get('purchase_order/{invitation_key}/download', 'VendorPortal\InvitationController@download'); + + Route::fallback('BaseController@notFoundVendor'); \ No newline at end of file diff --git a/tests/Feature/PreviewTest.php b/tests/Feature/PreviewTest.php index 4c7279ced804..57d86e9bd817 100644 --- a/tests/Feature/PreviewTest.php +++ b/tests/Feature/PreviewTest.php @@ -47,6 +47,31 @@ class PreviewTest extends TestCase $response->assertStatus(200); } + public function testPurchaseOrderPreviewRoute() + { + $data = $this->getData(); + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->post('/api/v1/preview/purchase_order', $data); + + $response->assertStatus(200); + } + + public function testPurchaseOrderPreviewHtmlResponse() + { + $data = $this->getData(); + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->post('/api/v1/preview/purchase_order?html=true', $data); + + $response->assertStatus(200); + } + + public function testPreviewHtmlResponse() { $data = $this->getData(); From e1b1114722df8fbda4c3cbaaf392c9d8da494623 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 29 Jun 2022 11:42:17 +1000 Subject: [PATCH 3/5] Purchase order decorators --- routes/vendor.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/routes/vendor.php b/routes/vendor.php index 86559e6fc926..f807deb1548d 100644 --- a/routes/vendor.php +++ b/routes/vendor.php @@ -20,6 +20,8 @@ Route::get('vendors', [VendorContactLoginController::class, 'catch'])->name('ven Route::group(['middleware' => ['invite_db'], 'prefix' => 'vendor', 'as' => 'vendor.'], function () { /*Invitation catches*/ Route::get('purchase_order/{invitation_key}', [InvitationController::class, 'purchaseOrder']); + Route::get('purchase_order/{invitation_key}/download', [InvitationController::class, 'download']); + // Route::get('purchase_order/{invitation_key}/download_pdf', 'PurchaseOrderController@downloadPdf')->name('recurring_invoice.download_invitation_key'); // Route::get('purchase_order/{invitation_key}/download', 'ClientPortal\InvitationController@routerForDownload'); @@ -40,7 +42,7 @@ Route::group(['middleware' => ['auth:vendor', 'vendor_locale', 'domain_db'], 'pr }); -Route::get('purchase_order/{invitation_key}/download', 'VendorPortal\InvitationController@download'); + Route::fallback('BaseController@notFoundVendor'); \ No newline at end of file From 36a72906793b474ddb43c79679b7a933c7c61b27 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 29 Jun 2022 11:44:05 +1000 Subject: [PATCH 4/5] Purchase order decorators --- app/Http/Controllers/VendorPortal/InvitationController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/VendorPortal/InvitationController.php b/app/Http/Controllers/VendorPortal/InvitationController.php index 77824f43e798..bcc37db58dcf 100644 --- a/app/Http/Controllers/VendorPortal/InvitationController.php +++ b/app/Http/Controllers/VendorPortal/InvitationController.php @@ -99,7 +99,7 @@ class InvitationController extends Controller public function download(string $invitation_key) { - $invitation = PurchaseOrder::withTrashed() + $invitation = PurchaseOrderInvitation::withTrashed() ->where('key', $invitation_key) ->with('contact.vendor') ->firstOrFail(); From 73bb2c96db7a3cf3b0d81a7093a92483f62809a1 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 29 Jun 2022 11:47:16 +1000 Subject: [PATCH 5/5] Purchase order decorators --- .../VendorPortal/InvitationController.php | 2 +- app/Jobs/Vendor/CreatePurchaseOrderPdf.php | 45 +++++++++++-------- 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/app/Http/Controllers/VendorPortal/InvitationController.php b/app/Http/Controllers/VendorPortal/InvitationController.php index bcc37db58dcf..9c20dab32620 100644 --- a/app/Http/Controllers/VendorPortal/InvitationController.php +++ b/app/Http/Controllers/VendorPortal/InvitationController.php @@ -111,7 +111,7 @@ class InvitationController extends Controller // $file = CreateRawPdf::dispatchNow($invitation, $invitation->company->db); - $file = (new CreatePurchaseOrderPdf($invitation))->handle(); + $file = (new CreatePurchaseOrderPdf($invitation))->rawPdf(); $headers = ['Content-Type' => 'application/pdf']; diff --git a/app/Jobs/Vendor/CreatePurchaseOrderPdf.php b/app/Jobs/Vendor/CreatePurchaseOrderPdf.php index fde78e220368..f1433484db6a 100644 --- a/app/Jobs/Vendor/CreatePurchaseOrderPdf.php +++ b/app/Jobs/Vendor/CreatePurchaseOrderPdf.php @@ -88,6 +88,32 @@ class CreatePurchaseOrderPdf implements ShouldQueue } public function handle() + { + + $pdf = $this->rawPdf(); + + if ($pdf) { + + try{ + + if(!Storage::disk($this->disk)->exists($path)) + Storage::disk($this->disk)->makeDirectory($path, 0775); + + Storage::disk($this->disk)->put($file_path, $pdf, 'public'); + + } + catch(\Exception $e) + { + + throw new FilePermissionsFailure($e->getMessage()); + + } + } + + return $file_path; + } + + public function rawPdf() { MultiDB::setDb($this->company->db); @@ -191,25 +217,8 @@ class CreatePurchaseOrderPdf implements ShouldQueue info($maker->getCompiledHTML()); } - if ($pdf) { + return $pdf; - try{ - - if(!Storage::disk($this->disk)->exists($path)) - Storage::disk($this->disk)->makeDirectory($path, 0775); - - Storage::disk($this->disk)->put($file_path, $pdf, 'public'); - - } - catch(\Exception $e) - { - - throw new FilePermissionsFailure($e->getMessage()); - - } - } - - return $file_path; } public function failed($e)