From ffae9b2645d6a79b5b17fad355e079b2a65ad1ca Mon Sep 17 00:00:00 2001 From: travis Date: Tue, 2 Jun 2020 21:27:03 -0600 Subject: [PATCH] Improved next/last session functionality --- app/Client.php | 20 ++++++++++------ public/js/app.js | 23 ++++++++++++++----- resources/js/components/Home.js | 2 +- .../js/components/clients/ClientOverview.js | 4 ++-- resources/js/components/goals/GoalNote.js | 7 ++++-- .../js/components/sessions/SessionGoal.js | 7 +++++- 6 files changed, 44 insertions(+), 19 deletions(-) diff --git a/app/Client.php b/app/Client.php index e199c81..029d701 100644 --- a/app/Client.php +++ b/app/Client.php @@ -62,16 +62,14 @@ public function nextSession() // Create a new DateTime object $date = new DateTime(); - if (new DateTime($this->lastSession()->session_date) >= $date) { + if ($this->lastSession() && new DateTime($this->lastSession()->session_date) >= $date) { return $this->lastSession(); - } - - if ($this->session_day && $this->start_date) { + } else if ($this->session_day && $this->start_date) { // Modify the date it contains $date->modify("next " . $this->session_day); - // Output - return $date->format('m-d-Y'); + $nextSession = new Session(['session_date' => $date->format('m-d-Y')]); + return $nextSession; } else { return "Session not available"; } @@ -100,7 +98,15 @@ public function getNextSessionAttribute() */ public function lastSession() { - return $this->sessions()->orderBy('session_date', 'DESC')->first(); + $date = new DateTime(); + + // dd($date->format('H:m:s')); + + // TODO: account for timezone + + dd($this->sessions()->where('session_date', '<=', $date->format('Y-m-d'))->where('session_time', '<=', $date->format('H:m:s'))->orderBy('session_date', 'DESC')->first()); + + return $this->sessions()->where('session_date', '<=', $date->format('Y-m-d'))->where('session_time', '<=', $date->format('H:m:s'))->orderBy('session_date', 'DESC')->first(); } /** diff --git a/public/js/app.js b/public/js/app.js index 80ced9a..3a88175 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -184858,7 +184858,7 @@ var Home = /*#__PURE__*/function (_Component) { return client.next_session !== 'Session not available' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(reactstrap__WEBPACK_IMPORTED_MODULE_3__["Card"], { key: index, className: "text-center mb-2" - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(reactstrap__WEBPACK_IMPORTED_MODULE_3__["CardBody"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(reactstrap__WEBPACK_IMPORTED_MODULE_3__["CardTitle"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h3", null, client.name)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(reactstrap__WEBPACK_IMPORTED_MODULE_3__["CardText"], null, days[new Date(client.next_session).getDay()], /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("br", null), Object(_helpers_functions__WEBPACK_IMPORTED_MODULE_4__["toLocalTime"])(client.session_time)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__["Link"], { + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(reactstrap__WEBPACK_IMPORTED_MODULE_3__["CardBody"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(reactstrap__WEBPACK_IMPORTED_MODULE_3__["CardTitle"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h3", null, client.name)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(reactstrap__WEBPACK_IMPORTED_MODULE_3__["CardText"], null, days[new Date(client.next_session).getDay()] || days[new Date(client.next_session.session_date).getDay()], /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("br", null), Object(_helpers_functions__WEBPACK_IMPORTED_MODULE_4__["toLocalTime"])(client.session_time)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__["Link"], { to: "/clients/".concat(client.id) }, "Manage Client"))); })))); @@ -185308,11 +185308,11 @@ var ClientOverview = function ClientOverview(props) { className: "d-flex flex-column flex-half px-1" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_utilities_AgendaItem__WEBPACK_IMPORTED_MODULE_2__["default"], { title: "Next Session", - date: props.client.next_session, + date: props.client.next_session.session_date, time: props.client.session_time, detail: "Therapy Session" // TODO: determine if session exists already , - href: "/clients/".concat(props.client.id, "/sessions/new") + href: "/clients/".concat(props.client.id, "/sessions/").concat(props.client.next_session.session_id || 'new') }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_utilities_AgendaItem__WEBPACK_IMPORTED_MODULE_2__["default"], { title: "Last Session", date: props.client.last_session.session_date, @@ -186178,6 +186178,9 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var reactstrap__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! reactstrap */ "./node_modules/reactstrap/es/index.js"); +/** + * @todo Functional checkboxes + */ var GoalNote = function GoalNote(props) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(reactstrap__WEBPACK_IMPORTED_MODULE_1__["Row"], { @@ -186200,13 +186203,15 @@ var GoalNote = function GoalNote(props) { }, "+")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(reactstrap__WEBPACK_IMPORTED_MODULE_1__["Row"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(reactstrap__WEBPACK_IMPORTED_MODULE_1__["Col"], { className: "form-check" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(reactstrap__WEBPACK_IMPORTED_MODULE_1__["Input"], { - type: "checkbox" + type: "checkbox", + onChange: props.updateStatus }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(reactstrap__WEBPACK_IMPORTED_MODULE_1__["Label"], { className: "form-check-label" }, "Did not meet objective")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(reactstrap__WEBPACK_IMPORTED_MODULE_1__["Col"], { className: "form-check" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(reactstrap__WEBPACK_IMPORTED_MODULE_1__["Input"], { - type: "checkbox" + type: "checkbox", + onChange: props.updateStatus }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(reactstrap__WEBPACK_IMPORTED_MODULE_1__["Label"], { className: "form-check-label" }, "Met objective")))); @@ -187793,6 +187798,11 @@ var SessionGoal = /*#__PURE__*/function (_Component) { goal: _objectSpread({}, this.state.goal, _defineProperty({}, name, value)) }); } + }, { + key: "updateGoalProgress", + value: function updateGoalProgress(e) { + console.log(e.target.checked); + } }, { key: "updateGoal", value: function updateGoal(e) { @@ -187843,7 +187853,8 @@ var SessionGoal = /*#__PURE__*/function (_Component) { }, this.state.takingNote ? 'Close Note' : 'Add Note'))), !this.props.master && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, this.state.takingNote && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_goals_GoalNote__WEBPACK_IMPORTED_MODULE_3__["default"], { save: this.saveNote, goal: this.state.goal, - adjustCount: this.adjustCount + adjustCount: this.adjustCount, + updateStatus: this.updateGoalProgress }))); } }]); diff --git a/resources/js/components/Home.js b/resources/js/components/Home.js index 930aa51..69e239a 100644 --- a/resources/js/components/Home.js +++ b/resources/js/components/Home.js @@ -45,7 +45,7 @@ class Home extends Component {

{client.name}

- {days[new Date(client.next_session).getDay()]} + {days[new Date(client.next_session).getDay()] || days[new Date(client.next_session.session_date).getDay()]}
{toLocalTime(client.session_time)}
diff --git a/resources/js/components/clients/ClientOverview.js b/resources/js/components/clients/ClientOverview.js index 477e024..db54a83 100644 --- a/resources/js/components/clients/ClientOverview.js +++ b/resources/js/components/clients/ClientOverview.js @@ -41,11 +41,11 @@ const ClientOverview = (props) => {
{ return ( @@ -21,11 +24,11 @@ const GoalNote = (props) => { - + - + diff --git a/resources/js/components/sessions/SessionGoal.js b/resources/js/components/sessions/SessionGoal.js index c05aaf7..15dd818 100644 --- a/resources/js/components/sessions/SessionGoal.js +++ b/resources/js/components/sessions/SessionGoal.js @@ -79,6 +79,10 @@ class SessionGoal extends Component { this.setState({goal: {...this.state.goal, [name]: value}}); } + updateGoalProgress(e) { + console.log(e.target.checked); + } + updateGoal(e) { axios.put(`/api/clients/${this.props.client_id}/goals/${this.state.goal.id}`, this.state.goal) .then((response) => { @@ -137,7 +141,8 @@ class SessionGoal extends Component { }