updatesTransactionStatus = $updatesTransactionStatus; $this->createsDocument = $createsDocument; $this->createsFiles = $createsFiles; $this->storageInvoiceTransactionProcessor = $storageInvoiceTransactionProcessor; } /** * @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(); $view = 'pages.pdfs.shipping_invoice'; $dateToCompare = Carbon::parse(env('SST_START_DATE', '2024-04-01 00:00:00')); $shippingInvoiceTransactionCreatedDate = Carbon::parse($invoice_transaction->created_at); if ($shippingInvoiceTransactionCreatedDate->isAfter($dateToCompare) && $invoice_transaction->tax > 0) { $view = 'pages.pdfs.shipping_invoice_sst'; } $this->updatesTransactionStatus->execute($invoice_transaction, ApprovalStatus::APPROVED); $transaction_invoice_pdf = LaravelMpdf::loadView($view, ['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)); } $order = $packingList->owner()->first(); if($order instanceof Order){ $this->storageInvoiceTransactionProcessor->executeOrder($order); } return; } }