updatesTransactionStatus = $updatesTransactionStatus; $this->createsDocument = $createsDocument; $this->createsFiles = $createsFiles; } /** * @param PackingList $packingList * @throws MalformedRequestException */ public function execute(PackingList $packingList) { /** @var Transaction $invoice_transaction */ $invoice_transaction = $packingList->transactions()->where('transactions.type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::PENDING_SUBMISSION])->first(); $this->updatesTransactionStatus->execute($invoice_transaction, ApprovalStatus::APPROVED); $transaction_invoice_pdf = LaravelMpdf::loadView('pages.pdfs.shipping_invoice', ['invoice_transaction' => $invoice_transaction]); $document_object = new DocumentObject( DocumentType::SHIPPING_INVOICE, [chunk_split('data:application/pdf;base64,'.base64_encode($transaction_invoice_pdf->output()))], '', ApprovalStatus::COMPLETED, 'shipping_invoice' ); /** @var Document $document */ $document = $this->createsDocument->execute($invoice_transaction, $document_object); $this->createsFiles->execute($document, $document_object); $user = $packingList->owner->companyModule->employees()->first(); if(app()->environment(['production'])) { $user->notify(new InvoiceIssuedEmail($user, $packingList)); } return; } }