%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/EnrollmentController.php |
<?php namespace App\Http\Controllers\Api\App\v1; use App\Http\Controllers\Api\ApiController; use App\Http\Requests\Api\App\v1\Enrollment\EnrollmentSubmissionRequest; use App\Http\Requests\Api\App\v1\StartSignProcessRequest; use App\Jobs\SendExceptionToSlack; use App\Models\BaseModel; use App\Models\Enrollment; use App\Models\IcdSubmission; use App\Models\User; use App\Services\ESign; use Barryvdh\DomPDF\Facade as PDF; use Illuminate\Support\Facades\DB; use Spatie\MediaLibrary\MediaCollections\Models\Media; class EnrollmentController extends ApiController { private $esignApi; /** * UserController constructor. */ public function __construct(ESign $esignApi) { $this->esignApi = $esignApi; } public function store(EnrollmentSubmissionRequest $request) { /** @var User $user */ $user = auth() ->guard('api') ->user(); $data = $request->only(['patient_id', 'protocol_id', 'notes']); $data['doctor_id'] = $user->id; $data['status'] = Enrollment::ASSIGNED; /** @var Enrollment $enrollment */ $enrollment = Enrollment::query() ->where('patient_id', '=', $request->get('patient_id')) ->where('protocol_id', '=', $request->get('protocol_id')) ->first(); if ($enrollment) { return $this->wrongArguments([ 'message' => 'Enrollment is already completed for this patient!', ]); } $enrollment = Enrollment::query() ->create($data); $path = storage_path($enrollment->id . '.pdf'); $pdf = PDF::loadView('pdf.enrollment', ['enrollment' => $enrollment]); $pdf->save($path); $media = $enrollment->addMedia($path) ->usingName($enrollment->id . '.pdf') ->usingFileName($enrollment->id . '.pdf') ->withCustomProperties(['type' => Enrollment::FINAL_FORM, 'order' => 0]) ->toMediaCollection(Enrollment::COLLECTION_NAME, Enrollment::DISK); DB::commit(); return response()->json([ 'preview' => base64_encode(file_get_contents(BaseModel::getMediaFinalUrl($media))), ], 200); } public function startSignProcess(StartSignProcessRequest $request) { /** @var User $user */ $user = auth() ->guard('api') ->user(); /** @var Enrollment $enrollment */ $enrollment = Enrollment::query() ->where('patient_id', $request->get('patient_id')) ->where('protocol_id', $request->get('protocol_id')) ->firstOrFail(); $media = Media::query() ->where('model_type', Enrollment::class) ->where('model_id', $enrollment->id) ->firstOrFail(); $data = [ "emailSubject" => "Please sign the following Enrollment", "status" => "sent", "documents" => [ [ 'documentBase64' => base64_encode(file_get_contents(BaseModel::getMediaFinalUrl($media))), 'documentId' => "1", 'fileExtension' => "pdf", 'name' => "Enrollment For '" . $enrollment->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, ]; $enrollment->model() ->create($docusign); $enrollment->sent(); $enrollment->status = Enrollment::SENT; $enrollment->save(); return response()->json(['message' => 'ok'], 200); } catch (\Exception $e) { dispatch(new SendExceptionToSlack($e->getMessage())); return response()->json(['message' => 'Can not create envelopes!'], 400); } } }