invitation = $invitation; if ($invitation instanceof InvoiceInvitation) { $this->entity = $invitation->invoice; $this->entity_string = 'invoice'; } elseif ($invitation instanceof QuoteInvitation) { $this->entity = $invitation->quote; $this->entity_string = 'quote'; } elseif ($invitation instanceof CreditInvitation) { $this->entity = $invitation->credit; $this->entity_string = 'credit'; } elseif ($invitation instanceof RecurringInvoiceInvitation) { $this->entity = $invitation->recurring_invoice; $this->entity_string = 'recurring_invoice'; } $this->company = $invitation->company; $this->contact = $invitation->contact; $this->disk = $disk ?? config('filesystems.default'); } public function handle() { if (config('ninja.phantomjs_pdf_generation')) { return (new Phantom)->generate($this->invitation); } App::setLocale($this->contact->preferredLocale()); App::forgetInstance('translator'); $entity_design_id = ''; if ($this->entity instanceof Invoice) { $path = $this->entity->client->invoice_filepath(); $entity_design_id = 'invoice_design_id'; } elseif ($this->entity instanceof Quote) { $path = $this->entity->client->quote_filepath(); $entity_design_id = 'quote_design_id'; } elseif ($this->entity instanceof Credit) { $path = $this->entity->client->credit_filepath(); $entity_design_id = 'credit_design_id'; } Lang::replace(Ninja::transformTranslations($this->entity->client->getMergedSettings())); $file_path = $path.$this->entity->number.'.pdf'; $entity_design_id = $this->entity->design_id ? $this->entity->design_id : $this->decodePrimaryKey($this->entity->client->getSetting($entity_design_id)); $design = Design::find($entity_design_id); $html = new HtmlEngine($this->invitation); 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)); } $state = [ 'template' => $template->elements([ 'client' => $this->entity->client, 'entity' => $this->entity, 'pdf_variables' => (array) $this->entity->company->settings->pdf_variables, '$product' => $design->design->product, ]), 'variables' => $html->generateLabelsAndValues(), 'options' => [ 'all_pages_header' => $this->entity->client->getSetting('all_pages_header'), 'all_pages_footer' => $this->entity->client->getSetting('all_pages_footer'), ], ]; $maker = new PdfMakerService($state); $maker ->design($template) ->build(); //todo - move this to the client creation stage so we don't keep hitting this unnecessarily Storage::makeDirectory($path, 0775); $pdf = null; try { $pdf = $this->makePdf(null, null, $maker->getCompiledHTML(true)); } catch (\Exception $e) { info(print_r($e->getMessage(), 1)); } if ($pdf) { $instance = Storage::disk($this->disk)->put($file_path, $pdf); } return $file_path; } }