updatesTransactionStatus = $updatesTransactionStatus; $this->storageInvoiceTransactionProcessor = $storageInvoiceTransactionProcessor; $this->createShippingInvoiceTransactionDocProcessor = $createShippingInvoiceTransactionDocProcessor; $this->createSalesOrderDocProcessor = $createSalesOrderDocProcessor; $this->createShippingEInvoiceDocProcessor = $createShippingEInvoiceDocProcessor; } /** * @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(); $companyModule = $invoice_transaction->owner->owner->companyModule; Log::info('company module einvoice: ' . json_encode($companyModule->company->e_invoice)); if($companyModule->company->e_invoice) { // $this->createShippingEInvoiceDocProcessor->execute($invoice_transaction); } else{ $this->createShippingInvoiceTransactionDocProcessor->execute($invoice_transaction); } $this->createSalesOrderDocProcessor->execute($invoice_transaction); $this->updatesTransactionStatus->execute($invoice_transaction, ApprovalStatus::APPROVED); if(app()->environment(['production']) && $companyModule->company->e_invoice === 0) { //invoice issued email is only send to customer who has not opted in E-Invoice $companyModule = $packingList->owner->companyModule; $user = $companyModule->employees()->first(); $user->notify(new InvoiceIssuedEmail($user, $packingList)); } $order = $packingList->owner()->first(); if($order instanceof Order){ // $this->storageInvoiceTransactionProcessor->executeOrder($order); $is_credit_term = $order->companyModule->inviters()->withPivot('is_credit_term')->first()->pivot->is_credit_term; $this->storageInvoiceTransactionProcessor->processByPackingList($packingList, $order, $is_credit_term); } return; } }