Viewing File: /home/assersoft/public_html/doctor-assistant/app/Controllers/ClinicsController.php

<?php

namespace App\Controllers;

use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\RESTful\ResourceController;
use App\Models\SubscriptionsModel;

class ClinicsController extends ResourceController
{

    protected $modelName = "App\Models\ClinicsModel";
    protected $format = "json";

    /**
     * Return an array of resource objects, themselves in array format.
     *
     * @return ResponseInterface
     */
    public function index()
    {
        return $this->respond($this->model->findAll());
    }

    /**
     * Return the properties of a resource object.
     *
     * @param int|string|null $id
     *
     * @return ResponseInterface
     */
    public function show($id = null)
    {
        $data = $this->model->find($id);
        if($data == null){
            return $this->failNotFound("Clinic not found");
        }

        return $this->respond($data);
    }

    /**
     * Create a new resource object, from "posted" parameters.
     *
     * @return ResponseInterface
     */
    public function create()
    {
        $rules = [
            'clinic_name' => 'required|min_length[3]|max_length[50]',
            'subscription_status' => 'permit_empty|boolean|default[0]',
            'subscription_end_date' => 'permit_empty|valid_date'
        ];

        if(!$this->validate($rules)){
            return $this->fail($this->validator->getErrors());
        }

        $data = $this->request->getVar();
        $clinic = $this->model->insert($data);
        if(!$this->model->insertID) {
            return $this->fail($this->model->errors());
        }

        return $this->respondCreated($clinic);
    }

    /**
     * Add or update a model resource, from "posted" properties.
     *
     * @param int|string|null $id
     *
     * @return ResponseInterface
     */
    public function update($id = null)
    {
        $rules = [
            'clinic_name' => 'permit_empty|min_length[3]|max_length[50]',
            'subscription_status' => 'permit_empty|boolean',
            'subscription_end_date' => 'permit_empty|valid_date'
        ];

        if(!$this->validate($rules)){
            return $this->fail($this->validator->getErrors());
        }

        $clinic = $this->model->find($id);
        if($clinic == null){
            return $this->failNotFound("Clinic not found");
        }

        $data = $this->request->getVar();
        $this->model->update($id, $data);
        if ($this->model->affectedRows() == 0) {
            return $this->fail("Failed to update clinic");
        }

        return $this->respondUpdated($data);
    }

    /**
     * Delete the designated resource object from the model.
     *
     * @param int|string|null $id
     *
     * @return ResponseInterface
     */
    public function delete($id = null)
    {
        $clinic = $this->model->find($id);
        if($clinic == null){
            return $this->failNotFound("Clinic not found");
        }

        $this->model->delete($id);
        if ($this->model->affectedRows() == 0) {
            return $this->fail("Failed to delete clinic");
        }
        return $this->respondDeleted($clinic);
    }

    // Subscriptions.
    public function renewSubscription($clinic_id = null)
    {
        $rules = [
            'subscription_days' => 'required|numeric',
            'subscription_fees' => 'required|numeric',
        ];

        if(!$this->validate($rules)){
            return $this->fail($this->validator->getErrors());
        }

        $data = $this->request->getVar();
        $data['start_date'] = date('Y-m-d H:i:s');
        $data['end_date'] = date('Y-m-d H:i:s', strtotime($data['start_date'] . ' + ' . $data['subscription_days'] . ' days'));
        $data['subscription_status'] = 1;
        $data['subscription_end_date'] = $data['end_date'];

        $clinic = $this->model->find($clinic_id);
        if($clinic == null){
            return $this->failNotFound("Clinic not found");
        }

        $subscriptionModel = new SubscriptionsModel();

        $subscription = $subscriptionModel->insert($data);
        if(!$subscriptionModel->insertID) {
            return $this->fail($subscriptionModel->errors());
        }

        $this->model->update($clinic_id, [
            'subscription_status' => $data['subscription_status'],
            'subscription_end_date' => $data['subscription_end_date'],
        ]);
        if($this->model->affectedRows() == 0) {
            return $this->fail("Failed to renew clinic subscription");
        }

        return $this->respondCreated($subscription);

    }

    public function cancelSubscription($clinic_id = null)
    {

        $clinic = $this->model->find($clinic_id);
        if($clinic == null){
            return $this->failNotFound("Clinic not found");
        }

        $subscriptionModel = new SubscriptionsModel();
        $subscription = $subscriptionModel->where('clinic_id', $clinic_id)->orderBy('created_at', 'desc')->first();
        if($subscription == null){
            return $this->failNotFound("Subscription not found");
        }

        $subscriptionModel->update($subscription['subscription_id'], [
            'end_date' => date('Y-m-d H:i:s'),
            'subscription_status' => 0,
        ]);
        if($subscriptionModel->affectedRows() == 0) {
            return $this->fail("Failed to cancel clinic subscription");
        }

        $this->model->update($clinic_id, [
            'subscription_status' => 0,
            'subscription_end_date' => null,
        ]);
        if($this->model->affectedRows() == 0) {
            return $this->fail("Failed to cancel clinic subscription");
        }

        return $this->respondUpdated($subscription);
    }

    public function getSubscriptions($clinic_id = null)
    {
        $clinic = $this->model->find($clinic_id);
        if($clinic == null){
            return $this->failNotFound("Clinic not found");
        }

        $subscriptionModel = new SubscriptionsModel();
        $subscription = $subscriptionModel->where('clinic_id', $clinic_id)->findAll();
        if($subscription == null){
            return $this->failNotFound("Subscriptions not found");
        }

        return $this->respond($subscription);
    }

    public function findSubscriptionById($clinic_id = null, $subscription_id = null) {
        $subscriptionModel = new SubscriptionsModel();
        $subscription = $subscriptionModel->find($subscription_id);
        if($subscription == null){
            return $this->failNotFound("Subscription not found");
        }

        return $this->respond($subscription);
    }


    public function deleteSubscription($clinic_id = null, $subscription_id = null) {
        $subscriptionModel = new SubscriptionsModel();
        $subscription = $subscriptionModel->find($subscription_id);
        if($subscription == null){
            return $this->failNotFound("Subscription not found");
        }

        $subscriptionModel->delete($subscription_id);
        if($subscriptionModel->affectedRows() == 0) {
            return $this->fail("Failed to delete subscription");
        }
        return $this->respondDeleted($subscription);
    }
}
Back to Directory File Manager