mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal.git
synced 2026-08-19 04:24:12 +00:00
93 lines
4.2 KiB
PHP
93 lines
4.2 KiB
PHP
<?php
|
|
|
|
namespace App\Classes\Modules\Transactions\Processors;
|
|
|
|
|
|
use App\Classes\Exceptions\MalformedRequestException;
|
|
use App\Classes\Notifications\InvoiceIssuedEmail;
|
|
use App\Models\Document;
|
|
use App\Models\PackingList;
|
|
use App\Models\Transaction;
|
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
|
use App\Classes\ValueObjects\Constants\TransactionType;
|
|
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
|
|
use App\Classes\Modules\Transactions\Processors\CheckStorageInvoiceTransactionProcessor;
|
|
use App\Classes\Modules\Transactions\Processors\CreateShippingInvoiceTransactionDocProcessor;
|
|
use App\Classes\Modules\Transactions\Processors\CreateShippingEInvoiceDocProcessor;
|
|
use App\Classes\Modules\Transactions\Processors\CreateSalesOrderDocProcessor;
|
|
use App\Models\Order;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
class ApproveShippingInvoiceTransactionProcessor
|
|
{
|
|
|
|
/** @var UpdatesTransactionStatus */
|
|
private $updatesTransactionStatus;
|
|
|
|
/** @var CheckStorageInvoiceTransactionProcessor */
|
|
private $storageInvoiceTransactionProcessor;
|
|
|
|
/** @var CreateShippingInvoiceTransactionDocProcessor */
|
|
private $createShippingInvoiceTransactionDocProcessor;
|
|
|
|
/** @var CreateSalesOrderDocProcessor */
|
|
private $createSalesOrderDocProcessor;
|
|
|
|
/** @var CreateShippingEInvoiceDocProcessor */
|
|
private $createShippingEInvoiceDocProcessor;
|
|
|
|
/**
|
|
* @param UpdatesTransactionStatus $updatesTransactionStatus
|
|
* @param CheckStorageInvoiceTransactionProcessor $storageInvoiceTransactionProcessor
|
|
* @param CreateShippingInvoiceTransactionDocProcessor $createShippingInvoiceTransactionDocProcessor
|
|
* @param CreateSalesOrderDocProcessor $createSalesOrderDocProcessor
|
|
* @param CreateShippingEInvoiceDocProcessor $createShippingEInvoiceDocProcessor
|
|
*/
|
|
public function __construct(UpdatesTransactionStatus $updatesTransactionStatus, CheckStorageInvoiceTransactionProcessor $storageInvoiceTransactionProcessor, CreateShippingInvoiceTransactionDocProcessor $createShippingInvoiceTransactionDocProcessor, CreateSalesOrderDocProcessor $createSalesOrderDocProcessor, CreateShippingEInvoiceDocProcessor $createShippingEInvoiceDocProcessor)
|
|
{
|
|
$this->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);
|
|
|
|
//cief todo: 90 - to determine if sending email is necessary
|
|
// if(app()->environment(['production'])) {
|
|
// $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);
|
|
}
|
|
|
|
return;
|
|
}
|
|
}
|