$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: 'kart-rekwizit.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 * @return object */ 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 \App\Models\Order\Card\Requisite\CardRequisite $model * @param \App\Nova\Resources\Order\Card\CardTransaction\Actions\ResponseTypes\AzatApiClientInfoAllResponse $data * * @return string */ public function generateFile($model, $data) { $doc_path = app_path('Nova/Resources/Order/Card/Requisite/Docs/card-requisite.docx'); $templateProcessor = new TemplateProcessor($doc_path); $templateProcessor->setValues([ 'year' => date('Y'), 'name' => $data->clientName, 'contract' => $data->cardAccountNumber, 'bank' => $data->depName, 'hasap' => '---YOK---', 'sb' => '---YOK--', 'bab' => $data->mfo, 'card_number' => $data->cardPan, 'phone' => '---YOK---', 'contract_date' => '---YOK---', 'card_order_date' => '---YOK---', 'card_given_date' => '---YOK---', ]); $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"; } }