Files
shipping-portal/app/Classes/Modules/Orders/ControllersLogic/CreateBatchProcessingAutoCountImportLogic.php
T

86 lines
3.1 KiB
PHP

<?php
namespace App\Classes\Modules\Orders\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Jobs\Commands\V2\ProcessTransactionForEInvoiceV2CommandJob;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Models\Transaction;
use Carbon\Carbon;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Facades\Log;
class CreateBatchProcessingAutoCountImportLogic extends AbstractControllerLogic
{
protected int $processedCount = 0;
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Generate E-Invoices',
'message' => sprintf(
'You have successfully submitted %d transaction%s for E-Invoices processing.',
$this->processedCount,
$this->processedCount === 1 ? '' : 's'
),
];
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request): JsonResponse
{
$validated = $request->validate([
'startDate' => 'nullable|date_format:d-m-Y',
'endDate' => 'nullable|date_format:d-m-Y|after_or_equal:startDate',
]);
$startDate = null;
$endDate = null;
$startDate = isset($validated['startDate']) && $validated['startDate']
? Carbon::createFromFormat('d-m-Y', $validated['startDate'])->startOfDay()
: Carbon::now()->startOfMonth()->startOfDay();
$endDate = isset($validated['endDate']) && $validated['endDate']
? Carbon::createFromFormat('d-m-Y', $validated['endDate'])->endOfDay()
: Carbon::now()->endOfMonth()->endOfDay();
$query = Transaction::query();
$query->whereIn('type', [TransactionType::SHIPPING_INVOICE, TransactionType::STORAGE_INVOICE])
->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
// $transactions = $query->whereHas('transactions', function($transaction) use ($startDate, $endDate) {
// $transaction->where('type', TransactionType::PAYMENT)
// ->whereBetween('updated_at', [$startDate, $endDate])
// ->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
// })->get();
$transactions = $query->whereBetween('created_at', [$startDate, $endDate])->get();
$count = 0;
foreach ($transactions as $transaction) {
ProcessTransactionForEInvoiceV2CommandJob::dispatch($transaction);
// $count = $count + 1;
// if($count > 15){
// break;
// }
}
$this->processedCount = count($transactions);
return $this->resourceResponse(JsonResource::collection(collect([])));
}
}