mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal.git
synced 2026-08-19 12:34:18 +00:00
94 lines
4.4 KiB
PHP
94 lines
4.4 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);
|
|
|
|
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;
|
|
}
|
|
}
|