mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Merge PDFs if embed documents is enabled
This commit is contained in:
parent
32744d3fa8
commit
2b8f96d208
@ -119,6 +119,10 @@ class CreditEmailEngine extends BaseEmailEngine
|
|||||||
|
|
||||||
$pdf = ((new CreateRawPdf($this->invitation))->handle());
|
$pdf = ((new CreateRawPdf($this->invitation))->handle());
|
||||||
|
|
||||||
|
if($this->client->getSetting('embed_documents') && ($this->credit->documents()->where('is_public', true)->count() > 0 || $this->credit->company->documents()->where('is_public', true)->count() > 0)) {
|
||||||
|
$pdf = $this->credit->documentMerge($pdf);
|
||||||
|
}
|
||||||
|
|
||||||
$this->setAttachments([['file' => base64_encode($pdf), 'name' => $this->credit->numberFormatter().'.pdf']]);
|
$this->setAttachments([['file' => base64_encode($pdf), 'name' => $this->credit->numberFormatter().'.pdf']]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,6 +131,10 @@ class InvoiceEmailEngine extends BaseEmailEngine
|
|||||||
if ($this->client->getSetting('pdf_email_attachment') !== false && $this->invoice->company->account->hasFeature(Account::FEATURE_PDF_ATTACHMENT)) {
|
if ($this->client->getSetting('pdf_email_attachment') !== false && $this->invoice->company->account->hasFeature(Account::FEATURE_PDF_ATTACHMENT)) {
|
||||||
$pdf = ((new CreateRawPdf($this->invitation))->handle());
|
$pdf = ((new CreateRawPdf($this->invitation))->handle());
|
||||||
|
|
||||||
|
if($this->client->getSetting('embed_documents') && ($this->invoice->documents()->where('is_public', true)->count() > 0 || $this->invoice->company->documents()->where('is_public', true)->count() > 0)) {
|
||||||
|
$pdf = $this->invoice->documentMerge($pdf);
|
||||||
|
}
|
||||||
|
|
||||||
$this->setAttachments([['file' => base64_encode($pdf), 'name' => $this->invoice->numberFormatter().'.pdf']]);
|
$this->setAttachments([['file' => base64_encode($pdf), 'name' => $this->invoice->numberFormatter().'.pdf']]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,6 +123,10 @@ class PurchaseOrderEmailEngine extends BaseEmailEngine
|
|||||||
|
|
||||||
$pdf = (new CreateRawPdf($this->invitation))->handle();
|
$pdf = (new CreateRawPdf($this->invitation))->handle();
|
||||||
|
|
||||||
|
if($this->vendor->getSetting('embed_documents') && ($this->purchase_order->documents()->where('is_public', true)->count() > 0 || $this->purchase_order->company->documents()->where('is_public', true)->count() > 0)) {
|
||||||
|
$pdf = $this->purchase_order->documentMerge($pdf);
|
||||||
|
}
|
||||||
|
|
||||||
$this->setAttachments([['file' => base64_encode($pdf), 'name' => $this->purchase_order->numberFormatter().'.pdf']]);
|
$this->setAttachments([['file' => base64_encode($pdf), 'name' => $this->purchase_order->numberFormatter().'.pdf']]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ use App\Models\Account;
|
|||||||
use App\Utils\HtmlEngine;
|
use App\Utils\HtmlEngine;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use App\Jobs\Entity\CreateRawPdf;
|
use App\Jobs\Entity\CreateRawPdf;
|
||||||
|
use App\Services\PdfMaker\PdfMerge;
|
||||||
use Illuminate\Support\Facades\App;
|
use Illuminate\Support\Facades\App;
|
||||||
use Illuminate\Support\Facades\URL;
|
use Illuminate\Support\Facades\URL;
|
||||||
use Illuminate\Support\Facades\Cache;
|
use Illuminate\Support\Facades\Cache;
|
||||||
@ -117,6 +118,10 @@ class QuoteEmailEngine extends BaseEmailEngine
|
|||||||
if ($this->client->getSetting('pdf_email_attachment') !== false && $this->quote->company->account->hasFeature(Account::FEATURE_PDF_ATTACHMENT)) {
|
if ($this->client->getSetting('pdf_email_attachment') !== false && $this->quote->company->account->hasFeature(Account::FEATURE_PDF_ATTACHMENT)) {
|
||||||
$pdf = ((new CreateRawPdf($this->invitation))->handle());
|
$pdf = ((new CreateRawPdf($this->invitation))->handle());
|
||||||
|
|
||||||
|
if($this->client->getSetting('embed_documents') && ($this->quote->documents()->where('is_public', true)->count() > 0 || $this->quote->company->documents()->where('is_public', true)->count() > 0)){
|
||||||
|
$pdf = $this->quote->documentMerge($pdf);
|
||||||
|
}
|
||||||
|
|
||||||
$this->setAttachments([['file' => base64_encode($pdf), 'name' => $this->quote->numberFormatter().'.pdf']]);
|
$this->setAttachments([['file' => base64_encode($pdf), 'name' => $this->quote->numberFormatter().'.pdf']]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,16 +11,17 @@
|
|||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
use Illuminate\Support\Carbon;
|
||||||
|
use App\Utils\Traits\MakesHash;
|
||||||
use App\Jobs\Entity\CreateRawPdf;
|
use App\Jobs\Entity\CreateRawPdf;
|
||||||
use App\Jobs\Util\WebhookHandler;
|
use App\Jobs\Util\WebhookHandler;
|
||||||
use App\Models\Traits\Excludable;
|
use App\Models\Traits\Excludable;
|
||||||
use App\Utils\Traits\MakesHash;
|
use App\Services\PdfMaker\PdfMerge;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use App\Utils\Traits\UserSessionAttributes;
|
use App\Utils\Traits\UserSessionAttributes;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
|
||||||
use Illuminate\Database\Eloquent\ModelNotFoundException as ModelNotFoundException;
|
use Illuminate\Database\Eloquent\ModelNotFoundException as ModelNotFoundException;
|
||||||
use Illuminate\Support\Carbon;
|
|
||||||
use Illuminate\Support\Str;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class BaseModel
|
* Class BaseModel
|
||||||
@ -78,6 +79,8 @@ class BaseModel extends Model
|
|||||||
use HasFactory;
|
use HasFactory;
|
||||||
use Excludable;
|
use Excludable;
|
||||||
|
|
||||||
|
public int $max_attachment_size = 3000000;
|
||||||
|
|
||||||
protected $appends = [
|
protected $appends = [
|
||||||
'hashed_id',
|
'hashed_id',
|
||||||
];
|
];
|
||||||
@ -337,4 +340,42 @@ class BaseModel extends Model
|
|||||||
return strtr($section, $variables['values']);
|
return strtr($section, $variables['values']);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Merged PDFs associated with the entity / company
|
||||||
|
* into a single document
|
||||||
|
*
|
||||||
|
* @param string $pdf
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function documentMerge(string $pdf): mixed
|
||||||
|
{
|
||||||
|
$files = collect([$pdf]);
|
||||||
|
|
||||||
|
$entity_docs = $this->documents()
|
||||||
|
->where('is_public', true)
|
||||||
|
->get()
|
||||||
|
->filter(function ($document) {
|
||||||
|
return $document->size < $this->max_attachment_size && stripos($document->name, ".pdf") !== false;
|
||||||
|
})->map(function ($d) {
|
||||||
|
return $d->getFile();
|
||||||
|
});
|
||||||
|
|
||||||
|
$files->push($entity_docs);
|
||||||
|
|
||||||
|
$company_docs = $this->company->documents()
|
||||||
|
->where('is_public', true)
|
||||||
|
->get()
|
||||||
|
->filter(function ($document) {
|
||||||
|
return $document->size < $this->max_attachment_size && stripos($document->name, ".pdf") !== false;
|
||||||
|
})->map(function ($d) {
|
||||||
|
return $d->getFile();
|
||||||
|
});
|
||||||
|
|
||||||
|
$files->push($company_docs);
|
||||||
|
|
||||||
|
$pdf = (new PdfMerge($files->flatten()->toArray()))->run();
|
||||||
|
|
||||||
|
return $pdf;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -309,6 +309,11 @@ class EmailDefaults
|
|||||||
/** Purchase Order / Invoice / Credit / Quote PDF */
|
/** Purchase Order / Invoice / Credit / Quote PDF */
|
||||||
if ($this->email->email_object->settings->pdf_email_attachment) {
|
if ($this->email->email_object->settings->pdf_email_attachment) {
|
||||||
$pdf = ((new CreateRawPdf($this->email->email_object->invitation))->handle());
|
$pdf = ((new CreateRawPdf($this->email->email_object->invitation))->handle());
|
||||||
|
|
||||||
|
if($this->email->email_object->settings->embed_documents && ($this->email->email_object->entity->documents()->where('is_public', true)->count() > 0 || $this->email->email_object->entity->company->documents()->where('is_public', true)->count() > 0)) {
|
||||||
|
$pdf = $this->email->email_object->entity->documentMerge($pdf);
|
||||||
|
}
|
||||||
|
|
||||||
$this->email->email_object->attachments = array_merge($this->email->email_object->attachments, [['file' => base64_encode($pdf), 'name' => $this->email->email_object->entity->numberFormatter().'.pdf']]);
|
$this->email->email_object->attachments = array_merge($this->email->email_object->attachments, [['file' => base64_encode($pdf), 'name' => $this->email->email_object->entity->numberFormatter().'.pdf']]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user