Files
shipping-portal/app/Classes/Modules/Transactions/Processors/ApproveShippingInvoiceTransactionProcessor.php
T
2025-06-26 18:29:15 +08:00

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;
}
}