Adding doctors
This commit is contained in:
parent
4d9f8876df
commit
79dcf2bb3b
|
|
@ -0,0 +1,74 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Requests\LambdaRequest;
|
||||
use App\Models\Doctor;
|
||||
use DB;
|
||||
|
||||
class DoctorController extends Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('auth');
|
||||
$this->_service = 'ums';
|
||||
$this->_module = 'contact';
|
||||
$this->_viewname = 'doctor';
|
||||
$this->_title = 'Doctors';
|
||||
$this->_base_url = '/doctor';
|
||||
}
|
||||
|
||||
public function list(Request $request)
|
||||
{
|
||||
$response = LambdaRequest::signedrequest('get', $this->_service, $this->_module . '/get_my_contacts');
|
||||
$fields = $this->get_list_fields();
|
||||
return $this->view('list')->with([
|
||||
'title' => $this->_title,
|
||||
'fields' => $fields,
|
||||
'base_url' => $this->_base_url,
|
||||
'items' => $response->data->items,
|
||||
'buttons' => $this->get_list_buttons()
|
||||
]);
|
||||
}
|
||||
|
||||
public function createdoctor(Request $request)
|
||||
{
|
||||
return Doctor::create($request->only(['msl_code', 'email', 'contact_id', 'name', 'phone']))->id;
|
||||
}
|
||||
|
||||
protected function get_list_fields()
|
||||
{
|
||||
return [
|
||||
'actions' => ['title' => 'Actions', 'buttons' => ['edit', 'delete']],
|
||||
'name' => ['title' => 'Name', 'type' => 'text'],
|
||||
'msl_code' => ['title' => 'MSL Code', 'type' => 'text']
|
||||
];
|
||||
}
|
||||
|
||||
protected function get_form_fields($type, $values)
|
||||
{
|
||||
$response = LambdaRequest::signedrequest('get', 'ums', 'contactattribute/get_all');
|
||||
// echo '<pre>'; print_r($response); exit;
|
||||
|
||||
$fields = [
|
||||
'name' => ['title' => 'Name', 'type' => 'text', 'required' => true],
|
||||
'email' => ['title' => 'Email', 'type' => 'email', 'required' => true],
|
||||
'phone' => ['title' => 'Phone', 'type' => 'text', 'required' => true],
|
||||
'msl_code' => ['title' => 'MSL Code', 'type' => 'text'],
|
||||
'status' => ['title' => 'Status', 'type' => 'select', 'required' => true, 'values' => ['active' => 'Active', 'disabled' => 'Disabled']],
|
||||
];
|
||||
|
||||
foreach ($response->data->items as $item) {
|
||||
$values = [];
|
||||
if (in_array($item->type, ['select', 'radio', 'checkbox'])) {
|
||||
foreach ($item->options as $op) {
|
||||
$values[$op->value] = $op->display;
|
||||
}
|
||||
}
|
||||
$fields[$item->code] = ['title' => $item->attribute, 'type' => $item->type, 'required' => $item->required == 'yes' ? true : false, 'values' => $values];
|
||||
}
|
||||
|
||||
return $fields;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Doctor extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $fillable = [
|
||||
'msl_code', 'email', 'contact_id', 'name', 'phone'
|
||||
];
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateDoctorsTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('doctors', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('msl_code');
|
||||
$table->string('email');
|
||||
$table->string('contact_id');
|
||||
$table->string('name');
|
||||
$table->string('phone', 20);
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('doctors');
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,277 @@
|
|||
<html>
|
||||
|
||||
<head>
|
||||
@include('layouts.shared/title-meta', ['title' => 'Form'])
|
||||
@include('layouts.shared/head-css', ['mode' => $mode ?? '', 'demo' => $demo ?? ''])
|
||||
<link href="{{ asset('assets/libs/select2/select2.min.css') }}" rel="stylesheet" type="text/css" />
|
||||
<link href="{{ asset('assets/libs/multiselect/multiselect.min.css') }}" rel="stylesheet" type="text/css" />
|
||||
<link href="{{ URL::asset('assets/libs/dropify/dropify.min.css') }}" rel="stylesheet" type="text/css" />
|
||||
<link href="{{ asset('assets/libs/bootstrap-datepicker/bootstrap-datepicker.min.css') }}" rel="stylesheet"
|
||||
type="text/css" />
|
||||
<style type="text/css">
|
||||
.ms-container {
|
||||
max-width: 100%
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container-fluid">
|
||||
<!-- end page title -->
|
||||
@if (session()->has('message'))
|
||||
<div class="alert alert-success mt-3">
|
||||
{{ session()->get('message') }}
|
||||
</div>
|
||||
@endif
|
||||
<div class="row mt-3">
|
||||
<div class="col-xl-12">
|
||||
<div class="card">
|
||||
<form method="post" action="" id="form-availiblity" enctype="multipart/form-data">
|
||||
@csrf
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3">
|
||||
<h4 class="page-title">Add / Edit {{ $title }}</h4>
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<div class="float-end">
|
||||
<a href="{{ $base_url }}s"
|
||||
class="btn btn-dark waves-effect waves-light">Back</a>
|
||||
<button type="submit"
|
||||
class="btn btn-success waves-effect waves-light">Submit</button>
|
||||
</div>
|
||||
</div>
|
||||
@foreach ($fields as $field => $props)
|
||||
@if ($props['type'] != 'hidden')
|
||||
<div class="col-md-{{ isset($props['fullwidth']) ? '12' : '6' }} mb-3">
|
||||
<label for="field-{{ $field }}"
|
||||
class="form-label">{{ $props['title'] }}
|
||||
{!! isset($props['required']) && $props['required'] ? '<span class="text-danger">*</span>' : '' !!} </label>
|
||||
@endif
|
||||
@switch($props['type'])
|
||||
@case('hidden')
|
||||
<input type="{{ $props['type'] }}" id="field-{{ $field }}"
|
||||
name="{{ $field }}"
|
||||
value="{{ $mode == 'edit' ? $item->{$field} : '' }}">
|
||||
@break
|
||||
|
||||
@case('text')
|
||||
@case('email')
|
||||
|
||||
@case('number')
|
||||
@case('tel')
|
||||
<input type="{{ $props['type'] }}" id="field-{{ $field }}"
|
||||
name="{{ $field }}" class="form-control"
|
||||
placeholder="Enter {{ $props['title'] }}"
|
||||
value="{{ $mode == 'edit' && isset($item->{$field}) ? $item->{$field} : '' }}"
|
||||
{{ isset($props['required']) && $props['required'] ? 'required' : '' }}>
|
||||
@break
|
||||
|
||||
@case('date')
|
||||
<input type="text" id="field-{{ $field }}" name="{{ $field }}"
|
||||
class="form-control" placeholder="Enter {{ $props['title'] }}"
|
||||
value="{{ $mode == 'edit' && isset($item->{$field}) ? $item->{$field} : '' }}"
|
||||
data-provide="datepicker" data-date-format="mm-dd-yyyy"
|
||||
data-date-autoclose="true"
|
||||
{{ isset($props['required']) && $props['required'] ? 'required' : '' }}>
|
||||
@break
|
||||
|
||||
@case('datetime')
|
||||
<input type="text" id="field-{{ $field }}" name="{{ $field }}"
|
||||
class="form-control" placeholder="Enter {{ $props['title'] }}"
|
||||
value="{{ $mode == 'edit' && isset($item->{$field}) ? $item->{$field} : '' }}"
|
||||
data-provide="datepicker" data-date-format="mm-dd-yyyy"
|
||||
data-date-autoclose="true"
|
||||
{{ isset($props['required']) && $props['required'] ? 'required' : '' }}>
|
||||
@break
|
||||
|
||||
@case('textarea')
|
||||
<textarea id="field-{{ $field }}" name="{{ $field }}" class="form-control"
|
||||
placeholder="Enter {{ $props['title'] }}" {{ isset($props['required']) && $props['required'] ? 'required' : '' }}>{{ $mode == 'edit' && isset($item->{$field}) ? $item->{$field} : '' }}</textarea>
|
||||
@break
|
||||
|
||||
@case('select')
|
||||
<select class="form-control" id="field-{{ $field }}"
|
||||
name="{{ $field }}"
|
||||
{{ isset($props['required']) && $props['required'] ? 'required' : '' }}>
|
||||
<option value=""> -- Select {{ $props['title'] }} -- </option>
|
||||
@foreach ($props['values'] as $k => $v)
|
||||
<option value="{{ $k }}"
|
||||
{{ $mode == 'edit' && isset($item->{$field}) && $item->{$field} == $k ? 'selected="selected"' : '' }}>
|
||||
{{ $v }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@break
|
||||
|
||||
@case('checkbox')
|
||||
@foreach ($props['values'] as $k => $v)
|
||||
<div class="form-check mb-2 form-check-blue">
|
||||
<input class="form-check-input" type="checkbox"
|
||||
name="{{ $field }}[]" value="{{ $k }}"
|
||||
id="field-{{ $field }}-{{ $k }}"
|
||||
{{ $mode == 'edit' && isset($item->{$field}) && in_array($k, $item->{$field}) ? 'checked' : '' }}>
|
||||
<label class="form-check-label"
|
||||
for="field-{{ $field }}-{{ $k }}">{{ $v }}</label>
|
||||
</div>
|
||||
@endforeach
|
||||
@break
|
||||
|
||||
@case('multiselect')
|
||||
<select class="form-control select2-multiple" data-toggle="select2"
|
||||
data-width="100%" multiple="multiple"
|
||||
data-placeholder="Choose {{ $props['title'] }}" id="field-{{ $field }}"
|
||||
name="{{ $field }}[]"
|
||||
{{ isset($props['required']) && $props['required'] ? 'required' : '' }}>
|
||||
<option value=""> -- Select {{ $props['title'] }} -- </option>
|
||||
@foreach ($props['values'] as $k => $v)
|
||||
<option value="{{ $k }}"
|
||||
{{ $mode == 'edit' && isset($item->{$field}) && in_array($k, $item->{$field}) ? 'selected="selected"' : '' }}>
|
||||
{{ $v }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@break
|
||||
|
||||
@case('bigmultiselect')
|
||||
<select multiple="multiple" class="bigmultiselect multi-select"
|
||||
id="field-{{ $field }}" name="{{ $field }}[]"
|
||||
{{ isset($props['required']) && $props['required'] ? 'required' : '' }}>
|
||||
@foreach ($props['values'] as $k => $v)
|
||||
<option value="{{ $k }}"
|
||||
{{ $mode == 'edit' && in_array($k, $item->{$field}) ? 'selected="selected"' : '' }}>
|
||||
{{ $v }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@break
|
||||
|
||||
@case('yesno')
|
||||
<div>
|
||||
<div class="form-check mb-2 form-check-success form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="{{ $field }}"
|
||||
id="field-{{ $field }}-yes" value="yes"
|
||||
{{ $mode == 'edit' && $item->{$field} == 'yes' ? 'checked' : '' }}
|
||||
{{ isset($props['required']) && $props['required'] ? 'required' : '' }}>
|
||||
<label class="form-check-label"
|
||||
for="field-{{ $field }}-yes">Yes</label>
|
||||
</div>
|
||||
<div class="form-check mb-2 form-check-danger form-check-inline">
|
||||
<input class="form-check-input" type="radio"
|
||||
name="{{ $field }}" id="field-{{ $field }}-no"
|
||||
value="no"
|
||||
{{ $mode == 'edit' && $item->{$field} == 'no' ? 'checked' : '' }}>
|
||||
<label class="form-check-label"
|
||||
for="field-{{ $field }}-no">No</label>
|
||||
</div>
|
||||
</div>
|
||||
@break
|
||||
|
||||
@case('image')
|
||||
<div class="mt-3" id="file_wrapper">
|
||||
<input type="file" name="{{ $field }}" class="dropify"
|
||||
data-default-file="{{ $mode == 'edit' && isset($item->{$field}) ? $item->{$field} : '' }}"
|
||||
data-allowed-file-extensions="png jpg jpeg gif" />
|
||||
<p class="text-muted text-center mt-2 mb-0">500MB Max File size</p>
|
||||
</div>
|
||||
@break
|
||||
|
||||
@case('multiimage')
|
||||
<div class="mt-3" id="file_wrapper">
|
||||
<input type="file" name="{{ $field }}[]" multiple class="dropify"
|
||||
data-allowed-file-extensions="png jpg jpeg gif" />
|
||||
<p class="text-muted text-center mt-2 mb-0">500MB Max File size</p>
|
||||
</div>
|
||||
@break
|
||||
|
||||
@case('file')
|
||||
<div class="mt-3" id="file_wrapper">
|
||||
<input type="file" name="{{ $field }}" class="dropify"
|
||||
data-default-file="{{ $mode == 'edit' ? $item->{$field} : '' }}"
|
||||
data-allowed-file-extensions="png jpg jpeg gif mp4 pdf mp3 zip" />
|
||||
<p class="text-muted text-center mt-2 mb-0">1GB Max File size</p>
|
||||
</div>
|
||||
@break
|
||||
@endswitch
|
||||
@if ($props['type'] != 'hidden')
|
||||
</div>
|
||||
@endif
|
||||
@endforeach
|
||||
|
||||
<div class="col-md-12 mb-3">
|
||||
<div class="float-end">
|
||||
<a href="{{ $base_url }}s"
|
||||
class="btn btn-dark waves-effect waves-light">Back</a>
|
||||
<button type="submit"
|
||||
class="btn btn-success waves-effect waves-light">Submit</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- end card-body -->
|
||||
</form>
|
||||
</div> <!-- end card-->
|
||||
</div> <!-- end col -->
|
||||
</div>
|
||||
</body>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
@section('script')
|
||||
<script src="{{ asset('assets/libs/select2/select2.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/libs/multiselect/multiselect.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/libs/multiselect/jquery.quicksearch.js') }}"></script>
|
||||
<script src="{{ URL::asset('assets/libs/dropify/dropify.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/libs/bootstrap-datepicker/bootstrap-datepicker.min.js') }}"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() {
|
||||
$('[data-toggle="select2"]').select2();
|
||||
$('.dropify').dropify({
|
||||
messages: {
|
||||
'default': 'Drag and drop a file here or click',
|
||||
'replace': 'Drag and drop or click to replace',
|
||||
'remove': 'Remove',
|
||||
'error': 'Ooops, something wrong appended.'
|
||||
},
|
||||
error: {
|
||||
'fileSize': 'The file size is too big (500MB max).'
|
||||
}
|
||||
});
|
||||
|
||||
$('.bigmultiselect').multiSelect({
|
||||
selectableHeader: "<div class='custom-header'><strong>Selectable</strong></div><input type='text' class='form-control' autocomplete='off' placeholder='Search Selectable'>",
|
||||
selectionHeader: "<div class='custom-header'><strong>Selected</strong></div><input type='text' class='form-control' autocomplete='off' placeholder='Search Selected'>",
|
||||
afterInit: function(ms) {
|
||||
var that = this,
|
||||
$selectableSearch = that.$selectableUl.prev(),
|
||||
$selectionSearch = that.$selectionUl.prev(),
|
||||
selectableSearchString = '#' + that.$container.attr('id') +
|
||||
' .ms-elem-selectable:not(.ms-selected)',
|
||||
selectionSearchString = '#' + that.$container.attr('id') +
|
||||
' .ms-elem-selection.ms-selected';
|
||||
|
||||
that.qs1 = $selectableSearch.quicksearch(selectableSearchString)
|
||||
.on('keydown', function(e) {
|
||||
if (e.which === 40) {
|
||||
that.$selectableUl.focus();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
that.qs2 = $selectionSearch.quicksearch(selectionSearchString)
|
||||
.on('keydown', function(e) {
|
||||
if (e.which == 40) {
|
||||
that.$selectionUl.focus();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
},
|
||||
afterSelect: function() {
|
||||
this.qs1.cache();
|
||||
this.qs2.cache();
|
||||
},
|
||||
afterDeselect: function() {
|
||||
this.qs1.cache();
|
||||
this.qs2.cache();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endsection
|
||||
|
|
@ -0,0 +1,143 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
@include('layouts.shared/title-meta', ['title' => 'Form'])
|
||||
@include('layouts.shared/head-css', ['mode' => $mode ?? '', 'demo' => $demo ?? ''])
|
||||
<link href="{{ asset('assets/libs/sweetalert2/sweetalert2.min.css') }}" rel="stylesheet" type="text/css" />
|
||||
<style type="text/css">
|
||||
.img-thumbnail {
|
||||
max-width: 100px
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<div class="account-pages">
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-8 col-lg-6 col-xl-5 p-0">
|
||||
<div class="card bg-pattern">
|
||||
<div class="card-body p-3 row">
|
||||
<div class="row">
|
||||
<div class="col-md-6 p-2">
|
||||
<h4 class="page-title">{{ $title }} Listing</h4>
|
||||
</div>
|
||||
<div class="col-md-6 p-2">
|
||||
@if (isset($buttons))
|
||||
@foreach ($buttons as $button)
|
||||
<a href="{{ $button['link'] }}"
|
||||
class="btn btn-{{ $button['title'] == 'Add New' ? 'success' : 'dark' }} waves-effect waves-light float-end me-2"
|
||||
id="btn-{{ strtolower(str_replace(' ', '-', $button['title'])) }}">{{ $button['title'] }}</a>
|
||||
@endforeach
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@if (session()->has('message'))
|
||||
<div class="alert alert-success">
|
||||
{{ session()->get('message') }}
|
||||
</div>
|
||||
@endif
|
||||
@if (session()->has('error'))
|
||||
<div class="alert alert-danger">
|
||||
{{ session()->get('error') }}
|
||||
</div>
|
||||
@endif
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<table id="list-page-datatable" class="table w-100 nowrap">
|
||||
<thead>
|
||||
<tr>
|
||||
@foreach ($fields as $field => $props)
|
||||
<th>{{ $props['title'] }}</th>
|
||||
@endforeach
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach ($items as $item)
|
||||
<tr>
|
||||
@foreach ($fields as $field => $props)
|
||||
@if ($field != 'actions')
|
||||
<td>
|
||||
@switch($props['type'])
|
||||
@case('image')
|
||||
<img src="{{ $item->{$field} }}" class="img-thumbnail">
|
||||
@break
|
||||
|
||||
@case('text')
|
||||
@case('select')
|
||||
{{ isset($item->{$field}) ? $item->{$field} : '' }}
|
||||
@break
|
||||
|
||||
@case('date')
|
||||
{{ date('d M Y', strtotime($item->{$field})) }}
|
||||
@break
|
||||
@endswitch
|
||||
</td>
|
||||
@else
|
||||
<td>
|
||||
@foreach ($props['buttons'] as $key => $button)
|
||||
@switch($button)
|
||||
@case('edit')
|
||||
<a href="{{ $base_url }}/edit?id={{ $item->id }}"
|
||||
class="action-icon"> <i
|
||||
class="mdi mdi-square-edit-outline text-warning"></i></a>
|
||||
@break
|
||||
|
||||
@case('delete')
|
||||
<a href="{{ $base_url }}/delete?id={{ $item->id }}"
|
||||
class="action-icon"> <i
|
||||
class="mdi mdi-delete text-danger"></i></a>
|
||||
@break
|
||||
|
||||
@default
|
||||
@php
|
||||
if (isset($button['href']) && $button['href'] != '') {
|
||||
$href = $item->{$button['href']};
|
||||
} else {
|
||||
$querystring = $button['querystring'];
|
||||
foreach ((array) $item as $k => $v) {
|
||||
if (strpos($querystring, '{' . strtoupper($k) . '}') !== false) {
|
||||
$querystring = str_replace('{' . strtoupper($k) . '}', $v, $querystring);
|
||||
}
|
||||
}
|
||||
$href = $base_url . '/' . $key . '?' . $querystring;
|
||||
}
|
||||
|
||||
@endphp
|
||||
<a href="{{ $href }}" class="action-icon"> <i
|
||||
class="mdi mdi-{{ $button['icon'] }}"></i></a>
|
||||
@endswitch
|
||||
@endforeach
|
||||
</td>
|
||||
@endif
|
||||
@endforeach
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div> <!-- end card body-->
|
||||
</div> <!-- end card -->
|
||||
</div><!-- end col-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@section('script')
|
||||
<script src="{{ asset('assets/libs/datatables/datatables.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/libs/bootstrap-datepicker/bootstrap-datepicker.min.js') }}"></script>
|
||||
<script type="text/javascript">
|
||||
jQuery(document).ready(function($) {
|
||||
$('#list-page-datatable').DataTable({
|
||||
stateSave: true,
|
||||
"scrollX": true,
|
||||
"paging": false
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endsection
|
||||
Loading…
Reference in New Issue