This commit is contained in:
f.shokouhi
2019-09-17 13:56:06 +04:30
257 changed files with 12566 additions and 107541 deletions
+1 -3
View File
@@ -1,7 +1,5 @@
/public
/node_modules
/public/hot
/public/storage
/public/img
/storage
/tests
/vendor
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+19
View File
@@ -0,0 +1,19 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Cycle extends Model
{
public $fillable = ['name', 'date', 'user_id', 'cycle_number', 'sterilizer_id', 'note', 'verified'];
public function user()
{
return $this->belongsTo('App\User');
}
public function packs()
{
return $this->belongsToMany('App\Pack', 'cycle_pack');
}
}
+21
View File
@@ -0,0 +1,21 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Gallery extends Model
{
protected $fillable = ['user_id', 'path'];
public $timestamps = false;
// public function business_item()
// {
// return $this->morphedByMany('App\BusinessItem', 'uploadable');
// }
}
@@ -0,0 +1,27 @@
<?php
namespace App\Http\Controllers\Api\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Packages\Auth\SendsPasswordResetEmails;
class ForgotPasswordController extends Controller
{
use SendsPasswordResetEmails;
public function __construct()
{
$this->middleware('guest');
}
protected function sendResetLinkResponse($response)
{
return response()->json(['status' => 200, 'message' => trans($response)]);
}
protected function sendResetLinkFailedResponse(Request $request, $response)
{
return response()->json(['status' => 401, 'email' => trans($response)]);
}
}
@@ -0,0 +1,60 @@
<?php
namespace App\Http\Controllers\Api\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class LoginController extends Controller
{
public function login(Request $request)
{
$this->validate($request, $this->rules(), $this->validationErrorMessages());
$request = Request::create('/oauth/token', 'POST', [
'grant_type' => 'password',
'client_id' => config('services.vue_client.id'),
'client_secret' => config('services.vue_client.secret'),
'username' => $request->cell_number,
'password' => $request->password,
]);
return app()->handle($request);
}
public function logout()
{
$accessToken = auth()->user()->token();
DB::table('oauth_access_tokens')->where('id', $accessToken->id)->delete();
DB::table('oauth_refresh_tokens')->where('access_token_id', $accessToken->id)->delete();
return response()->json(['status' => 200]);
}
/**
* Get the login validation rules.
*
* @return array
*/
protected function rules()
{
return [
'cell_number' => 'required',
'password' => 'required|min:6',
];
}
/**
* Get the login validation error messages.
*
* @return array
*/
protected function validationErrorMessages()
{
return [];
}
}
@@ -0,0 +1,61 @@
<?php
namespace App\Http\Controllers\Api\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\User;
class RegisterController extends Controller
{
/**
* Register the given user.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function register(Request $request)
{
if (auth('api')->user()->cant('store', User::class)) {
return \MessageResponse::error(trans('messages.failed'));
}
$this->validate($request, $this->rules(), $this->validationErrorMessages());
$user = new User();
$user->name = $request->name;
$user->country_code = $request->country_code;
$user->cell_number = $request->cell_number;
$user->gender = $request->gender;
$user->medical_center_id = $request->medical_center_id;
$user->password = bcrypt( $request->password );
$user->save();
$user->assignRole('User');
return response()->json($user, 200);
}
/**
* Get the user registration validation rules.
*
* @return array
*/
protected function rules()
{
return [
'name' => 'required|string|max:80',
'cell_number' => 'required|unique:users',
'password' => 'required|min:6',
'medical_center_id' => 'required|exists:medical_centers,id',
];
}
/**
* Get the user registration validation error messages.
*
* @return array
*/
protected function validationErrorMessages()
{
return [];
}
}
@@ -0,0 +1,45 @@
<?php
namespace App\Http\Controllers\Api\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class ResetPasswordController extends Controller
{
public function __construct()
{
$this->middleware('guest');
}
/**
* Reset the given user's password.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
*/
public function reset(Request $request)
{
$this->validatePassword($request);
if (auth('api')->check()) {
$user = auth('api')->user();
$user->password = \Hash::make($request->password);
$user->save();
return \MessageResponse::success('Success Change Password');
}
return \MessageResponse::success('You Are Not Login');
}
/**
* Validate the email for the given request.
*
* @param \Illuminate\Http\Request $request
* @return void
*/
protected function validatePassword(Request $request)
{
$request->validate(['password' => 'required|confirmed|min:8',]);
}
}
@@ -1,32 +0,0 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
class ForgotPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset emails and
| includes a trait which assists in sending these notifications from
| your application to your users. Feel free to explore this trait.
|
*/
use SendsPasswordResetEmails;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
}
@@ -1,39 +0,0 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
}
@@ -1,72 +0,0 @@
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
}
@@ -1,39 +0,0 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;
class ResetPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset requests
| and uses a simple trait to include this behavior. You're free to
| explore this trait and override any methods you wish to tweak.
|
*/
use ResetsPasswords;
/**
* Where to redirect users after resetting their password.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
}
@@ -1,41 +0,0 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\VerifiesEmails;
class VerificationController extends Controller
{
/*
|--------------------------------------------------------------------------
| Email Verification Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling email verification for any
| user that recently registered with the application. Emails may also
| be re-sent if the user didn't receive the original email message.
|
*/
use VerifiesEmails;
/**
* Where to redirect users after verification.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('signed')->only('verify');
$this->middleware('throttle:6,1')->only('verify', 'resend');
}
}
@@ -0,0 +1,32 @@
<?php
namespace App\Http\Controllers;
use \Milon\Barcode\DNS1D;
use \Milon\Barcode\DNS2D;
use App\TestResult;
class BarCodeController extends Controller
{
public function generateBarcode($Number)
{
if($Number != "undefined")
{
// $Barcode = DNS1D::getBarcodePNGUri($Number, "C128");
$Barcode = DNS1D::getBarcodePNG($Number, "C128");
$QRCode = DNS2D::getBarcodePNG($Number, "QRCODE");
return \MessageResponse::data(['Barcode' => 'data:image/png;base64,' .$Barcode, 'QRCode' => 'data:image/png;base64,' .$QRCode]);
}
}
public function generateQRcode(TestResult $TestResult)
{
if($TestResult)
{
$URL = 'https://www.cssd-doc.com/ShowTestResult/'.$TestResult->id;
$QRCode = DNS2D::getBarcodePNG($URL, "QRCODE");
return \MessageResponse::data(['QRCode' => 'data:image/png;base64,' .$QRCode]);
}
}
}
+90
View File
@@ -0,0 +1,90 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\StoreCycleRequest;
use App\Cycle;
class CycleController extends Controller
{
public function index(Request $request)
{
$Cycles = Cycle::when($request->has('name') && $request->name != '', function($query) use($request){
$query->where('name', 'LIKE', '%'.$request->name.'%');
})
->when($request->has('sterilizer_id') && $request->sterilizer_id != '', function($query) use($request){
$query->where('sterilizer_id', $request->sterilizer_id);
})
->when($request->has('date') && $request->date != '', function($query) use($request){
$query->where('date', $request->date);
})
->when($request->has('cycle_number') && $request->cycle_number != '', function($query) use($request){
$query->where('cycle_number', $request->cycle_number);
})
->with('user')->paginate(10);
return \MessageResponse::data($Cycles);
}
public function create()
{
}
public function show(Cycle $Cycle)
{
$Cycle->load('user', 'packs');
return \MessageResponse::data($Cycle);
}
public function store(StoreCycleRequest $request)
{
$CycleData = [
'name' => $request->name,
'date' => $request->date,
'sterilizer_id' => $request->sterilizer_id,
'cycle_number' => $request->cycle_number,
'note' => $request->note,
'user_id' => auth('api')->user()->id,
'verified' => 'NotVerified',
];
$CycleObj = Cycle::create($CycleData);
$CycleObj->packs()->attach($request->packs);
return \MessageResponse::success(trans('messages.success'));
}
public function edit(Cycle $Cycle)
{
$Cycle->load('user', 'packs');
return \MessageResponse::data($Cycle);
}
public function update(StoreCycleRequest $request, Cycle $Cycle)
{
$Cycle->update($request->except(['packs']));
$Cycle->packs()->sync($request->packs);
return \MessageResponse::success(trans('messages.success'));
}
public function destroy(Cycle $Cycle)
{
if (auth('api')->user()->cant('delete', $Cycle)) {
return \MessageResponse::error(trans('messages.access_denied'));
}
if(count($Cycle->packs))
{
$Cycle->packs()->detach();
}
$Cycle->delete();
return \MessageResponse::success(trans('messages.success'));
}
public function verifyCycle(Cycle $Cycle)
{
if (auth('api')->user()->cant('verifyCycle', $Cycle)) {
return \MessageResponse::error(trans('You dont have permission'));
}
if ($Cycle->verified == 'Verified') {
$Cycle->verified = 'NotVerified';
} else {
$Cycle->verified = 'Verified';
}
$Cycle->save();
$Cycle = $Cycle->load('user');
return \MessageResponse::success(trans('messages.success'), null, $Cycle);
}
}
+28
View File
@@ -0,0 +1,28 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index()
{
return view('home');
}
}
+80
View File
@@ -0,0 +1,80 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\StoreItemRequest;
use App\Item;
class ItemController extends Controller
{
public function index(Request $request)
{
$Items = Item::with('user')
->when($request->has('name') && $request->name != '', function($query) use($request){
$query->where('name', 'LIKE', '%'.$request->name.'%');
})
->when($request->has('size') && $request->size != '', function($query) use($request){
$query->where('size', $request->size);
})
->when($request->has('unique_id') && $request->unique_id != '', function($query) use($request){
$query->where('unique_id', $request->unique_id);
})
->when($request->has('specific') && $request->specific != '', function($query) use($request){
$query->where('specific', $request->specific);
})
->paginate(10);
return \MessageResponse::data($Items);
}
public function create()
{
}
public function show(Item $Item)
{
$Item->load('user');
return \MessageResponse::data($Item);
}
public function store(StoreItemRequest $request)
{
$ItemData = [
'name' => $request->name,
'size' => $request->size,
'unique_id' => $request->unique_id,
'specific' => $request->specific,
'note' => $request->note,
'user_id' => auth('api')->user()->id,
];
$ItemObj = Item::create($ItemData);
return \MessageResponse::success(trans('messages.success'));
}
public function edit(Item $Item)
{
return \MessageResponse::data($Item);
}
public function update(StoreItemRequest $request, Item $Item)
{
$Item->update($request->all());
return \MessageResponse::success(trans('messages.success'));
}
public function destroy(Item $Item)
{
if (!auth('api')->user()->can('delete', $Item)) {
return \MessageResponse::error(trans('messages.access_denied'));
}
if(count($Item->packages))
{
$Item->packages()->detach();
}
$Item->delete();
return \MessageResponse::success(trans('messages.success'));
}
public function getItems(){
$Items = Item::with('user')->get();
return \MessageResponse::data($Items);
}
}
@@ -0,0 +1,65 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\MedicalCenter;
use App\User;
use App\Http\Requests\StoreMedicalCenterRequest;
class MedicalCenterController extends Controller
{
public function index(Request $request)
{
if (!auth('api')->user()->can('list', MedicalCenter::class)) {
return \MessageResponse::error(trans('messages.access_denied'));
}
$MedicalCenters = MedicalCenter::when($request->has('name') && $request->name, function($query) use($request){
$query->where('name', 'LIKE', '%'.$request->name.'%');
})->withCount('users')->paginate(10);
return \MessageResponse::data($MedicalCenters);
}
public function create()
{
//
}
public function store(StoreMedicalCenterRequest $request)
{
MedicalCenter::create($request->all());
return \MessageResponse::success(trans('messages.success'));
}
public function show($id)
{
// $MedicalCenter = MedicalCenter::with('users')->findOrFail($id);
// return response()->json(['MedicalCenter' => $MedicalCenter]);
}
public function edit(MedicalCenter $MedicalCenter)
{
$MedicalCenter = $MedicalCenter->load('users');
return \MessageResponse::data($MedicalCenter);
}
public function update(StoreMedicalCenterRequest $request, MedicalCenter $MedicalCenter)
{
$MedicalCenter->update($request->all());
return \MessageResponse::success(trans('messages.success'));
}
public function destroy(MedicalCenter $MedicalCenter)
{
if (!auth('api')->user()->can('delete', $MedicalCenter)) {
return \MessageResponse::error(trans('messages.access_denied'));
}
$MedicalCenter->delete();
return \MessageResponse::success(trans('messages.success'));
}
public function listMedicalCenters(){
$MedicalCenters = MedicalCenter::select('id','name')->get();
return \MessageResponse::data($MedicalCenters);
}
}
+130
View File
@@ -0,0 +1,130 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\StoreMessageRequest;
use App\Message;
use App\User;
class MessageController extends Controller
{
public function index(Request $request)
{
$User = auth('api')->user();
$role = null;
$medical_center_id = null;
$User = auth('api')->user();
if ($User->hasRole('Supervisor') || $User->hasRole('User')) {
$medical_center_id = $User->medical_center_id;
$role = 'Admin';
}
$remove = $User->id;
$Users = User::whereHas('messagesSent', function($q) use($User){
$q->where('recipient_user_id', $User->id);
})
->orWhereHas('messagesReceived', function($q) use($User){
$q->where('sender_user_id', $User->id);
})
->when($medical_center_id, function($query) use ($medical_center_id){
$query->where('medical_center_id', $medical_center_id);
})
->when($role, function($query) use($role){
$query->role($role);
})
->paginate(10);
foreach ($Users as $user) {
$UnReadReceivedMessages = Message::where('sender_user_id', $user->id)->where('recipient_user_id', $User->id)->where('status','UnRead')->get()->count();
$user->unread_messages_count = $UnReadReceivedMessages;
$MessagesCount = Message::where(function ($query) use ($user,$User){
$query->where('sender_user_id', $user->id)->where('recipient_user_id', $User->id);
})->orWhere(function ($query) use ($user,$User){
$query->where('sender_user_id', $User->id)->where('recipient_user_id', $user->id);
})->get()->count();
$user->messages_count = $MessagesCount;
}
//
// $Users = $Users->filter(function ($value, $key) use($remove){
// return $value['id'] != $remove;
// });
return \MessageResponse::data($Users);
}
public function create()
{
}
public function show($UserID)
{
// if (!auth('api')->user()->can('show', $Message)) {
// return \MessageResponse::error(trans('messages.access_denied'));
// }
$User = User::findOrFail($UserID);
// $SendMessages = Message::where('sender_user_id', auth('api')->user()->id)->where('recipient_user_id', $UserID)->get();
$ReceivedMessages = Message::where('sender_user_id', $UserID)->where('recipient_user_id', auth('api')->user()->id)->get();
$Messages = Message::where(function ($query) use ($UserID)
{
$query->where('sender_user_id', auth('api')->user()->id)->where('recipient_user_id', $UserID);
})->orWhere(function ($query) use ($UserID)
{
$query->where('sender_user_id', $UserID)->where('recipient_user_id', auth('api')->user()->id);
})->get();
foreach ($ReceivedMessages as $ReceivedMessage) {
$ReceivedMessage->status = 'Read';
$ReceivedMessage->save();
}
return \MessageResponse::data($Messages);
}
public function store(StoreMessageRequest $request)
{
$MessageData = [
// 'title' => $request->title,
'text' => $request->message,
'sender_user_id' => auth('api')->user()->id,
'recipient_user_id' => $request->user_id,
'status' => 'UnRead',
];
Message::create($MessageData);
return \MessageResponse::success(trans('messages.success'));
}
public function edit(Message $Message)
{
// return \MessageResponse::data($Message);
}
public function update(StoreMessageRequest $request, Message $Message)
{
// $Message->update($request->all());
// return \MessageResponse::success(trans('messages.success'));
}
public function destroy(Message $Message)
{
if (auth('api')->user()->cant('delete', $Message)) {
return \MessageResponse::error(trans('messages.access_denied'));
}
$Message->delete();
return \MessageResponse::success(trans('messages.success'));
}
public function destroyUserMessages(User $User)
{
// if (auth('api')->user()->cant('deleteUserMessage', Message::class)) {
// return \MessageResponse::error(trans('messages.access_denied'));
// }
Message::where(function ($query) use ($User)
{
$query->where('sender_user_id', auth('api')->user()->id)->where('recipient_user_id', $User->id);
})->orWhere(function ($query) use ($User)
{
$query->where('sender_user_id', $User->id)->where('recipient_user_id', auth('api')->user()->id);
})->get()->each->delete();
return \MessageResponse::success(trans('messages.success'));
}
}
+96
View File
@@ -0,0 +1,96 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\StorePackRequest;
use App\Pack;
class PackController extends Controller
{
public function index(Request $request)
{
$Packs = Pack::when($request->has('name') && $request->name != '', function($query) use($request){
$query->where('name', 'LIKE', '%'.$request->name.'%');
})
->when($request->has('sterilizer_id') && $request->sterilizer_id != '', function($query) use($request){
$query->where('sterilizer_id', $request->sterilizer_id);
})
->when($request->has('cycle_number') && $request->cycle_number != '', function($query) use($request){
$query->where('cycle_number', $request->cycle_number);
})
->when($request->has('lot_number') && $request->lot_number != '', function($query) use($request){
$query->where('lot_number', $request->lot_number);
})
->when($request->has('department') && $request->department != '', function($query) use($request){
$query->where('department', 'LIKE', '%'.$request->department.'%');
})
->when($request->has('medical_center_id') && $request->medical_center_id != '', function($query) use($request){
$query->whereHas('user', function($query) use($request){
$query->where('medical_center_id', $request->medical_center_id);
});
})
->with('user', 'user.medical_center')->paginate(10);
return \MessageResponse::data($Packs);
}
public function create()
{
}
public function show(Pack $Pack)
{
$Pack->load('user', 'packages', 'user.medical_center');
return \MessageResponse::data($Pack);
}
public function store(StorePackRequest $request)
{
$PackData = [
'name' => $request->name,
'sterile_date' => $request->sterile_date,
'expire_date' => $request->expire_date,
'sterilizer_id' => $request->sterilizer_id,
'cycle_number' => $request->cycle_number,
'lot_number' => $request->lot_number,
'department' => $request->department,
'note' => $request->note,
'user_id' => auth('api')->user()->id,
];
$PackObj = Pack::create($PackData);
$PackObj->packages()->attach($request->packages);
return \MessageResponse::success(trans('messages.success'));
}
public function edit(Pack $Pack)
{
$Pack->load('user', 'packages');
return \MessageResponse::data($Pack);
}
public function update(StorePackRequest $request, Pack $Pack)
{
$Pack->update($request->except(['packages']));
$Pack->packages()->sync($request->packages);
return \MessageResponse::success(trans('messages.success'));
}
public function destroy(Pack $Pack)
{
if (auth('api')->user()->cant('delete', $Pack)) {
return \MessageResponse::error(trans('messages.access_denied'));
}
if(count($Pack->packages))
{
$Pack->packages()->detach();
}
if(count($Pack->cycles))
{
$Pack->cycles()->detach();
}
$Pack->delete();
return \MessageResponse::success(trans('messages.success'));
}
public function getPacks()
{
$Packs = Pack::with('user')->get();
return \MessageResponse::data($Packs);
}
}
@@ -0,0 +1,92 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\StorePackageRequest;
use App\Package;
class PackageController extends Controller
{
public function index(Request $request)
{
$Packages = Package::when($request->has('name') && $request->name != '', function($query) use($request){
$query->where('name', 'LIKE', '%'.$request->name.'%');
})
->when($request->has('unique_id') && $request->unique_id != '', function($query) use($request){
$query->where('unique_id', $request->unique_id);
})
->with('user')->paginate(10);
return \MessageResponse::data($Packages);
}
public function create()
{
}
public function show(Package $Package)
{
$Package->load('user', 'items');
return \MessageResponse::data($Package);
}
public function store(StorePackageRequest $request)
{
$UniqueID = substr(base_convert(sha1(uniqid(mt_rand())), 16, 36), 0, 10);
$PackageData = [
'name' => $request->name,
'unique_id' => $UniqueID,
'note' => $request->note,
'user_id' => auth('api')->user()->id,
'verified' => 'NotVerified',
];
$PackageObj = Package::create($PackageData);
$PackageObj->items()->attach($request->items);
return \MessageResponse::success(trans('messages.success'));
}
public function edit(Package $Package)
{
$Package->load('user', 'items');
return \MessageResponse::data($Package);
}
public function update(StorePackageRequest $request, Package $Package)
{
$Package->update($request->except(['items']));
$Package->items()->sync($request->items);
return \MessageResponse::success(trans('messages.success'));
}
public function destroy(Package $Package)
{
if (auth('api')->user()->cant('delete', $Package)) {
return \MessageResponse::error(trans('messages.access_denied'));
}
if(count($Package->items))
{
$Package->items()->detach();
}
if(count($Package->packs))
{
$Package->packs()->detach();
}
$Package->delete();
return \MessageResponse::success(trans('messages.success'));
}
public function verifyPackage(Package $Package)
{
if (auth('api')->user()->cant('verifyPackage', $Package)) {
return \MessageResponse::error(trans('You dont have permission'));
}
if ($Package->verified == 'Verified') {
$Package->verified = 'NotVerified';
} else {
$Package->verified = 'Verified';
}
$Package->save();
$Package = $Package->load('user');
return \MessageResponse::success(trans('messages.success'), null, $Package);
}
public function getPackages()
{
$Packages = Package::with('user')->get();
return \MessageResponse::data($Packages);
}
}
@@ -0,0 +1,492 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Http\Requests\StoreTestResultRequest;
use App\TestResult;
use App\InputValue;
use App\Input;
use App\MedicalCenter;
use App\TestType;
use App\Gallery;
use App\Uploadable;
use Intervention\Image\ImageManagerStatic as Image;
use Illuminate\Support\Facades\Storage;
class TestResultController extends Controller
{
public function index(Request $request)
{
$user = auth('api')->user();
if ($user->hasRole('Supervisor|User')) {
$medical_center_id = $user->medical_center_id;
}
elseif($request->has('medicalCenter_id') && $request->medicalCenter_id) {
$medical_center_id = $request->medicalCenter_id;
} else {
$medical_center_id = null;
}
if ($user->hasRole('User')) {
$user_name = $user->name;
}
elseif($request->has('user_name') && $request->user_name) {
$user_name = $request->user_name;
}
else {
$user_name = null;
}
$TestResult = TestResult::with('test_type', 'user', 'user.medical_center')
->when($request->has('verified'), function ($query) use ($request)
{
return $query->where('verified', $request->verified);
})
->when(($request->has('fromPicker') && $request->fromPicker) || ($request->has('upToPicker') && $request->upToPicker), function ($query) use ($request)
{
$from = ($request->fromPicker) ? date($request->fromPicker . ' 00:00:00') : date('2010-01-01' . ' 00:00:00');
$upTo = ($request->upToPicker) ? date($request->upToPicker . ' 23:59:59') : date('Y-m-d' . ' 23:59:59');
return $query->whereBetween('created_at', [$from, $upTo]);
})
->when($request->has('testType_id') && $request->testType_id, function($query) use($request){
$query->where('test_type_id', $request->testType_id);
})
->when($request->has('device_id') && $request->device_id, function($query) use($request){
$query->where('device_id', 'LIKE', '%'.$request->device_id.'%');
})
->when($user_name, function($query) use($user_name){
$query->whereHas('user', function($query) use($user_name){
$query->where('name', 'LIKE', '%'.$user_name.'%');
});
})
->when($medical_center_id, function($query) use($medical_center_id){
$query->whereHas('user', function($query) use ($medical_center_id) {
$query->where('medical_center_id', $medical_center_id);
});
})
->paginate(10);
return \MessageResponse::data($TestResult);
}
public function create()
{
//
}
public function store(StoreTestResultRequest $request)
{
// dd($request->result);
try {
$return_value = \DB::transaction(function () use ($request) {
$TestResult = [
'user_id' => auth('api')->user()->id,
'cycle_number' => $request->cycle_number,
'device_id' => $request->device_id,
'date' => $request->date,
'test_type_id' => $request->test_type_id,
'result' => $request->result,
'verified' => 'NotVerified',
];
$TestResultObj = TestResult::create($TestResult);
$TestResultInfo = $request->all();
$Inputs = Input::with('options','children','children.options')->whereNull('parent_id')->where('test_type_id',$request->test_type_id)->get();
///////////////////////////////////////////////////////////////////////////Inputs
foreach ($Inputs as $Input) {
if ($Input['type'] != 'Form') {
$Value = $TestResultInfo[$Input->name.'_'.$Input->id];
if ($Input['type'] == 'Checkbox' || $Input['type'] == 'Select' || $Input['type'] == 'Radiobutton') {
foreach ($Input->options as $Option) {//--2
if(is_array($Value) && in_array($Option->id,$Value)){
$InputValueObj = InputValue::create(['test_result_id' => $TestResultObj->id, 'input_id' => $Input->id, 'option_id' => $Option->id]);
}
if ($Input['type'] == 'Radiobutton' && $Option->id == $Value) {
$InputValueObj = InputValue::create(['test_result_id' => $TestResultObj->id, 'input_id' => $Input->id, 'option_id' => $Option->id]);
}
}
} else {
$InputValueObj = InputValue::create(['test_result_id' => $TestResultObj->id, 'input_id' => $Input->id, 'value' => $Value]);
}
} else {
foreach ($Input->children as $InputChild) {
$Value = $TestResultInfo[$InputChild->name.'_'.$InputChild->id];
if ($InputChild['type'] == 'Checkbox' || $InputChild['type'] == 'Select' || $InputChild['type'] == 'Radiobutton') {
foreach ($InputChild->options as $Option) {//--2
if(is_array($Value) && in_array($Option->id,$Value)){
$InputValueObj = InputValue::create(['test_result_id' => $TestResultObj->id, 'input_id' => $InputChild->id, 'option_id' => $Option->id]);
}
if ($InputChild['type'] == 'Radiobutton' && $Option->id == $Value) {
$InputValueObj = InputValue::create(['test_result_id' => $TestResultObj->id, 'input_id' => $InputChild->id, 'option_id' => $Option->id]);
}
}
}
else {
$InputValueObj = InputValue::create(['test_result_id' => $TestResultObj->id, 'input_id' => $InputChild->id, 'value' => $Value]);
}
}
}
}
///////////////////////////////////////////////////////////////////////////Inputs
///////////////////////////////////////////////////////////////////////////Images
if ($request->imgs != null) {
foreach ($request->imgs as $key => $img) {
$Image = $img;
$InterventionImage = Image::make($Image);
$Mime = explode('/', $InterventionImage->mime());
$ImageName = time().$key.'.'.$Mime[1];
$Path = 'uploads'.'/TestResults'.'/'.$TestResultObj->id .'/'.$ImageName;
Storage::disk('public')->makeDirectory('TestResults'.'/'.$TestResultObj->id);
$InterventionImage->save(public_path($Path));
$GalleryObj = Gallery::create(['user_id' => auth('api')->user()->id, 'path' => $Path]);
$Uploadable = Uploadable::create(['uploadable_id' => $TestResultObj->id, 'uploadable_type' => 'App\TestResult', 'gallery_id' => $GalleryObj->id, 'image_role' => 'TitleImage']);
}
}
///////////////////////////////////////////////////////////////////////////Images
});
} catch (\Exception $e) {
return response()->json($e->getMessage(), 441);
}
return \MessageResponse::success(null,trans('messages.create'));
}
public function show($id)
{
$TestResult = TestResult::with('input_values', 'user.medical_center', 'test_type')->select('result', 'verified', 'device_id','user_id','id', 'test_type_id', 'created_at')->findOrFail($id);
$options = [];
foreach ($TestResult->input_values as $value) {
$input = $value->input;
if ($input->parent_id != null && $input->parent['type'] == 'Form') {
//----------------------------------------------------------------------FormType
if ($input->type == 'Checkbox' || $input->type == 'Select' || $input['type'] == 'Radiobutton') {
$input_options = InputValue::with('option')->where('test_result_id', $TestResult->id)->where('input_id', $input->id)->get();
$options = [];
foreach ($input_options as $input_option) {
$options[] = $input_option->option->title;
$input_values[$input->name] = $options;
}
$children[$input->parent->name] = $input_values;
$TestResult['children'] = $children;
}
else {
$children[$input->parent->name][$input->name] = $value->value;
$TestResult['children'] = $children;
}
//-----------------------------------------------------------------------FormType
}
else {
//-----------------------------------------------------------------------Anothertype
if ($input->type == 'Checkbox' || $input->type == 'Select' || $input['type'] == 'Radiobutton') {
$input_options = InputValue::with('option')->where('test_result_id', $TestResult->id)->where('input_id', $input->id)->get();
$options = [];
foreach ($input_options as $input_option) {
$options[] = $input_option->option->title;
}
$values[$input->name] = $options;
$TestResult['options'] = $values;
}
else {
$inputs[$input->name] = $value->value;
$TestResult['inputs'] = $inputs;
}
//-----------------------------------------------------------------------Anothertype
}
}
$ImagesPath = [];
if (count($TestResult->TitleImage)) {
foreach ($TestResult->TitleImage as $Key => $TitleImage) {
$ImagesPath[] = $TitleImage->path;
}
$TestResult['imagesPath'] = $ImagesPath;
}
// dd($TestResult->test_type()->device_label);
$TestResult['device_label'] = $TestResult->test_type->device_label;
return \MessageResponse::data($TestResult);
}
public function edit(TestResult $TestResult)
{
foreach ($TestResult->input_values as $key => $value) {
$input = $value->input;
if ($input->type == 'Checkbox' || $input->type == 'Select' || $input['type'] == 'Radiobutton') {
$input_options = InputValue::where('test_result_id', $TestResult->id)->where('input_id', $input->id)->get()->pluck('option_id')->toArray();
if ($input['type'] == 'Radiobutton') {
$TestResult[$input->name.'_'.$input->id] = $input_options[0];
}
else {
$TestResult[$input->name.'_'.$input->id] = $input_options;
}
}
else {
$TestResult[$input->name.'_'.$input->id] = $value->value;
}
}
$ImagesPath = [];
if (count($TestResult->TitleImage)) {
foreach ($TestResult->TitleImage as $Key => $TitleImage) {
$ImagesPath[] = $TitleImage->path;
}
$TestResult['imagesPath'] = $ImagesPath;
}
else {
$TestResult['imagesPath'] = [];
}
return \MessageResponse::data($TestResult);
}
public static function storage_path($path)
{
if (starts_with($path, 'uploads/')) {
$path = substr($path, 8);
}
return $path;
}
public function update(StoreTestResultRequest $request, TestResult $TestResult)
{
$TestResultData = [
// 'autoclave_id' => $request->autoclave_id,
'cycle_number' => $request->cycle_number,
'device_id' => $request->device_id,
'date' => $request->date,
'test_type_id' => $request->test_type_id,
'result' => $request->result,
'verified' => 'NotVerified',
];
$TestResult->update($TestResultData);
$TestResultInfo = $request->all();
$Inputs = Input::with('options', 'children', 'children.options')->whereNull('parent_id')->where('test_type_id',$request->test_type_id)->get();
foreach ($Inputs as $Input) {
if ($Input['type'] != 'Form') {
$Value = $TestResultInfo[$Input->name.'_'.$Input->id];
if ($Input['type'] == 'Checkbox' || $Input['type'] == 'Select' || $Input['type'] == 'Radiobutton') {
$InputOptions = InputValue::where('test_result_id', $TestResult->id)->where('input_id', $Input->id)->get()->each->delete();
foreach ($Input->options as $Option) {//--2
if(is_array($Value) && in_array($Option->id,$Value)){
$InputValueObj = InputValue::create(['test_result_id' => $TestResult->id, 'input_id' => $Input->id, 'option_id' => $Option->id]);
}
if ($Input['type'] == 'Radiobutton' && $Option->id == $Value) {
$InputValueObj = InputValue::create(['test_result_id' => $TestResult->id, 'input_id' => $Input->id, 'option_id' => $Option->id]);
}
}
}
else {
$InputValueObj = InputValue::where('test_result_id', $TestResult->id)->where('input_id', $Input['id'])->update(['value' => $Value]);
}
}
else {
foreach ($Input->children as $InputChild) {
$Value = $TestResultInfo[$InputChild->name.'_'.$InputChild->id];
if ($InputChild['type'] == 'Checkbox' || $InputChild['type'] == 'Select' || $InputChild['type'] == 'Radiobutton') {
$InputOptions = InputValue::where('test_result_id', $TestResult->id)->where('input_id', $InputChild->id)->get()->each->delete();
foreach ($InputChild->options as $Option) {//--2
if(is_array($Value) && in_array($Option->id,$Value)){
$InputValueObj = InputValue::create(['test_result_id' => $TestResult->id, 'input_id' => $InputChild->id, 'option_id' => $Option->id]);
}
if ($InputChild['type'] == 'Radiobutton' && $Option->id == $Value) {
$InputValueObj = InputValue::create(['test_result_id' => $TestResult->id, 'input_id' => $InputChild->id, 'option_id' => $Option->id]);
}
}
}
else {
$InputValueObj = InputValue::where('test_result_id', $TestResult->id)->where('input_id', $InputChild['id'])->update(['value' => $Value]);
}
}
}
}
/////////////////////////////////////////////////////////////////////Images
$images = '';
$imageExist = [];
$imagesDeleted = [];
if (count($TestResult->TitleImage))
{
$images = $TestResult->TitleImage;
foreach ($images as $key => $image) {
$imageExist[] = '/'.$image->path;
if (!in_array('/'.$image->path, $request->imgs)) {
$imagesDeleted[] = $image->path;
}
}
}
if ($request->imgs != null) {
$request_imgs = array_diff($request->imgs, $imageExist);
foreach ($request_imgs as $key => $img) {//
if (strrpos($img, "base64") !== false) {
$Image = $img;
$InterventionImage = Image::make($Image);
$Mime = explode('/', $InterventionImage->mime());
$ImageName = time().$key.'.'.$Mime[1];
$Path = 'uploads'.'/TestResults'.'/'.$TestResult->id .'/'.$ImageName;
Storage::disk('public')->makeDirectory('TestResults'.'/'.$TestResult->id);
$InterventionImage->save(public_path($Path));
//--------------------------------------------------------
$GalleryObj = Gallery::create(['user_id' => auth('api')->user()->id, 'path' => $Path]);
$Uploadable = Uploadable::create(['uploadable_id' => $TestResult->id, 'uploadable_type' => 'App\TestResult', 'gallery_id' => $GalleryObj->id, 'image_role' => 'TitleImage']);
//--------------------------------------------------------
}
}
if (count($imagesDeleted)) {
foreach ($imagesDeleted as $key => $imageDeleted) {
$Gallery = Gallery::where('path', $imageDeleted)->first();
if ($Gallery) {
Storage::disk('public')->delete(static::storage_path($imageDeleted));
Uploadable::where('gallery_id', $Gallery->id)->where('uploadable_id', $TestResult->id)->where('uploadable_type', get_class($TestResult))->delete();
$Gallery->delete();
}
}
}
}
return \MessageResponse::success(null,trans('messages.update'));
}
public function destroy(TestResult $TestResult)
{
if (!auth('api')->user()->can('delete', $TestResult)) {
return \MessageResponse::error(trans('messages.access_denied'));
}
if (count($TestResult->input_values)) {
InputValue::where('test_result_id', $TestResult->id)->get()->each->delete();
}
if (count($TestResult->TitleImage)){
foreach ($TestResult->TitleImage as $image) {
Storage::disk('public')->delete(static::storage_path($image->path));
Uploadable::where('gallery_id', $image->id)->where('uploadable_id', $TestResult->id)->where('uploadable_type', get_class($TestResult))->delete();
Gallery::where('id', $image->id)->delete();
}
}
$TestResult->delete();
return \MessageResponse::success(null, trans('messages.success'));
}
public function verifyTestResult(TestResult $TestResult)
{
if (auth('api')->user()->cant('verifyTestResult', $TestResult)) {
return \MessageResponse::error(trans('You dont have permission or this test result belongs to another medical center'));
}
if ($TestResult->verified == 'Verified') {
$TestResult->verified = 'NotVerified';
} else {
$TestResult->verified = 'Verified';
}
$TestResult->save();
$TestResult = $TestResult->load('user.medical_center');
return \MessageResponse::success(trans('messages.success'), null, $TestResult);
}
public function listFilterItems()
{
$user = auth('api')->user();
$MedicalCenter = MedicalCenter::when(!$user->hasRole('Admin'), function ($query) use ($user)
{
$query->where('id', $user->medical_center_id);
})->select('name', 'id')->get()->toArray();
$TestType = TestType::select('name', 'id')->get()->toArray();
return \MessageResponse::data([
'MedicalCenters' => $MedicalCenter,
'TestTypes' => $TestType
]);
}
public function chart(Request $request)
{
$user = auth('api')->user();
if ($user->hasRole('User')) {
$userId = $user->id;
} elseif($request->has('userId') && $request->userId) {
$userId = $request->userId;
} else {
$userId = null;
}
if ($user->hasRole('Admin') && $request->has('medicalCenterId') && $request->medicalCenterId) {
$medicalCenterId = $request->medicalCenterId;
} else {
$medicalCenterId = $user->medical_center_id;
}
$TestResults = TestResult::
when($userId, function ($query) use ($userId)
{
$query->where('user_id', $userId);
})
->when($medicalCenterId, function ($query) use ($medicalCenterId)
{
$query->whereHas('user', function($query) use ($medicalCenterId) {
$query->where('medical_center_id', $medicalCenterId);
});
})
->when($request->has('testTypeId') && $request->testTypeId, function ($query) use ($request)
{
$query->where('test_type_id', $request->testTypeId);
})
->when($request->has('result') && $request->result, function ($query) use ($request)
{
$query->where('result', $request->result);
})
->when(($request->has('fromPicker') && $request->fromPicker) || ($request->has('upToPicker') && $request->upToPicker), function ($query) use ($request)
{
$from = ($request->fromPicker) ? date($request->fromPicker . ' 00:00:00') : date('2010-01-01' . ' 00:00:00');
$upTo = ($request->upToPicker) ? date($request->upToPicker . ' 23:59:59') : date('Y-m-d' . ' 23:59:59');
return $query->whereBetween('created_at', [$from, $upTo]);
})
->when($request->has('verify') && $request->verify, function ($query) use ($request)
{
$query->where('verified', $request->verify);
})->select('result')->get()->groupBy('result');
$AcceptCount = (isset($TestResults['Accept'])) ? $TestResults['Accept']->count() : 0;
$RejectCount = (isset($TestResults['Reject'])) ? $TestResults['Reject']->count() : 0;
return \MessageResponse::data(['labels' => ['Number Of Accepted Test Results', 'Number Of Rejected Test Results'], 'data' => [$AcceptCount,$RejectCount]]);
}
//--------------------------------------------------------------------------Show
public function showTestResult($id)
{
return view('ShowTestResult', compact('id'));
}
}
+422
View File
@@ -0,0 +1,422 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\TestType;
use App\TestResult;
use App\Input;
use App\Option;
use App\Http\Requests\StoreTestTypeRequest;
use \Milon\Barcode\DNS1D;
use \Milon\Barcode\DNS2D;
class TestTypeController extends Controller
{
public function index(Request $request)
{
if (!auth('api')->user()->can('list', TestType::class)) {
return \MessageResponse::error(trans('messages.access_denied'));
}
$TestTypes = TestType::when($request->has('name') && $request->name, function($query) use($request){
$query->where('name', 'LIKE', '%'.$request->name.'%');
})
->when(($request->has('fromPicker') && $request->fromPicker) || ($request->has('upToPicker') && $request->upToPicker), function ($query) use ($request)
{
$from = ($request->fromPicker) ? date($request->fromPicker . ' 00:00:00') : date('2010-01-01' . ' 00:00:00');
$upTo = ($request->upToPicker) ? date($request->upToPicker . ' 23:59:59') : date('Y-m-d' . ' 23:59:59');
return $query->whereBetween('created_at', [$from, $upTo]);
})
->when($request->has('unique_id') && $request->unique_id, function($query) use($request){
$query->where('unique_code', $request->unique_id);
})
->when($request->has('user_name') && $request->user_name, function($query) use($request){
$query->whereHas('user', function($query) use($request){
$query->where('name', 'LIKE', '%'.$request->user_name.'%');
});
})
->withCount('test_results')->with('user','user.medical_center')->paginate(10);
return \MessageResponse::data($TestTypes);
}
public function generateBarcode(TestType $TestType)
{
if (!auth('api')->user()->can('generateBarcode', $TestType)) {
return \MessageResponse::error(trans('messages.access_denied'));
}
$Number = $TestType->unique_code;
$Barcode = DNS1D::getBarcodePNGUri($Number, "C128");
$QRCode = DNS2D::getBarcodePNGUri($Number, "QRCODE");
$TestType->update(['bar_code' => $Barcode]);
return \MessageResponse::data(['Barcode' => $Barcode, 'QRCode' => $QRCode]);
}
public function create()
{
//
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////// Store TestType /////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
public function CreateInput($Input,$TestType,$ParentID = null)
{
//---------------------------------------------Input
$InputData = [
'name' => $Input['name'],
'type' => $Input['type'],
'size' => $Input['size'],
'test_type_id' => $TestType->id,
'parent_id' => $ParentID
];
$InputObj = Input::create($InputData);
//---------------------------------------------Input
//---------------------------------------------Option
if ($Input['type'] == 'Checkbox' || $Input['type'] == 'Select' || $Input['type'] == 'Radiobutton' || $Input['type'] == 'Range') {
foreach ($Input['options'] as $Option) {
$Option = Option::create(['title' => $Option['title'] , 'input_id' => $InputObj->id]);
}
}
//---------------------------------------------Option
return $InputObj;
}
public function CreateChildForm($Input,$TestType,$InputObj)
{
if (isset($Input['children'])) {
foreach ($Input['children'] as $InputChild) {
$InputChildObj = $this->CreateInput($InputChild,$TestType,$InputObj->id);
if (isset($InputChild['children'])) {
$this->CreateChildForm($InputChild,$TestType,$InputChildObj);
}
}
}
}
public function store(StoreTestTypeRequest $request)
{
try {
$return_value = \DB::transaction(function () use ($request) {
$TestType = [
'name' => $request['name'],
'unique_code' => $request['unique_code'],
'device_label' => $request['device_label'],
'user_id' => auth('api')->user()->id
];
$TestType = TestType::create($TestType);
$TestTypeInfo = $request['info'];
foreach ($TestTypeInfo as $Input) {
$InputObj = $this->CreateInput($Input,$TestType);
if ($Input['type'] == 'Form') {
$this->CreateChildForm($Input,$TestType,$InputObj);
}
}
});
} catch (\Exception $e) {
return response()->json($e->getMessage(), 441);
}
return \MessageResponse::success(null,trans('messages.create'));
}
public function show($id)
{
//
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////// Edit TestType ///////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
public function CreateInputInfo($Input)
{
$Options = [];
//------------------------------------------------------Input
$InputInfo = [
'id' => $Input->id,
'name' => $Input->name,
'type' => $Input->type,
'size' => $Input->size ,
'parent_id' => $Input->parent_id,
'options' => [],
'children' => []
];
//------------------------------------------------------Input
//------------------------------------------------------Option
if ($Input['type'] == 'Checkbox' || $Input['type'] == 'Select' || $Input['type'] == 'Radiobutton' || $Input['type'] == 'Range') {
foreach ($Input['options'] as $Option) {
$OptionInfo = [
'id' => $Option->id ,
'title' => $Option->title
];
$Options[] = $OptionInfo;
}
$InputInfo['options'] = $Options;
}
//------------------------------------------------------Option
return $InputInfo;
}
public function CreateChildFormInfo($Input,$InputInfo)
{
$Children = [];
foreach ($Input['children'] as $InputChild) {
$ChildInfo = $this->CreateInputInfo($InputChild);
$Children[] = $ChildInfo;
if ($InputChild['type'] == 'Form') {
$this->CreateChildFormInfo($InputChild,$ChildInfo);
}
}
return $Children;
}
public function edit(TestType $TestType)
{
if (count($TestType->test_results) > 0) {
return \MessageResponse::error(trans('messages.access_denied'));
}
$Inputs = Input::with('children','options','children.options')->where('test_type_id',$TestType->id)->where('parent_id',null)->get();
$Info = [];
$Options = [];
$Children = [];
foreach ($Inputs as $Input) {
$InputInfo = $this->CreateInputInfo($Input);
if ($Input['type'] == 'Form') {
$Children = $this->CreateChildFormInfo($Input,$InputInfo);
$InputInfo['children'] = $Children;
}
$Info[] = $InputInfo;
}
$TestTypeInfo = [
'id' => $TestType->id,
'name' => $TestType->name,
'unique_code' => $TestType->unique_code,
'device_label' => $TestType->device_label,
'info' => $Info,
];
return \MessageResponse::data($TestTypeInfo);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////// Update TestType /////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
public function UpdateInput($Input,$TestType,$ParentID = null)
{
//---------------------------------------------Input
$InputData = [
'name' => $Input['name'],
'type' => $Input['type'],
'size' => $Input['size'],
'test_type_id' => $TestType->id,
'parent_id' => $ParentID
];
Input::where('id',$Input['id'])->update($InputData);
$InputObj = Input::findOrFail($Input['id']);
//---------------------------------------------Input
//---------------------------------------------Option
if ($Input['type'] == 'Checkbox' || $Input['type'] == 'Select' || $Input['type'] == 'Radiobutton' || $Input['type'] == 'Range') {
//**************************
$DeletedOptionIDs = $InputObj->options->pluck('id')->toArray();
//**************************
foreach ($Input['options'] as $Option) {
if ($Option['id'] == 0) {//--new
$Option = Option::create(['title' => $Option['title'] , 'input_id' => $Input['id'] ]);
}
else {
//**************************
if(in_array($Option['id'],$DeletedOptionIDs)){
foreach ($DeletedOptionIDs as $index=>$DeletedOptionID){
if($DeletedOptionID == $Option['id']){
unset($DeletedOptionIDs[$index]);
}
}
}
//****************************
$Option = Option::where('id', $Option['id'])->update(['title' => $Option['title'] ]);
}
}
//**************************
foreach ($DeletedOptionIDs as $DeletedOptionID){
$DeletedOption = Option::findOrFail($DeletedOptionID);
$DeletedOption->delete();
}
//**************************
}
//---------------------------------------------Option
return $Input;
}
public function UpdateChildForm($Input,$TestType,$InputObj)
{
//**********************************
$InputObject = Input::findOrFail($InputObj['id']);//$InputObj['id'] OR $Input['id']???????
// dd($InputObject);
$DeletedChildIDs = $InputObject->children->pluck('id')->toArray();
//**********************************
if (isset($Input['children'])) {
foreach ($Input['children'] as $InputChild) {
if ($InputChild['id'] == 0) {//--newChild
$InputChildObj = $this->CreateInput($InputChild,$TestType,$InputObj['id']);
if (isset($InputChild['children'])) {
$this->CreateChildForm($InputChild,$TestType,$InputChildObj);
}
}
else {
//******************************
if(in_array($InputChild['id'],$DeletedChildIDs)){
foreach ($DeletedChildIDs as $index=>$DeletedChildID){
if($DeletedChildID == $InputChild['id']){
unset($DeletedChildIDs[$index]);
}
}
}
//******************************
$InputChildObj = $this->UpdateInput($InputChild,$TestType,$InputObj['id']);
if (isset($InputChild['children'])) {
$this->UpdateChildForm($InputChild,$TestType,$InputChildObj);
}
}
}
//*****************************
foreach ($DeletedChildIDs as $DeletedChildID){
$DeletedChild = Input::findOrFail($DeletedChildID);
$DeletedChild->options()->delete();
foreach ($DeletedChild->children as $DeletedChild1) {
$DeletedChild1->options()->delete();
$DeletedChild1->delete();
}
// $DeletedChild->children()->delete();
$DeletedChild->delete();
}
//*****************************
}
}
public function update(StoreTestTypeRequest $request, TestType $TestType)
{
$TestTypeData = [
'name' => $request['name'],
'unique_code' => $request['unique_code'],
'device_label' => $request['device_label'],
];
$TestType->update($TestTypeData);
$TestTypeInfo = $request['info'];
$DeletedInputIDs = $TestType->inputs->where('parent_id',null)->pluck('id')->toArray();
foreach ($TestTypeInfo as $Input) {
if ($Input['id'] == 0) {//--new
$InputObj = $this->CreateInput($Input,$TestType);
}
else {
//**************************
if(in_array($Input['id'],$DeletedInputIDs)){
foreach ($DeletedInputIDs as $index=>$DeletedInputID){
if($DeletedInputID == $Input['id']){
unset($DeletedInputIDs[$index]);
}
}
}
//****************************
$InputObj = $this->UpdateInput($Input,$TestType);
}
if ($Input['type'] == 'Form') {
$this->UpdateChildForm($Input,$TestType,$InputObj);
}
}
//******************************
foreach ($DeletedInputIDs as $DeletedInputID){
$DeletedInput = Input::findOrFail($DeletedInputID);
$DeletedInput->options()->delete();
foreach ($DeletedInput->children as $DeletedInput1) {
$DeletedInput1->options()->delete();
$DeletedInput1->delete();
}
// $DeletedInput->children()->delete();
$DeletedInput->delete();
}
//******************************
return \MessageResponse::success(null,trans('messages.update'));
}
/////////////////////////////////////////////////////////////////////////////////////
public function getInputs(Request $request)
{
if (auth('api')->user()->can('getInputs')) {
return \MessageResponse::error(trans('messages.failed'));
}
if($request->test_result_id !== '') {
$testTypeId = TestResult::find($request->test_result_id);
}
if (isset($testTypeId) && $testTypeId) {
$testType = TestType::select('id', 'name', 'unique_code', 'device_label')->find($testTypeId->test_type_id);
} else {
$testType = TestType::where('name', $request->name)->orWhere('unique_code', $request->unique_code)->select('id', 'name', 'unique_code', 'device_label')->first();
}
if (isset($testType) && $testType) {
$inputs = Input::select('id', 'name', 'type', 'size', 'parent_id')->with(
['options' => function ($query) {
$query->select('id', 'title','input_id');
},
'children' => function ($query) {
$query->select('id', 'name', 'type', 'size', 'parent_id', 'test_type_id');
},
'children.options' => function ($query) {
$query->select('id', 'title', 'input_id');
}]
)->whereNull('parent_id')->where('test_type_id',$testType->id)->get();
return \MessageResponse::data(['testType' => $testType, 'inputs' => $inputs]);
}
return \MessageResponse::error();
}
public function listNames()
{
$testType = TestType::pluck('name');
return \MessageResponse::data($testType);
}
public function destroy(TestType $TestType)
{
if (!auth('api')->user()->can('delete', $TestType)) {
return \MessageResponse::error(trans('messages.access_denied'));
}
$TestType->delete();
return \MessageResponse::success(trans('messages.success'));
}
// public function AllTestTypes()
// {
// $testTypes = TestType::pluck('id', 'name');
// return \MessageResponse::data($testTypes);
// }
}
+200
View File
@@ -0,0 +1,200 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\StoreUserRequest;
use App\MedicalCenter;
use App\User;
use App\Message;
class UserController extends Controller
{
public function index(Request $request)
{
$user = auth('api')->user();
if ($user->cant('list', User::class)) {
return \MessageResponse::error(trans('messages.access_denied'));
}
if ($user->hasRole('Supervisor')) {
$medical_center_id = $user->medical_center_id;
}
elseif($request->has('medicalCenter_id') && $request->medicalCenter_id) {
$medical_center_id = $request->medical_center_id;
} else {
$medical_center_id = null;
}
$Users = User::when($request->has('name') && $request->name, function($query) use($request){
$query->where('name', 'LIKE', '%'.$request->name.'%');
})
->when(($request->has('fromPicker') && $request->fromPicker) || ($request->has('upToPicker') && $request->upToPicker), function ($query) use ($request)
{
$from = ($request->fromPicker) ? date($request->fromPicker . ' 00:00:00') : date('2010-01-01' . ' 00:00:00');
$upTo = ($request->upToPicker) ? date($request->upToPicker . ' 23:59:59') : date('Y-m-d' . ' 23:59:59');
return $query->whereBetween('created_at', [$from, $upTo]);
})
->when($request->has('cell_number') && $request->cell_number, function($query) use($request){
$query->where('cell_number', 'LIKE', '%'.$request->cell_number.'%');
})
->when($request->has('role') && $request->role, function($query) use($request){
$query->role($request->role);
})
->when($medical_center_id, function($query) use ($medical_center_id){
$query->where('medical_center_id', $medical_center_id);
})
->with(['medical_center', 'roles'])->paginate(10);
return \MessageResponse::data($Users);
}
public function store(StoreUserRequest $request)
{
if (auth('api')->user()->cant('store', User::class)) {
return \MessageResponse::error(trans('messages.failed'));
}
$UserData = [
'name' => $request->name ,
'cell_number' => $request->cell_number ,
'medical_center_id' => $request->medical_center_id ,
'status' => 'PreRegister',
'verified' => 1,
'password' => bcrypt($request->password),
];
User::create($UserData);
return \MessageResponse::success(trans('messages.success'));
}
public function edit(User $User)
{
return \MessageResponse::data($User);
}
public function update(StoreUserRequest $request, User $User)
{
if (auth('api')->user()->cant('update', $User)) {
return \MessageResponse::error(trans('messages.failed'));
}
$UserData = [
'name' => $request->name ,
'cell_number' => $request->cell_number ,
'medical_center_id' => $request->medical_center_id ,
'status' => 'PreRegister',
'verified' => 1,
'password' => bcrypt($request->password),
];
$User->update($UserData);
return \MessageResponse::success(trans('messages.success'));
}
public function destroy(User $User)
{
if (auth('api')->user()->cant('delete', $User)) {
return \MessageResponse::error(trans('messages.access_denied'));
}
$User->delete();
return \MessageResponse::success(trans('messages.success'));
}
public function getByMedicalCenter(MedicalCenter $MedicalCenter)
{
$user = auth('api')->user();
if (auth('api')->user()->cant('getByMedicalCenter', $MedicalCenter)) {
return \MessageResponse::error(trans('messages.failed'));
}
$MedicalCenter = $MedicalCenter->load(['users' => function ($query) use ($user) {
if ($user->hasRole('User')) {
return $query->select(['id', 'medical_center_id', 'name', 'cell_number', 'status'])->where('id', $user->id);
} else {
return $query->select(['id', 'medical_center_id', 'name', 'cell_number', 'status']);
}
}, 'users.roles']);
return \MessageResponse::data($MedicalCenter);
}
public function changeStatus(User $User)
{
if (auth('api')->user()->cant('changeStatus', User::class)) {
return \MessageResponse::error(trans('messages.access_denied'));
}
if ($User->status == 'Active') {
$User->status = 'Suspended';
$tokens = \DB::table('oauth_access_tokens')->where('user_id', $User->id);
foreach($tokens->get() as $token) {
\DB::table('oauth_refresh_tokens')->where('access_token_id', $token->id)->delete();
}
$tokens->delete();
} else {
$User->status = 'Active';
}
$User->save();
return \MessageResponse::data($User);
}
public function changeRole(User $User, Request $request)
{
if (auth('api')->user()->cant('changeRole', User::class)) {
return \MessageResponse::error(trans('messages.access_denied'));
}
$User->syncRoles($request->roles);
return \MessageResponse::data($User);
}
public function updateInfo(Request $request)
{
auth('api')->user()->update($request->all());
return \MessageResponse::success(trans('messages.success'));
}
public function getInfo()
{
$user = auth('api')->user();
$user->load('medical_center');
return \MessageResponse::data([ 'user' => $user, 'roles' => auth('api')->user()->getRoleNames() ]);
}
public function getMessages()
{
$User = auth('api')->user();
// $ReceivedMessages = $User->messagesReceived;
// $SentMessages = $User->messagesSent;
$SentMessages = Message::with('recipient_user')->where('sender_user_id', $User->id)->get();
$ReceivedMessages = Message::with('sender_user')->where('recipient_user_id', $User->id)->get();
return \MessageResponse::data(['ReceivedMessages' => $ReceivedMessages, 'SentMessages' => $SentMessages]);
}
public function searchUser(Request $request)
{
// if (auth('api')->user()->cant('searchUser', User::class)) {
// return \MessageResponse::error(trans('messages.access_denied'));
// }
$role = null;
$medical_center_id = null;
$User = auth('api')->user();
if ($User->hasRole('Supervisor') || $User->hasRole('User')) {
$medical_center_id = $User->medical_center_id;
if ($User->hasRole('Supervisor')){
$role = 'Admin';
}
}
$users = User::where('id', '<>', $User->id)->select('id', 'name')->where('name', 'LIKE', '%'.$request->name.'%')
->when($medical_center_id, function($query) use ($medical_center_id){
$query->where('medical_center_id', $medical_center_id);
})
->when($role, function($query) use($role){
$query->role($role);
})
->get();
return \MessageResponse::data($users);
}
}
+1
View File
@@ -19,6 +19,7 @@ class Kernel extends HttpKernel
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\App\Http\Middleware\TrustProxies::class,
\App\Http\Middleware\Cors::class,
];
/**
+30
View File
@@ -0,0 +1,30 @@
<?php // /app/Http/Middleware/Cors.php
namespace App\Http\Middleware;
use Closure;
class Cors {
public function handle($request, Closure $next)
{
/* @var $response Response */
$response = $next($request)
->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-credentials', true)
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
if (!$request->isMethod('OPTIONS')) {
return $response;
}
$allow = $response->headers->get('Allow'); // true list of allowed methods
if (!$allow) {
return $response;
}
$headers = [
'Access-Control-Allow-Methods' => $allow,
'Access-Control-Max-Age' => 3600,
'Access-Control-Allow-Headers' => 'X-Requested-With, Origin, X-Csrftoken, Content-Type, Accept',
];
return $response->withHeaders($headers);
}
}
+1 -1
View File
@@ -19,6 +19,6 @@ class VerifyCsrfToken extends Middleware
* @var array
*/
protected $except = [
//
'api/*'
];
}
+57
View File
@@ -0,0 +1,57 @@
<?php
namespace App\Http\Requests;
use App\Cycle;
use Illuminate\Validation\Rule;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
class StoreCycleRequest extends FormRequest
{
public function authorize()
{
if ($this->method() == 'POST') {
return auth('api')->check() && auth('api')->user()->can('store', Cycle::class);
} else {
$Cycle = $this->route('Cycle');
return auth('api')->check() && $Cycle && auth('api')->user()->can('update', $Cycle);
}
}
public function rules()
{
switch ($this->method()) {
case 'POST': {
return [
'name' => 'required|max:100|unique:cycles',
'date' => 'required',
'sterilizer_id' => 'required',
'cycle_number' => 'required',
'note' => 'nullable',
'packs' => 'required',
];
break;
}
case 'PUT':
case 'PATCH': {
$Cycle = $this->route('Cycle');
return [
'name' => 'required|max:100|unique:cycles,id,'.$Cycle->id,
'date' => 'required',
'sterilizer_id' => 'required',
'cycle_number' => 'required',
'note' => 'nullable',
'packs' => 'required',
];
break;
}
default:
break;
}
}
}
+55
View File
@@ -0,0 +1,55 @@
<?php
namespace App\Http\Requests;
use App\Item;
use Illuminate\Validation\Rule;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
class StoreItemRequest extends FormRequest
{
public function authorize()
{
if ($this->method() == 'POST') {
return auth('api')->check() && auth('api')->user()->can('store', Item::class);
} else {
$Item = $this->route('Item');
return auth('api')->check() && $Item && auth('api')->user()->can('update', $Item);
}
}
public function rules()
{
switch ($this->method()) {
case 'POST': {
return [
'name' => 'required|max:100|unique:items',
'unique_id' => 'required|max:100|unique:items',
'size' => 'required',
'specific' => 'required',
'note' => 'nullable',
];
break;
}
case 'PUT':
case 'PATCH': {
$Item = $this->route('Item');
return [
'name' => 'required|max:100|unique:items,id,'.$Item->id,
'unique_id' => 'required|max:100|unique:items,id,'.$Item->id,
'size' => 'required',
'specific' => 'required',
'note' => 'nullable',
];
break;
}
default:
break;
}
}
}
@@ -0,0 +1,53 @@
<?php
namespace App\Http\Requests;
use App\MedicalCenter;
use Illuminate\Validation\Rule;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
class StoreMedicalCenterRequest extends FormRequest
{
public function authorize()
{
if ($this->method() == 'POST') {
return auth('api')->check() && auth('api')->user()->can('store', MedicalCenter::class);
} else {
$MedicalCenter = $this->route('MedicalCenter');
return auth('api')->check() && $MedicalCenter && auth('api')->user()->can('update', $MedicalCenter);
}
}
public function rules()
{
switch ($this->method()) {
case 'POST': {
return [
'name' => 'required|max:100|unique:medical_centers',
// 'operatores.*.name'=>'required|string|max:255',
// 'operatores.*.cell_number'=>'required|digits_between:10,11|unique:users',
// 'operatores.*.password'=>'required|string|min:6',
];
break;
}
case 'PUT':
case 'PATCH': {
$MedicalCenter = $this->route('MedicalCenter');
return [
'name' => 'required|max:100|unique:medical_centers,id,'.$MedicalCenter->id,
// 'operatores.*.name'=>'required|string|max:255',
// 'operatores.*.cell_number'=>'required|digits_between:10,11|unique:users',
// 'operatores.*.password'=>'required|string|min:6',
];
break;
}
default:
break;
}
}
}
+51
View File
@@ -0,0 +1,51 @@
<?php
namespace App\Http\Requests;
use App\Message;
use Illuminate\Validation\Rule;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
class StoreMessageRequest extends FormRequest
{
public function authorize()
{
if ($this->method() == 'POST') {
return auth('api')->check() && auth('api')->user()->can('store', Message::class);
} else {
$Message = $this->route('Message');
return auth('api')->check() && $Message && auth('api')->user()->can('update', $Message);
}
}
public function rules()
{
switch ($this->method()) {
case 'POST': {
return [
'title' => 'nullable',
'message' => 'required',
'user_id' => 'required',
];
break;
}
case 'PUT':
case 'PATCH': {
$Message = $this->route('Message');
return [
'title' => 'nullable',
'message' => 'required',
'user_id' => 'required',
];
break;
}
default:
break;
}
}
}
+63
View File
@@ -0,0 +1,63 @@
<?php
namespace App\Http\Requests;
use App\Pack;
use Illuminate\Validation\Rule;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
class StorePackRequest extends FormRequest
{
public function authorize()
{
if ($this->method() == 'POST') {
return auth('api')->check() && auth('api')->user()->can('store', Pack::class);
} else {
$Pack = $this->route('Pack');
return auth('api')->check() && $Pack && auth('api')->user()->can('update', $Pack);
}
}
public function rules()
{
switch ($this->method()) {
case 'POST': {
return [
'name' => 'required|max:100|unique:packs',
'sterile_date' => 'required',
'expire_date' => 'required',
'sterilizer_id' => 'required',
'cycle_number' => 'required',
'lot_number' => 'required',
'department' => 'required',
'note' => 'nullable',
'packages' => 'required',
];
break;
}
case 'PUT':
case 'PATCH': {
$Pack = $this->route('Pack');
return [
'name' => 'required|max:100|unique:packs,id,'.$Pack->id,
'sterile_date' => 'required',
'expire_date' => 'required',
'sterilizer_id' => 'required',
'cycle_number' => 'required',
'lot_number' => 'required',
'department' => 'required',
'note' => 'nullable',
'packages' => 'required',
];
break;
}
default:
break;
}
}
}
+52
View File
@@ -0,0 +1,52 @@
<?php
namespace App\Http\Requests;
use App\Package;
use Illuminate\Validation\Rule;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
class StorePackageRequest extends FormRequest
{
public function authorize()
{
if ($this->method() == 'POST') {
return auth('api')->check() && auth('api')->user()->can('store', Package::class);
} else {
$Package = $this->route('Package');
return auth('api')->check() && $Package && auth('api')->user()->can('update', $Package);
}
}
public function rules()
{
switch ($this->method()) {
case 'POST': {
return [
'name' => 'required|max:100|unique:packages',
'note' => 'nullable',
'items' => 'required',
];
break;
}
case 'PUT':
case 'PATCH': {
$Package = $this->route('Package');
return [
'name' => 'required|max:100|unique:packages,id,'.$Package->id,
'unique_id' => 'required|max:100|unique:packages,id,'.$Package->id,
'note' => 'nullable',
'items' => 'required',
];
break;
}
default:
break;
}
}
}
@@ -0,0 +1,53 @@
<?php
namespace App\Http\Requests;
use App\TestResult;
use Illuminate\Validation\Rule;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
class StoreTestResultRequest extends FormRequest
{
public function authorize()
{
if ($this->method() == 'POST') {
return auth('api')->check() && auth('api')->user()->can('store', TestResult::class);
} else {
$TestResult = $this->route('TestResult');
return auth('api')->check() && $TestResult && auth('api')->user()->can('update', $TestResult);
}
}
public function rules()
{
switch ($this->method()) {
case 'POST': {
return [
'device_id' => 'required',
// 'cycle_number' => 'required',
'test_type_id' => 'required|numeric|exists:test_types,id',
'result' => 'required',
];
break;
}
case 'PUT':
case 'PATCH': {
// $TestResult = $this->route('TestResult');
return [
'device_id' => 'required',
// 'cycle_number' => 'required',
'test_type_id' => 'required|numeric|exists:test_types,id',
'result' => 'required',
];
break;
}
default:
break;
}
}
}
@@ -0,0 +1,59 @@
<?php
namespace App\Http\Requests;
use App\TestType;
use Illuminate\Validation\Rule;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
class StoreTestTypeRequest extends FormRequest
{
public function authorize()
{
if ($this->method() == 'POST') {
return auth('api')->check() && auth('api')->user()->can('store', TestType::class);
} else {
$TestType = $this->route('TestType');
return auth('api')->check() && $TestType && auth('api')->user()->can('update', $TestType);
}
}
public function rules()
{
switch ($this->method()) {
case 'POST': {
return [
'name' => 'required|max:100|unique:test_types',
'unique_code' => 'required|max:100|unique:test_types',
'device_label' => 'required',
'info.*.name'=>'required',
'info.*.type'=>'required',
'info.*.size'=>'nullable',
'info.*.parent_id'=>'nullable|numeric|exists:inputs,id',
];
break;
}
case 'PUT':
case 'PATCH': {
$TestType = $this->route('TestType');
return [
'name' => 'required|max:100|unique:test_types,id,'.$TestType->id,
'unique_code' => 'required|max:100|unique:test_types,id,'.$TestType->id,
'device_label' => 'required',
'info.*.name'=>'required',
'info.*.type'=>'required',
'info.*.size'=>'nullable',
'info.*.parent_id'=>'nullable|numeric|exists:inputs,id',
];
break;
}
default:
break;
}
}
}
+53
View File
@@ -0,0 +1,53 @@
<?php
namespace App\Http\Requests;
use App\User;
use Illuminate\Validation\Rule;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
class StoreUserRequest extends FormRequest
{
public function authorize()
{
if ($this->method() == 'POST') {
return auth('api')->check() && auth('api')->user()->can('store', User::class);
} else {
$User = $this->route('User');
return auth('api')->check() && $User && auth('api')->user()->can('update', $User);
}
}
public function rules()
{
switch ($this->method()) {
case 'POST': {
return [
'name'=>'required|string|max:255',
'cell_number'=>'required|digits_between:10,11|unique:users',
'password'=>'required|string|min:6',
'medical_center_id' => 'required|numeric|exists:medical_centers,id',
];
break;
}
case 'PUT':
case 'PATCH': {
$User = $this->route('User');
return [
'name'=>'required|string|max:255',
'cell_number'=>'required|digits_between:10,11|unique:users,id,'.$User->id,
'password'=>'required|string|min:6',
'medical_center_id' => 'required|numeric|exists:medical_centers,id',
];
break;
}
default:
break;
}
}
}
+26
View File
@@ -0,0 +1,26 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Input extends Model
{
public $fillable = ['name','type','size','test_type_id','parent_id'];
public function test_type()
{
return $this->belongsTo('App\TestType');
}
public function parent()
{
return $this->belongsTo('App\Input', 'parent_id');
}
public function children()
{
return $this->hasMany('App\Input', 'parent_id');
}
public function options()
{
return $this->hasMany('App\Option');
}
}
+22
View File
@@ -0,0 +1,22 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class InputValue extends Model
{
public $fillable = ['value','test_result_id','input_id','option_id'];
public function input()
{
return $this->belongsTo('App\Input');
}
public function test_result()
{
return $this->belongsTo('App\TestResult');
}
public function option()
{
return $this->belongsTo('App\Option');
}
}
+18
View File
@@ -0,0 +1,18 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Item extends Model
{
public $fillable = ['name', 'size', 'unique_id', 'specific', 'note', 'user_id'];
public function packages()
{
return $this->belongsToMany('App\Package', 'item_package');
}
public function user()
{
return $this->belongsTo('App\User');
}
}
+14
View File
@@ -0,0 +1,14 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class MedicalCenter extends Model
{
public $fillable = ['name'];
public function users()
{
return $this->hasMany('App\User');
}
}
+19
View File
@@ -0,0 +1,19 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Message extends Model
{
use SoftDeletes;
public $fillable = ['title', 'text', 'status', 'recipient_user_id', 'sender_user_id'];
public function sender_user()
{
return $this->belongsTo('App\User', 'sender_user_id');
}
public function recipient_user()
{
return $this->belongsTo('App\User', 'recipient_user_id');
}
}
+19
View File
@@ -0,0 +1,19 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Option extends Model
{
public $fillable = ['title','input_id'];
public function input()
{
return $this->belongsTo('App\Input');
}
public function input_value()
{
return $this->hasOne('App\InputValue');
}
}
+23
View File
@@ -0,0 +1,23 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Pack extends Model
{
public $fillable = ['name', 'sterile_date', 'expire_date', 'sterilizer_id', 'cycle_number', 'lot_number', 'department', 'user_id', 'note'];
public function user()
{
return $this->belongsTo('App\User');
}
public function packages()
{
return $this->belongsToMany('App\Package', 'pack_package');
}
public function cycles()
{
return $this->belongsToMany('App\Cycle', 'cycle_pack');
}
}
+23
View File
@@ -0,0 +1,23 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Package extends Model
{
public $fillable = ['name', 'unique_id', 'user_id', 'note', 'verified'];
public function user()
{
return $this->belongsTo('App\User');
}
public function items()
{
return $this->belongsToMany('App\Item', 'item_package');
}
public function packs()
{
return $this->belongsToMany('App\Pack', 'pack_package');
}
}
+34
View File
@@ -0,0 +1,34 @@
<?php
namespace App\Policies;
use App\User;
use App\Cycle;
use Doctrine\Tests\Common\Inflector\InflectorTest;
class CyclePolicy
{
public function delete(User $User, Cycle $Cycle)
{
// if($User->hasRole('Admin') && $Cycle->users->count() == 0)
return true;
}
public function update(User $User, Cycle $Cycle)
{
// if($User->hasRole('Admin'))
return true;
}
public function store(User $User)
{
// if($User->hasRole('Admin'))
return true;
}
public function verifyCycle(User $User, Cycle $Cycle)
{
// if($User->hasRole('Admin'))
return true;
}
}
+29
View File
@@ -0,0 +1,29 @@
<?php
namespace App\Policies;
use App\User;
use App\Item;
use Doctrine\Tests\Common\Inflector\InflectorTest;
class ItemPolicy
{
public function delete(User $User, Item $Item)
{
// if($User->hasRole('Admin') && $Item->users->count() == 0)
return true;
}
public function update(User $User, Item $Item)
{
// if($User->hasRole('Admin'))
return true;
}
public function store(User $User)
{
// if($User->hasRole('Admin'))
return true;
}
}
+40
View File
@@ -0,0 +1,40 @@
<?php
namespace App\Policies;
use App\User;
use App\MedicalCenter;
use Doctrine\Tests\Common\Inflector\InflectorTest;
class MedicalCenterPolicy
{
public function list(User $User)
{
if($User->hasRole('Admin'))
return true;
}
public function delete(User $User, MedicalCenter $MedicalCenter)
{
if($User->hasRole('Admin') && $MedicalCenter->users->count() == 0)
return true;
}
public function update(User $User, MedicalCenter $MedicalCenter)
{
if($User->hasRole('Admin'))
return true;
}
public function store(User $User)
{
if($User->hasRole('Admin'))
return true;
}
public function getByMedicalCenter(User $User, MedicalCenter $MedicalCenter)
{
if($User->hasRole('Admin') || $MedicalCenter->id == $User->medical_center_id) {
return true;
}
return false;
}
}
+27
View File
@@ -0,0 +1,27 @@
<?php
namespace App\Policies;
use App\User;
use App\Message;
use Doctrine\Tests\Common\Inflector\InflectorTest;
class MessagePolicy
{
public function delete(User $User, Message $Message)
{
// if($Message->sender_user_id == $User->id || $Message->recipient_user_id == $User->id)
return true;
}
public function update(User $User, Message $Message)
{
// if($User->hasRole('Admin'))
return true;
}
public function store(User $User)
{
// if($User->hasRole('Admin'))
return true;
}
}
+30
View File
@@ -0,0 +1,30 @@
<?php
namespace App\Policies;
use App\User;
use App\Pack;
use Doctrine\Tests\Common\Inflector\InflectorTest;
class PackPolicy
{
public function delete(User $User, Pack $Pack)
{
// if($User->hasRole('Admin') && $Pack->users->count() == 0)
return true;
}
public function update(User $User, Pack $Pack)
{
// if($User->hasRole('Admin'))
return true;
}
public function store(User $User)
{
// if($User->hasRole('Admin'))
return true;
}
}
+34
View File
@@ -0,0 +1,34 @@
<?php
namespace App\Policies;
use App\User;
use App\Package;
use Doctrine\Tests\Common\Inflector\InflectorTest;
class PackagePolicy
{
public function delete(User $User, Package $Package)
{
// if($User->hasRole('Admin') && $Package->users->count() == 0)
return true;
}
public function update(User $User, Package $Package)
{
// if($User->hasRole('Admin'))
return true;
}
public function store(User $User)
{
// if($User->hasRole('Admin'))
return true;
}
public function verifyPackage(User $User, Package $Package)
{
// if($User->hasRole('Admin'))
return true;
}
}
+36
View File
@@ -0,0 +1,36 @@
<?php
namespace App\Policies;
use App\User;
use App\TestResult;
use Doctrine\Tests\Common\Inflector\InflectorTest;
class TestResultPolicy
{
public function delete(User $User, TestResult $TestResult)
{
if($User->hasRole('Admin') || ($User->hasRole('User') && $TestResult->verified == 'NotVerified' && $TestResult->user_id == $User->id))
return true;
}
public function update(User $User, TestResult $TestResult)
{
if($User->hasRole('Admin') || $TestResult->user_id == $User->id)
return true;
}
public function store(User $User)
{
return true;
}
public function verifyTestResult(User $User, TestResult $TestResult)
{
$TR_MID = $TestResult->user->medical_center_id;
$User_MID = $User->medical_center_id;
if($User->hasRole('Admin') || ( $User->hasRole('Supervisor') && $TR_MID == $User_MID))
return true;
}
}
+43
View File
@@ -0,0 +1,43 @@
<?php
namespace App\Policies;
use App\User;
use App\TestType;
use Doctrine\Tests\Common\Inflector\InflectorTest;
class TestTypePolicy
{
public function list(User $User)
{
if($User->hasRole('Admin'))
return true;
}
public function delete(User $User, TestType $TestType)
{
if($User->hasRole('Admin') )
return true;
}
public function update(User $User, TestType $TestType)
{
if($User->hasRole('Admin') && $TestType->test_results->count() == 0)
return true;
}
public function store(User $User)
{
if($User->hasRole('Admin'))
return true;
}
public function getInputs(User $User)
{
// if($User->hasRole('Admin'))
return true;
}
public function generateBarcode(User $User, TestType $TestType)
{
if($User->hasRole('Admin'))
return true;
}
}
+42
View File
@@ -0,0 +1,42 @@
<?php
namespace App\Policies;
use App\User;
use Doctrine\Tests\Common\Inflector\InflectorTest;
class UserPolicy
{
public function list(User $User)
{
if($User->hasRole('Admin|Supervisor'))
return true;
}
public function delete(User $User, User $Operator)
{
if($User->hasRole('Admin') && $Operator->test_results->count() == 0 && $Operator->test_types->count() == 0)
return true;
}
public function update(User $User, User $Operator)
{
if($User->id == $Operator->id)
return true;
}
public function store(User $User)
{
if($User->hasRole('Admin'))
return true;
}
public function changeRole(User $User)
{
if($User->hasRole('Admin'))
return true;
}
public function changeStatus(User $User)
{
if($User->hasRole('Admin|Supervisor'))
return true;
}
}
+1 -1
View File
@@ -13,7 +13,7 @@ class AppServiceProvider extends ServiceProvider
*/
public function register()
{
//
}
/**
+5 -2
View File
@@ -4,6 +4,7 @@ namespace App\Providers;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Laravel\Passport\Passport;
class AuthServiceProvider extends ServiceProvider
{
@@ -13,7 +14,9 @@ class AuthServiceProvider extends ServiceProvider
* @var array
*/
protected $policies = [
// 'App\Model' => 'App\Policies\ModelPolicy',
'App\MedicalCenter' => 'App\Policies\MedicalCenterPolicy',
'App\User' => 'App\Policies\UserPolicy',
'App\TestType' => 'App\Policies\TestTypePolicy',
];
/**
@@ -25,6 +28,6 @@ class AuthServiceProvider extends ServiceProvider
{
$this->registerPolicies();
//
Passport::routes();
}
}
+28
View File
@@ -0,0 +1,28 @@
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class MessageServiceProvider extends ServiceProvider
{
protected $defer = true;
public function register()
{
$this->app->singleton('messages', function() {
return new \App\Appended\Classes\Common\Response\MessageResponse;
});
}
/**
* Get the services provided by the provider.
*
* @return array
*/
public function provides()
{
return [MessageResponse::class];
}
}
+19 -3
View File
@@ -35,6 +35,9 @@ class RouteServiceProvider extends ServiceProvider
*/
public function map()
{
$this->mapRoutes();
$this->mapApiRoutes();
$this->mapWebRoutes();
@@ -66,8 +69,21 @@ class RouteServiceProvider extends ServiceProvider
protected function mapApiRoutes()
{
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
}
/**
* Define the routes without middleware for the application.
*
* These routes are typically stateless.
*
* @return void
*/
protected function mapRoutes()
{
Route::namespace($this->namespace)
->group(base_path('routes/routes.php'));
}
}
+26
View File
@@ -0,0 +1,26 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class TestResult extends Model
{
public $fillable = ['result','verified','test_type_id','user_id','device_id', 'cycle_number', 'date'];
public function test_type()
{
return $this->belongsTo('App\TestType');
}
public function user()
{
return $this->belongsTo('App\User');
}
public function input_values()
{
return $this->hasMany('App\InputValue');
}
public function TitleImage()
{
return $this->morphToMany('App\Gallery', 'uploadable')->wherePivot('image_role', 'TitleImage');
}
}
+27
View File
@@ -0,0 +1,27 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class TestType extends Model
{
use SoftDeletes;
public $fillable = ['name', 'unique_code', 'user_id', 'bar_code', 'device_label'];
// protected $softDelete = true;
public function user()
{
return $this->belongsTo('App\User');
}
public function test_results()
{
return $this->hasMany('App\TestResult');
}
public function inputs()
{
return $this->hasMany('App\Input');
}
}
+12
View File
@@ -0,0 +1,12 @@
<?php
namespace App\Transformers;
class Json
{
public static function response($data = null, $message = null)
{
return [
'data' => $data,
'message' => $message,
];
}
}
+18
View File
@@ -0,0 +1,18 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Uploadable extends Model
{
protected $fillable = ['uploadable_id', 'uploadable_type', 'gallery_id', 'image_role'];
public $timestamps = false;
public function gallery()
{
return $this->belongsTo('App\Gallery');
}
}
+42 -5
View File
@@ -5,20 +5,21 @@ namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\Passport\HasApiTokens;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use Notifiable;
use Notifiable, HasApiTokens, HasRoles;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
protected $fillable = [
'name', 'email', 'password','status','medical_center_id','address', 'gender'
];
/**
* The attributes that should be hidden for arrays.
*
@@ -36,4 +37,40 @@ class User extends Authenticatable
protected $casts = [
'email_verified_at' => 'datetime',
];
public function medical_center()
{
return $this->belongsTo('App\MedicalCenter');
}
public function test_results()
{
return $this->hasMany('App\TestResult');
}
public function test_types()
{
return $this->hasMany('App\TestType');
}
public function findForPassport($username)
{
return $this->where('cell_number', $username)->where('status', 'Active')->first();
}
public function messagesSent()
{
return $this->hasMany('App\Message', 'sender_user_id');
}
public function messagesReceived()
{
return $this->hasMany('App\Message', 'recipient_user_id');
}
public function packages()
{
return $this->hasMany('App\Package');
}
public function items()
{
return $this->hasMany('App\Item');
}
}
+7 -3
View File
@@ -11,14 +11,17 @@
"php": "^7.1.3",
"fideloper/proxy": "^4.0",
"laravel/framework": "5.8.*",
"laravel/tinker": "^1.0"
"laravel/passport": "^7.2",
"laravel/tinker": "^1.0",
"milon/barcode": "^5.3",
"spatie/laravel-permission": "^2.36"
},
"require-dev": {
"beyondcode/laravel-dump-server": "^1.0",
"filp/whoops": "^2.0",
"fzaninotto/faker": "^1.4",
"mockery/mockery": "^1.0",
"nunomaduro/collision": "^3.0",
"nunomaduro/collision": "^2.0",
"phpunit/phpunit": "^7.5"
},
"config": {
@@ -33,7 +36,8 @@
},
"autoload": {
"psr-4": {
"App\\": "app/"
"App\\": "app/",
"Packages\\": "packages/"
},
"classmap": [
"database/seeds",
Generated
+1107 -79
View File
File diff suppressed because it is too large Load Diff
+5 -2
View File
@@ -67,7 +67,7 @@ return [
|
*/
'timezone' => 'UTC',
'timezone' => 'Asia/Tehran',
/*
|--------------------------------------------------------------------------
@@ -174,6 +174,7 @@ return [
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
Laravel\Passport\PassportServiceProvider::class,
],
@@ -225,7 +226,9 @@ return [
'URL' => Illuminate\Support\Facades\URL::class,
'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class,
'MessageResponse' => Packages\Messaging\src\Facades\MessageResponse::class,
'DNS1D' => Milon\Barcode\Facades\DNS1DFacade::class,
'DNS2D' => Milon\Barcode\Facades\DNS2DFacade::class,
],
];
+1 -2
View File
@@ -42,9 +42,8 @@ return [
],
'api' => [
'driver' => 'token',
'driver' => 'passport',
'provider' => 'users',
'hash' => false,
],
],
+6
View File
@@ -0,0 +1,6 @@
<?php
return [
'store_path' => public_path("Barcodes/"),
'store_path_qr' => public_path("QRCodes/"),
];
+1 -1
View File
@@ -97,6 +97,6 @@ return [
|
*/
'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'),
'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'),
];
-3
View File
@@ -1,7 +1,5 @@
<?php
use Illuminate\Support\Str;
return [
/*
@@ -119,7 +117,6 @@ return [
'options' => [
'cluster' => env('REDIS_CLUSTER', 'predis'),
'prefix' => Str::slug(env('APP_NAME', 'laravel'), '_').'_database_',
],
'default' => [
+2 -2
View File
@@ -50,8 +50,8 @@ return [
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'root' => public_path('uploads'),
'url' => env('APP_URL') . '/storage',
'visibility' => 'public',
],
+20
View File
@@ -0,0 +1,20 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Image Driver
|--------------------------------------------------------------------------
|
| Intervention Image supports "GD Library" and "Imagick" to process images
| internally. You may choose one of them according to your PHP
| configuration. By default PHP's "GD Library" implementation is used.
|
| Supported: "gd", "imagick"
|
*/
'driver' => 'gd'
];
+129
View File
@@ -0,0 +1,129 @@
<?php
return [
'models' => [
/*
* When using the "HasPermissions" trait from this package, we need to know which
* Eloquent model should be used to retrieve your permissions. Of course, it
* is often just the "Permission" model but you may use whatever you like.
*
* The model you want to use as a Permission model needs to implement the
* `Spatie\Permission\Contracts\Permission` contract.
*/
'permission' => Spatie\Permission\Models\Permission::class,
/*
* When using the "HasRoles" trait from this package, we need to know which
* Eloquent model should be used to retrieve your roles. Of course, it
* is often just the "Role" model but you may use whatever you like.
*
* The model you want to use as a Role model needs to implement the
* `Spatie\Permission\Contracts\Role` contract.
*/
'role' => Spatie\Permission\Models\Role::class,
],
'table_names' => [
/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your roles. We have chosen a basic
* default value but you may easily change it to any table you like.
*/
'roles' => 'roles',
/*
* When using the "HasPermissions" trait from this package, we need to know which
* table should be used to retrieve your permissions. We have chosen a basic
* default value but you may easily change it to any table you like.
*/
'permissions' => 'permissions',
/*
* When using the "HasPermissions" trait from this package, we need to know which
* table should be used to retrieve your models permissions. We have chosen a
* basic default value but you may easily change it to any table you like.
*/
'model_has_permissions' => 'model_has_permissions',
/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your models roles. We have chosen a
* basic default value but you may easily change it to any table you like.
*/
'model_has_roles' => 'model_has_roles',
/*
* When using the "HasRoles" trait from this package, we need to know which
* table should be used to retrieve your roles permissions. We have chosen a
* basic default value but you may easily change it to any table you like.
*/
'role_has_permissions' => 'role_has_permissions',
],
'column_names' => [
/*
* Change this if you want to name the related model primary key other than
* `model_id`.
*
* For example, this would be nice if your primary keys are all UUIDs. In
* that case, name this `model_uuid`.
*/
'model_morph_key' => 'model_id',
],
/*
* When set to true, the required permission/role names are added to the exception
* message. This could be considered an information leak in some contexts, so
* the default setting is false here for optimum safety.
*/
'display_permission_in_exception' => false,
'cache' => [
/*
* By default all permissions are cached for 24 hours to speed up performance.
* When permissions or roles are updated the cache is flushed automatically.
*/
'expiration_time' => \DateInterval::createFromDateString('24 hours'),
/*
* The cache key used to store all permissions.
*/
'key' => 'spatie.permission.cache',
/*
* When checking for a permission against a model by passing a Permission
* instance to the check, this key determines what attribute on the
* Permissions model is used to cache against.
*
* Ideally, this should match your preferred way of checking permissions, eg:
* `$user->can('view-posts')` would be 'name'.
*/
'model_key' => 'name',
/*
* You may optionally indicate a specific cache driver to use for permission and
* role caching using any of the `store` drivers listed in the cache.php config
* file. Using 'default' here means to use the `default` set in cache.php.
*/
'store' => 'default',
],
];
+4
View File
@@ -43,5 +43,9 @@ return [
'tolerance' => env('STRIPE_WEBHOOK_TOLERANCE', 300),
],
],
'vue_client' => [
'id' => env('MIX_APP_CLIENT_ID'),
'secret' => env('MIX_APP_CLIENT_SECRET'),
],
];
-1
View File
@@ -1,2 +1 @@
*.sqlite
*.sqlite-journal
@@ -4,7 +4,7 @@ use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
class CreateMedicalCentersTable extends Migration
{
/**
* Run the migrations.
@@ -13,13 +13,9 @@ class CreateUsersTable extends Migration
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
Schema::create('medical_centers', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
@@ -31,6 +27,6 @@ class CreateUsersTable extends Migration
*/
public function down()
{
Schema::dropIfExists('users');
Schema::dropIfExists('medical_centers');
}
}
@@ -0,0 +1,43 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->nullable();
$table->string('country_code')->default('0098');;
$table->string('cell_number');
$table->enum('gender', ['Male','FeMale'])->default('Male');
$table->enum('verified', ['Verified','NotVerified'])->default('NotVerified');
$table->enum('status', ['Active','Suspended'])->default('Active');
$table->unsignedBigInteger('medical_center_id');
$table->foreign('medical_center_id')->references('id')->on('medical_centers');
$table->string('password');
$table->string('address')->nullable();
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
@@ -0,0 +1,36 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTestTypesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('test_types', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name')->unique();
$table->string('unique_code')->unique();
$table->string('bar_code');
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('test_types');
}
}
@@ -0,0 +1,44 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTestResultsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('test_results', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('info');
$table->string('cycle_number');
$table->date('date')->nullable();
$table->string('result');
$table->text('description');
$table->smallInteger('verified');
$table->string('device_id');
$table->string('device_label');
$table->integer('autoclave_id');
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
$table->unsignedBigInteger('test_type_id');
$table->foreign('test_type_id')->references('id')->on('test_types');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('test_results');
}
}
@@ -0,0 +1,39 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateInputsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('inputs', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('type');
$table->unsignedBigInteger('test_type_id');
$table->foreign('test_type_id')->references('id')->on('test_types');
$table->unsignedBigInteger('parent_id')->nullable();
$table->foreign('parent_id')->references('id')->on('inputs');
$table->string('size');
$table->string('value');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('inputs');
}
}
@@ -0,0 +1,38 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateInputValuesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('input_values', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('value');
$table->unsignedBigInteger('input_id');
$table->foreign('input_id')->references('id')->on('inputs');
$table->unsignedBigInteger('test_result_id');
$table->foreign('test_result_id')->references('id')->on('test_results');
$table->unsignedBigInteger('option_id');
$table->foreign('option_id')->references('id')->on('options');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('input_values');
}
}
@@ -0,0 +1,34 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateOptionsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('options', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('title');
$table->unsignedBigInteger('input_id');
$table->foreign('input_id')->references('id')->on('inputs');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('options');
}
}
@@ -0,0 +1,34 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateGalleriesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('galleries', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
$table->string('path');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('galleries');
}
}
@@ -0,0 +1,36 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUploadablesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('uploadables', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('uploadable_id');
$table->string('uploadable_type');
$table->unsignedBigInteger('gallery_id');
$table->foreign('gallery_id')->references('id')->on('galleries');
$table->string('image_role');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('uploadables');
}
}
@@ -0,0 +1,102 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePermissionTables extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$tableNames = config('permission.table_names');
$columnNames = config('permission.column_names');
Schema::create($tableNames['permissions'], function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('guard_name');
$table->timestamps();
});
Schema::create($tableNames['roles'], function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('guard_name');
$table->timestamps();
});
Schema::create($tableNames['model_has_permissions'], function (Blueprint $table) use ($tableNames, $columnNames) {
$table->unsignedInteger('permission_id');
$table->string('model_type');
$table->unsignedBigInteger($columnNames['model_morph_key']);
$table->index([$columnNames['model_morph_key'], 'model_type', ]);
$table->foreign('permission_id')
->references('id')
->on($tableNames['permissions'])
->onDelete('cascade');
$table->primary(['permission_id', $columnNames['model_morph_key'], 'model_type'],
'model_has_permissions_permission_model_type_primary');
});
Schema::create($tableNames['model_has_roles'], function (Blueprint $table) use ($tableNames, $columnNames) {
$table->unsignedInteger('role_id');
$table->string('model_type');
$table->unsignedBigInteger($columnNames['model_morph_key']);
$table->index([$columnNames['model_morph_key'], 'model_type', ]);
$table->foreign('role_id')
->references('id')
->on($tableNames['roles'])
->onDelete('cascade');
$table->primary(['role_id', $columnNames['model_morph_key'], 'model_type'],
'model_has_roles_role_model_type_primary');
});
Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames) {
$table->unsignedInteger('permission_id');
$table->unsignedInteger('role_id');
$table->foreign('permission_id')
->references('id')
->on($tableNames['permissions'])
->onDelete('cascade');
$table->foreign('role_id')
->references('id')
->on($tableNames['roles'])
->onDelete('cascade');
$table->primary(['permission_id', 'role_id']);
});
app('cache')
->store(config('permission.cache.store') != 'default' ? config('permission.cache.store') : null)
->forget(config('permission.cache.key'));
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
$tableNames = config('permission.table_names');
Schema::drop($tableNames['role_has_permissions']);
Schema::drop($tableNames['model_has_roles']);
Schema::drop($tableNames['model_has_permissions']);
Schema::drop($tableNames['roles']);
Schema::drop($tableNames['permissions']);
}
}
@@ -0,0 +1,37 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePackagesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('packages', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('unique_id');
$table->text('note')->nullable();
$table->enum('verified', ['Verified', 'NotVerified']);
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('packages');
}
}
@@ -0,0 +1,38 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateItemsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('items', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('size');
$table->string('unique_id');
$table->string('specific');
$table->text('note')->nullable();
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('items');
}
}
@@ -0,0 +1,35 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateItemPackageTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('item_package', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('item_id');
$table->foreign('item_id')->references('id')->on('items');
$table->unsignedBigInteger('package_id');
$table->foreign('package_id')->references('id')->on('packages');
// $table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('item_package');
}
}
@@ -0,0 +1,39 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateCyclesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('cycles', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->date('date');
$table->string('sterilizer_id');
$table->string('cycle_number');
$table->text('note')->nullable();
$table->enum('verified',['Verified', 'NotVerified']);
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('cycles');
}
}
@@ -0,0 +1,40 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTablePackes extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('packes', function (Blueprint $table) {
$table->bigIncrements('id');
$table->date('sterile_date')->nullable();
$table->date('expire_date')->nullable();
$table->string('sterilizer_id');
$table->string('cycle_number');
$table->string('lot_number');
$table->string('department');
$table->text('note')->nullable();
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('packes');
}
}
@@ -0,0 +1,35 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTablePackPackage extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('pack_package', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('pack_id');
$table->foreign('pack_id')->references('id')->on('packes');
$table->unsignedBigInteger('package_id');
$table->foreign('package_id')->references('id')->on('packages');
// $table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('pack_package');
}
}
@@ -0,0 +1,35 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTableCyclePack extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('cycle_pack', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('pack_id');
$table->foreign('pack_id')->references('id')->on('packes');
$table->unsignedBigInteger('cycle_id');
$table->foreign('cycle_id')->references('id')->on('cycles');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('cycle_pack');
}
}
@@ -1,32 +0,0 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePasswordResetsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('password_resets', function (Blueprint $table) {
$table->string('email')->index();
$table->string('token');
$table->timestamp('created_at')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('password_resets');
}
}
@@ -0,0 +1,37 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePackagesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('packages', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('unique_id');
$table->text('note')->nullable();
$table->enum('verified', ['Verified', 'NotVerified']);
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('packages');
}
}
@@ -0,0 +1,38 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateItemsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('items', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('size');
$table->string('unique_id');
$table->string('specific');
$table->text('note')->nullable();
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('items');
}
}
@@ -0,0 +1,35 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateItemPackageTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('item_package', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('item_id');
$table->foreign('item_id')->references('id')->on('items');
$table->unsignedBigInteger('package_id');
$table->foreign('package_id')->references('id')->on('packages');
// $table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('item_package');
}
}
@@ -0,0 +1,38 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateCyclesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('cycles', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->date('date');
$table->string('sterilizer_id');
$table->text('note')->nullable();
$table->enum('verified',['Verified', 'NotVerified']);
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('cycles');
}
}
@@ -0,0 +1,42 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTablePackes extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('packes', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('unique_id');
$table->date('sterile_date')->nullable();
$table->date('expire_date')->nullable();
$table->string('sterilizer_id');
$table->string('cycle_number');
$table->string('lot_number');
$table->string('department');
$table->text('note')->nullable();
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('packes');
}
}
@@ -0,0 +1,35 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTablePackPackage extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('pack_package', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('pack_id');
$table->foreign('pack_id')->references('id')->on('packes');
$table->unsignedBigInteger('package_id');
$table->foreign('package_id')->references('id')->on('packages');
// $table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('pack_package');
}
}
@@ -0,0 +1,35 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTableCyclePack extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('cycle_pack', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('pack_id');
$table->foreign('pack_id')->references('id')->on('packes');
$table->unsignedBigInteger('cycle_id');
$table->foreign('cycle_id')->references('id')->on('cycles');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('cycle_pack');
}
}

Some files were not shown because too many files have changed in this diff Show More