Files
shipping-portal/app/Http/Middleware/CheckForStorageInvoiceByTransactions.php
T
2023-11-04 14:58:50 +08:00

73 lines
2.6 KiB
PHP

<?php
namespace App\Http\Middleware;
use Closure;
use App\Classes\Modules\Transactions\Processors\CheckAndCreateStorageInvoiceTransactionProcessor;
use App\Classes\Modules\Transactions\Services\ListsTransactions;
use App\Models\CompanyConnection;
use App\Models\Order;
use App\Models\PackingList;
use Illuminate\Http\Request;
class CheckForStorageInvoiceByTransactions
{
/** @var CheckAndCreateStorageInvoiceTransactionProcessor */
private $storageInvoiceTransactionProcessor;
/** @var ListsTransactions */
private $listsTransactions;
public function __construct(CheckAndCreateStorageInvoiceTransactionProcessor $storageInvoiceTransactionProcessor, ListsTransactions $listsTransactions)
{
$this->storageInvoiceTransactionProcessor = $storageInvoiceTransactionProcessor;
$this->listsTransactions = $listsTransactions;
}
/**
* Handle an incoming request.
*
* @param Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next)
{
//{"per_page":999,"order_by":{"column":"id","DESC":true},"status_in":[2],"receiver":298,"type_in":[1,16],"does_not_have_payment_status_in":[0,1],"does_not_have_groups":1}
$transactions = null;
$marking = $request->route('marking');
if($marking){
$connection = CompanyConnection::where('invitee_reference', $marking)->first();
$company_module_id = $connection->invitee->id;
$filters = [
'per_page' => 999,
'status_in' => [2],
'receiver' => $company_module_id,
'type_in' => [1, 16]
];
$transactions = $this->listsTransactions->execute($filters);
}
else{
$filters = json_decode($request->input('filters'), true);
$filters['per_page'] = 999;
unset($filters['does_not_have_payment_status_in']);
unset($filters['does_not_have_groups']);
unset($filters['order_by']);
$transactions = $this->listsTransactions->execute($filters);
}
foreach($transactions as $transaction){
$packingList = $transaction->owner()->first();
$order = $packingList->owner()->first();
if($order instanceof Order){
$this->storageInvoiceTransactionProcessor->execute($order->reference);
}
}
return $next($request);
}
}