diff --git a/app/Http/Controllers/TestResultController.php b/app/Http/Controllers/TestResultController.php index 5bad7e72..c8d5801d 100644 --- a/app/Http/Controllers/TestResultController.php +++ b/app/Http/Controllers/TestResultController.php @@ -38,7 +38,6 @@ class TestResultController extends Controller public function store(StoreTestResultRequest $request) { - // dd($request->all()); try { $return_value = \DB::transaction(function () use ($request) { @@ -52,24 +51,39 @@ class TestResultController extends Controller $TestResultObj = TestResult::create($TestResult); $TestResultInfo = $request->all(); - $Inputs = Input::with('options','children','children.children')->where('test_type_id',$request->test_type_id)->get(); + $Inputs = Input::with('options','children','children.children')->whereNull('parent_id')->where('test_type_id',$request->test_type_id)->get(); ////////////////////////////////////////////////////////////////////////////////////--2 foreach ($Inputs as $Input) { if ($Input['type'] != 'Form') { $Value = $TestResultInfo[$Input->name]; - if ($Input['type'] == 'Checkbox') { - $Value = json_encode($Value); + + if ($Input['type'] == 'Checkbox' || $Input['type'] == 'Select' ) { + + foreach ($Value as $Option) { + // dd($Option); + $InputValueObj = InputValue::create(['test_result_id' => $TestResultObj->id, 'input_id' => $Input->id, 'option_id' => $Option]); + } } - $InputValueObj = InputValue::create(['test_result_id' => $TestResultObj->id , 'input_id' => $Input->id , 'value' => $Value]); + 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]; - if ($InputChild['type'] == 'Checkbox') { - $Value = json_encode($Value); + + if ($InputChild['type'] == 'Checkbox' || $InputChild['type'] == 'Select') { + // dd($InputChild['type']); + foreach ($Value as $Option) { + $InputValueObj = InputValue::create(['test_result_id' => $TestResultObj->id, 'input_id' => $InputChild->id, 'option_id' => $Option]); + } } - $InputValueObj = InputValue::create(['test_result_id' => $TestResultObj->id , 'input_id' => $InputChild->id , 'value' => $Value]); + else { + $InputValueObj = InputValue::create(['test_result_id' => $TestResultObj->id, 'input_id' => $InputChild->id, 'value' => $Value]); + } + } //------------------------------------------------------- // $this->CreateChildFormValue2($Input,$TestResultObj,$TestResultInfo); @@ -99,6 +113,13 @@ class TestResultController extends Controller } } + // if ($request->hasFile('image')) { + // $image = $request->file('image'); + // $input['imagename'] = time().$image->getClientOriginalExtension(); + // $path = '/Uploads'.'/'.$TestResultObj->id; + // Storage::disk('public')->makeDirectory($TestResultObj->id); + // $image->move($path, $input['imagename']); + // } }); @@ -109,9 +130,19 @@ class TestResultController extends Controller } - public function show($id) + public function show(TestResult $TestResult) { - // + foreach ($TestResult->input_values as $key => $value) { + $input = $value->input; + if ($input->type == 'Checkbox' || $input->type == 'Select') { + $input_options = InputValue::where('test_result_id', $TestResult->id)->where('input_id', $input->id)->get()->pluck('option_id')->toArray(); + $TestResult[$input->name] = $input_options; + } + else { + $TestResult[$input->name] = $value->value; + } + } + return \MessageResponse::data($TestResult); } //Todo:: pass Inputs @@ -119,7 +150,13 @@ class TestResultController extends Controller { foreach ($TestResult->input_values as $key => $value) { $input = $value->input; - $TestResult[$input->name] = $value->value; + if ($input->type == 'Checkbox' || $input->type == 'Select') { + $input_options = InputValue::where('test_result_id', $TestResult->id)->where('input_id', $input->id)->get()->pluck('option_id')->toArray(); + $TestResult[$input->name] = $input_options; + } + else { + $TestResult[$input->name] = $value->value; + } } return \MessageResponse::data($TestResult); } @@ -136,24 +173,32 @@ class TestResultController extends Controller $TestResult->update($TestResultData); $TestResultInfo = $request->all(); - $Inputs = Input::with('options','children','children.children')->where('test_type_id',$request->test_type_id)->get(); + $Inputs = Input::with('options','children','children.children')->whereNull('parent_id')->where('test_type_id',$request->test_type_id)->get(); foreach ($Inputs as $Input) { if ($Input['type'] != 'Form') { $Value = $TestResultInfo[$Input->name]; - if ($Input['type'] == 'Checkbox') { - $Value = json_encode($Value); + + if ($Input['type'] == 'Checkbox' || $Input['type'] == 'Select' ) { + foreach ($Value as $Option) { + // $InputValueObj = InputValue::create(['test_result_id' => $TestResultObj->id, 'input_id' => $Input->id, 'option_id' => $Option]); + } + } + else { + $InputValueObj = InputValue::where('test_result_id',$TestResult->id)->where('input_id', $Input['id'])->update(['value' => $Value]); } - $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]; - if ($InputChild['type'] == 'Checkbox') { + if ($InputChild['type'] == 'Checkbox' || $InputChild['type'] == 'Select') { $Value = json_encode($Value); } - $InputValueObj = InputValue::where('test_result_id',$TestResult->id)->where('input_id', $Input['id'])->update(['value' => $Value]); + else { + $InputValueObj = InputValue::where('test_result_id',$TestResult->id)->where('input_id', $InputChild['id'])->update(['value' => $Value]); + } + } } } diff --git a/app/Http/Controllers/TestTypeController.php b/app/Http/Controllers/TestTypeController.php index 1a5323c5..68b8bd9a 100644 --- a/app/Http/Controllers/TestTypeController.php +++ b/app/Http/Controllers/TestTypeController.php @@ -48,7 +48,6 @@ class TestTypeController extends Controller } //---------------------------------------------Option return $InputObj; - } public function CreateChildForm($Input,$TestType,$InputObj) @@ -364,9 +363,10 @@ class TestTypeController extends Controller public function destroy(TestType $TestType) { - // if (auth('api')->user()->can('delete', $TestType)) { - // return \MessageResponse::error(trans('messages.failed')); - // } + // dd($TestType); + if (auth('api')->user()->can('delete', $TestType)) { + return \MessageResponse::error(trans('messages.failed')); + } // dd($TestType); $TestType->delete(); return \MessageResponse::success(trans('messages.success')); diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 9d89aebc..e884226f 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -1,111 +1,111 @@ -paginate(10); - return \MessageResponse::data($Users); - } - - public function store(StoreUserRequest $request) - { - $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 = 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) - { - $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()->can('delete', $User)) { - return \MessageResponse::error(trans('messages.failed')); - } - $User->delete(); - return \MessageResponse::success(trans('messages.success')); - } - - - - public function getByMedicalCenter(MedicalCenter $MedicalCenter) - { - $MedicalCenter = $MedicalCenter->load(['users' => function ($query) { - return $query->select(['id', 'medical_center_id', 'name', 'cell_number', 'status']); - }, 'users.roles']); - return \MessageResponse::data($MedicalCenter); - } - - - - public function changeStatus(User $User) - { - if ($User->status == 'Active') { - $User->status = 'Suspended'; - } else { - $User->status = 'Active'; - } - $User->save(); - return \MessageResponse::data($User); - } - - - - public function changeRole(User $User, Request $request) - { - $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() - { - return \MessageResponse::data([ 'user' => auth('api')->user(), 'roles' => auth('api')->user()->getRoleNames() ]); - } - -} +paginate(10); + return \MessageResponse::data($Users); + } + + public function store(StoreUserRequest $request) + { + $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 = 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) + { + $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()->can('delete', $User)) { + return \MessageResponse::error(trans('messages.failed')); + } + $User->delete(); + return \MessageResponse::success(trans('messages.success')); + } + + + + public function getByMedicalCenter(MedicalCenter $MedicalCenter) + { + $MedicalCenter = $MedicalCenter->load(['users' => function ($query) { + return $query->select(['id', 'medical_center_id', 'name', 'cell_number', 'status']); + }, 'users.roles']); + return \MessageResponse::data($MedicalCenter); + } + + + + public function changeStatus(User $User) + { + if ($User->status == 'Active') { + $User->status = 'Suspended'; + } else { + $User->status = 'Active'; + } + $User->save(); + return \MessageResponse::data($User); + } + + + + public function changeRole(User $User, Request $request) + { + $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() + { + return \MessageResponse::data([ 'user' => auth('api')->user(), 'roles' => auth('api')->user()->getRoleNames() ]); + } + +} diff --git a/app/InputValue.php b/app/InputValue.php index f6d6200a..50265bd5 100644 --- a/app/InputValue.php +++ b/app/InputValue.php @@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Model; class InputValue extends Model { - public $fillable = ['value','test_result_id','input_id']; + public $fillable = ['value','test_result_id','input_id','option_id']; public function input() { return $this->belongsTo('App\Input'); @@ -15,4 +15,8 @@ class InputValue extends Model { return $this->belongsTo('App\TestResult'); } + public function option() + { + return $this->belongsTo('App\Option'); + } } diff --git a/app/Option.php b/app/Option.php index 7943ddfb..1f387c86 100644 --- a/app/Option.php +++ b/app/Option.php @@ -11,4 +11,9 @@ class Option extends Model { return $this->belongsTo('App\Input'); } + public function input_value() + { + return $this->hasOne('App\InputValue'); + } + } diff --git a/app/Policies/TestResultPolicy.php b/app/Policies/TestResultPolicy.php index 46457b8d..fa1730e4 100644 --- a/app/Policies/TestResultPolicy.php +++ b/app/Policies/TestResultPolicy.php @@ -26,4 +26,9 @@ class TestResultPolicy // if($User->hasRole('Admin')) return true; } + public function verifyTestResult(User $User, TestResult $TestResult) + { + if($User->hasRole('Supervisor')) + return true; + } } diff --git a/app/Policies/TestTypePolicy.php b/app/Policies/TestTypePolicy.php index a27768e8..b105618d 100644 --- a/app/Policies/TestTypePolicy.php +++ b/app/Policies/TestTypePolicy.php @@ -11,7 +11,7 @@ class TestTypePolicy public function delete(User $User, TestType $TestType) { - // if($User->hasRole('Admin')) + if($User->hasRole('Admin')) return true; } diff --git a/app/TestType.php b/app/TestType.php index 5bd130b1..26b622be 100644 --- a/app/TestType.php +++ b/app/TestType.php @@ -7,6 +7,8 @@ use Illuminate\Database\Eloquent\Model; class TestType extends Model { public $fillable = ['name','unique_code','user_id']; + protected $softDelete = true; + public function user() { return $this->belongsTo('App\User'); diff --git a/public/7.js b/public/7.js index 8714ac2e..e7b73499 100644 --- a/public/7.js +++ b/public/7.js @@ -9,7 +9,15 @@ "use strict"; __webpack_require__.r(__webpack_exports__); -/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); +/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); +/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js"); + + +function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } + +function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } + function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } @@ -90,18 +98,49 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope } }; }, - computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_0__["mapGetters"])('auth', ['authenticating', 'authenticationError', 'authenticationErrorCode'])), - methods: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_0__["mapActions"])('auth', ['login']), { - handleSubmit: function handleSubmit() { - // Perform a simple validation that cell_number and password have been typed in - if (this.$refs.form.validate()) { - this.login({ - cell_number: this.cell_number, - password: this.password - }); - this.password = ""; + computed: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_1__["mapGetters"])('auth', ['authenticating', 'authenticationError', 'authenticationErrorCode'])), + methods: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_1__["mapActions"])('auth', ['login']), { + handleSubmit: function () { + var _handleSubmit = _asyncToGenerator( + /*#__PURE__*/ + _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(function _callee() { + var response; + return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + if (!this.$refs.form.validate()) { + _context.next = 5; + break; + } + + _context.next = 3; + return this.login({ + cell_number: this.cell_number, + password: this.password + }); + + case 3: + response = _context.sent; + + if (!response.status || response.status !== 200) { + this.password = ""; + } + + case 5: + case "end": + return _context.stop(); + } + } + }, _callee, this); + })); + + function handleSubmit() { + return _handleSubmit.apply(this, arguments); } - } + + return handleSubmit; + }() }) }); diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 97647277..624fee0b 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -1,7 +1,3 @@ { -<<<<<<< HEAD - "/vue/js/app.js": "/vue/js/app.js?id=834d97fecc500a7e0804" -======= - "/vue/js/app.js": "/vue/js/app.js?id=24a7b3a8d1891f421dee" ->>>>>>> d147ecaacb2020c2dedb3090eb9bcb56de3f6c95 + "/vue/js/app.js": "/vue/js/app.js?id=753975375c400e12c93b" } diff --git a/public/vue/js/app.js b/public/vue/js/app.js index 19419e3b..c0278172 100644 --- a/public/vue/js/app.js +++ b/public/vue/js/app.js @@ -3366,11 +3366,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope }; }, methods: _objectSpread({}, Object(vuex__WEBPACK_IMPORTED_MODULE_0__["mapActions"])('auth', ['changePassword']), { -<<<<<<< HEAD - submitVerifyCode: function submitVerifyCode() { -======= submitChangePassword: function submitChangePassword() { ->>>>>>> d147ecaacb2020c2dedb3090eb9bcb56de3f6c95 if (this.form.code != '') { this.changePassword({ form: this.form @@ -62931,6 +62927,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _global_api_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../global/api.service */ "./resources/js/vue/services/global/api.service.js"); /* harmony import */ var _storage_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./storage.service */ "./resources/js/vue/services/auth/storage.service.js"); /* harmony import */ var _config_urls__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/config/urls */ "./resources/js/vue/config/urls.js"); +/* harmony import */ var _global_toast_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../global/toast.service */ "./resources/js/vue/services/global/toast.service.js"); function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } @@ -62963,6 +62960,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g + var AuthenticationError = /*#__PURE__*/ function (_Error) { @@ -63024,14 +63022,15 @@ var UserService = { // but don't worry about this just yet - I'll come back to it later _global_api_service__WEBPACK_IMPORTED_MODULE_1__["ApiService"].mount401Interceptor(); - return _context.abrupt("return", response.data.access_token); + return _context.abrupt("return", response); case 12: _context.prev = 12; _context.t0 = _context["catch"](1); + _global_toast_service__WEBPACK_IMPORTED_MODULE_4__["default"].error('Username Or Password Is Incorrect', 'Error'); throw new AuthenticationError(_context.t0.response.status, _context.t0.response.data.detail); - case 15: + case 16: case "end": return _context.stop(); } @@ -63703,7 +63702,7 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar var _login = _asyncToGenerator( /*#__PURE__*/ _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(function _callee(_ref, _ref2) { - var commit, dispatch, cell_number, password, token; + var commit, dispatch, cell_number, password, response; return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { @@ -63716,14 +63715,14 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar return _services__WEBPACK_IMPORTED_MODULE_1__["UserService"].login(cell_number, password); case 6: - token = _context.sent; - commit('loginSuccess', token); // Redirect the user to the page he first tried to visit or to the home view + response = _context.sent; + commit('loginSuccess', response.data.access_token); // Redirect the user to the page he first tried to visit or to the home view _router__WEBPACK_IMPORTED_MODULE_2__["default"].push(_router__WEBPACK_IMPORTED_MODULE_2__["default"].history.current.query.redirect || '/'); dispatch('info', {}, { root: true }); - return _context.abrupt("return", true); + return _context.abrupt("return", response); case 13: _context.prev = 13; diff --git a/resources/js/vue/services/auth/user.service.js b/resources/js/vue/services/auth/user.service.js index d7c6ff88..3c4e51b8 100644 --- a/resources/js/vue/services/auth/user.service.js +++ b/resources/js/vue/services/auth/user.service.js @@ -1,6 +1,7 @@ import { ApiService } from "../global/api.service"; import { TokenService } from "./storage.service"; import { urls } from "@/config/urls"; +import toast from "../global/toast.service"; class AuthenticationError extends Error { constructor(errorCode, message) { @@ -42,8 +43,9 @@ const UserService = { // NOTE: We haven't covered this yet in our ApiService // but don't worry about this just yet - I'll come back to it later ApiService.mount401Interceptor(); - return response.data.access_token; + return response; } catch (error) { + toast.error('Username Or Password Is Incorrect', 'Error'); throw new AuthenticationError( error.response.status, error.response.data.detail diff --git a/resources/js/vue/store/modules/auth/actions.js b/resources/js/vue/store/modules/auth/actions.js index ede3e81d..32af7512 100644 --- a/resources/js/vue/store/modules/auth/actions.js +++ b/resources/js/vue/store/modules/auth/actions.js @@ -6,14 +6,14 @@ export default { async login({ commit, dispatch }, {cell_number, password}) { commit('loginRequest'); try { - const token = await UserService.login(cell_number, password); - commit('loginSuccess', token); + const response = await UserService.login(cell_number, password); + commit('loginSuccess', response.data.access_token); // Redirect the user to the page he first tried to visit or to the home view router.push(router.history.current.query.redirect || '/'); dispatch('info', {}, {root : true}); - return true + return response; } catch (e) { if (e instanceof AuthenticationError) { commit('loginError', {errorCode: e.errorCode, errorMessage: e.message}) diff --git a/resources/js/vue/views/Auth/Login.vue b/resources/js/vue/views/Auth/Login.vue index 6ec19083..60ca0ba1 100644 --- a/resources/js/vue/views/Auth/Login.vue +++ b/resources/js/vue/views/Auth/Login.vue @@ -80,11 +80,14 @@ export default { ...mapActions('auth', [ 'login' ]), - handleSubmit() { + async handleSubmit() { // Perform a simple validation that cell_number and password have been typed in if (this.$refs.form.validate()) { - this.login({cell_number: this.cell_number, password: this.password}); - this.password = ""; + const response = await this.login({cell_number: this.cell_number, password: this.password}); + + if (!response.status || response.status !== 200) { + this.password = ""; + } } } }