mirror of
https://gitlab.com/bmcgonag/get_my.git
synced 2026-03-27 00:08:49 +00:00
Adding functionality for Tasks.
This commit is contained in:
parent
947abfb76f
commit
56b27d6b05
13 changed files with 234 additions and 9 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -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/
|
||||
|
|
@ -9,7 +9,7 @@
|
|||
<select name="taskUser" id="taskUser" class="taskUser">
|
||||
<option value="" disabled selected>Assign to user...</option>
|
||||
{{#each taskUsers}}
|
||||
<option value="{{username}}">{{username}}</option>
|
||||
<option value="{{username}}_{{usersId}}">{{username}}</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
5
client/MyTasks/myTasks.html
Normal file
5
client/MyTasks/myTasks.html
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<template name="myTasks">
|
||||
{{> myTasksForm}}
|
||||
<hr>
|
||||
{{> myTasksTbl}}
|
||||
</template>
|
||||
35
client/MyTasks/myTasksForm.html
Normal file
35
client/MyTasks/myTasksForm.html
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
<template name="myTasksForm">
|
||||
<h4>MyTasks</h4>
|
||||
<div class="row">
|
||||
<div class="col s12 m6 l6 input-field">
|
||||
<input type="text" class="myTaskName" id="myTaskName" />
|
||||
<label for="myTaskName">Task Name</label>
|
||||
</div>
|
||||
<div class="col s12 m6 l6 input-field">
|
||||
<input type="text" class="datepicker" id="myTaskDate" />
|
||||
<label for="myTaskDate">Due Date</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col s6 m4 l4">
|
||||
<p>
|
||||
<label>
|
||||
<input type="checkbox" id="hideMyCompletedTasks" />
|
||||
<span>Hide Completed</span>
|
||||
</label>
|
||||
</p>
|
||||
</div>
|
||||
<div class="col s6 m4 l4">
|
||||
<p>
|
||||
<label>
|
||||
<input type="checkbox" id="onlyTodaysTasks" />
|
||||
<span>Today's Tasks</span>
|
||||
</label>
|
||||
</p>
|
||||
</div>
|
||||
<div class="col s12 m4 l4">
|
||||
<a class="waves-effect waves-light btn addNewTask green right">Add</a>
|
||||
</div>
|
||||
</div>
|
||||
{{> snackbar}}
|
||||
</template>
|
||||
58
client/MyTasks/myTasksFrom.js
Normal file
58
client/MyTasks/myTasksFrom.js
Normal file
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
19
client/MyTasks/myTasksTbl.html
Normal file
19
client/MyTasks/myTasksTbl.html
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<template name="myTasksTbl">
|
||||
<ul class="collapsible">
|
||||
{{#each tasks}}
|
||||
<li>
|
||||
<div class="collapsible-header {{#if $eq passedDate false}}yellow{{/if}}{{#if $eq isComplete true}}green lighten-2{{/if}}"><h5>{{taskName}}</h5></div>
|
||||
<div class="collapsible-body">
|
||||
<span>
|
||||
<ul class="collection">
|
||||
<li class="collection-item">{{taskDate}}<i class="material-icons clickable right markMyTaskComplete">check</i><i class="material-icons clickable right deleteMyTask">delete</i></li>
|
||||
<li class="collection-item">Complete? {{#if $eq isComplete true}}<i class="material-icons green">check</i>{{else}}<i class="material-icons red">close</i>{{/if}}</li>
|
||||
<li class="collection-item">Completed On? {{#if $eq isComplete true}}{{compOn}}{{else}}Not Complete{{/if}}</li>
|
||||
</ul>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{> deleteConfirmationModal}}
|
||||
</template>
|
||||
69
client/MyTasks/myTasksTbl.js
Normal file
69
client/MyTasks/myTasksTbl.js
Normal file
|
|
@ -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');
|
||||
}
|
||||
});
|
||||
|
|
@ -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(),
|
||||
|
|
|
|||
|
|
@ -115,4 +115,11 @@ FlowRouter.route('/taskHome', {
|
|||
action() {
|
||||
BlazeLayout.render('MainLayout', { main: 'taskHome' });
|
||||
}
|
||||
});
|
||||
|
||||
FlowRouter.route('/myTasks', {
|
||||
name: 'myTasks',
|
||||
action() {
|
||||
BlazeLayout.render('MainLayout', { main: 'myTasks' });
|
||||
}
|
||||
});
|
||||
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue