%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/IcdQuestionController.php |
<?php namespace App\Http\Controllers\Api\app\v1; use App\Http\Controllers\Api\ApiController; use App\Http\Requests\Api\App\v1\IcdQuestion\SubmitIcdQuestionRequest; use App\Http\Requests\Api\App\v1\StartSignProcessRequest; use App\Jobs\SendExceptionToSlack; use App\Models\BaseModel; use App\Models\Icd; use App\Models\IcdAnswer; use App\Models\IcdSubmission; use App\Services\ESign; use App\Transformers\IcdTransformer; use Barryvdh\DomPDF\Facade as PDF; use Carbon\Carbon; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Storage; use Spatie\MediaLibrary\MediaCollections\Models\Media; class IcdQuestionController extends ApiController { private $esignApi; public function __construct(ESign $esignApi) { $this->esignApi = $esignApi; } /** * @return \Illuminate\Http\JsonResponse */ public function getAllQuestions() { $items = Icd::query() ->where('status', Icd::PUBLISHED) ->firstOrFail(); return $this->item($items, new IcdTransformer()); } /** * @param SubmitIcdQuestionRequest $request * @return \Illuminate\Http\JsonResponse */ public function submit(SubmitIcdQuestionRequest $request) { $user = auth() ->guard('api') ->user(); $submission = IcdSubmission::query() ->where('patient_id', '=', $request->get('patient_id')) ->where('protocol_id', '=', $request->get('protocol_id')) ->first(); if ($submission) { return $this->wrongArguments([ 'message' => 'Icd is already completed for this patient!', ]); } $icd = Icd::query() ->where('status', Icd::PUBLISHED) ->firstOrFail(); DB::beginTransaction(); try { $answers = collect($request->get('answers')); /** @var IcdSubmission $submission */ $submission = IcdSubmission::query() ->create([ 'patient_id' => $request->get('patient_id'), 'protocol_id' => $request->get('protocol_id'), 'icd_id' => $icd->id, 'doctor_id' => $user->id, 'description' => $request->get('description'), 'extra_fields' => $request->get('extra_fields'), 'status' => IcdSubmission::ASSIGNED, ]); foreach ($answers->toArray() as $item) { IcdAnswer::query() ->create([ 'icd_question_id' => $item['icd_question_id'], 'icd_submission_id' => $submission->id, 'answer' => $item['value'], 'extra_field_answer' => array_key_exists('extra_field_answer', $item) ? $item['extra_field_answer'] : null, ]); } $path = storage_path($submission->id . '.pdf'); $pdf = PDF::loadView('pdf.icd_questions', [ 'submission' => $submission, 'extra_fields' => IcdSubmission::extra_field, ]); $pdf->save($path); $media = $submission->addMedia($path) ->usingName($submission->id . '.pdf') ->usingFileName($submission->id . '.pdf') ->withCustomProperties(['type' => IcdSubmission::FINAL_FORM, 'order' => 0]) ->toMediaCollection(IcdSubmission::COLLECTION_NAME, IcdSubmission::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) { $user = auth() ->guard('api') ->user(); $icdSubmission = IcdSubmission::query() ->where('patient_id', $request->get('patient_id')) ->where('protocol_id', $request->get('protocol_id')) ->firstOrFail(); $media = Media::query() ->where('model_type', IcdSubmission::class) ->where('model_id', $icdSubmission->id) ->firstOrFail(); $data = [ "emailSubject" => "Please sign the following ICD", "status" => "sent", "documents" => [ [ 'documentBase64' => base64_encode(file_get_contents(BaseModel::getMediaFinalUrl($media))), 'documentId' => "1", 'fileExtension' => "pdf", 'name' => "Informed Consent Discussion For '" . $icdSubmission->patient->code . "'", 'order' => "1", ], ], "recipients" => [ "signers" => [ [ "email" => $user->email, "name" => $user->fullName(), "recipientId" => "1", "roleName" => "Doctor", "routingOrder" => "1", "tabs" => [ "signHereTabs" => [ [ "anchorString" => "Coordinator Signature", "anchorUnits" => "pixels", "anchorXOffset" => "0", "anchorYOffset" => "40", "anchorIgnoreIfNotPresent" => "false", ], ], ], ], ], ], ]; try { $response = $this->esignApi->createEnvelopes($data); $docusign = [ 'envelope_id' => $response->envelopeId, 'status' => $response->status, ]; $icdSubmission->model() ->create($docusign); $icdSubmission->sent(); $icdSubmission->status = IcdSubmission::SENT; $icdSubmission->save(); return response()->json(['message' => 'ok'], 200); } catch (\Exception $e) { dispatch(new SendExceptionToSlack($e->getMessage())); return response()->json(['message' => 'Can not create envelopes!'], 400); } } }