invitation = $invitation; $this->company = $invitation->company; $this->entity = $invitation->purchase_order; $this->entity_string = 'purchase_order'; $this->contact = $invitation->contact; $this->vendor = $invitation->contact->vendor; $this->vendor->load('company'); $this->disk = $disk ?? config('filesystems.default'); } public function handle() { /** Testing this override to improve PDF generation performance */ $ps = new PdfService($this->invitation, 'product', [ 'client' => $this->entity->client ?? false, 'vendor' => $this->entity->vendor ?? false, "{$this->entity_string}s" => [$this->entity], ]); nlog("returning purchase order"); return $ps->boot()->getPdf(); $pdf = $this->rawPdf(); if ($pdf) { try { Storage::disk($this->disk)->put($this->file_path, $pdf); } catch(\Exception $e) { throw new FilePermissionsFailure($e->getMessage()); } } return $this->file_path; } public function rawPdf() { MultiDB::setDb($this->company->db); /* Forget the singleton*/ App::forgetInstance('translator'); /* Init a new copy of the translator*/ $t = app('translator'); /* Set the locale*/ App::setLocale($this->vendor->locale()); /* Set customized translations _NOW_ */ $t->replace(Ninja::transformTranslations($this->company->settings)); if (config('ninja.phantomjs_pdf_generation') || config('ninja.pdf_generator') == 'phantom') { return (new Phantom)->generate($this->invitation, true); } $entity_design_id = ''; $this->path = $this->vendor->purchase_order_filepath($this->invitation); $entity_design_id = 'purchase_order_design_id'; $this->file_path = $this->path.$this->entity->numberFormatter().'.pdf'; $entity_design_id = $this->entity->design_id ? $this->entity->design_id : $this->decodePrimaryKey('Wpmbk5ezJn'); $design = Design::withTrashed()->find($entity_design_id); /* Catch all in case migration doesn't pass back a valid design */ if (!$design) { /** @var \App\Models\Design $design */ $design = Design::find(2); } $html = new VendorHtmlEngine($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)); } $variables = $html->generateLabelsAndValues(); $state = [ 'template' => $template->elements([ 'client' => null, 'vendor' => $this->vendor, 'entity' => $this->entity, 'pdf_variables' => (array) $this->company->settings->pdf_variables, '$product' => $design->design->product, 'variables' => $variables, ]), 'variables' => $variables, 'options' => [ 'all_pages_header' => $this->entity->company->getSetting('all_pages_header'), 'all_pages_footer' => $this->entity->company->getSetting('all_pages_footer'), 'client' => null, 'vendor' => $this->vendor, 'entity' => $this->entity, 'variables' => $variables, ], 'process_markdown' => $this->entity->company->markdown_enabled, ]; $maker = new PdfMakerService($state); $maker ->design($template) ->build(); $pdf = null; try { 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, $this->company); if ($numbered_pdf) { $pdf = $numbered_pdf; } } else { $pdf = $this->makePdf(null, null, $maker->getCompiledHTML(true)); $numbered_pdf = $this->pageNumbering($pdf, $this->company); if ($numbered_pdf) { $pdf = $numbered_pdf; } } } catch (\Exception $e) { nlog(print_r($e->getMessage(), 1)); } if (config('ninja.log_pdf_html')) { nlog($maker->getCompiledHTML()); } $maker = null; $state = null; return $pdf; } public function failed($e) { } }