%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/klinisol/klinisol-api/app/Http/Controllers/Api/App/v1/
Upload File :
Create Path :
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);
        }
    }
}

Zerion Mini Shell 1.0