fixed invoice pdf attachment

This commit is contained in:
Denis Duliçi 2021-04-29 18:12:37 +03:00
parent 2e695865bc
commit 5079a0bb30
7 changed files with 69 additions and 69 deletions

View File

@ -14,7 +14,6 @@ use App\Jobs\Document\UpdateDocument;
use App\Models\Document\Document; use App\Models\Document\Document;
use App\Notifications\Sale\Invoice as Notification; use App\Notifications\Sale\Invoice as Notification;
use App\Traits\Documents; use App\Traits\Documents;
use File;
class Invoices extends Controller class Invoices extends Controller
{ {
@ -268,33 +267,8 @@ class Invoices extends Controller
return redirect()->back(); return redirect()->back();
} }
$invoice = $this->prepareInvoice($invoice);
$view = view($invoice->template_path, compact('invoice'))->render();
$html = mb_convert_encoding($view, 'HTML-ENTITIES');
$pdf = app('dompdf.wrapper');
$pdf->loadHTML($html);
$file_name = $this->getDocumentFileName($invoice);
$file = storage_path('app/temp/' . $file_name);
$invoice->pdf_path = $file;
// Save the PDF file into temp folder
$pdf->save($file);
// Notify the customer // Notify the customer
$invoice->contact->notify(new Notification($invoice, 'invoice_new_customer')); $invoice->contact->notify(new Notification($invoice, 'invoice_new_customer', true));
// Delete temp file
File::delete($file);
unset($invoice->paid);
unset($invoice->template_path);
unset($invoice->pdf_path);
unset($invoice->reconciled);
event(new \App\Events\Document\DocumentSent($invoice)); event(new \App\Events\Document\DocumentSent($invoice));
@ -312,7 +286,7 @@ class Invoices extends Controller
*/ */
public function printInvoice(Document $invoice) public function printInvoice(Document $invoice)
{ {
$invoice = $this->prepareInvoice($invoice); event(new \App\Events\Document\DocumentPrinting($invoice));
$view = view($invoice->template_path, compact('invoice')); $view = view($invoice->template_path, compact('invoice'));
@ -328,7 +302,7 @@ class Invoices extends Controller
*/ */
public function pdfInvoice(Document $invoice) public function pdfInvoice(Document $invoice)
{ {
$invoice = $this->prepareInvoice($invoice); event(new \App\Events\Document\DocumentPrinting($invoice));
$currency_style = true; $currency_style = true;
@ -368,29 +342,4 @@ class Invoices extends Controller
return redirect()->back(); return redirect()->back();
} }
protected function prepareInvoice(Document $invoice)
{
$paid = 0;
foreach ($invoice->transactions as $item) {
$amount = $item->amount;
if ($invoice->currency_code != $item->currency_code) {
$item->default_currency_code = $invoice->currency_code;
$amount = $item->getAmountConvertedFromDefault();
}
$paid += $amount;
}
$invoice->paid = $paid;
$invoice->template_path = 'sales.invoices.print_' . setting('invoice.template');
event(new \App\Events\Document\DocumentPrinting($invoice));
return $invoice;
}
} }

View File

@ -24,7 +24,7 @@ class SendDocumentPaymentNotification
// Notify the customer // Notify the customer
if ($document->contact && !empty($document->contact_email)) { if ($document->contact && !empty($document->contact_email)) {
$document->contact->notify(new Notification($document, $transaction, "{$document->type}_payment_customer")); $document->contact->notify(new Notification($document, $transaction, "{$document->type}_payment_customer"), true);
} }
// Notify all users assigned to this company // Notify all users assigned to this company

View File

@ -363,6 +363,11 @@ class Document extends Model
return $amount; return $amount;
} }
public function getTemplatePathAttribute($value = null)
{
return $value ?: 'sales.invoices.print_' . setting('invoice.template');
}
protected static function newFactory(): Factory protected static function newFactory(): Factory
{ {
return DocumentFactory::new(); return DocumentFactory::new();

View File

@ -4,10 +4,13 @@ namespace App\Notifications\Portal;
use App\Abstracts\Notification; use App\Abstracts\Notification;
use App\Models\Common\EmailTemplate; use App\Models\Common\EmailTemplate;
use App\Traits\Documents;
use Illuminate\Support\Facades\URL; use Illuminate\Support\Facades\URL;
class PaymentReceived extends Notification class PaymentReceived extends Notification
{ {
use Documents;
/** /**
* The bill model. * The bill model.
* *
@ -29,18 +32,29 @@ class PaymentReceived extends Notification
*/ */
public $template; public $template;
/**
* Should attach pdf or not.
*
* @var bool
*/
public $attach_pdf;
/** /**
* Create a notification instance. * Create a notification instance.
* *
* @param object $invoice * @param object $invoice
* @param object $transaction
* @param object $template_alias
* @param object $attach_pdf
*/ */
public function __construct($invoice = null, $transaction = null, $template = null) public function __construct($invoice = null, $transaction = null, $template_alias = null, $attach_pdf = false)
{ {
parent::__construct(); parent::__construct();
$this->invoice = $invoice; $this->invoice = $invoice;
$this->transaction = $transaction; $this->transaction = $transaction;
$this->template = EmailTemplate::alias($template)->first(); $this->template = EmailTemplate::alias($template_alias)->first();
$this->attach_pdf = $attach_pdf;
} }
/** /**
@ -53,9 +67,9 @@ class PaymentReceived extends Notification
{ {
$message = $this->initMessage(); $message = $this->initMessage();
// Attach the PDF file if available // Attach the PDF file
if (isset($this->invoice->pdf_path)) { if ($this->attach_pdf) {
$message->attach($this->invoice->pdf_path, [ $message->attach($this->storeInvoicePdfAndGetPath($this->invoice), [
'mime' => 'application/pdf', 'mime' => 'application/pdf',
]); ]);
} }

View File

@ -25,14 +25,14 @@ class Bill extends Notification
* Create a notification instance. * Create a notification instance.
* *
* @param object $bill * @param object $bill
* @param object $template * @param object $template_alias
*/ */
public function __construct($bill = null, $template = null) public function __construct($bill = null, $template_alias = null)
{ {
parent::__construct(); parent::__construct();
$this->bill = $bill; $this->bill = $bill;
$this->template = EmailTemplate::alias($template)->first(); $this->template = EmailTemplate::alias($template_alias)->first();
} }
/** /**

View File

@ -4,10 +4,13 @@ namespace App\Notifications\Sale;
use App\Abstracts\Notification; use App\Abstracts\Notification;
use App\Models\Common\EmailTemplate; use App\Models\Common\EmailTemplate;
use App\Traits\Documents;
use Illuminate\Support\Facades\URL; use Illuminate\Support\Facades\URL;
class Invoice extends Notification class Invoice extends Notification
{ {
use Documents;
/** /**
* The invoice model. * The invoice model.
* *
@ -22,18 +25,27 @@ class Invoice extends Notification
*/ */
public $template; public $template;
/**
* Should attach pdf or not.
*
* @var bool
*/
public $attach_pdf;
/** /**
* Create a notification instance. * Create a notification instance.
* *
* @param object $invoice * @param object $invoice
* @param object $template * @param object $template_alias
* @param object $attach_pdf
*/ */
public function __construct($invoice = null, $template = null) public function __construct($invoice = null, $template_alias = null, $attach_pdf = false)
{ {
parent::__construct(); parent::__construct();
$this->invoice = $invoice; $this->invoice = $invoice;
$this->template = EmailTemplate::alias($template)->first(); $this->template = EmailTemplate::alias($template_alias)->first();
$this->attach_pdf = $attach_pdf;
} }
/** /**
@ -46,9 +58,9 @@ class Invoice extends Notification
{ {
$message = $this->initMessage(); $message = $this->initMessage();
// Attach the PDF file if available // Attach the PDF file
if (isset($this->invoice->pdf_path)) { if ($this->attach_pdf) {
$message->attach($this->invoice->pdf_path, [ $message->attach($this->storeInvoicePdfAndGetPath($this->invoice), [
'mime' => 'application/pdf', 'mime' => 'application/pdf',
]); ]);
} }

View File

@ -123,4 +123,24 @@ trait Documents
return $key; return $key;
} }
public function storeInvoicePdfAndGetPath($invoice)
{
event(new \App\Events\Document\DocumentPrinting($invoice));
$view = view($invoice->template_path, ['invoice' => $invoice])->render();
$html = mb_convert_encoding($view, 'HTML-ENTITIES', 'UTF-8');
$pdf = app('dompdf.wrapper');
$pdf->loadHTML($html);
$file_name = $this->getDocumentFileName($invoice);
$pdf_path = storage_path('app/temp/' . $file_name);
// Save the PDF file into temp folder
$pdf->save($pdf_path);
return $pdf_path;
}
} }