diff --git a/app/Classes/Modules/Transactions/ControllersLogic/ApproveShippingInvoiceTransactionLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/ApproveShippingInvoiceTransactionLogic.php index 3eed1f28..9a5febba 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/ApproveShippingInvoiceTransactionLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/ApproveShippingInvoiceTransactionLogic.php @@ -3,6 +3,7 @@ namespace App\Classes\Modules\Transactions\ControllersLogic; +use App\Classes\Modules\Transactions\Processors\ApproveShippingInvoiceTransactionProcessor; use App\Classes\Notifications\InvoiceIssuedEmail; use Illuminate\Http\Request; @@ -36,29 +37,17 @@ class ApproveShippingInvoiceTransactionLogic extends AbstractControllerLogic /** @var FetchesPackingList */ private $fetchesPackingList; - /** @var UpdatesTransactionStatus */ - private $updatesTransactionStatus; - - /** @var CreatesDocument */ - private $createsDocument; - - /** @var CreatesFiles */ - private $createsFiles; + /** @var ApproveShippingInvoiceTransactionProcessor */ + private $approveShippingInvoiceTransactionProcessor; /** - * ApprovePaymentVerificationLogic constructor. * @param FetchesPackingList $fetchesPackingList - * @param UpdatesTransactionStatus $updatesTransactionStatus - * @param CreatesDocument $createsDocument - * @param CreatesFiles $createsFiles - * @param CreateInvoiceTransactionProcessor $createInvoiceTransactionProcessor + * @param ApproveShippingInvoiceTransactionProcessor $approveShippingInvoiceTransactionProcessor */ - public function __construct(FetchesPackingList $fetchesPackingList, UpdatesTransactionStatus $updatesTransactionStatus, CreatesDocument $createsDocument, CreatesFiles $createsFiles) + public function __construct(FetchesPackingList $fetchesPackingList, ApproveShippingInvoiceTransactionProcessor $approveShippingInvoiceTransactionProcessor) { $this->fetchesPackingList = $fetchesPackingList; - $this->updatesTransactionStatus = $updatesTransactionStatus; - $this->createsDocument = $createsDocument; - $this->createsFiles = $createsFiles; + $this->approveShippingInvoiceTransactionProcessor = $approveShippingInvoiceTransactionProcessor; } /** @@ -69,29 +58,8 @@ class ApproveShippingInvoiceTransactionLogic extends AbstractControllerLogic public function logic(Request $request) : JsonResponse { $packing_list = $this->fetchesPackingList->execute(['id' => $request->route('id')]); + $this->approveShippingInvoiceTransactionProcessor->execute($packing_list); - $invoice_transaction = $packing_list->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 = $packing_list->owner->companyModule->employees()->first(); - if(app()->environment(['production'])) { - $user->notify(new InvoiceIssuedEmail($user, $packing_list)); - } return $this->response([]); } diff --git a/app/Classes/Modules/Transactions/Processors/ApproveShippingInvoiceTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/ApproveShippingInvoiceTransactionProcessor.php new file mode 100644 index 00000000..6fe29c44 --- /dev/null +++ b/app/Classes/Modules/Transactions/Processors/ApproveShippingInvoiceTransactionProcessor.php @@ -0,0 +1,78 @@ +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; + } + +} diff --git a/routes/web.php b/routes/web.php index 865fc252..82803520 100644 --- a/routes/web.php +++ b/routes/web.php @@ -20,6 +20,7 @@ use App\Classes\Modules\PackingLists\Processors\FetchOrderListsFromYdPortalProce use App\Classes\Modules\PackingLists\Processors\FetchPackingListFromVTPortalProcessor; use App\Classes\Modules\PackingLists\Processors\FetchPackingListsFromYdPortalProcessor; use App\Classes\Modules\PackingLists\Services\ListsPackingLists; +use App\Classes\Modules\Transactions\Processors\ApproveShippingInvoiceTransactionProcessor; use App\Classes\Modules\Transactions\Processors\CreateInvoiceTransactionProcessor; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\BusinessType; @@ -769,14 +770,21 @@ Route::get('/invoices/approve', function(Request $request){ $invoices = Transaction::where('type', TransactionType::SHIPPING_INVOICE)->where('status', ApprovalStatus::PENDING_SUBMISSION)->get(); foreach ($invoices as $invoice) { - $order = $invoice->owner->owner; + $packingList = $invoice->owner; + $order = $packingList->owner; if(in_array($order->reference, json_decode($request->input('exclude')))){ continue; } - echo 'approving...'.$order->reference.'
'; + try { + (App()->make(ApproveShippingInvoiceTransactionProcessor::class))->execute($packingList); + echo 'Invoice Approved...
'; + } catch (Exception $exception){ + echo 'failed to approve...
'; + + } }