Merge support for purchase order PDF generation

This commit is contained in:
David Bomba 2023-10-26 17:39:42 +11:00
parent 6458406128
commit e8100ac1c3
4 changed files with 71 additions and 34 deletions

View File

@ -24,6 +24,7 @@ use App\Http\Requests\PurchaseOrder\ShowPurchaseOrderRequest;
use App\Http\Requests\PurchaseOrder\StorePurchaseOrderRequest; use App\Http\Requests\PurchaseOrder\StorePurchaseOrderRequest;
use App\Http\Requests\PurchaseOrder\UpdatePurchaseOrderRequest; use App\Http\Requests\PurchaseOrder\UpdatePurchaseOrderRequest;
use App\Http\Requests\PurchaseOrder\UploadPurchaseOrderRequest; use App\Http\Requests\PurchaseOrder\UploadPurchaseOrderRequest;
use App\Jobs\Entity\CreateRawPdf;
use App\Jobs\PurchaseOrder\PurchaseOrderEmail; use App\Jobs\PurchaseOrder\PurchaseOrderEmail;
use App\Jobs\PurchaseOrder\ZipPurchaseOrders; use App\Jobs\PurchaseOrder\ZipPurchaseOrders;
use App\Models\Account; use App\Models\Account;
@ -513,7 +514,8 @@ class PurchaseOrderController extends BaseController
if ($action == 'bulk_print' && $user->can('view', $purchase_orders->first())) { if ($action == 'bulk_print' && $user->can('view', $purchase_orders->first())) {
$paths = $purchase_orders->map(function ($purchase_order) { $paths = $purchase_orders->map(function ($purchase_order) {
return (new \App\Jobs\Vendor\CreatePurchaseOrderPdf($purchase_order->invitations->first()))->rawPdf(); return (new CreateRawPdf($purchase_order->invitations->first()))->handle();
// return (new \App\Jobs\Vendor\CreatePurchaseOrderPdf($purchase_order->invitations->first()))->rawPdf();
}); });
$merge = (new PdfMerge($paths->toArray()))->run(); $merge = (new PdfMerge($paths->toArray()))->run();
@ -622,8 +624,8 @@ class PurchaseOrderController extends BaseController
$file = $purchase_order->service()->getPurchaseOrderPdf(); $file = $purchase_order->service()->getPurchaseOrderPdf();
return response()->streamDownload(function () use ($file) { return response()->streamDownload(function () use ($file) {
echo Storage::get($file); echo $file;
}, basename($file), ['Content-Type' => 'application/pdf']); }, $purchase_order->numberFormatter().".pdf", ['Content-Type' => 'application/pdf']);
break; break;
case 'restore': case 'restore':
@ -827,7 +829,7 @@ class PurchaseOrderController extends BaseController
} }
return response()->streamDownload(function () use ($file) { return response()->streamDownload(function () use ($file) {
echo Storage::get($file); echo $file;
}, basename($file), $headers); }, $purchase_order->numberFormatter().".pdf", $headers);
} }
} }

View File

@ -57,7 +57,7 @@ class CreateRawPdf
/** /**
* @param $invitation * @param $invitation
*/ */
public function __construct($invitation) public function __construct($invitation, private ?string $type = null)
{ {
$this->invitation = $invitation; $this->invitation = $invitation;
@ -83,16 +83,36 @@ class CreateRawPdf
$this->contact = $invitation->contact; $this->contact = $invitation->contact;
} }
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',
};
return $type;
}
public function handle() public function handle()
{ {
/** Testing this override to improve PDF generation performance */ /** Testing this override to improve PDF generation performance */
$ps = new PdfService($this->invitation, 'product', [ $ps = new PdfService($this->invitation, $this->resolveType(), [
'client' => $this->entity->client ?? false, 'client' => $this->entity->client ?? false,
'vendor' => $this->entity->vendor ?? false, 'vendor' => $this->entity->vendor ?? false,
"{$this->entity_string}s" => [$this->entity], "{$this->entity_string}s" => [$this->entity],
]); ]);
$pdf = $ps->boot()->getPdf(); $pdf = $ps->boot()->getPdf();
return $pdf;
nlog("pdf timer = ". $ps->execution_time); nlog("pdf timer = ". $ps->execution_time);
/* Forget the singleton*/ /* Forget the singleton*/

View File

@ -11,28 +11,29 @@
namespace App\Jobs\Vendor; namespace App\Jobs\Vendor;
use App\Exceptions\FilePermissionsFailure; use App\Utils\Ninja;
use App\Libraries\MultiDB;
use App\Models\Design; use App\Models\Design;
use App\Libraries\MultiDB;
use Illuminate\Bus\Queueable;
use App\Utils\Traits\MakesHash;
use App\Utils\VendorHtmlEngine;
use App\Services\Pdf\PdfService;
use App\Utils\PhantomJS\Phantom;
use App\Utils\HostedPDF\NinjaPdf;
use App\Utils\Traits\Pdf\PdfMaker;
use Illuminate\Support\Facades\App;
use App\Utils\Traits\NumberFormatter;
use App\Utils\Traits\MakesInvoiceHtml;
use Illuminate\Queue\SerializesModels;
use App\Utils\Traits\Pdf\PageNumbering;
use Illuminate\Support\Facades\Storage;
use Illuminate\Queue\InteractsWithQueue;
use App\Exceptions\FilePermissionsFailure;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use App\Services\PdfMaker\Design as PdfDesignModel; use App\Services\PdfMaker\Design as PdfDesignModel;
use App\Services\PdfMaker\Design as PdfMakerDesign; use App\Services\PdfMaker\Design as PdfMakerDesign;
use App\Services\PdfMaker\PdfMaker as PdfMakerService; use App\Services\PdfMaker\PdfMaker as PdfMakerService;
use App\Utils\HostedPDF\NinjaPdf;
use App\Utils\Ninja;
use App\Utils\PhantomJS\Phantom;
use App\Utils\Traits\MakesHash;
use App\Utils\Traits\MakesInvoiceHtml;
use App\Utils\Traits\NumberFormatter;
use App\Utils\Traits\Pdf\PageNumbering;
use App\Utils\Traits\Pdf\PdfMaker;
use App\Utils\VendorHtmlEngine;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Storage;
class CreatePurchaseOrderPdf implements ShouldQueue class CreatePurchaseOrderPdf implements ShouldQueue
{ {
@ -79,6 +80,18 @@ class CreatePurchaseOrderPdf implements ShouldQueue
public function handle() 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(); $pdf = $this->rawPdf();
if ($pdf) { if ($pdf) {

View File

@ -35,19 +35,21 @@ class GetPurchaseOrderPdf extends AbstractService
$invitation = $this->purchase_order->invitations()->first(); $invitation = $this->purchase_order->invitations()->first();
} }
$path = $this->purchase_order->vendor->purchase_order_filepath($invitation); return (new CreatePurchaseOrderPdf($invitation))->handle();
$file_path = $path.$this->purchase_order->numberFormatter().'.pdf'; // $path = $this->purchase_order->vendor->purchase_order_filepath($invitation);
// $disk = 'public'; // $file_path = $path.$this->purchase_order->numberFormatter().'.pdf';
$disk = config('filesystems.default');
$file = Storage::disk($disk)->exists($file_path); // // $disk = 'public';
// $disk = config('filesystems.default');
if (! $file) { // $file = Storage::disk($disk)->exists($file_path);
$file_path = (new CreatePurchaseOrderPdf($invitation))->handle();
}
return $file_path; // if (! $file) {
// $file_path = (new CreatePurchaseOrderPdf($invitation))->handle();
// }
// return $file_path;
} }
} }