%PDF- %PDF-
Direktori : /var/www/html/klinisol/klinisol-api/app/Http/Controllers/Api/App/v1/ |
Current File : /var/www/html/klinisol/klinisol-api/app/Http/Controllers/Api/App/v1/QuestionController.php |
<?php namespace App\Http\Controllers\Api\app\v1; use App\Http\Controllers\Api\ApiController; use App\Http\Requests\Api\App\v1\StartSignProcessRequest; use App\Http\Requests\Api\App\v1\Question\SubmitQuestionRequest; use App\Jobs\SendExceptionToSlack; use App\Models\Answer; use App\Models\BaseModel; use App\Models\Question; use App\Models\Submission; use App\Models\User; use App\Services\ESign; use App\Transformers\QuestionTransformer; use Barryvdh\DomPDF\Facade as PDF; use Carbon\Carbon; use Illuminate\Support\Facades\DB; use Spatie\MediaLibrary\MediaCollections\Models\Media; use stdClass; class QuestionController extends ApiController { private $esignApi; public function __construct(ESign $esignApi) { $this->esignApi = $esignApi; } public function getAllQuestions($id) { $items = Question::query() ->where('protocol_id', $id) ->get(); return $this->collection($items, new QuestionTransformer()); } public function submit(SubmitQuestionRequest $request) { $submission = Submission::query() ->where('patient_id', '=', $request->get('patient_id')) ->where('protocol_id', '=', $request->get('protocol_id')) ->first(); if ($submission) { return $this->wrongArguments([ 'message' => 'Inclusion/Exclusion is already completed for this patient!', ]); } /** @var User $user */ $user = auth() ->guard('api') ->user(); DB::beginTransaction(); try { $answers = collect($request->get('answers')); /** @var Submission $submission */ $submission = Submission::query() ->create([ 'patient_id' => $request->get('patient_id'), 'protocol_id' => $request->get('protocol_id'), 'doctor_id' => $user->id, 'description' => $request->get('description'), 'is_eligible' => Submission::IsEligible($answers), 'status' => Submission::ASSIGNED, ]); foreach ($answers->toArray() as $item) { Answer::query() ->create([ 'question_id' => $item['question_id'], 'submission_id' => $submission->id, 'answer' => $item['value'], 'extra_field_answer' => null, ]); } $path = storage_path($submission->id . '.pdf'); $pdf = PDF::loadView('pdf.questions', ['submission' => $submission]); $pdf->save($path); $media = $submission->addMedia($path) ->usingName($submission->id . '.pdf') ->usingFileName($submission->id . '.pdf') ->withCustomProperties(['type' => Submission::FINAL_FORM, 'order' => 0]) ->toMediaCollection(Submission::COLLECTION_NAME, Submission::DISK); DB::commit(); return response()->json([ 'preview' => base64_encode(file_get_contents(BaseModel::getMediaFinalUrl($media))), ], 200); } catch (\Exception $e) { DB::rollBack(); return $this->wrongArguments([ 'message' => $e->getMessage(), ]); } } public function startSignProcess(StartSignProcessRequest $request) { /** @var User $user */ $user = auth() ->guard('api') ->user(); $submission = Submission::query() ->where('patient_id', $request->get('patient_id')) ->where('protocol_id', $request->get('protocol_id')) ->firstOrFail(); $media = Media::query() ->where('model_type', Submission::class) ->where('model_id', $submission->id) ->firstOrFail(); $data = [ "emailSubject" => "Please sign the following document", "status" => "sent", "documents" => [ [ 'documentBase64' => base64_encode(file_get_contents(BaseModel::getMediaFinalUrl($media))), 'documentId' => "1", 'fileExtension' => "pdf", 'name' => "Inclusion Exclusion Criteria For '" . $submission->patient->code . "'", 'order' => "1", ], ], "recipients" => [ "signers" => [ [ "email" => $user->email, "name" => $user->fullName(), "recipientId" => "1", "roleName" => "Doctor", "routingOrder" => "1", "tabs" => [ "signHereTabs" => [ [ "anchorString" => $user->fullName(), "anchorUnits" => "pixels", "anchorXOffset" => "0", "anchorYOffset" => "40", "anchorIgnoreIfNotPresent" => "false", ], ], ], ], ], ], ]; try { $response = $this->esignApi->createEnvelopes($data); $docusign = [ 'envelope_id' => $response->envelopeId, 'status' => $response->status, ]; $submission->model() ->create($docusign); $submission->sent(); $submission->status = Submission::SENT; $submission->save(); return response()->json(['message' => 'ok'], 200); } catch (\Exception $e) { dispatch(new SendExceptionToSlack($e->getMessage())); return response()->json(['message' => 'Can\'t create Envelope!'], 400); } } }