109 lines
3.2 KiB
PHP
109 lines
3.2 KiB
PHP
<?php
|
|
|
|
namespace App\Nova\Resources\Order\Card\Requisite\Actions;
|
|
|
|
use App\Nova\Resources\Order\Card\CardTransaction\Actions\DownloadCardTransaction;
|
|
use Illuminate\Bus\Queueable;
|
|
use Illuminate\Queue\InteractsWithQueue;
|
|
use Illuminate\Support\Carbon;
|
|
use Illuminate\Support\Collection;
|
|
use Illuminate\Support\Facades\File;
|
|
use Illuminate\Support\Str;
|
|
use Laravel\Nova\Actions\Action;
|
|
use Laravel\Nova\Actions\ActionResponse;
|
|
use Laravel\Nova\Fields\ActionFields;
|
|
use Laravel\Nova\Http\Requests\NovaRequest;
|
|
use PhpOffice\PhpWord\TemplateProcessor;
|
|
|
|
class DownloadCardRequisite extends Action
|
|
{
|
|
use InteractsWithQueue, Queueable;
|
|
|
|
/**
|
|
* Perform the action on the given models.
|
|
*
|
|
* @param \Laravel\Nova\Fields\ActionFields $fields
|
|
* @param \Illuminate\Support\Collection $models
|
|
* @return mixed
|
|
*/
|
|
public function handle(ActionFields $fields, Collection $models)
|
|
{
|
|
/** @var \App\Models\Order\Card\Requisite\CardRequisite */
|
|
$model = $models->first();
|
|
|
|
/** @var \App\Nova\Resources\Order\Card\CardTransaction\Actions\ResponseTypes\AzatApiClientInfoAllResponse */
|
|
$data = $this->fetchApi($model);
|
|
|
|
if ($data->errCode != 0) {
|
|
return ActionResponse::danger($data->message);
|
|
}
|
|
|
|
$path = $this->generateFile($model, $data);
|
|
|
|
return ActionResponse::download(
|
|
name: 'card-requisite.docx',
|
|
url: url($path)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Get the fields available on the action.
|
|
*
|
|
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
|
|
* @return array
|
|
*/
|
|
public function fields(NovaRequest $request)
|
|
{
|
|
return [];
|
|
}
|
|
|
|
/**
|
|
* Fetch api
|
|
*
|
|
* @param \App\Models\Order\Card\Requisite\CardRequisite $model
|
|
*/
|
|
public function fetchApi($model)
|
|
{
|
|
$date = today()->format('d.m.Y');
|
|
|
|
$response = DownloadCardTransaction::make()->fetchApi(
|
|
passport_serie: $model->passport_serie,
|
|
passport_id: $model->passport_id,
|
|
card_number_masked: Str::mask($model->card_number, '*', 6, 6),
|
|
card_expire_date: $model->card_month.'/'.substr($model->card_year, 2),
|
|
start_date: $date,
|
|
end_date: $date,
|
|
);
|
|
|
|
return Str::isJson($response)
|
|
? json_decode($response)
|
|
: emptyClass(errCode: 1, message: 'Connection issue to VP');;
|
|
}
|
|
|
|
/**
|
|
* Generate file
|
|
*
|
|
* @param @param \App\Models\Order\Card\Requisite\CardRequisite $model
|
|
*/
|
|
public function generateFile($model)
|
|
{
|
|
$doc_path = app_path('Nova/Resources/Order/Card/Requisite/Docs/card-requisite.docx');
|
|
|
|
$templateProcessor = new TemplateProcessor($doc_path);
|
|
$templateProcessor->setValues([
|
|
'year' => date('Y'),
|
|
]);
|
|
|
|
$unique_folder_name = Str::snake(str_replace(':', '-', $model->created_at->toDateTimeString()));
|
|
$dir = public_path("files/card-requisite/{$unique_folder_name}");
|
|
|
|
File::makeDirectory($dir, 0777, true, true);
|
|
|
|
$filePath = $dir."/{$model->id}.docx";
|
|
|
|
$templateProcessor->saveAs($filePath);
|
|
|
|
return "files/card-requisite/{$unique_folder_name}/{$model->id}.docx";
|
|
}
|
|
}
|