%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/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);
        }
    }
}

Zerion Mini Shell 1.0