invitation = $invitation; $this->company = $invitation->company; 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'; } elseif ($invitation instanceof PurchaseOrderInvitation) { $this->entity = $invitation->purchase_order; $this->entity_string = 'purchase_order'; } } private function resolveType(): string { if($this->type) { return $this->type; } $type = 'product'; match($this->entity_string) { 'purchase_order' => $type = 'purchase_order', 'invoice' => $type = 'product', 'quote' => $type = 'product', 'credit' => $type = 'product', 'recurring_invoice' => $type = 'product', default => $type = 'product', }; return $type; } /** * @throws FilePermissionsFailure */ public function handle() { /** Testing this override to improve PDF generation performance */ $ps = new PdfService($this->invitation, $this->resolveType(), [ 'client' => $this->entity->client ?? false, 'vendor' => $this->entity->vendor ?? false, "{$this->entity_string}s" => [$this->entity], ]); try { $pdf = $ps->boot()->getPdf(); } catch (\Exception $e) { echo "EXCEPTION::".PHP_EOL; echo $e->getMessage().PHP_EOL; throw new FilePermissionsFailure('Unable to generate the raw PDF'); } if ($this->entity_string == "invoice" && $this->entity->client->getSetting("merge_e_invoice_to_pdf")) { $pdf = (new MergeEDocument($this->entity, $pdf))->handle(); } $merge_docs = isset($this->entity->client) ? $this->entity->client->getSetting('embed_documents') : $this->company->getSetting('embed_documents'); if($merge_docs && ($this->entity->documents()->where('is_public', true)->count() > 0 || $this->company->documents()->where('is_public', true)->count() > 0)) { $pdf = $this->entity->documentMerge($pdf); } return $pdf; } public function failed($e) { } }