middleware(function ($request, $next) { $this->account = Auth::user() ->account() ->with('profile') ->first(); return $next($request); }); } /** * Create new Legalization Application * @return ApplicationResource|\Illuminate\Http\Response */ public function create() { //validate if profile is filled if(is_null($this->account) || is_null($this->account->profile)) { return response([ 'success' => false, 'message' => trans('app.application.fill_profile_message'), ],422); } //validate legalization number exists elseif(!$this->account->can_apply && !$this->account->can_extend){ $month = Config::get('settings.legalization_extend') ?? 1; return response([ 'success' => false, 'message' => trans('app.application.expire_message',['one'=>$month]) ],422); } //delete old application??? Should we replace it??? if($app = $this->account->last_application()) { if($app->state != 'approved') return ApplicationResource::make($app); else{ $app->state = 'archive'; $app->save(); } } //upload etmeli dokumentlaryn spisogy $documents = Document::where($this->account->type,true) ->where(fn($query) => $query->where('all_country',true) ->orWhereHas('countries',function(Builder $query) { $query->where('countries.id',$this->account->country_id); })) ->get(); if($documents->count() == 0) { return response([ 'success' => false, 'message' => trans('application.list_not_found') ],404); } $application = Application::create([ 'account_id' => $this->account->id, 'state' => 'draft' //default mysql value is new ]); foreach ($documents as $document){ $attachment = new Attachment([ 'name' => $document->name, 'document_id' => $document->id ]); $application->attachments()->save($attachment); } return ApplicationResource::make($application); } /** * Get accounts legalization application * @return ApplicationResource */ public function get() { $appication = $this->account ->applications() ->latest() ->with('attachments') ->first(); if($appication){ return ApplicationResource::make($appication); } return response()->json(['success' => false,'message' =>'Not Found'],404); } public function apply() { $app = $this->account ->applications() ->whereIn('state',['draft','refine']) ->with('attachments') ->latest() ->first(); if( $app ) { // $unAttachedDocumentsCount = $app->attachments->whereNull('file')->count(); // // if($unAttachedDocumentsCount >0) // { // return response([ // 'success' => false, // 'message' => trans('app.application.required_docs_message') // ],422); // } $app->state = 'new'; $app->save(); //todo send email to operators return response([ 'success' => true, 'message' => trans('app.application.app_success_message') ]); } return response([ 'success' => false, 'message' => trans('app.application.app_error_message') ],400); } public function upload(DocumentUploadRequest $request,$attachment_id) { $attachment = Attachment::with(['application','document'])->find($attachment_id); if(!$attachment || !$attachment->application || $attachment->application->account_id != $this->account->id ){ return response()->json(['success' => false, 'message' =>'Bad request'],400); } $uploadedFile = $request->file('file'); // Log::info($uploadedFile->getSize()); if($attachment->document->max_size != 0 && $uploadedFile->getSize() > $attachment->document->max_size * 1024){//max size in kilobytes return response()->json(['success' => false, 'message' =>trans('app.application.upload_max_size')],422); } // if($attachment->file){ // //todo delete or replace old file //// Stor // } $filename = Str::snake($attachment->name).'.'.$uploadedFile->getClientOriginalExtension(); $directory = 'documents/'.Carbon::today()->year.'/'.$this->account->id; $path = $uploadedFile->storePubliclyAs($directory,$filename); if(!$path){ return response()->json(['success' => false, 'message' =>trans('app.application.upload_failure')],400); } $attachment->file = $directory.'/'.$filename; $attachment->size = number_format($uploadedFile->getSize()/1024, 2, '.', ''); $attachment->type = $uploadedFile->getClientOriginalExtension(); $attachment->save(); return response()->json(['success' => true, 'message' =>trans('app.app.application.upload_success')]); //todo make attachment relation } public function downloadQuestionaire(){ $headers = [ "Content-type"=>"text/html", "Content-Disposition"=>"attachment;Filename=myGeneratefile.doc" ]; $content = view('oprosniki.'.$this->account->type,$this->account->profile)->render(); return \Response::make($content,200, $headers); } }