From 56b27d6b05185bd5a302da8e05a2b7f7763ef066 Mon Sep 17 00:00:00 2001 From: Brian McGonagill Date: Mon, 5 Sep 2022 15:30:20 -0500 Subject: [PATCH] Adding functionality for Tasks. --- .gitignore | 2 + client/AdminMgmt/Tasks/taskForm.html | 2 +- client/AdminMgmt/Tasks/taskForm.js | 14 ++++-- client/AdminMgmt/Tasks/taskTbl.js | 4 +- client/MenuItems/menuItemsForm.js | 2 +- client/MyTasks/myTasks.html | 5 ++ client/MyTasks/myTasksForm.html | 35 ++++++++++++++ client/MyTasks/myTasksFrom.js | 58 +++++++++++++++++++++++ client/MyTasks/myTasksTbl.html | 19 ++++++++ client/MyTasks/myTasksTbl.js | 69 ++++++++++++++++++++++++++++ imports/api/tasks.js | 18 +++++++- lib/routes.js | 7 +++ server/publish.js | 8 ++++ 13 files changed, 234 insertions(+), 9 deletions(-) create mode 100644 client/MyTasks/myTasks.html create mode 100644 client/MyTasks/myTasksForm.html create mode 100644 client/MyTasks/myTasksFrom.js create mode 100644 client/MyTasks/myTasksTbl.html create mode 100644 client/MyTasks/myTasksTbl.js diff --git a/.gitignore b/.gitignore index 65bf17c..e3146f4 100644 --- a/.gitignore +++ b/.gitignore @@ -109,3 +109,5 @@ node_modules/meteor-node-stubs/node_modules/which-boxed-primitive/.meteor-portab node_modules/meteor-node-stubs/node_modules/which-typed-array/.meteor-portable-2.json node_modules/meteor-node-stubs/node_modules/xtend/.meteor-portable-2.json node_modules/regenerator-runtime/.meteor-portable-2.json +node_modules/moment/ +node_modules/meteor-node-stubs/ \ No newline at end of file diff --git a/client/AdminMgmt/Tasks/taskForm.html b/client/AdminMgmt/Tasks/taskForm.html index c01f73f..d413fad 100644 --- a/client/AdminMgmt/Tasks/taskForm.html +++ b/client/AdminMgmt/Tasks/taskForm.html @@ -9,7 +9,7 @@ diff --git a/client/AdminMgmt/Tasks/taskForm.js b/client/AdminMgmt/Tasks/taskForm.js index e4f4381..1e220de 100644 --- a/client/AdminMgmt/Tasks/taskForm.js +++ b/client/AdminMgmt/Tasks/taskForm.js @@ -24,6 +24,9 @@ Template.taskForm.helpers({ username: function() { return this.profile.fullname; }, + usersId: function() { + return this._id; + }, }); Template.taskForm.events({ @@ -35,6 +38,8 @@ Template.taskForm.events({ let taskUserErr = false; let taskNameErr = false; let taskDateErr = false; + let userInfo; + let actDate; console.log("taskUser value: " + taskUser); @@ -44,15 +49,18 @@ Template.taskForm.events({ if (taskDate == null || taskDate == "") { taskDateErr = true; + } else { + actDate = new Date(taskDate); } - if (taskUser == null || taskUser == "") { - console.log("triggered taskUser error."); + if (taskUser == null || taskUser == "") {; taskUserErr = true; + } else { + userInfo = taskUser.split('_'); } if (taskUserErr == false && taskDateErr == false && taskNameErr == false) { - Meteor.call("add.task", taskName, taskUser, taskDate, function(err, result) { + Meteor.call("add.task", taskName, userInfo[0], userInfo[1], taskDate, actDate, function(err, result) { if (err) { console.log(" ERROR adding the new task: " + err); } else { diff --git a/client/AdminMgmt/Tasks/taskTbl.js b/client/AdminMgmt/Tasks/taskTbl.js index 75fb526..ecb79f2 100644 --- a/client/AdminMgmt/Tasks/taskTbl.js +++ b/client/AdminMgmt/Tasks/taskTbl.js @@ -13,9 +13,9 @@ Template.taskTbl.helpers({ tasks: function() { let hideComp = Session.get("hideCompletedTasks"); if (hideComp == false) { - return TaskItems.find({}); + return TaskItems.find({}, { sort: { actualDate: 1 }}); } else { - return TaskItems.find({ isComplete: false }); + return TaskItems.find({ isComplete: false }, { sort: { actualDate: 1 }}); } }, completeDate: function() { diff --git a/client/MenuItems/menuItemsForm.js b/client/MenuItems/menuItemsForm.js index e55222e..ac204d2 100644 --- a/client/MenuItems/menuItemsForm.js +++ b/client/MenuItems/menuItemsForm.js @@ -52,7 +52,7 @@ Template.menuItemsForm.events({ let menuInfoLen = menuInfo.length; for (i = 0; i < menuInfoLen; i++) { let menuItemId = menuInfo[i]._id; - let momentAddDay = moment(menuInfo[i].serveDate).add(1, 'day').format("MMM D, YYYY"); + let momentAddDay = moment(menuInfo[i].serveDate).add(1, 'day').format("MMM DD, YYYY"); // console.log(momentAddDay); Meteor.call('shiftDate', menuItemId, momentAddDay, function(err,result) { if (err) { diff --git a/client/MyTasks/myTasks.html b/client/MyTasks/myTasks.html new file mode 100644 index 0000000..dce7e6a --- /dev/null +++ b/client/MyTasks/myTasks.html @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/client/MyTasks/myTasksForm.html b/client/MyTasks/myTasksForm.html new file mode 100644 index 0000000..3ac47ab --- /dev/null +++ b/client/MyTasks/myTasksForm.html @@ -0,0 +1,35 @@ + \ No newline at end of file diff --git a/client/MyTasks/myTasksFrom.js b/client/MyTasks/myTasksFrom.js new file mode 100644 index 0000000..664d997 --- /dev/null +++ b/client/MyTasks/myTasksFrom.js @@ -0,0 +1,58 @@ +import { TaskItems } from '../../imports/api/tasks.js'; + +Template.myTasksForm.onCreated(function() { + +}); + +Template.myTasksForm.onRendered(function() { + $('.datepicker').datepicker(); + Session.set("hideComplete", false); + Session.set("onlyToday", false); +}); + +Template.myTasksForm.helpers({ + +}); + +Template.myTasksForm.events({ + 'click .addNewTask' (event) { + event.preventDefault(); + let taskName = $("#myTaskName").val(); + let taskDate = $("#myTaskDate").val(); + let actDate = new Date(taskDate); + + if (taskName == null || taskName == "" || taskDate == "" || taskDate == null) { + taskEntryErr = true; + showSnackbar("Task Name and Date are Required!", "red"); + return; + } else { + Meteor.call("add.task", taskName, "self", "selfId", taskDate, actDate, function(err, result) { + if (err) { + console.log(" ERROR adding task for self: " + err); + showSnackbar("ERROR adding task for self!", "red"); + } else { + console.log(" SUCCESS adding task for self."); + $("#myTaskName").val(""); + $("#myTaskDate").val(""); + } + }); + } + }, + 'click #hideMyCompletedTasks' (event) { + let hide = $("#hideMyCompletedTasks").prop('checked'); + if (hide == true) { + Session.set("hideComplete", true); + } else { + Session.set("hideComplete", false); + } + }, + 'click #onlyTodaysTasks' (event) { + let onlyToday = $("#onlyTodaysTasks").prop('checked'); + if (onlyToday == true) { + Session.set("onlyToday", true); + } else { + Session.set("onlyToday", false); + } + + } +}); \ No newline at end of file diff --git a/client/MyTasks/myTasksTbl.html b/client/MyTasks/myTasksTbl.html new file mode 100644 index 0000000..7d29b0e --- /dev/null +++ b/client/MyTasks/myTasksTbl.html @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/client/MyTasks/myTasksTbl.js b/client/MyTasks/myTasksTbl.js new file mode 100644 index 0000000..82a0163 --- /dev/null +++ b/client/MyTasks/myTasksTbl.js @@ -0,0 +1,69 @@ +import { TaskItems } from '../../imports/api/tasks.js'; +import moment from 'moment'; + +Template.myTasksTbl.onCreated(function() { + this.subscribe("myTasks"); +}); + +Template.myTasksTbl.onRendered(function() { + $('.collapsible').collapsible(); + Session.set("hideComplete", false); + Session.set("onlyToday", false); +}); + +Template.myTasksTbl.helpers({ + tasks: function() { + let onlyToday = Session.get("onlyToday"); + let hide = Session.get("hideComplete"); + let todayIs = moment(new Date()).format("MMM DD, YYYY"); + if (hide == true && onlyToday == false) { + return TaskItems.find({ isComplete: false }, { sort: { actualDate: 1 }}); + } else if (hide == true && onlyToday == true) { + return TaskItems.find({ isComplete: false, taskDate: todayIs }, { sort: { actualDate: 1 }}); + } else if (hide == false && onlyToday == true) { + return TaskItems.find({ taskDate: todayIs }, { sort: { actualDate: 1 }}); + } else { + return TaskItems.find({}, { sort: { actualDate: 1 }}); + } + }, + passedDate: function() { + let taskDate = new Date(this.taskDate); + let now = new Date() + let diff = now < taskDate; + let comp = this.isComplete; + if (diff == false && comp == false) { + return false; + } else { + return true; + } + }, + compOn: function() { + if (this.isComplete == true) { + return moment(this.completedOn).format("MMM DD, YYYY"); + } + } +}); + +Template.myTasksTbl.events({ + 'click .markMyTaskComplete' (event) { + event.preventDefault(); + let taskId = this._id; + Meteor.call("markTask.complete", taskId, function(err, result) { + if (err) { + console.log(" ERROR marking task completeL " + err); + showSnackbar("ERROR Marking Task Complete!", "red"); + } else { + showSnackbar("Successfully Marked Task Complete!", "green"); + + } + }); + }, + 'click .deleteMyTask' (event) { + event.preventDefault(); + Session.set("deleteId", this._id); + Session.set("method", "delete.task"); + Session.set("item", this.taskName); + Session.set("view", "My Tasks"); + $('#modalDelete').modal('open'); + } +}); \ No newline at end of file diff --git a/imports/api/tasks.js b/imports/api/tasks.js index 0faabb0..d8eca2a 100644 --- a/imports/api/tasks.js +++ b/imports/api/tasks.js @@ -12,19 +12,33 @@ TaskItems.allow({ }); Meteor.methods({ - 'add.task' (taskName, assignedTo, taskDate) { + 'add.task' (taskName, assignedTo, assignedToId, taskDate, actDate) { check(taskName, String); check(assignedTo, String); check(taskDate, String); + check(assignedToId, String); + check(actDate, Date); if (!this.userId) { throw new Meteor.Error('You are not allowed to add tasks. Make sure you are logged in with valid user credentials.'); } + let username; + + if (assignedTo == "self") { + let userInfo = Meteor.users.findOne({ _id: this.userId }); + username = userInfo.profile.fullname; + assignedToId = this.userId; + } else { + username = assignedTo; + } + return TaskItems.insert({ taskName: taskName, taskDate: taskDate, - assignedTo: assignedTo, + actualDate: actDate, + assignedTo: username, + assignedToId: assignedToId, isComplete: false, completedOn: null, assignedOn: new Date(), diff --git a/lib/routes.js b/lib/routes.js index 6df339f..b633974 100644 --- a/lib/routes.js +++ b/lib/routes.js @@ -115,4 +115,11 @@ FlowRouter.route('/taskHome', { action() { BlazeLayout.render('MainLayout', { main: 'taskHome' }); } +}); + +FlowRouter.route('/myTasks', { + name: 'myTasks', + action() { + BlazeLayout.render('MainLayout', { main: 'myTasks' }); + } }); \ No newline at end of file diff --git a/server/publish.js b/server/publish.js index 6857432..79bc9d6 100644 --- a/server/publish.js +++ b/server/publish.js @@ -104,4 +104,12 @@ Meteor.publish("allTasks", function() { } catch (error) { console.log(" ERROR pulling the task items: " + error); } +}); + +Meteor.publish("myTasks", function() { + try { + return TaskItems.find({ assignedToId: this.userId }); + } catch (error) { + console.log(" ERROR pulling the task items: " + error); + } }); \ No newline at end of file