mirror of
https://gitlab.com/bmcgonag/get_my.git
synced 2026-03-27 16:28:50 +00:00
Compare commits
No commits in common. "main" and "1.0.5-beta" have entirely different histories.
main
...
1.0.5-beta
74 changed files with 1768 additions and 3478 deletions
|
|
@ -4,27 +4,29 @@
|
||||||
# 'meteor add' and 'meteor remove' will edit this file for you,
|
# 'meteor add' and 'meteor remove' will edit this file for you,
|
||||||
# but you can also edit it by hand.
|
# but you can also edit it by hand.
|
||||||
|
|
||||||
meteor-base@1.5.2 # Packages every Meteor app needs to have
|
meteor-base@1.5.1 # Packages every Meteor app needs to have
|
||||||
mobile-experience@1.1.2 # Packages for a great mobile UX
|
mobile-experience@1.1.1 # Packages for a great mobile UX
|
||||||
mongo@2.1.4 # The database Meteor supports right now
|
mongo@1.16.10 # The database Meteor supports right now
|
||||||
blaze-html-templates # Compile .html files into Meteor Blaze views
|
blaze-html-templates # Compile .html files into Meteor Blaze views
|
||||||
jquery # Wrapper package for npm-installed jquery
|
jquery # Wrapper package for npm-installed jquery
|
||||||
reactive-var@1.0.13 # Reactive variable for tracker
|
reactive-var@1.0.12 # Reactive variable for tracker
|
||||||
tracker@1.3.4 # Meteor's client-side reactive programming library
|
tracker@1.3.3 # Meteor's client-side reactive programming library
|
||||||
|
|
||||||
standard-minifier-css@1.9.3 # CSS minifier run for production mode
|
standard-minifier-css@1.9.2 # CSS minifier run for production mode
|
||||||
standard-minifier-js@3.1.1 # JS minifier run for production mode
|
standard-minifier-js@2.8.1 # JS minifier run for production mode
|
||||||
es5-shim@4.8.1 # ECMAScript 5 compatibility for older browsers
|
es5-shim@4.8.0 # ECMAScript 5 compatibility for older browsers
|
||||||
ecmascript@0.16.13 # Enable ECMAScript2015+ syntax in app code
|
ecmascript@0.16.8 # Enable ECMAScript2015+ syntax in app code
|
||||||
typescript@5.6.6 # Enable TypeScript syntax in .ts and .tsx modules
|
typescript@4.9.5 # Enable TypeScript syntax in .ts and .tsx modules
|
||||||
shell-server@0.6.2 # Server-side component of the `meteor shell` command
|
shell-server@0.5.0 # Server-side component of the `meteor shell` command
|
||||||
|
|
||||||
hot-module-replacement@0.5.4 # Update code in development without reloading the page
|
hot-module-replacement@0.5.3 # Update code in development without reloading the page
|
||||||
blaze-hot # Update files using Blaze's API with HMR
|
blaze-hot # Update files using Blaze's API with HMR
|
||||||
|
|
||||||
roles@1.0.1
|
alanning:roles@2.2.0
|
||||||
session@1.2.2
|
email@2.2.6
|
||||||
email@3.1.2
|
session@1.2.1
|
||||||
arianjahiri:meteor-handlebars-helpers
|
|
||||||
ostrio:flow-router-extra
|
raix:handlebar-helpers
|
||||||
accounts-password@3.2.1
|
kadira:flow-router
|
||||||
|
kadira:blaze-layout
|
||||||
|
accounts-password@2.4.0
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
METEOR@3.3.2
|
METEOR@2.16
|
||||||
|
|
|
||||||
188
.meteor/versions
188
.meteor/versions
|
|
@ -1,94 +1,94 @@
|
||||||
accounts-base@3.1.2
|
accounts-base@2.2.11
|
||||||
accounts-password@3.2.1
|
accounts-password@2.4.0
|
||||||
allow-deny@2.1.0
|
alanning:roles@2.2.0
|
||||||
arianjahiri:meteor-handlebars-helpers@0.0.1
|
allow-deny@1.1.1
|
||||||
autoupdate@2.0.1
|
autoupdate@1.8.0
|
||||||
babel-compiler@7.12.2
|
babel-compiler@7.10.5
|
||||||
babel-runtime@1.5.2
|
babel-runtime@1.5.1
|
||||||
base64@1.0.13
|
base64@1.0.12
|
||||||
binary-heap@1.0.12
|
binary-heap@1.0.11
|
||||||
blaze@3.0.2
|
blaze@2.9.0
|
||||||
blaze-hot@2.0.0
|
blaze-hot@1.1.2
|
||||||
blaze-html-templates@3.0.0
|
blaze-html-templates@1.2.1
|
||||||
blaze-tools@2.0.0
|
blaze-tools@1.1.4
|
||||||
boilerplate-generator@2.0.2
|
boilerplate-generator@1.7.2
|
||||||
caching-compiler@2.0.1
|
caching-compiler@1.2.2
|
||||||
caching-html-compiler@2.0.0
|
caching-html-compiler@1.2.2
|
||||||
callback-hook@1.6.1
|
callback-hook@1.5.1
|
||||||
check@1.4.4
|
check@1.4.1
|
||||||
core-runtime@1.0.0
|
ddp@1.4.1
|
||||||
ddp@1.4.2
|
ddp-client@2.6.2
|
||||||
ddp-client@3.1.1
|
ddp-common@1.4.1
|
||||||
ddp-common@1.4.4
|
ddp-rate-limiter@1.2.1
|
||||||
ddp-rate-limiter@1.2.2
|
ddp-server@2.7.1
|
||||||
ddp-server@3.1.2
|
deps@1.0.12
|
||||||
deps@1.0.5-pre.1
|
diff-sequence@1.1.2
|
||||||
diff-sequence@1.1.3
|
dynamic-import@0.7.3
|
||||||
dynamic-import@0.7.4
|
ecmascript@0.16.8
|
||||||
ecmascript@0.16.13
|
ecmascript-runtime@0.8.1
|
||||||
ecmascript-runtime@0.8.3
|
ecmascript-runtime-client@0.12.1
|
||||||
ecmascript-runtime-client@0.12.3
|
ecmascript-runtime-server@0.11.0
|
||||||
ecmascript-runtime-server@0.11.1
|
ejson@1.1.3
|
||||||
ejson@1.1.5
|
email@2.2.6
|
||||||
email@3.1.2
|
es5-shim@4.8.0
|
||||||
es5-shim@4.8.1
|
fetch@0.1.4
|
||||||
facts-base@1.0.2
|
geojson-utils@1.0.11
|
||||||
fetch@0.1.6
|
hot-code-push@1.0.4
|
||||||
geojson-utils@1.0.12
|
hot-module-replacement@0.5.3
|
||||||
hot-code-push@1.0.5
|
html-tools@1.1.4
|
||||||
hot-module-replacement@0.5.4
|
htmljs@1.2.1
|
||||||
html-tools@2.0.0
|
id-map@1.1.1
|
||||||
htmljs@2.0.1
|
inter-process-messaging@0.1.1
|
||||||
id-map@1.2.0
|
jquery@3.0.0
|
||||||
inter-process-messaging@0.1.2
|
kadira:blaze-layout@2.0.1
|
||||||
jquery@3.0.2
|
kadira:flow-router@2.12.1
|
||||||
launch-screen@2.0.1
|
launch-screen@2.0.0
|
||||||
localstorage@1.2.1
|
localstorage@1.2.0
|
||||||
logging@1.3.6
|
logging@1.3.4
|
||||||
meteor@2.1.1
|
meteor@1.11.5
|
||||||
meteor-base@1.5.2
|
meteor-base@1.5.1
|
||||||
minifier-css@2.0.1
|
minifier-css@1.6.4
|
||||||
minifier-js@3.0.4
|
minifier-js@2.8.0
|
||||||
minimongo@2.0.4
|
minimongo@1.9.4
|
||||||
mobile-experience@1.1.2
|
mobile-experience@1.1.1
|
||||||
mobile-status-bar@1.1.1
|
mobile-status-bar@1.1.0
|
||||||
modern-browsers@0.2.3
|
modern-browsers@0.1.10
|
||||||
modules@0.20.3
|
modules@0.20.0
|
||||||
modules-runtime@0.13.2
|
modules-runtime@0.13.1
|
||||||
modules-runtime-hot@0.14.3
|
modules-runtime-hot@0.14.2
|
||||||
mongo@2.1.4
|
mongo@1.16.10
|
||||||
mongo-decimal@0.2.0
|
mongo-decimal@0.1.3
|
||||||
mongo-dev-server@1.1.1
|
mongo-dev-server@1.1.0
|
||||||
mongo-id@1.0.9
|
mongo-id@1.0.8
|
||||||
npm-mongo@6.16.1
|
npm-mongo@4.17.2
|
||||||
observe-sequence@2.0.0
|
observe-sequence@1.0.22
|
||||||
ordered-dict@1.2.0
|
ordered-dict@1.1.0
|
||||||
ostrio:flow-router-extra@3.12.0
|
promise@0.12.2
|
||||||
promise@1.0.0
|
raix:handlebar-helpers@0.2.5
|
||||||
random@1.2.2
|
random@1.2.1
|
||||||
rate-limit@1.1.2
|
rate-limit@1.1.1
|
||||||
react-fast-refresh@0.2.9
|
react-fast-refresh@0.2.8
|
||||||
reactive-dict@1.3.2
|
reactive-dict@1.3.1
|
||||||
reactive-var@1.0.13
|
reactive-var@1.0.12
|
||||||
reload@1.3.2
|
reload@1.3.1
|
||||||
retry@1.1.1
|
retry@1.1.0
|
||||||
roles@1.0.1
|
routepolicy@1.1.1
|
||||||
routepolicy@1.1.2
|
session@1.2.1
|
||||||
session@1.2.2
|
sha@1.0.9
|
||||||
sha@1.0.10
|
shell-server@0.5.0
|
||||||
shell-server@0.6.2
|
socket-stream-client@0.5.2
|
||||||
socket-stream-client@0.6.1
|
spacebars@1.6.0
|
||||||
spacebars@2.0.0
|
spacebars-compiler@1.3.2
|
||||||
spacebars-compiler@2.0.0
|
standard-minifier-css@1.9.2
|
||||||
standard-minifier-css@1.9.3
|
standard-minifier-js@2.8.1
|
||||||
standard-minifier-js@3.1.1
|
templating@1.4.3
|
||||||
templating@1.4.4
|
templating-compiler@1.4.2
|
||||||
templating-compiler@2.0.0
|
templating-runtime@1.6.4
|
||||||
templating-runtime@2.0.1
|
templating-tools@1.2.3
|
||||||
templating-tools@2.0.0
|
tracker@1.3.3
|
||||||
tracker@1.3.4
|
typescript@4.9.5
|
||||||
typescript@5.6.6
|
ui@1.0.13
|
||||||
underscore@1.6.4
|
underscore@1.6.2
|
||||||
url@1.3.5
|
url@1.3.2
|
||||||
webapp@2.0.7
|
webapp@1.13.8
|
||||||
webapp-hashing@1.1.2
|
webapp-hashing@1.1.1
|
||||||
|
|
|
||||||
17
Dockerfile
17
Dockerfile
|
|
@ -1,4 +1,8 @@
|
||||||
FROM node:22.16.0-alpine
|
FROM alpine:3.17
|
||||||
|
|
||||||
|
ENV NODE_VERSION=14.21.4
|
||||||
|
ENV NODE_URL="https://static.meteor.com/dev-bundle-node-os/unofficial-builds/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.gz"
|
||||||
|
ENV DIR_NODE=/usr/local
|
||||||
|
|
||||||
RUN apk add --no-cache \
|
RUN apk add --no-cache \
|
||||||
libstdc++ \
|
libstdc++ \
|
||||||
|
|
@ -16,6 +20,13 @@ RUN apk add --no-cache \
|
||||||
ccache \
|
ccache \
|
||||||
xz
|
xz
|
||||||
|
|
||||||
|
RUN echo $NODE_URL
|
||||||
|
RUN curl -sSL "$NODE_URL" | tar -xz -C /usr/local/ && mv $DIR_NODE/node-v${NODE_VERSION}-linux-x64 $DIR_NODE/v$NODE_VERSION
|
||||||
|
|
||||||
|
# add node and npm to path so the commands are available
|
||||||
|
ENV NODE_PATH $DIR_NODE/v$NODE_VERSION/lib/node_modules
|
||||||
|
ENV PATH $DIR_NODE/v$NODE_VERSION/bin:$PATH
|
||||||
|
|
||||||
# confirm installation
|
# confirm installation
|
||||||
RUN node -v
|
RUN node -v
|
||||||
RUN npm -v
|
RUN npm -v
|
||||||
|
|
@ -27,11 +38,11 @@ ENV MONGO_URL=mongodb://mongo:27017/get_my\
|
||||||
|
|
||||||
RUN mkdir -p /usr/src/get_my
|
RUN mkdir -p /usr/src/get_my
|
||||||
WORKDIR /usr/src/get_my
|
WORKDIR /usr/src/get_my
|
||||||
COPY ../bundle/ /usr/src/get_my/
|
COPY bundle/ /usr/src/get_my/
|
||||||
|
|
||||||
RUN cd /usr/src/get_my/programs/server/ \
|
RUN cd /usr/src/get_my/programs/server/ \
|
||||||
&& npm install
|
&& npm install
|
||||||
|
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
||||||
|
|
||||||
CMD [ "node", "main.js" ]
|
CMD [ "node", "main.js" ]
|
||||||
|
|
|
||||||
|
|
@ -60,8 +60,6 @@ The documentation is being done in the amazing open source software [Bookstack](
|
||||||
|
|
||||||
If you'd like to contribute by writing some documentation, please contact me me with an, and I'll see about getting you access to contribute.
|
If you'd like to contribute by writing some documentation, please contact me me with an, and I'll see about getting you access to contribute.
|
||||||
|
|
||||||
I have a video introduction on my YouTube channel here as well: https://youtu.be/hbGNTzU24hI?si=K5mcb8FuzSWNCueB
|
|
||||||
|
|
||||||
## Keeping it Simple
|
## Keeping it Simple
|
||||||
- Registration / Login System built in
|
- Registration / Login System built in
|
||||||
- 1st user to register is the system admin by default.
|
- 1st user to register is the system admin by default.
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
import { SysConfig } from '../../../imports/api/systemConfig.js';
|
import { SysConfig } from '../../../imports/api/systemConfig.js';
|
||||||
import { FlowRouter } from 'meteor/ostrio:flow-router-extra';
|
|
||||||
|
|
||||||
Template.login.onCreated(function() {
|
Template.login.onCreated(function() {
|
||||||
this.subscribe("SystemConfig");
|
this.subscribe("SystemConfig");
|
||||||
|
|
@ -26,7 +25,7 @@ Template.login.helpers({
|
||||||
Template.login.events({
|
Template.login.events({
|
||||||
'click #logmein' (event) {
|
'click #logmein' (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
// console.log("clicked login");
|
console.log("clicked login");
|
||||||
let email = $("#email").val();
|
let email = $("#email").val();
|
||||||
let pass = $("#password").val();
|
let pass = $("#password").val();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
import { SysConfig } from "../../../imports/api/systemConfig.js";
|
import { SysConfig } from "../../../imports/api/systemConfig.js";
|
||||||
import { FlowRouter } from 'meteor/ostrio:flow-router-extra';
|
|
||||||
|
|
||||||
Template.reg.onCreated(function() {
|
Template.reg.onCreated(function() {
|
||||||
this.subscribe("SystemConfig");
|
this.subscribe("SystemConfig");
|
||||||
|
|
@ -30,16 +29,12 @@ Template.reg.helpers({
|
||||||
return Session.get("missingReq");
|
return Session.get("missingReq");
|
||||||
},
|
},
|
||||||
allowReg: function() {
|
allowReg: function() {
|
||||||
const sysConf = async() => {
|
let conf = SysConfig.findOne();
|
||||||
let conf = await SysConfig.findOneAsync();
|
if (typeof conf != 'undefined') {
|
||||||
if (!conf) {
|
return conf.allowReg;
|
||||||
return true;
|
} else {
|
||||||
} else {
|
return true
|
||||||
return conf.allowReg;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
let sysConfig = sysConf();
|
|
||||||
return sysConfig;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -88,17 +83,15 @@ Template.reg.events({
|
||||||
});
|
});
|
||||||
|
|
||||||
let userId = Meteor.userId();
|
let userId = Meteor.userId();
|
||||||
// console.log("User ID: " + userId);
|
console.log("User ID: " + userId);
|
||||||
const addRole = async() => {
|
Meteor.call("addToRole", "user", function(err, result) {
|
||||||
let result = await Meteor.callAsync("addToRole", "user");
|
if (err) {
|
||||||
if (!result) {
|
console.log(" ERROR: ROLES - Error adding user to role: " + err);
|
||||||
console.log(" ERROR: ROLES - Error adding user to role: ");
|
|
||||||
} else {
|
} else {
|
||||||
// console.log("User should be added to role - teacher.");
|
// console.log("User should be added to role - teacher.");
|
||||||
FlowRouter.go('/dashboard');
|
FlowRouter.go('/dashboard');
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
addRole();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
<label for="newPassConf">Enter New Password</label>
|
<label for="newPassConf">Enter New Password</label>
|
||||||
{{#if $eq passMatch false}}<p class="red-text">Passwords do not match!</p>{{/if}}
|
{{#if $eq passMatch false}}<p class="red-text">Passwords do not match!</p>{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="col s12 m6 l6 input-field">
|
<div class="col s12 m6 l6 input-field outlined">
|
||||||
<select name="userRole" id="userRole" class="userRole {{#if $eq roleEmpty true}}red lighten-2 white-text{{/if}}">
|
<select name="userRole" id="userRole" class="userRole {{#if $eq roleEmpty true}}red lighten-2 white-text{{/if}}">
|
||||||
<option value="{{userRole}}" selected>{{userRole}}</option>
|
<option value="{{userRole}}" selected>{{userRole}}</option>
|
||||||
<option value="admin">Admin</option>
|
<option value="admin">Admin</option>
|
||||||
|
|
|
||||||
|
|
@ -16,10 +16,10 @@ Template.userInfoModal.onRendered(function() {
|
||||||
var elemse = document.querySelectorAll('select');
|
var elemse = document.querySelectorAll('select');
|
||||||
var instancese = M.FormSelect.init(elemse, {});
|
var instancese = M.FormSelect.init(elemse, {});
|
||||||
|
|
||||||
// Meteor.setTimeout(() => {
|
Meteor.setTimeout(() => {
|
||||||
// instances = M.Modal.init(elems, {});
|
instances = M.Modal.init(elems, {});
|
||||||
// instancese = M.FormSelect.init(elemse, {});
|
instancese = M.FormSelect.init(elemse, {});
|
||||||
// }, 500);
|
}, 500);
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.userInfoModal.helpers({
|
Template.userInfoModal.helpers({
|
||||||
|
|
@ -35,34 +35,19 @@ Template.userInfoModal.helpers({
|
||||||
userInfo: function() {
|
userInfo: function() {
|
||||||
let usersId = Session.get("usersId");
|
let usersId = Session.get("usersId");
|
||||||
if (usersId != "" && usersId != null) {
|
if (usersId != "" && usersId != null) {
|
||||||
const uIn = async() => {
|
let usersInfo = Meteor.users.findOne({ _id: usersId });
|
||||||
let usersInfo = await Meteor.users.findOneAsync({ _id: usersId });
|
// console.dir(usersInfo);
|
||||||
if (!usersInfo) {
|
Session.set("usersInfo", usersInfo);
|
||||||
console.log("No information found for this user.");
|
return usersInfo;
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
Session.set("usersInfo", usersInfo);
|
|
||||||
return usersInfo;
|
|
||||||
}
|
|
||||||
// console.dir(usersInfo);
|
|
||||||
}
|
|
||||||
uIn();
|
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
userRole: function() {
|
userRole: function() {
|
||||||
const getRole = async() => {
|
let userRole = Roles.getRolesForUser( Session.get("usersId"));
|
||||||
let userRole = Roles.getRolesForUserAsync( Session.get("usersId"));
|
Session.set("usersRole", userRole);
|
||||||
if (!userRole) {
|
console.log(userRole);
|
||||||
return;
|
return userRole;
|
||||||
} else {
|
|
||||||
Session.set("usersRole", userRole);
|
|
||||||
console.log(userRole);
|
|
||||||
return userRole;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
getRole();
|
|
||||||
},
|
},
|
||||||
rolesOptions: function() {
|
rolesOptions: function() {
|
||||||
return Roles.find();
|
return Roles.find();
|
||||||
|
|
@ -136,33 +121,36 @@ Template.userInfoModal.events({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
changePassword = async function(userId, passwd) {
|
changePassword = function(userId, passwd) {
|
||||||
console.log("would change password.");
|
console.log("would change password.");
|
||||||
let result = await Meteor.callAsync('edit.userPass', userId, passwd);
|
Meteor.call('edit.userPass', userId, passwd, function(err, result) {
|
||||||
if (!result) {
|
if (err) {
|
||||||
console.log(" ERROR changing user passwrod:");
|
console.log(" ERROR changing user passwrod:" + err);
|
||||||
} else {
|
} else {
|
||||||
showSnackbar("Successfully Saved Changes!", "green");
|
showSnackbar("Successfully Saved Changes!", "green");
|
||||||
console.log(" Password changed successfully!");
|
console.log(" Password changed successfully!");
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
changeUserEmail = async function(usersId, usersEmail) {
|
changeUserEmail = function(usersId, usersEmail) {
|
||||||
console.log("Would change user email");
|
console.log("Would change user email");
|
||||||
let result = await Meteor.callAsync('update.userEmail', usersId, usersEmail);
|
Meteor.call('update.userEmail', usersId, usersEmail, function(err, result) {
|
||||||
if (!result) {
|
if (err) {
|
||||||
console.log(" ERROR updating user email: " + err);
|
console.log(" ERROR updating user email: " + err);
|
||||||
} else {
|
} else {
|
||||||
showSnackbar("Email updated successfully!", "green");
|
showSnackbar("Email updated successfully!", "green");
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
changeUserRole = async function(userId, role) {
|
changeUserRole = function(userId, role) {
|
||||||
console.log("Would change user Role.");
|
console.log("Would change user Role.");
|
||||||
let result = await Meteor.callAsync('edit.userRole', userId, role);
|
Meteor.call('edit.userRole', userId, role, function(err, result) {
|
||||||
if (!result) {
|
if (err) {
|
||||||
console.log(" ERROR updating user role: " + err);
|
console.log(" ERROR updating user role: " + err);
|
||||||
} else {
|
} else {
|
||||||
showSnackbar("Role Successfully Updated!", "green");
|
showSnackbar("Role Successfully Updated!", "green");
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -23,7 +23,7 @@ Template.userMgmt.helpers({
|
||||||
return this.emails[0].address;
|
return this.emails[0].address;
|
||||||
},
|
},
|
||||||
userRole: function() {
|
userRole: function() {
|
||||||
return Roles.getRolesForUserAsync( this._id );
|
return Roles.getRolesForUser( this._id );
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ Template.cleanUpModalConfirm.events({
|
||||||
case "Menus":
|
case "Menus":
|
||||||
cleanUp("clean.Menus", whatItems);
|
cleanUp("clean.Menus", whatItems);
|
||||||
case "Products":
|
case "Products":
|
||||||
cleanUp("clean.Products", whatItems);
|
// cleanUp("clean.Products", whatItems);
|
||||||
case "Stores":
|
case "Stores":
|
||||||
// cleanUp("clean.Stores", whatItems);
|
// cleanUp("clean.Stores", whatItems);
|
||||||
case "Tasks":
|
case "Tasks":
|
||||||
|
|
@ -40,34 +40,27 @@ Template.cleanUpModalConfirm.events({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
cleanUp = async function(methodName, whatItems) {
|
cleanUp = function(methodName, whatItems) {
|
||||||
let result = Meteor.callAsync(methodName);
|
Meteor.call(methodName, function(err, result) {
|
||||||
if (!result) {
|
if (err) {
|
||||||
console.log(" ERROR cleaning " + whatItems);
|
console.log(" ERROR cleaning " + whatItems + ": " + err);
|
||||||
} else {
|
} else {
|
||||||
showSnackbar(whatItems + " have been cleaned up!", "green");
|
showSnackbar(whatItems + " have been cleaned up!", "green");
|
||||||
let confirmModal = document.getElementById('cleanUpConfirm');
|
let confirmModal = document.getElementById('cleanUpConfirm');
|
||||||
M.Modal.getInstance(confirmModal).close();
|
M.Modal.getInstance(confirmModal).close();
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanProducts = async function(methodName, whatItems) {
|
cleanTasks = function(methodName, whatItems) {
|
||||||
let result = await Meteor.call(methodName, whatItems);
|
|
||||||
if (!result) {
|
|
||||||
console.log(" ERROR cleaning " + whatItems);
|
|
||||||
} else {
|
|
||||||
showSnackbar(whatItems + " have been cleaned up.", "green");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cleanTasks = async function(methodName, whatItems) {
|
|
||||||
let timeFrame = Session.get("overdueVal");
|
let timeFrame = Session.get("overdueVal");
|
||||||
let result = await Meteor.call(methodName, timeFrame);
|
Meteor.call(methodName, timeFrame, function(err, result) {
|
||||||
if (!result) {
|
if (err) {
|
||||||
console.log(" ERROR cleaning " + whatItems + ": " + err);
|
console.log(" ERROR cleaning " + whatItems + ": " + err);
|
||||||
} else {
|
} else {
|
||||||
showSnackbar(whatItems + " have been cleaned up!", "green");
|
showSnackbar(whatItems + " have been cleaned up!", "green");
|
||||||
let confirmModal = document.getElementById('cleanUpConfirm');
|
let confirmModal = document.getElementById('cleanUpConfirm');
|
||||||
M.Modal.getInstance(confirmModal).close();
|
M.Modal.getInstance(confirmModal).close();
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -2,11 +2,11 @@
|
||||||
<h4>Lists</h4>
|
<h4>Lists</h4>
|
||||||
<form action="submit" class="listAdd">
|
<form action="submit" class="listAdd">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col s12 m8 l8 input-field">
|
<div class="col s8 m8 l10 input-field">
|
||||||
<input type="text" class="listNameInp" style="{{#if $eq listNameErr true}}border: 2px solid red{{/if}}" id="listNameInp" />
|
<input type="text" class="listNameInp" style="{{#if $eq listNameErr true}}border: 2px solid red{{/if}}" id="listNameInp" />
|
||||||
<label for="listNameInp">List Name</label>
|
<label for="listNameInp">List Name</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="col s12 m2 l2 input-field">
|
<div class="col s4 m4 l2 input-field">
|
||||||
<p>
|
<p>
|
||||||
<label>
|
<label>
|
||||||
<input type="checkbox" id="isShared"/>
|
<input type="checkbox" id="isShared"/>
|
||||||
|
|
@ -14,14 +14,6 @@
|
||||||
</label>
|
</label>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="col s12 m2 l2 input-field">
|
|
||||||
<p>
|
|
||||||
<label>
|
|
||||||
<input type="checkbox" id="isCompleted"/>
|
|
||||||
<span>Show Completed</span>
|
|
||||||
</label>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col s12 m12 l12">
|
<div class="col s12 m12 l12">
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ Template.listMgmtForm.onCreated(function() {
|
||||||
Template.listMgmtForm.onRendered(function() {
|
Template.listMgmtForm.onRendered(function() {
|
||||||
Session.set("listNameMiss", false);
|
Session.set("listNameMiss", false);
|
||||||
Session.set("listNameEditMode", false);
|
Session.set("listNameEditMode", false);
|
||||||
Session.set("showCompletedLists", false);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.listMgmtForm.helpers({
|
Template.listMgmtForm.helpers({
|
||||||
|
|
@ -29,7 +28,15 @@ Template.listMgmtForm.events({
|
||||||
Session.set("listNameMiss", true);
|
Session.set("listNameMiss", true);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
addList(listName, shared);
|
Meteor.call('add.list', listName, shared, function(err, result) {
|
||||||
|
if (err) {
|
||||||
|
// console.log(" ERROR adding list name: " + err);
|
||||||
|
} else {
|
||||||
|
// console.log(" SUCCESS adding list name.");
|
||||||
|
$("#listNameInp").val("");
|
||||||
|
$("#isShared").prop("checked", false);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'click .renameListMgmt' (event) {
|
'click .renameListMgmt' (event) {
|
||||||
|
|
@ -42,7 +49,16 @@ Template.listMgmtForm.events({
|
||||||
Session.set("listNameMiss", true);
|
Session.set("listNameMiss", true);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
editList(listId, listName, shared);
|
Meteor.call('edit.list', listId, listName, shared, function(err, result) {
|
||||||
|
if (err) {
|
||||||
|
// console.log(" ERROR editing list name: " + err);
|
||||||
|
} else {
|
||||||
|
// console.log(" SUCCESS editing list name.");
|
||||||
|
$("#listNameInp").val("");
|
||||||
|
$("#isShared").prop("checked", false);
|
||||||
|
Session.set("listNameEditMode", false);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'submit .listAdd' (event) {
|
'submit .listAdd' (event) {
|
||||||
|
|
@ -57,34 +73,27 @@ Template.listMgmtForm.events({
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
if (editMode == false) {
|
if (editMode == false) {
|
||||||
addList(listName, shared);
|
Meteor.call('add.list', listName, shared, function(err, result) {
|
||||||
|
if (err) {
|
||||||
|
// console.log(" ERROR adding list name: " + err);
|
||||||
|
} else {
|
||||||
|
// console.log(" SUCCESS adding list name.");
|
||||||
|
$("#listNameInp").val("");
|
||||||
|
$("#isShared").prop("checked", false);
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
editList(listId, listName, shared);
|
Meteor.call('edit.list', listId, listName, shared, function(err, result) {
|
||||||
|
if (err) {
|
||||||
|
// console.log(" ERROR editing list name: " + err);
|
||||||
|
} else {
|
||||||
|
// console.log(" SUCCESS editing list name.");
|
||||||
|
$("#listNameInp").val("");
|
||||||
|
$("#isShared").prop("checked", false);
|
||||||
|
Session.set("listNameEditMode", false);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
'change #isCompleted' (event) {
|
|
||||||
Session.set("showCompletedLists", true);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const addList = async(listName, shared) => {
|
|
||||||
let result = await Meteor.callAsync('add.list', listName, shared);
|
|
||||||
if (!result) {
|
|
||||||
console.log("Nothing returned from method call add.list");
|
|
||||||
} else {
|
|
||||||
$("#listNameInp").val("");
|
|
||||||
$("#isShared").prop("checked", false);
|
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
|
|
||||||
const editList = async(listId, listName, shared) => {
|
|
||||||
let result = await Meteor.callAsync('edit.list', listId, listName, shared);
|
|
||||||
if (!result) {
|
|
||||||
// console.log("Nothing returned from method call edit.list");
|
|
||||||
} else {
|
|
||||||
$("#listNameInp").val("");
|
|
||||||
$("#isShared").prop("checked", false);
|
|
||||||
Session.set("listNameEditMode", false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -8,7 +8,6 @@
|
||||||
<i class="material-icons clickable deleteListName tooltipped right modal-trigger" data-position="top" data-tooltip-id="deleteListIcon" data-target="modalDelete">delete</i>
|
<i class="material-icons clickable deleteListName tooltipped right modal-trigger" data-position="top" data-tooltip-id="deleteListIcon" data-target="modalDelete">delete</i>
|
||||||
<i class="material-icons clickable editListName tooltipped right" data-position="top" data-tooltip-id="editThisListIcon">edit</i>
|
<i class="material-icons clickable editListName tooltipped right" data-position="top" data-tooltip-id="editThisListIcon">edit</i>
|
||||||
<i class="material-icons clickable markListComplete tooltipped right" data-position="top" data-tooltip-id="markCompleteIcon">check</i>
|
<i class="material-icons clickable markListComplete tooltipped right" data-position="top" data-tooltip-id="markCompleteIcon">check</i>
|
||||||
<i class="material-icons clickable markListNotComplete tooltipped right" data-position="top" data-tooltip-id="markIncompleteIcon">refresh</i>
|
|
||||||
</li>
|
</li>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
@ -22,9 +21,6 @@
|
||||||
<div id="markCompleteIcon" style="display: none;">
|
<div id="markCompleteIcon" style="display: none;">
|
||||||
Mark list complete
|
Mark list complete
|
||||||
</div>
|
</div>
|
||||||
<div id="markIncompleteIcon" style="display: none;">
|
|
||||||
Restore Completed List
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
{{> deleteConfirmationModal}}
|
{{> deleteConfirmationModal}}
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -2,7 +2,7 @@ import { Lists } from '../../../imports/api/lists.js';
|
||||||
import { M } from '../../lib/assets/materialize.js';
|
import { M } from '../../lib/assets/materialize.js';
|
||||||
|
|
||||||
Template.listMgmtTbl.onCreated(function() {
|
Template.listMgmtTbl.onCreated(function() {
|
||||||
this.subscribe("allLists");
|
this.subscribe("myLists");
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.listMgmtTbl.onRendered(function() {
|
Template.listMgmtTbl.onRendered(function() {
|
||||||
|
|
@ -14,13 +14,7 @@ Template.listMgmtTbl.onRendered(function() {
|
||||||
|
|
||||||
Template.listMgmtTbl.helpers({
|
Template.listMgmtTbl.helpers({
|
||||||
lists: function() {
|
lists: function() {
|
||||||
let showComplete = Session.get("showCompletedLists");
|
return Lists.find({});
|
||||||
// console.log("Show Complete Lists: " + showComplete);
|
|
||||||
if (showComplete) {
|
|
||||||
return Lists.find({});
|
|
||||||
} else {
|
|
||||||
return Lists.find({ listComplete: false });
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -35,14 +29,9 @@ Template.listMgmtTbl.events({
|
||||||
},
|
},
|
||||||
'click .editListName' (event) {
|
'click .editListName' (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
const lInfo = async() => {
|
let listInfo = Lists.findOne({ _id: this._id });
|
||||||
let listInfo = await Lists.findOneAsync({ _id: this._id });
|
let listName = listInfo.listName;
|
||||||
return listInfo;
|
let listShared = listInfo.listShared;
|
||||||
}
|
|
||||||
let listData = lInfo();
|
|
||||||
|
|
||||||
let listName = listData.listName;
|
|
||||||
let listShared = listData.listShared;
|
|
||||||
$("#listNameInp").val(listName);
|
$("#listNameInp").val(listName);
|
||||||
if (listShared == true) {
|
if (listShared == true) {
|
||||||
$("#isShared").prop("checked", true);
|
$("#isShared").prop("checked", true);
|
||||||
|
|
@ -55,27 +44,12 @@ Template.listMgmtTbl.events({
|
||||||
'click .markListComplete' (event) {
|
'click .markListComplete' (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
let listId = this._id;
|
let listId = this._id;
|
||||||
const markComp = async() => {
|
Meteor.call('mark.complete', listId, function(err, result) {
|
||||||
let result = await Meteor.callAsync('mark.complete', listId);
|
if (err) {
|
||||||
if (!result) {
|
// console.log(" ERROR marking complete: " + err);
|
||||||
console.log(" ERROR marking complete.");
|
|
||||||
} else {
|
} else {
|
||||||
// console.log(" SUCCESS marking complete.");
|
// console.log(" SUCCESS marking complete.");
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
markComp();
|
|
||||||
},
|
|
||||||
'click .markListNotComplete' (event) {
|
|
||||||
event.preventDefault();
|
|
||||||
let listId = this._id;
|
|
||||||
const markInc = async() => {
|
|
||||||
let result = await Meteor.callAsync('mark.incomplete', listId);
|
|
||||||
if (!result) {
|
|
||||||
console.log("Issue marking list incomplete.");
|
|
||||||
} else {
|
|
||||||
// console.log("List marked incomplete.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
markInc();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
import { FlowRouter } from 'meteor/ostrio:flow-router-extra';
|
|
||||||
|
|
||||||
Template.mgmtPage.onCreated(function() {
|
Template.mgmtPage.onCreated(function() {
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -2,22 +2,14 @@
|
||||||
<h4>Product Management</h4>
|
<h4>Product Management</h4>
|
||||||
{{#if Template.subscriptionsReady}}
|
{{#if Template.subscriptionsReady}}
|
||||||
<form action="submit" class="row prodInputForm" style="gap: 1em;">
|
<form action="submit" class="row prodInputForm" style="gap: 1em;">
|
||||||
<div class="col l4 m6 s12">
|
<div class="col s12">
|
||||||
<p>
|
<p>
|
||||||
<label>
|
<label>
|
||||||
<input type="checkbox" id="showNoStoreSet" />
|
<input type="checkbox" id="showNoStoreSet" />
|
||||||
<span>Show Products without Store Assigned</span>
|
<span>Show Products without Store Assigned</span>
|
||||||
</label>
|
</label>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="col l4 m6 s12">
|
|
||||||
<p>
|
|
||||||
<label>
|
|
||||||
<input type="checkbox" id="showNoList" />
|
|
||||||
<span>Show Products Never Used in a List</span>
|
|
||||||
</label>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="col s12 m6 l6 input-field outlined">
|
<div class="col s12 m6 l6 input-field outlined">
|
||||||
<input type="text" class="prodName" style="{{#if $eq prodNameErr true}}border: 2px solid red;{{/if}}" id="prodName" />
|
<input type="text" class="prodName" style="{{#if $eq prodNameErr true}}border: 2px solid red;{{/if}}" id="prodName" />
|
||||||
<label for="prodName">Name*</label>
|
<label for="prodName">Name*</label>
|
||||||
|
|
|
||||||
|
|
@ -35,65 +35,46 @@ Template.prodMgmtForm.events({
|
||||||
'click .saveProdMgmt, click .editProdMgmt' (event) {
|
'click .saveProdMgmt, click .editProdMgmt' (event) {
|
||||||
let name = $("#prodName").val();
|
let name = $("#prodName").val();
|
||||||
let store = $("#prodStore").val();
|
let store = $("#prodStore").val();
|
||||||
|
|
||||||
let prodId = Session.get("prodEditId");
|
let prodId = Session.get("prodEditId");
|
||||||
let prodEditMode = Session.get("prodEditMode");
|
let prodEditMode = Session.get("prodEditMode");
|
||||||
|
|
||||||
if (store == null) {
|
if (store == null) {
|
||||||
store = "";
|
store = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (name == "" || name == null) {
|
if (name == "" || name == null) {
|
||||||
Session.set("prodNameRed", true);
|
Session.set("prodNameRed", true);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
if (prodEditMode == true) {
|
if (prodEditMode == true) {
|
||||||
editProd(prodId, name, store);
|
Meteor.call('edit.product', prodId, name, store, function(err, result) {
|
||||||
|
if (err) {
|
||||||
|
console.log(" ERROR: can't add product: " + err);
|
||||||
|
} else {
|
||||||
|
$("#prodName").val("");
|
||||||
|
showSnackbar("Successfully Edited Product!", "green");
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
newProd(name, store);
|
Meteor.call('add.product', name, store, function(err, result) {
|
||||||
|
if (err) {
|
||||||
|
console.log(" ERROR: can't add product: " + err);
|
||||||
|
} else {
|
||||||
|
$("#prodName").val("");
|
||||||
|
showSnackbar("Product Added Succssfully!", "green");
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'click #showNoStoreSet' (event) {
|
'click #showNoStoreSet' (event) {
|
||||||
let noStoreSet = $("#showNoStoreSet").prop('checked');
|
let noStoreSet = $("#showNoStoreSet").prop('checked');
|
||||||
// console.log("Clicked: " + noStoreSet);
|
console.log("Clicked: " + noStoreSet);
|
||||||
if (noStoreSet == true) {
|
if (noStoreSet == true) {
|
||||||
Session.set("noStoreSet", true);
|
Session.set("noStoreSet", true);
|
||||||
} else {
|
} else {
|
||||||
Session.set("noStoreSet", false);
|
Session.set("noStoreSet", false);
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
'click #showNoList' (event) {
|
|
||||||
let notUsedInList = $("#showNoList").prop('checked');
|
|
||||||
if (notUsedInList == true) {
|
|
||||||
Session.set("noListUsed", true);
|
|
||||||
} else {
|
|
||||||
Session.set("noListUsed", false);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'submit .prodInputForm' (event) {
|
|
||||||
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const newProd = async(name, store) => {
|
|
||||||
let result = await Meteor.callAsync('add.product', name, store);
|
|
||||||
try {
|
|
||||||
if (!result) {
|
|
||||||
// console.log("No result when trying to add a new product.");
|
|
||||||
showSnackbar("Unable to add new product.");
|
|
||||||
} else {
|
|
||||||
$("#prodName").val("");
|
|
||||||
showSnackbar("New Product Added!", "green");
|
|
||||||
}
|
|
||||||
} catch(error) {
|
|
||||||
console.log(" ERROR - couldn't add product: " + error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const editProd = async(prodId, name, store) => {
|
|
||||||
let result = await Meteor.callAsync('edit.product', prodId, name, store);
|
|
||||||
if (!result) {
|
|
||||||
console.log(" ERROR: can't add product: " + err);
|
|
||||||
} else {
|
|
||||||
$("#prodName").val("");
|
|
||||||
showSnackbar("Successfully Edited Product!", "green");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,17 +1,14 @@
|
||||||
import { Products } from '../../../imports/api/products.js';
|
import { Products } from '../../../imports/api/products.js';
|
||||||
import { ListItems } from '../../../imports/api/listItems.js';
|
|
||||||
import { M } from '../../lib/assets/materialize.js';
|
import { M } from '../../lib/assets/materialize.js';
|
||||||
|
|
||||||
Template.prodMgmtTbl.onCreated(function() {
|
Template.prodMgmtTbl.onCreated(function() {
|
||||||
this.subscribe("myProducts");
|
this.subscribe("myProducts");
|
||||||
this.subscribe("allListItems");
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.prodMgmtTbl.onRendered(function() {
|
Template.prodMgmtTbl.onRendered(function() {
|
||||||
Session.set("searchProds", false);
|
Session.set("searchProds", false);
|
||||||
Session.set("searchStore", false);
|
Session.set("searchStore", false);
|
||||||
Session.set("noStoreSet", false);
|
Session.set("noStoreSet", false);
|
||||||
Session.set("noListUsed", false);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.prodMgmtTbl.helpers({
|
Template.prodMgmtTbl.helpers({
|
||||||
|
|
@ -19,37 +16,25 @@ Template.prodMgmtTbl.helpers({
|
||||||
let searchProd = Session.get("searchProds");
|
let searchProd = Session.get("searchProds");
|
||||||
let searchStore = Session.get("searchStore");
|
let searchStore = Session.get("searchStore");
|
||||||
let noStoreSet = Session.get("noStoreSet");
|
let noStoreSet = Session.get("noStoreSet");
|
||||||
let noListUsed = Session.get("noListUsed");
|
|
||||||
|
|
||||||
if (searchProd == true) {
|
if (searchProd == true) {
|
||||||
let searchVal = Session.get("searchVal");
|
let searchVal = Session.get("searchVal");
|
||||||
if (typeof searchVal == 'undefined' || searchVal.length == 0) {
|
if (typeof searchVal == 'undefined' || searchVal.length == 0) {
|
||||||
return Products.find({});
|
return Products.find({});
|
||||||
} else {
|
} else {
|
||||||
return Products.find({ prodName: { $regex: searchVal + '.*', $options: 'i' } }, { sort: { prodName: 1 }});
|
return Products.find({ prodName: { $regex: searchVal + '.*', $options: 'i' } });
|
||||||
}
|
}
|
||||||
} else if (searchStore == true) {
|
} else if (searchStore == true) {
|
||||||
let searchVal = Session.get("searchStoreVal");
|
let searchVal = Session.get("searchStoreVal");
|
||||||
if (typeof searchVal == 'undefined' || searchVal.length == 0) {
|
if (typeof searchVal == 'undefined' || searchVal.length == 0) {
|
||||||
return Products.find({});
|
return Products.find({});
|
||||||
} else {
|
} else {
|
||||||
return Products.find({ prodStore: { $regex: searchVal + '.*', $options: 'i' } }, { sort: { prodName: 1 }});
|
return Products.find({ prodStore: { $regex: searchVal + '.*', $options: 'i' } });
|
||||||
}
|
}
|
||||||
} else if (noStoreSet == true) {
|
} else if (noStoreSet == true) {
|
||||||
return Products.find({ prodStore: '' }, { sort: { prodName: 1 }});
|
return Products.find({ prodStore: '' });
|
||||||
} else if (noListUsed == true) {
|
|
||||||
let i;
|
|
||||||
let idList = [];
|
|
||||||
let idsInLists = ListItems.find({}).fetch();
|
|
||||||
for (i=0; i < idsInLists.length; i++) {
|
|
||||||
idList.push(idsInLists[i].prodId);
|
|
||||||
}
|
|
||||||
if (i > idsInLists.length - 1) {
|
|
||||||
let noProdsNot = Products.find({ _id: { $nin: idList }}).count();
|
|
||||||
return Products.find({ _id: { $nin: idList }}, { sort: { prodName: 1 }});
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
return Products.find({}, { sort: { prodName: 1 }});
|
return Products.find({});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
searchProd: function() {
|
searchProd: function() {
|
||||||
|
|
@ -72,17 +57,10 @@ Template.prodMgmtTbl.events({
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
Session.set("prodEditMode", true);
|
Session.set("prodEditMode", true);
|
||||||
Session.set("prodEditId", this._id);
|
Session.set("prodEditId", this._id);
|
||||||
const getProds = async() => {
|
let prodInfo = Products.findOne({ _id: this._id });
|
||||||
let prodInfo = await Products.findOneAsync({ _id: this._id });
|
$("#prodName").val(prodInfo.prodName);
|
||||||
if (!prodInfo) {
|
$("#prodStore").val(prodInfo.prodStore);
|
||||||
// console.log("No Product Returned.");
|
// $('select').formSelect();
|
||||||
} else {
|
|
||||||
$("#prodName").val(prodInfo.prodName);
|
|
||||||
$("#prodStore").val(prodInfo.prodStore);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
getProds();
|
|
||||||
|
|
||||||
},
|
},
|
||||||
'click #filterProds' (event) {
|
'click #filterProds' (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,14 @@ Template.storeMgmtForm.events({
|
||||||
Session.set("borderRed", true);
|
Session.set("borderRed", true);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
addStore(storeName);
|
Meteor.call("add.store", storeName, function(err, result) {
|
||||||
|
if (err) {
|
||||||
|
console.log("ERROR: Store add failed: " + err);
|
||||||
|
} else {
|
||||||
|
$("#storeName").val("");
|
||||||
|
showSnackbar("Store Added Successfully!", "green");
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'click .cancelStoreMgmt' (event) {
|
'click .cancelStoreMgmt' (event) {
|
||||||
|
|
@ -31,51 +38,51 @@ Template.storeMgmtForm.events({
|
||||||
$("#storeName").val("");
|
$("#storeName").val("");
|
||||||
Session.set("editModeStore", false);
|
Session.set("editModeStore", false);
|
||||||
},
|
},
|
||||||
'submit #storeForm' (event) {
|
// 'submit #storeForm' (event) {
|
||||||
event.preventDefault();
|
// event.preventDefault();
|
||||||
let editMode = Session.get("editModeStore");
|
// let editMode = Session.get("editModeStore");
|
||||||
let storeName = $("#storeName").val();
|
// let storeName = $("#storeName").val();
|
||||||
if (storeName == "" || storeName == null) {
|
// if (storeName == "" || storeName == null) {
|
||||||
Session.set("borderRed", true);
|
// Session.set("borderRed", true);
|
||||||
return;
|
// return;
|
||||||
} else {
|
// } else {
|
||||||
if (editMode == false) {
|
// if (editMode == false) {
|
||||||
addStore(storeName);
|
// Meteor.call("add.store", storeName, function(err, result) {
|
||||||
} else {
|
// if (err) {
|
||||||
let storeId = Session.get("storeIdEdit");
|
// console.log("ERROR: Store add failed: " + err);
|
||||||
editStore(storeId, storeName);
|
// } else {
|
||||||
}
|
// $("#storeName").val("");
|
||||||
}
|
// }
|
||||||
},
|
// });
|
||||||
|
// } else {
|
||||||
|
// let storeId = Session.get("storeIdEdit");
|
||||||
|
// Meteor.call("edit.store", storeId, storeName, function(err, result) {
|
||||||
|
// if (err) {
|
||||||
|
// console.log("ERROR: Store add failed: " + err);
|
||||||
|
// } else {
|
||||||
|
// $("#storeName").val("");
|
||||||
|
// Session.set("editModeStore", false);
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// },
|
||||||
'click .editStoreMgmt' (event) {
|
'click .editStoreMgmt' (event) {
|
||||||
let storeName = $("#storeName").val();
|
let storeName = $("#storeName").val();
|
||||||
let storeId = Session.get("storeIdEdit");
|
let storeId = Session.get("storeIdEdit");
|
||||||
if (storeName == "" || storeName == null) {
|
if (storeName == "" || storeName == null) {
|
||||||
Session.set("borderRed", true);
|
Session.set("borderRed", true);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
editStore(storeId, storeName);
|
Meteor.call("edit.store", storeId, storeName, function(err, result) {
|
||||||
|
if (err) {
|
||||||
|
console.log("ERROR: Store add failed: " + err);
|
||||||
|
} else {
|
||||||
|
$("#storeName").val("");
|
||||||
|
Session.set("editModeStore", false);
|
||||||
|
showSnackbar("Store Updated Successfully!", "green");
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const addStore = async(storeName) => {
|
|
||||||
let result = await Meteor.callAsync("add.store", storeName);
|
|
||||||
if (!result) {
|
|
||||||
// console.log("ERROR: Store add failed.");
|
|
||||||
} else {
|
|
||||||
$("#storeName").val("");
|
|
||||||
showSnackbar("Store Added Successfully!", "green");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const editStore = async(storeId, storeName) => {
|
|
||||||
let result = await Meteor.callAsync("edit.store", storeId, storeName);
|
|
||||||
if (!result) {
|
|
||||||
// console.log("ERROR: Store add failed: " + err);
|
|
||||||
} else {
|
|
||||||
$("#storeName").val("");
|
|
||||||
Session.set("editModeStore", false);
|
|
||||||
showSnackbar("Store Updated Successfully!", "green");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<template name="systemAdmin">
|
<template name="systemAdmin">
|
||||||
<h2>System Administration</h2>
|
<h2>System Administration</h2>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col s12">
|
<div class="col s12 m12 l6">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-content">
|
<div class="card-content">
|
||||||
<h4>Registration Settings</h4>
|
<h4>Registration Settings</h4>
|
||||||
|
|
@ -18,31 +18,11 @@
|
||||||
<div class="col s12 m6 l6">
|
<div class="col s12 m6 l6">
|
||||||
<div class="switch">
|
<div class="switch">
|
||||||
<label>
|
<label>
|
||||||
<input type="checkbox" class="currConfigs" id="allowGenReg">
|
<input type="checkbox" class="currConfigs" id="allowGenReg">
|
||||||
<span class="lever"></span>
|
<span class="lever"></span>
|
||||||
Allow Registration
|
Allow Registration
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col s12">
|
|
||||||
<div class="card">
|
|
||||||
<div class="card-content">
|
|
||||||
<h4>Update Notifications</h4>
|
|
||||||
<p>This option requires the seerver to have an internet connection.</p>
|
|
||||||
<br>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col s12 m12 l6">
|
|
||||||
<div class="switch">
|
|
||||||
<label>
|
|
||||||
<input type="checkbox" class="currConfigs" id="recvUpdateMsgs">
|
|
||||||
<span class="lever"></span>
|
|
||||||
System Admin will receive information on updates and new featres
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -50,4 +30,4 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{> snackbar}}
|
{{> snackbar}}
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -1,9 +1,7 @@
|
||||||
import { SysConfig } from '../../../imports/api/systemConfig.js';
|
import { SysConfig } from '../../../imports/api/systemConfig.js';
|
||||||
import { M } from '../../lib/assets/materialize.js';
|
|
||||||
|
|
||||||
Template.systemAdmin.onCreated(function() {
|
Template.systemAdmin.onCreated(function() {
|
||||||
this.subscribe("SystemConfig");
|
this.subscribe("SystemConfig");
|
||||||
this.subscribe("rolesAvailable");
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.systemAdmin.onRendered(function() {
|
Template.systemAdmin.onRendered(function() {
|
||||||
|
|
@ -12,49 +10,31 @@ Template.systemAdmin.onRendered(function() {
|
||||||
if (typeof curr != 'undefined') {
|
if (typeof curr != 'undefined') {
|
||||||
$("#allowGenReg").prop('checked', curr.allowReg);
|
$("#allowGenReg").prop('checked', curr.allowReg);
|
||||||
$("#allAdmReg").prop('checked', curr.SysAdminReg);
|
$("#allAdmReg").prop('checked', curr.SysAdminReg);
|
||||||
$("#recvUpdateMsgs").prop('checked', curr.allowUpdates);
|
|
||||||
} else {
|
} else {
|
||||||
// console.log(" ---- unable to find current system configuration.");
|
console.log(" ---- unable to find current system configuration.");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var elems = document.querySelectorAll('select');
|
|
||||||
|
|
||||||
setTimeout(function() {
|
|
||||||
var instances = M.FormSelect.init(elems, {});
|
|
||||||
}, 300);
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.systemAdmin.helpers({
|
Template.systemAdmin.helpers({
|
||||||
|
currConfigs: function() {
|
||||||
|
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.systemAdmin.events({
|
Template.systemAdmin.events({
|
||||||
'change #allowGenReg, change #allowAdmReg' (evnnt) {
|
'change #allowGenReg, change #allowAdmReg' (evnnt) {
|
||||||
let genReg = $("#allowGenReg").prop('checked');
|
let genReg = $("#allowGenReg").prop('checked');
|
||||||
let admReg = $("#allowAdmReg").prop('checked');
|
let admReg = $("#allowAdmReg").prop('checked');
|
||||||
const addNoSysReg = async() => {
|
// console.log("General Reg set to: " + genReg);
|
||||||
let result = await Meteor.callAsync("add.noSysAdminReg", admReg, genReg);
|
Meteor.call("add.noSysAdminReg", admReg, genReg, function(err, result) {
|
||||||
if (!result) {
|
if (err) {
|
||||||
|
console.log(" ERROR updating permission to allow general registration: " + err);
|
||||||
showSnackbar("Registration Permission Change Failed.", "red");
|
showSnackbar("Registration Permission Change Failed.", "red");
|
||||||
} else {
|
} else {
|
||||||
|
console.log(" Successfully updated permission to allow general registration.");
|
||||||
showSnackbar("Registration Permission Successfully Changed.", "green")
|
showSnackbar("Registration Permission Successfully Changed.", "green")
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
addNoSysReg();
|
}
|
||||||
},
|
});
|
||||||
'change #recvUpdateMsgs' (event) {
|
|
||||||
let updSet = $("#recvUpdateMsgs").prop('checked');
|
|
||||||
const allowUpdateInfo = async() => {
|
|
||||||
let result = await Meteor.callAsync('allow.updateInfo', updSet);
|
|
||||||
if (!result) {
|
|
||||||
// console.log(" ERROR changing update setting.");
|
|
||||||
showSnackbar("Update Setting Change Failed.", "red");
|
|
||||||
} else {
|
|
||||||
showSnackbar("Update Setting Changed Successfully!", "green");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
allowUpdateInfo();
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
<form class="row" style="gap: 1em;">
|
<form class="row" style="gap: 1em;">
|
||||||
<div class="col s12 m6 l4 chips chips-placeholder" id="taskName">
|
<div class="col s12 m6 l4 chips chips-placeholder" id="taskName">
|
||||||
</div>
|
</div>
|
||||||
<div class="col s12 m6 l4 input-field">
|
<div class="col s12 m6 l4 input-field outlined">
|
||||||
<select name="taskUser" id="taskUser" class="taskUser">
|
<select name="taskUser" id="taskUser" class="taskUser">
|
||||||
<option value="" disabled selected>Assign to user...</option>
|
<option value="" disabled selected>Assign to user...</option>
|
||||||
{{#each taskUsers}}
|
{{#each taskUsers}}
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="col s12 m6 l4 input-field">
|
<div class="col s12 m6 l4 input-field outlined">
|
||||||
<input type="text" class="datepicker" id="taskDate" />
|
<input type="text" class="datepicker" id="taskDate" />
|
||||||
<label for="taskDate">Task Date (multiple entries)</label>
|
<label for="taskDate">Task Date (multiple entries)</label>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ Template.taskForm.events({
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
let elemcc = document.getElementById('taskName');
|
let elemcc = document.getElementById('taskName');
|
||||||
let taskName = M.Chips.getInstance(elemcc).chipsData;
|
let taskName = M.Chips.getInstance(elemcc).chipsData;
|
||||||
// console.log(taskName);
|
console.log(taskName);
|
||||||
},
|
},
|
||||||
'change #taskDate' (event) {
|
'change #taskDate' (event) {
|
||||||
let taskDate = $("#taskDate").val();
|
let taskDate = $("#taskDate").val();
|
||||||
|
|
@ -69,6 +69,7 @@ Template.taskForm.events({
|
||||||
let taskDateErr = false;
|
let taskDateErr = false;
|
||||||
let userInfo;
|
let userInfo;
|
||||||
let actDate = [];
|
let actDate = [];
|
||||||
|
// console.dir(taskNameArr);
|
||||||
|
|
||||||
if (taskNameArr == null || taskNameArr == []) {
|
if (taskNameArr == null || taskNameArr == []) {
|
||||||
taskNameErr = true;
|
taskNameErr = true;
|
||||||
|
|
@ -91,19 +92,17 @@ Template.taskForm.events({
|
||||||
}
|
}
|
||||||
|
|
||||||
if (taskUserErr == false && taskDateErr == false && taskNameErr == false) {
|
if (taskUserErr == false && taskDateErr == false && taskNameErr == false) {
|
||||||
const addTask = async() => {
|
Meteor.call("add.task", taskNameArr, userInfo[0], userInfo[1], taskDateArr, actDate, function(err, result) {
|
||||||
let result = await Meteor.callAsync("add.task", taskNameArr, userInfo[0], userInfo[1], taskDateArr, actDate);
|
if (err) {
|
||||||
if (!result) {
|
console.log(" ERROR adding the new task: " + err);
|
||||||
// console.log(" ERROR adding the new task.");
|
|
||||||
} else {
|
} else {
|
||||||
// console.log(" SUCCESS adding the new task.");
|
console.log(" SUCCESS adding the new task.");
|
||||||
Session.set("taskDateArr", []);
|
Session.set("taskDateArr", []);
|
||||||
$("#taskDate").val("");
|
$("#taskDate").val("");
|
||||||
$("#taskUser").val("");
|
$("#taskUser").val("");
|
||||||
$('select').formSelect();
|
$('select').formSelect();
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
addTask();
|
|
||||||
} else {
|
} else {
|
||||||
showSnackbar("ERROR: Missing Required Fields!", "red");
|
showSnackbar("ERROR: Missing Required Fields!", "red");
|
||||||
}
|
}
|
||||||
|
|
@ -114,6 +113,7 @@ Template.taskForm.events({
|
||||||
Session.set("hideCompletedTasks", true);
|
Session.set("hideCompletedTasks", true);
|
||||||
} else {
|
} else {
|
||||||
Session.set("hideCompletedTasks", false);
|
Session.set("hideCompletedTasks", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -43,15 +43,13 @@ Template.taskTbl.events({
|
||||||
'click .markTaskComplete' (event) {
|
'click .markTaskComplete' (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
let taskId = this._id;
|
let taskId = this._id;
|
||||||
const markComp = async() => {
|
Meteor.call("markTask.complete", taskId, function(err, result) {
|
||||||
let result = await Meteor.callAsync("markTask.complete", taskId);
|
if (err) {
|
||||||
if (!result) {
|
console.log(" ERROR marking task completeL " + err);
|
||||||
// console.log(" ERROR marking task completeL " + err);
|
|
||||||
showSnackbar("ERROR Marking Task Complete!", "red");
|
showSnackbar("ERROR Marking Task Complete!", "red");
|
||||||
} else {
|
} else {
|
||||||
showSnackbar("Successfully Marked Task Complete!", "green");
|
showSnackbar("Successfully Marked Task Complete!", "green");
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
markComp();
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
@ -1,45 +1,6 @@
|
||||||
<template name="dashboard">
|
<template name="dashboard">
|
||||||
<h4>My Dashboard</h4>
|
<h4>My Dashboard</h4>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
{{#if $eq currConfig.allowUpdates true}}
|
|
||||||
{{#if $eq updatesExist true}}
|
|
||||||
<div class="col s12">
|
|
||||||
<ul class="collapsible green darken-3 white-text">
|
|
||||||
<li>
|
|
||||||
<div class="collapsible-header"><strong>Update Available</strong></div>
|
|
||||||
<div class="collapsible-body">
|
|
||||||
<div class="row">
|
|
||||||
{{#each updates}}
|
|
||||||
<div class="col s12">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col s12">
|
|
||||||
<h4>{{title}}</h4>
|
|
||||||
</div>
|
|
||||||
<div class="col s12">
|
|
||||||
Release Notes:
|
|
||||||
<p class="flow-text">{{{descriptionSinHTML}}}</p>
|
|
||||||
</div>
|
|
||||||
<div class="col s12">
|
|
||||||
Release Date:
|
|
||||||
<p class="flow-text">{{niceDate}}</p>
|
|
||||||
</div>
|
|
||||||
<div class="col s12">
|
|
||||||
<a href="{{releaseLink}}" target=”_blank”>Visit Release on Gitlab</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col s12">
|
|
||||||
<a class="btn waves-effect waves-light blue white-text readLink" id="{{_id}}">Mark Read</a>
|
|
||||||
</div>
|
|
||||||
<hr />
|
|
||||||
{{/each}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
{{/if}}
|
|
||||||
{{/if}}
|
|
||||||
<div class="col s12 m6 l4">
|
<div class="col s12 m6 l4">
|
||||||
<div class="card blue darken-3" id="taskInfoCard">
|
<div class="card blue darken-3" id="taskInfoCard">
|
||||||
<div class="card-content white-text">
|
<div class="card-content white-text">
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,7 @@ import { Menus } from '../../imports/api/menu.js';
|
||||||
import { MenuItems } from '../../imports/api/menuItems.js';
|
import { MenuItems } from '../../imports/api/menuItems.js';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import { TaskItems } from "../../imports/api/tasks";
|
import { TaskItems } from "../../imports/api/tasks";
|
||||||
import { UpdateInfo } from '../../imports/api/updateInfo.js';
|
|
||||||
import { SysConfig } from '../../imports/api/systemConfig.js';
|
|
||||||
import { FlowRouter } from 'meteor/ostrio:flow-router-extra';
|
|
||||||
import { M } from '../lib/assets/materialize.js';
|
|
||||||
|
|
||||||
Template.dashboard.onCreated(function() {
|
Template.dashboard.onCreated(function() {
|
||||||
this.subscribe("userList");
|
this.subscribe("userList");
|
||||||
|
|
@ -20,15 +17,10 @@ Template.dashboard.onCreated(function() {
|
||||||
// this.subscribe("myMenus");
|
// this.subscribe("myMenus");
|
||||||
this.subscribe("todayMenuItems");
|
this.subscribe("todayMenuItems");
|
||||||
this.subscribe("myTasks");
|
this.subscribe("myTasks");
|
||||||
this.subscribe("UpdateVersion");
|
|
||||||
this.subscribe("SystemConfig");
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.dashboard.onRendered(function() {
|
Template.dashboard.onRendered(function() {
|
||||||
setTimeout(function() {
|
|
||||||
var elems = document.querySelectorAll('.collapsible');
|
|
||||||
var instances = M.Collapsible.init(elems, {});
|
|
||||||
}, 200);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.dashboard.helpers({
|
Template.dashboard.helpers({
|
||||||
|
|
@ -64,64 +56,11 @@ Template.dashboard.helpers({
|
||||||
let todayDate = moment(now).format("MMM DD, YYYY");
|
let todayDate = moment(now).format("MMM DD, YYYY");
|
||||||
return todayDate;
|
return todayDate;
|
||||||
},
|
},
|
||||||
updates: function() {
|
|
||||||
let updateAvail = UpdateInfo.find({});
|
|
||||||
try {
|
|
||||||
if (!updateAvail) {
|
|
||||||
// console.log("No update info found.");
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
// console.dir(updateAvail);
|
|
||||||
return updateAvail;
|
|
||||||
}
|
|
||||||
} catch(error) {
|
|
||||||
console.log(" ERROR trying to grab update info: " + error);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
updatesExist: function() {
|
|
||||||
const ifUpdate = async() => {
|
|
||||||
let updateExists = await UpdateInfo.findOneAsync({ viewed: false });
|
|
||||||
if (!updateExists) {
|
|
||||||
// console.log("Update doesn't exist as false.");
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
// console.log("Update found with false.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let updateAvail = ifUpdate();
|
|
||||||
return updateAvail;
|
|
||||||
},
|
|
||||||
currConfig: function() {
|
|
||||||
const getSys = async() => {
|
|
||||||
let currSys = SysConfig.findOneAsync({});
|
|
||||||
try {
|
|
||||||
if (!currSys) {
|
|
||||||
// console.log("No System Config found.")
|
|
||||||
} else {
|
|
||||||
return currSys;
|
|
||||||
}
|
|
||||||
} catch(error) {
|
|
||||||
console.log(" ERROR trying to fetch current system config: " + error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let currConf = getSys();
|
|
||||||
return currConf;
|
|
||||||
},
|
|
||||||
descriptionSinHTML: function() {
|
|
||||||
let desc = this.description;
|
|
||||||
let sinH = $(desc).text();
|
|
||||||
return desc;
|
|
||||||
},
|
|
||||||
niceDate: function() {
|
|
||||||
let rDateNorm = this.date;
|
|
||||||
let rDate = moment(rDateNorm).format('LL');
|
|
||||||
return rDate;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.dashboard.events({
|
Template.dashboard.events({
|
||||||
"click .cardLink" (event) {
|
"click .cardLink" (event) {
|
||||||
|
event.preventDefault();
|
||||||
let link = event.currentTarget.id;
|
let link = event.currentTarget.id;
|
||||||
switch(link) {
|
switch(link) {
|
||||||
case "userMgmtLink":
|
case "userMgmtLink":
|
||||||
|
|
@ -147,6 +86,7 @@ Template.dashboard.events({
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'click .card' (event) {
|
'click .card' (event) {
|
||||||
|
event.preventDefault();
|
||||||
let cardId = event.currentTarget.id;
|
let cardId = event.currentTarget.id;
|
||||||
|
|
||||||
switch(cardId) {
|
switch(cardId) {
|
||||||
|
|
@ -171,23 +111,5 @@ Template.dashboard.events({
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
},
|
|
||||||
'click .readLink' (event) {
|
|
||||||
let eventId = event.currentTarget.id;
|
|
||||||
|
|
||||||
const markUpdate = async() => {
|
|
||||||
let result = await Meteor.callAsync('markUpdate.read', eventId);
|
|
||||||
try {
|
|
||||||
if (!result) {
|
|
||||||
// console.log(" Error marking this read.");
|
|
||||||
showSnackbar("Error Marking Read!", "red");
|
|
||||||
} else {
|
|
||||||
showSnackbar("Successfully Marked as Read.", "green");
|
|
||||||
}
|
|
||||||
} catch(error) {
|
|
||||||
console.log(" ERROR trying to mark this update as read: " + error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
markUpdate();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -22,16 +22,14 @@ Template.deleteConfirmationModal.events({
|
||||||
let deleteId = Session.get("deleteId");
|
let deleteId = Session.get("deleteId");
|
||||||
let method = Session.get("method");
|
let method = Session.get("method");
|
||||||
|
|
||||||
const delItem = async() => {
|
Meteor.call(method, deleteId, function(err, result) {
|
||||||
let result = await Meteor.callAsync(method, deleteId);
|
if (err) {
|
||||||
if (!result) {
|
|
||||||
console.log(" ERROR deleting item from modal: " + err);
|
console.log(" ERROR deleting item from modal: " + err);
|
||||||
} else {
|
} else {
|
||||||
console.log(" SUCCESSFULLY deleted.");
|
console.log(" SUCCESSFULLY deleted.");
|
||||||
// put the new modal open / close here
|
// put the new modal open / close here
|
||||||
// $('#modalDelete').modal('close');
|
// $('#modalDelete').modal('close');
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
delItem();
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
@ -11,14 +11,11 @@
|
||||||
<li><a href="#" id="mylists" class="navBtn {{#if $eq myTheme 'dark'}}white-text{{/if}}">My Lists</a></li>
|
<li><a href="#" id="mylists" class="navBtn {{#if $eq myTheme 'dark'}}white-text{{/if}}">My Lists</a></li>
|
||||||
<li><a href="#" id="mymenus" class="navBtn {{#if $eq myTheme 'dark'}}white-text{{/if}}">My Menus</a></li>
|
<li><a href="#" id="mymenus" class="navBtn {{#if $eq myTheme 'dark'}}white-text{{/if}}">My Menus</a></li>
|
||||||
<li><a href="#" id="myTasks" class="navBtn {{#if $eq myTheme 'dark'}}white-text{{/if}}">My Tasks</a></li>
|
<li><a href="#" id="myTasks" class="navBtn {{#if $eq myTheme 'dark'}}white-text{{/if}}">My Tasks</a></li>
|
||||||
<li><a href="#" id="mySettings" class="navBtn {{#if $eq myTheme 'dark'}}white-text{{/if}}">My Settings</a></li>
|
<li><a href="#" class="navBtn {{#if $eq myTheme 'dark'}}white-text{{/if}}" id="mySettings">My Settings</a></li>
|
||||||
{{#if isInRole "systemadmin"}}
|
{{#if isInRole 'systemadmin'}}
|
||||||
<li><a href="#" id="manage" class="navBtn {{#if $eq myTheme 'dark'}}white-text{{/if}}">Manage</a></li>
|
<li><a href="#" id="manage" class="navBtn {{#if $eq myTheme 'dark'}}white-text{{/if}}">Manage</a></li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<li class="signOut {{#if $eq myTheme 'dark'}}white-text{{/if}}"><a href="#" class="signOut">Log Out</a></li>
|
<li class="signOut {{#if $eq myTheme 'dark'}}white-text{{/if}}"><a href="#" class="signOut">Log Out</a></li>
|
||||||
{{#if $eq updateExists true}}
|
|
||||||
<li><a href="#!"><i class="material-icons white-text navBtn" id='dashboard'>notifications</i></a></li>
|
|
||||||
{{/if}}
|
|
||||||
{{else}}
|
{{else}}
|
||||||
<li><a href="#!" id="login" class="navBtn {{#if $eq myTheme 'dark'}}white-text{{/if}}">Login</a></li>
|
<li><a href="#!" id="login" class="navBtn {{#if $eq myTheme 'dark'}}white-text{{/if}}">Login</a></li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
@ -30,12 +27,9 @@
|
||||||
<li><a href="#!" id="mylists" class="navBtn {{#if $eq myTheme 'dark'}}white-text{{/if}}">My Lists</a></li>
|
<li><a href="#!" id="mylists" class="navBtn {{#if $eq myTheme 'dark'}}white-text{{/if}}">My Lists</a></li>
|
||||||
<li><a href="#!" id="mymenus" class="navBtn {{#if $eq myTheme 'dark'}}white-text{{/if}}">My Menus</a></li>
|
<li><a href="#!" id="mymenus" class="navBtn {{#if $eq myTheme 'dark'}}white-text{{/if}}">My Menus</a></li>
|
||||||
<li><a href="#!" id="myTasks" class="navBtn {{#if $eq myTheme 'dark'}}white-text{{/if}}">My Tasks</a></li>
|
<li><a href="#!" id="myTasks" class="navBtn {{#if $eq myTheme 'dark'}}white-text{{/if}}">My Tasks</a></li>
|
||||||
<li><a href="#!" id="mySettings" class="navBtn {{#if $eq myTheme 'dark'}}white-text{{/if}}">My Settings</a></li>
|
<li><a href="#!" class="navBtn" id="mySettings {{#if $eq myTheme 'dark'}}white-text{{/if}}">My Settings</a></li>
|
||||||
{{#if isInRole 'systemadmin'}}
|
{{#if isInRole 'systemadmin'}}
|
||||||
<li><a href="#!" id="manage" class="navBtn {{#if $eq myTheme 'dark'}}white-text{{/if}}">Manage</a></li>
|
<li><a href="#!" id="manage" class="navBtn {{#if $eq myTheme 'dark'}}white-text{{/if}}">Manage</a></li>
|
||||||
{{#if $eq updateExists true}}
|
|
||||||
<li><a href="#!"><i class="material-icons navBtn" id="dashboard">notifications</i></a></li>
|
|
||||||
{{/if}}
|
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<li><a href="#!" class="signOut {{#if $eq myTheme 'dark'}}white-text{{/if}}">Sign Out</a></li>
|
<li><a href="#!" class="signOut {{#if $eq myTheme 'dark'}}white-text{{/if}}">Sign Out</a></li>
|
||||||
{{else}}
|
{{else}}
|
||||||
|
|
|
||||||
|
|
@ -1,38 +1,14 @@
|
||||||
import { Meteor } from 'meteor/meteor';
|
|
||||||
import { M } from '../lib/assets/materialize';
|
import { M } from '../lib/assets/materialize';
|
||||||
import { UpdateInfo } from '../../imports/api/updateInfo.js';
|
|
||||||
import { FlowRouter } from 'meteor/ostrio:flow-router-extra';
|
|
||||||
import { Roles } from 'meteor/roles';
|
|
||||||
|
|
||||||
Template.headerBar.onCreated(function() {
|
Template.headerBar.onCreated(function() {
|
||||||
this.subscribe("UpdateVersion");
|
|
||||||
this.subscribe("assignment");
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.headerBar.onRendered(function() {
|
Template.headerBar.onRendered(function() {
|
||||||
var elems = document.querySelectorAll('.sidenav');
|
var elems = document.querySelectorAll('.sidenav');
|
||||||
var instances = M.Sidenav.init(elems, {});
|
var instances = M.Sidenav.init(elems, {});
|
||||||
var elemd = document.querySelectorAll('.dropdown-trigger');
|
var elemd = document.querySelectorAll('.dropdown-trigger');
|
||||||
var instances = M.Dropdown.init(elemd, {});
|
var instances = M.Dropdown.init(elemd, {});
|
||||||
|
|
||||||
setTimeout(function() {
|
|
||||||
const getRoles = async() => {
|
|
||||||
let userId = Meteor.userId();
|
|
||||||
// let isRole = await Roles.userIsInRoleAsync(userId, "systemadmin");
|
|
||||||
let isRole = await Roles.getRolesForUserAsync(userId);
|
|
||||||
try {
|
|
||||||
if (!isRole) {
|
|
||||||
// console.log("SystemAdmin role for user not found: " + isRole);;
|
|
||||||
} else {
|
|
||||||
// console.log("Found role for the user: ");
|
|
||||||
// console.dir(isRole);
|
|
||||||
}
|
|
||||||
} catch(error) {
|
|
||||||
console.log(" ERROR getting role for user: " + error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
getRoles();
|
|
||||||
}, 1000);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.headerBar.helpers({
|
Template.headerBar.helpers({
|
||||||
|
|
@ -41,15 +17,7 @@ Template.headerBar.helpers({
|
||||||
},
|
},
|
||||||
myTheme: function() {
|
myTheme: function() {
|
||||||
return Session.get("myTheme");
|
return Session.get("myTheme");
|
||||||
},
|
}
|
||||||
updateExists: function() {
|
|
||||||
let update = UpdateInfo.find({ viewed: false }).fetch();
|
|
||||||
if (update.length > 0) {
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.headerBar.events({
|
Template.headerBar.events({
|
||||||
|
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
<template name="listItemTblByStore">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col s12">
|
|
||||||
<span>Products with no assigned store, will not be displayed on this version of the list.</span>
|
|
||||||
<ul class="collection with-header">
|
|
||||||
{{#each stores}}
|
|
||||||
{{#if $eq storeInList true}}
|
|
||||||
<li class="collection-header"><h4>{{storeName}}</h4></li>
|
|
||||||
{{#each thisListItems}}
|
|
||||||
<li class="collection-item" id="{{_id}}-{{itemOrdered}}">
|
|
||||||
<span>
|
|
||||||
{{#if $eq itemOrdered true}}
|
|
||||||
<strike>{{itemName}}</strike>
|
|
||||||
{{else}}
|
|
||||||
{{itemName}}
|
|
||||||
{{/if}}
|
|
||||||
</span>
|
|
||||||
<i class="material-icons clickable deleteListItem right modal-trigger" href="#modalDelete">delete</i>
|
|
||||||
<i class="material-icons clickable markListItemReceived right">check</i>
|
|
||||||
</li>
|
|
||||||
{{/each}}
|
|
||||||
{{/if}}
|
|
||||||
{{/each}}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
@ -1,89 +0,0 @@
|
||||||
import { ListItems } from '../../imports/api/listItems.js';
|
|
||||||
import { M } from '../lib/assets/materialize.js';
|
|
||||||
import { UserLast } from '../../imports/api/userLast.js';
|
|
||||||
import { Stores } from '../../imports/api/stores.js';
|
|
||||||
|
|
||||||
Template.listItemTblByStore.onCreated(function() {
|
|
||||||
this.autorun( () => {
|
|
||||||
this.subscribe("myListItems", Session.get("listId"));
|
|
||||||
});
|
|
||||||
this.subscribe("storeInfo");
|
|
||||||
this.subscribe("userLastView");
|
|
||||||
});
|
|
||||||
|
|
||||||
Template.listItemTblByStore.onRendered(function() {
|
|
||||||
Session.set("showReceivedItems", false);
|
|
||||||
Session.set("searchVal", "");
|
|
||||||
});
|
|
||||||
|
|
||||||
Template.listItemTblByStore.helpers({
|
|
||||||
stores: function() {
|
|
||||||
let storeList = Stores.find({});
|
|
||||||
return storeList;
|
|
||||||
},
|
|
||||||
thisListItems: function() {
|
|
||||||
let showReceived = Session.get("showReceivedItems");
|
|
||||||
let searchVal = Session.get("searchVal");
|
|
||||||
let store = this.storeName;
|
|
||||||
if (showReceived == false) {
|
|
||||||
if (typeof searchVal == 'undefined' || searchVal.length === 0) {
|
|
||||||
return ListItems.find({ itemStore: store, itemReceived: false });
|
|
||||||
} else {
|
|
||||||
return ListItems.find({ itemStore: store, itemReceived: false, itemName: { $regex: searchVal + '.*', $options: 'i' }})
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (typeof searchVal == 'undefined' || searchVal.length == 0) {
|
|
||||||
return ListItems.find({ itemStore: store });
|
|
||||||
} else {
|
|
||||||
return ListItems.find({ itemStore: store, itemName: { $regex: searchVal + '.*', $options: 'i' } });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
storeInList: function() {
|
|
||||||
let noStoresInList = ListItems.find({ itemStore: this.storeName }).count();
|
|
||||||
if (noStoresInList > 0) {
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
Template.listItemTblByStore.events({
|
|
||||||
'click li' (event) {
|
|
||||||
let itemSel = (event.currentTarget.id).split('-');
|
|
||||||
let itemId = itemSel[0];
|
|
||||||
let itemOrder = itemSel[1];
|
|
||||||
|
|
||||||
if (typeof itemOrder == 'undefined' || itemOrder == "" || itemOrder == false) {
|
|
||||||
Meteor.call("setOrdered.listItem", itemId, function(err, result) {
|
|
||||||
if (err) {
|
|
||||||
// console.log(" ERROR updating order status to ordered: " + err);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
Meteor.call("setNotOrdered.listItem", itemId, function(err, result) {
|
|
||||||
if (err) {
|
|
||||||
// console.log(" ERROR updating order status to unordered: " + err);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'click .markListItemReceived' (event) {
|
|
||||||
event.preventDefault();
|
|
||||||
Meteor.call('setReceived.listItem', this._id, function(err, result) {
|
|
||||||
if (err) {
|
|
||||||
// console.log(" ERROR setting item as received: " + err);
|
|
||||||
} else {
|
|
||||||
// console.log(" SUCCESS setting item received.");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
'click .deleteListItem' (event) {
|
|
||||||
event.preventDefault();
|
|
||||||
Session.set("deleteId", this._id);
|
|
||||||
Session.set("method", "delete.listItem");
|
|
||||||
Session.set("item", this.itemName);
|
|
||||||
Session.set("view", "List Items");
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
@ -37,7 +37,7 @@
|
||||||
</div>
|
</div>
|
||||||
{{else}}
|
{{else}}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col s8 m9 l10 input-field outlined">
|
<div class="col s8 m9 l10 input-field">
|
||||||
<input type="text" class="autocomplete" id="findListItems" autocomplete="off" />
|
<input type="text" class="autocomplete" id="findListItems" autocomplete="off" />
|
||||||
<label for="findListItems">Item...</label>
|
<label for="findListItems">Item...</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -46,4 +46,4 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -39,7 +39,7 @@ Template.listItemsForm.helpers({
|
||||||
selListId = selListInfo.viewId;
|
selListId = selListInfo.viewId;
|
||||||
Session.set("listId", selListId);
|
Session.set("listId", selListId);
|
||||||
} else {
|
} else {
|
||||||
// console.log("not finding any value for viewId.");
|
console.log("not finding any value for viewId.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let listInfo = Lists.findOne({ _id: selListId });
|
let listInfo = Lists.findOne({ _id: selListId });
|
||||||
|
|
@ -48,7 +48,6 @@ Template.listItemsForm.helpers({
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
itemProdName: function() {
|
itemProdName: function() {
|
||||||
|
|
||||||
return Products.find({});
|
return Products.find({});
|
||||||
},
|
},
|
||||||
editMode: function() {
|
editMode: function() {
|
||||||
|
|
@ -67,7 +66,14 @@ Template.listItemsForm.events({
|
||||||
if (item == null || item == "") {
|
if (item == null || item == "") {
|
||||||
Session.set("itemReqErr", true);
|
Session.set("itemReqErr", true);
|
||||||
} else {
|
} else {
|
||||||
addItem(item, listId);
|
Meteor.call("add.listItem", item, listId, function(err, result) {
|
||||||
|
if (err) {
|
||||||
|
console.log(" ERROR adding item to list: " + err);
|
||||||
|
} else {
|
||||||
|
console.log(" SUCCESS adding item to list.");
|
||||||
|
$("#findListItems").val("");
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'keydown #findListItems' (event) {
|
'keydown #findListItems' (event) {
|
||||||
|
|
@ -77,7 +83,14 @@ Template.listItemsForm.events({
|
||||||
if (item == null || item == "") {
|
if (item == null || item == "") {
|
||||||
Session.set("itemReqErr", true);
|
Session.set("itemReqErr", true);
|
||||||
} else {
|
} else {
|
||||||
addItem(item, listId);
|
Meteor.call("add.listItem", item, listId, function(err, result) {
|
||||||
|
if (err) {
|
||||||
|
console.log(" ERROR adding item to list: " + err);
|
||||||
|
} else {
|
||||||
|
console.log(" SUCCESS adding item to list.");
|
||||||
|
$("#findListItems").val("");
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -97,42 +110,24 @@ Template.listItemsForm.events({
|
||||||
'keyup #findListItems' (event) {
|
'keyup #findListItems' (event) {
|
||||||
if (event.which !== 13) {
|
if (event.which !== 13) {
|
||||||
let findItemVal = $("#findListItems").val();
|
let findItemVal = $("#findListItems").val();
|
||||||
// console.log(findItemVal);
|
|
||||||
let listItemInfo = Products.find({ prodName: {$regex: findItemVal + '.*', $options: 'i'}}).fetch();
|
let listItemInfo = Products.find({ prodName: {$regex: findItemVal + '.*', $options: 'i'}}).fetch();
|
||||||
if (!listItemInfo) {
|
if (typeof listItemInfo != 'undefined' && listItemInfo != "" && listItemInfo != null) {
|
||||||
// console.log("No data for key input.");
|
|
||||||
} else {
|
|
||||||
getDataList(listItemInfo);
|
getDataList(listItemInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'click #filterOn' (event) {
|
'click #filterOn' (event) {
|
||||||
|
event.preventDefault();
|
||||||
Session.set("filtering", true);
|
Session.set("filtering", true);
|
||||||
},
|
},
|
||||||
'click #filterOff' (event) {
|
'click #filterOff' (event) {
|
||||||
// clear filter field
|
event.preventDefault();
|
||||||
Session.set("searchVal", "");
|
|
||||||
$("#searchListItems").val("");
|
|
||||||
Session.set("filtering", false);
|
Session.set("filtering", false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
getDataList = function(listItemInfo) {
|
getDataList = function(listItemInfo) {
|
||||||
// console.log(listItemInfo);
|
|
||||||
let listItemObjArray = [];
|
let listItemObjArray = [];
|
||||||
listItemObjArray = listItemInfo.map(info => ({ id: info._id, text: info.prodName, store: info.prodStore }))
|
listItemObjArray = listItemInfo.map(info => ({ id: info._id, text: info.prodName, store: info.prodStore }))
|
||||||
Session.set("findListItems", listItemObjArray);
|
Session.set("findListItems", listItemObjArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
const addItem = async(item, listId) => {
|
|
||||||
let result = await Meteor.callAsync("add.listItem", item, listId);
|
|
||||||
try {
|
|
||||||
if (!result) {
|
|
||||||
// console.log(" ISSUE adding list item. See logs.");
|
|
||||||
} else {
|
|
||||||
$("#findListItems").val("");
|
|
||||||
}
|
|
||||||
} catch(error) {
|
|
||||||
console.log(" ERROR adding list item: " + error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,22 +1,5 @@
|
||||||
<template name="listItemsMain">
|
<template name="listItemsMain">
|
||||||
{{> listItemsForm}}
|
{{> listItemsForm}}
|
||||||
<hr>
|
<hr>
|
||||||
<div class="row">
|
{{> listItemsTbl}}
|
||||||
<div class="col s12">
|
</template>
|
||||||
<ul class="tabs">
|
|
||||||
<li class="tab col s6">
|
|
||||||
<a href="#listOnly" class='active'>List</a>
|
|
||||||
</li>
|
|
||||||
<li class="tab col s6">
|
|
||||||
<a href="#listByStore">List by Store</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="listOnly" class="col s12">
|
|
||||||
{{> listItemsTbl}}
|
|
||||||
</div>
|
|
||||||
<div id="listByStore" class="col s12">
|
|
||||||
{{> listItemTblByStore}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
@ -1,12 +1,9 @@
|
||||||
import { M } from '../lib/assets/materialize.js';
|
|
||||||
|
|
||||||
Template.listItemsMain.onCreated(function() {
|
Template.listItemsMain.onCreated(function() {
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.listItemsMain.onRendered(function() {
|
Template.listItemsMain.onRendered(function() {
|
||||||
var elems = document.querySelectorAll('.tabs');
|
|
||||||
var instance = M.Tabs.init(elems, {});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.listItemsMain.helpers({
|
Template.listItemsMain.helpers({
|
||||||
|
|
@ -15,4 +12,4 @@ Template.listItemsMain.helpers({
|
||||||
|
|
||||||
Template.listItemsMain.events({
|
Template.listItemsMain.events({
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
@ -20,15 +20,15 @@ Template.listItemsTbl.onRendered(function() {
|
||||||
Template.listItemsTbl.helpers({
|
Template.listItemsTbl.helpers({
|
||||||
'thisListItems': function() {
|
'thisListItems': function() {
|
||||||
let showRecvd = Session.get("showReceivedItems");
|
let showRecvd = Session.get("showReceivedItems");
|
||||||
let searchVal = Session.get("searchVal");
|
let searchVal = Session.get("searchVal");;
|
||||||
if (showRecvd == false) {
|
if (showRecvd == false) {
|
||||||
if (!searchVal) {
|
if (typeof searchVal == 'undefined' || searchVal.length === 0) {
|
||||||
return ListItems.find({ itemReceived: false });
|
return ListItems.find({ itemReceived: false });
|
||||||
} else {
|
} else {
|
||||||
return ListItems.find({ itemReceived: false, itemName: { $regex: searchVal + '.*', $options: 'i' } });
|
return ListItems.find({ itemReceived: false, itemName: { $regex: searchVal + '.*', $options: 'i' } });
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!searchVal) {
|
if (typeof searchVal == 'undefined' || searchVal.length == 0) {
|
||||||
return ListItems.find({});
|
return ListItems.find({});
|
||||||
} else {
|
} else {
|
||||||
return ListItems.find({ itemName: { $regex: searchVal + '.*', $options: 'i' } });
|
return ListItems.find({ itemName: { $regex: searchVal + '.*', $options: 'i' } });
|
||||||
|
|
@ -40,37 +40,34 @@ Template.listItemsTbl.helpers({
|
||||||
Template.listItemsTbl.events({
|
Template.listItemsTbl.events({
|
||||||
'click li' (event) {
|
'click li' (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
const setOrd = async() => {
|
let itemInfo = ListItems.findOne({ _id: this._id });
|
||||||
let itemInfo = await ListItems.findOneAsync({ _id: this._id });
|
if (itemInfo.itemOrdered == true) {
|
||||||
if (itemInfo.itemOrdered == true) {
|
Meteor.call('setNotOrdered.listItem', this._id, function(err, result) {
|
||||||
let result = await Meteor.callAsync('setNotOrdered.listItem', this._id);
|
if (err) {
|
||||||
if (!result) {
|
console.log(" ERROR setting this item as NOT ordered: " + err);
|
||||||
// console.log(" ERROR seeting item as not ordered.");
|
|
||||||
} else {
|
} else {
|
||||||
// console.log(" SUCCESS setting item as ordered.");
|
// console.log(" SUCCESS setting this item as NOT ordered.");
|
||||||
}
|
}
|
||||||
} else {
|
});
|
||||||
let result = Meteor.callAsync('setOrdered.listItem', this._id);
|
} else {
|
||||||
if (!result) {
|
Meteor.call('setOrdered.listItem', this._id, function(err, result) {
|
||||||
// console.log(" ERROR marking item ordered: " + err);
|
if (err) {
|
||||||
|
console.log(" ERROR marking item ordered: " + err);
|
||||||
} else {
|
} else {
|
||||||
// console.log(" SUCCESS marking this item ordered.");
|
// console.log(" SUCCESS marking this item ordered.");
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
setOrd();
|
|
||||||
},
|
},
|
||||||
'click .markListItemReceived' (event) {
|
'click .markListItemReceived' (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
const setRcvd = async() => {
|
Meteor.call('setReceived.listItem', this._id, function(err, result) {
|
||||||
let result = await Meteor.callAsync('setReceived.listItem', this._id);
|
if (err) {
|
||||||
if (!result) {
|
console.log(" ERROR setting item as received: " + err);
|
||||||
// console.log("Item not marked properly - why?");
|
|
||||||
} else {
|
} else {
|
||||||
// console.log("Item Marked Received.");
|
// console.log(" SUCCESS setting item received.");
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
setRcvd();
|
|
||||||
},
|
},
|
||||||
'click .deleteListItem' (event) {
|
'click .deleteListItem' (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
@ -79,4 +76,4 @@ Template.listItemsTbl.events({
|
||||||
Session.set("item", this.itemName);
|
Session.set("item", this.itemName);
|
||||||
Session.set("view", "List Items");
|
Session.set("view", "List Items");
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
import { Lists } from '../../imports/api/lists.js';
|
import { Lists } from '../../imports/api/lists.js';
|
||||||
import { M } from '../lib/assets/materialize.js';
|
import { M } from '../lib/assets/materialize.js';
|
||||||
import { FlowRouter } from 'meteor/ostrio:flow-router-extra';
|
|
||||||
|
|
||||||
Template.listsTbl.onCreated(function() {
|
Template.listsTbl.onCreated(function() {
|
||||||
this.subscribe("myLists");
|
this.subscribe("myLists");
|
||||||
|
|
@ -28,17 +27,15 @@ Template.listsTbl.events({
|
||||||
} else {
|
} else {
|
||||||
// console.log("listId is: " + listId);
|
// console.log("listId is: " + listId);
|
||||||
Session.set("listId", listId);
|
Session.set("listId", listId);
|
||||||
const addUserLast = async() => {
|
Meteor.call('add.userLast', "List", listId, function(err, result) {
|
||||||
let result = await Meteor.callAsync('add.userLast', "List", listId);
|
if (err) {
|
||||||
if (!result) {
|
console.log(" ERROR setting user last list id in db: " + err);
|
||||||
// console.log(" ERROR setting user last list id in db: " + err);
|
|
||||||
} else {
|
} else {
|
||||||
setTimeout(function() {
|
Meteor.setTimeout(function() {
|
||||||
FlowRouter.go('/listitems');
|
FlowRouter.go('/listitems');
|
||||||
}, 100);
|
}, 100);
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
addUserLast();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -50,17 +47,15 @@ Template.listsTbl.events({
|
||||||
let splitList = listFullId.split("_");
|
let splitList = listFullId.split("_");
|
||||||
let listId = splitList[1];
|
let listId = splitList[1];
|
||||||
// console.log("listId is " + listId);
|
// console.log("listId is " + listId);
|
||||||
const markComp = async() => {
|
Meteor.call("mark.complete", listId, function(err, result){
|
||||||
let result = await Meteor.callAsync("mark.complete", listId);
|
if (err) {
|
||||||
if (!result) {
|
console.log(" ERROR marking list complete! " + err);
|
||||||
// console.log(" ERROR marking list complete!");
|
|
||||||
showSnackbar("ERROR! List Not Makred Complete!", "red");
|
showSnackbar("ERROR! List Not Makred Complete!", "red");
|
||||||
} else {
|
} else {
|
||||||
// console.log(" SUCCESS marking list complete.");
|
// console.log(" SUCCESS marking list complete.");
|
||||||
showSnackbar("List Marked Complete!", "green");
|
showSnackbar("List Marked Complete!", "green");
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
markComp();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -7,27 +7,20 @@ Template.MainLayout.onCreated(function() {
|
||||||
Template.MainLayout.onRendered(function() {
|
Template.MainLayout.onRendered(function() {
|
||||||
this.autorun(() => {
|
this.autorun(() => {
|
||||||
let myId = Meteor.userId();
|
let myId = Meteor.userId();
|
||||||
const getConfig = async() => {
|
let myprefs = UserConfig.findOne({ user: myId });
|
||||||
let myprefs = await UserConfig.findOneAsync({ user: myId });
|
if (typeof myprefs != 'undefined') {
|
||||||
try {
|
if (myprefs.darkMode == "light") {
|
||||||
if (!myprefs) {
|
console.log("Found theme as light");
|
||||||
// console.log("User Prefs appear undefined.");
|
Session.set("myTheme", "light");
|
||||||
} else {
|
document.documentElement.setAttribute('theme', "light");
|
||||||
if (myprefs.darkMode == "light") {
|
} else {
|
||||||
// console.log("Found theme as light");
|
console.log("Found theme as dark");
|
||||||
Session.set("myTheme", "light");
|
Session.set("myTheme", "dark");
|
||||||
document.documentElement.setAttribute('theme', "light");
|
document.documentElement.setAttribute('theme', "dark");
|
||||||
} else {
|
}
|
||||||
// console.log("Found theme as dark");
|
} else {
|
||||||
Session.set("myTheme", "dark");
|
console.log("User Prefs appear undefined.");
|
||||||
document.documentElement.setAttribute('theme', "dark");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch(error) {
|
|
||||||
console.log(" ERROR getting user preferences: " + error);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
getConfig();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,9 +39,10 @@
|
||||||
<a class="left btn waves-effect waves-light orange white-text modal-close">Cancel</a>
|
<a class="left btn waves-effect waves-light orange white-text modal-close">Cancel</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col s6 m6 l6">
|
<div class="col s6 m6 l6">
|
||||||
<a class="right btn waves-effect waves-light green white-text saveProdsToList modal-close" id="saveProdsToList">Save to List</a>
|
<a class="right btn waves-effect waves-light green white-text saveProdsToList" id="saveProdsToList">Save to List</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{> snackbar}}
|
{{> snackbar}}
|
||||||
|
|
|
||||||
|
|
@ -31,9 +31,9 @@ Template.addProdToListModal.helpers({
|
||||||
},
|
},
|
||||||
productToChoose: function() {
|
productToChoose: function() {
|
||||||
let menuItemId = Session.get("menuItemId");
|
let menuItemId = Session.get("menuItemId");
|
||||||
// console.log("Menu Item Id received is: " + menuItemId);
|
console.log("Menu Item Id received is: " + menuItemId);
|
||||||
let prodLinkLIst = MenuProdLinks.find({ menuItemId: menuItemId});
|
let prodLinkLIst = MenuProdLinks.find({ menuItemId: menuItemId});
|
||||||
// console.dir(prodLinkLIst);
|
console.dir(prodLinkLIst);
|
||||||
if (typeof prodLinkLIst != 'undefined' && prodLinkLIst != "" && prodLinkLIst != null) {
|
if (typeof prodLinkLIst != 'undefined' && prodLinkLIst != "" && prodLinkLIst != null) {
|
||||||
return prodLinkLIst;
|
return prodLinkLIst;
|
||||||
}
|
}
|
||||||
|
|
@ -44,23 +44,24 @@ Template.addProdToListModal.events({
|
||||||
'click .productListing' (event) {
|
'click .productListing' (event) {
|
||||||
let itemId = event.currentTarget.id;
|
let itemId = event.currentTarget.id;
|
||||||
let selected = Session.get("itemsSelected");
|
let selected = Session.get("itemsSelected");
|
||||||
// console.log("Item clicked: " + itemId);
|
console.log("Item clicked: " + itemId);
|
||||||
selected.push(itemId);
|
selected.push(itemId);
|
||||||
// console.dir(selected);
|
console.dir(selected);
|
||||||
Session.set("itemsSelected", selected);
|
Session.set("itemsSelected", selected);
|
||||||
},
|
},
|
||||||
'click #saveProdsToList' (event) {
|
'click #saveProdsToList' (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
let selectedItems = Session.get("itemsSelected");
|
let selectedItems = Session.get("itemsSelected");
|
||||||
let listId = $("#chooseList").val();
|
let listId = $("#chooseList").val();
|
||||||
const addItemsFromMenu = async() => {
|
// console.log(" calling meteor method with items: ");
|
||||||
let result = await Meteor.callAsync('add.itemsFromMenuItem', selectedItems, listId);
|
// console.dir(selectedItems);
|
||||||
if (!result) {
|
// console.log(" and list id: "+ listId);
|
||||||
console.log(" ERROR adding menu components to list: ");
|
Meteor.call('add.itemsFromMenuItem', selectedItems, listId, function(err, result) {
|
||||||
|
if (err) {
|
||||||
|
console.log(" ERROR adding menu components to list: " + err);
|
||||||
} else {
|
} else {
|
||||||
showSnackbar("Items Added to List!", "green");
|
showSnackbar("Items Added to List!", "green");
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
addItemsFromMenu();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -38,27 +38,13 @@ Template.menuItemsForm.helpers({
|
||||||
if (Session.get("menuId")) {
|
if (Session.get("menuId")) {
|
||||||
menuId = Session.get("menuId");
|
menuId = Session.get("menuId");
|
||||||
} else {
|
} else {
|
||||||
const menuInfor = async() => {
|
menuId = UserLast.findOne({ view: "Menu" }).viewId;
|
||||||
let result = await UserLast.findOneAsync({ view: "Menu" }).viewId;
|
|
||||||
if (!result) {
|
|
||||||
|
|
||||||
} else {
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let menuId = menuInfor();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const menuData = async() => {
|
let menuInfo = Menus.findOne({ _id: menuId });
|
||||||
let menuInfo = await Menus.findOneAsync({ _id: menuId });
|
if (menuInfo) {
|
||||||
if (!menuInfo) {
|
return menuInfo.menuName;
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
return menuInfo.menuName;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
let menuInformation = menuData();
|
|
||||||
return menuInformation;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -69,77 +55,49 @@ Template.menuItemsForm.events({
|
||||||
let dateSrv = $("#dateServed").val();
|
let dateSrv = $("#dateServed").val();
|
||||||
let menuId = Session.get("menuId");
|
let menuId = Session.get("menuId");
|
||||||
|
|
||||||
if (menuId == null || menuId == "") {
|
|
||||||
console.log(" ---- NO MENU ID! ----");
|
|
||||||
}
|
|
||||||
|
|
||||||
const mie = async() => {
|
let menuItemExists = MenuItems.findOne({ itemName: menuItem });
|
||||||
let menuItemExists = await MenuItems.findOneAsync({ itemName: menuItem });
|
|
||||||
if (!menuItemExists) {
|
|
||||||
// call to add it
|
|
||||||
notExists();
|
|
||||||
} else {
|
|
||||||
// call to add it to the menu only
|
|
||||||
console.dir(menuItemExists);
|
|
||||||
itExists(menuItemExists);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mie();
|
|
||||||
|
|
||||||
const notExists = async() => {
|
if (typeof menuItemExists != 'undefined' && menuItemExists != null && menuItemExists != "") {
|
||||||
// add the item as new and add to the menu
|
|
||||||
if (menuItem == null || menuItem == "") {
|
|
||||||
Session.set("menuItemErr", true);
|
|
||||||
} else {
|
|
||||||
const addMenuItem = async() => {
|
|
||||||
let result = await Meteor.callAsync('add.menuItem', menuItem);
|
|
||||||
if (!result) {
|
|
||||||
// console.log(" ERROR adding menu item: " + err);
|
|
||||||
} else {
|
|
||||||
// console.log(" SUCCESS adding menu item. Result is: " + result);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let addedItem = await addMenuItem();
|
|
||||||
|
|
||||||
if (!addedItem) {
|
|
||||||
// console.log("Item was not added.");
|
|
||||||
} else {
|
|
||||||
// now add this item to the menu
|
|
||||||
// console.log("Added Item = " + addedItem);
|
|
||||||
const addToMenu = async() => {
|
|
||||||
let result2 = await Meteor.callAsync('addto.Menu', menuId, menuItem, addedItem, dateSrv, false);
|
|
||||||
if (!result2) {
|
|
||||||
// console.log(" ERROR adding menuitem to menu: " + error);
|
|
||||||
} else {
|
|
||||||
$("#menuItemInp").val("");
|
|
||||||
$("#dateServed").val("");
|
|
||||||
// console.log("Added item to menu - no problem.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
addToMenu();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const itExists = async(menuItemExists) => {
|
|
||||||
// use the existing item on the menu
|
// use the existing item on the menu
|
||||||
let menuItemId = menuItemExists._id;
|
let menuItemId = menuItemExists._id;
|
||||||
let isLinked = menuItemExists.isLinked;
|
let isLinked = menuItemExists.isLinked;
|
||||||
if (menuItem == null || menuItem == "") {
|
if (menuItem == null || menuItem == "") {
|
||||||
Session.set("menuItemErr", true);
|
Session.set("menuItemErr", true);
|
||||||
} else {
|
} else {
|
||||||
const addToMenu = async() => {
|
Meteor.call('addto.Menu', menuId, menuItem, menuItemId, dateSrv, isLinked, function(error, nresult) {
|
||||||
let result = await Meteor.callAsync('addto.Menu', menuId, menuItem, menuItemId, dateSrv, isLinked);
|
if (error) {
|
||||||
if (!result) {
|
console.log(" ERROR adding menuitem to menu: " + error);
|
||||||
// console.log(" ERROR adding menuitem to menu: " + error);
|
|
||||||
} else {
|
} else {
|
||||||
// console.log("Added item to menu - no problem.");
|
// console.log("Added item to menu - no problem.");
|
||||||
$("#menuItemInp").val("");
|
$("#menuItemInp").val("");
|
||||||
$("#dateServed").val("");
|
$("#dateServed").val("");
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
addToMenu();
|
}
|
||||||
|
} else {
|
||||||
|
// add the item as new and add to the menu
|
||||||
|
if (menuItem == null || menuItem == "") {
|
||||||
|
Session.set("menuItemErr", true);
|
||||||
|
} else {
|
||||||
|
Meteor.call('add.menuItem', menuItem, function(err, result) {
|
||||||
|
if (err) {
|
||||||
|
console.log(" ERROR adding menu item: " + err);
|
||||||
|
} else {
|
||||||
|
// console.log(" SUCCESS adding menu item.");
|
||||||
|
$("#menuItemInp").val("");
|
||||||
|
$("#dateServed").val("");
|
||||||
|
|
||||||
|
// now add this item to the menu
|
||||||
|
Meteor.call('addto.Menu', menuId, menuItem, result, dateSrv, function(error, nresult) {
|
||||||
|
if (error) {
|
||||||
|
console.log(" ERROR adding menuitem to menu: " + error);
|
||||||
|
} else {
|
||||||
|
// console.log("Added item to menu - no problem.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -152,25 +110,20 @@ Template.menuItemsForm.events({
|
||||||
let menuItemId = menuInfo[i]._id;
|
let menuItemId = menuInfo[i]._id;
|
||||||
let momentAddDay = moment(menuInfo[i].serveDate).add(1, 'day').format("MMM DD, YYYY");
|
let momentAddDay = moment(menuInfo[i].serveDate).add(1, 'day').format("MMM DD, YYYY");
|
||||||
// console.log(momentAddDay);
|
// console.log(momentAddDay);
|
||||||
const shiftDay = async() => {
|
Meteor.call('shiftDate', menuItemId, momentAddDay, function(err,result) {
|
||||||
let result = await Meteor.callAsync('shiftDate', menuItemId, momentAddDay);
|
if (err) {
|
||||||
if (!result) {
|
console.log(" ERROR shifting meal days: " + err);
|
||||||
// console.log(" ERROR shifting meal days: " + err);
|
|
||||||
} else {
|
} else {
|
||||||
showSnackbar("Items Shifted Out by 1 Calendar Day", "green");
|
// console.log(" SUCCESS shifting meal date.");
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'keyup #menuItemInp' (event) {
|
'keyup #menuItemInp' (event) {
|
||||||
if (event.which != 13) {
|
if (event.which != 13) {
|
||||||
let findMenuItem = $("#menuItemInp").val();
|
let findMenuItem = $("#menuItemInp").val();
|
||||||
let menuItemInfo = MenuItems.find({ itemName: {$regex: findMenuItem + '.*', $options: 'i' }}).fetch();
|
let menuItemInfo = MenuItems.find({ itemName: {$regex: findMenuItem + '.*', $options: 'i' }}).fetch();
|
||||||
if (!menuItemInfo) {
|
if (typeof menuItemInfo != 'undefined' && menuItemInfo != '' && menuItemInfo != null) {
|
||||||
console.log("Nothing found in menu items:");
|
|
||||||
console.dir(menuItemInfo);
|
|
||||||
} else {
|
|
||||||
console.dir(menuItemInfo)
|
|
||||||
getMenuItemList(menuItemInfo);
|
getMenuItemList(menuItemInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,14 +25,15 @@
|
||||||
{{#if $eq isLinked true}}<a class="waves-effect waves-light blue darken-3 white-text btn addProdsToList modal-trigger" href="#addProdToList">+ Shopping List</a>{{/if}}
|
{{#if $eq isLinked true}}<a class="waves-effect waves-light blue darken-3 white-text btn addProdsToList modal-trigger" href="#addProdToList">+ Shopping List</a>{{/if}}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<i class="material-icons modal-trigger deleteMenuItem clickable" href="#modalDelete">delete</i>
|
<i class="material-icons tooltipped modal-trigger deleteMenuItem clickable" href="#modalDelete" data-position="top" data-tooltip-id="deleteMenuTip">delete</i>
|
||||||
<i class="material-icons modal-trigger linkToProducts clickable" href="#modalLinkProducts">link</i>
|
<i class="material-icons tooltipped modal-trigger linkToProducts clickable" href="#modalLinkProducts" data-position="top" data-tooltip-id="linkMenuTip">link</i>
|
||||||
<i class="material-icons modal-trigger clickable">arrow_forward</i>
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</table>
|
</table>
|
||||||
|
<div class="tooltip-content" style="display: none;" id="deleteMenuTip">Delete this menu item</div>
|
||||||
|
<div class="tooltip-content" style="display: none;" id="linkMenuTip">Link Products that make up this menu item</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{> deleteConfirmationModal}}
|
{{> deleteConfirmationModal}}
|
||||||
|
|
|
||||||
|
|
@ -30,21 +30,11 @@ Template.menuItemsTbl.helpers({
|
||||||
if (Session.get("menuId")) {
|
if (Session.get("menuId")) {
|
||||||
menuId = Session.get("menuId");
|
menuId = Session.get("menuId");
|
||||||
} else {
|
} else {
|
||||||
const menu = async() => {
|
menuId = UserLast.findOne({ view: "Menu" }).viewId;
|
||||||
let menId = await UserLast.findOneAsync({ view: "Menu" }).viewId;
|
|
||||||
if (!menId) {
|
|
||||||
|
|
||||||
} else {
|
|
||||||
return menId;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
menuId = menu();
|
|
||||||
}
|
}
|
||||||
if (menuId) {
|
let menuInfo = Menus.find({ _id: menuId }, { sort: { serveDateActual: 1 }});
|
||||||
let menuInfo = Menus.find({ _id: menuId }, { sort: { serveDateActual: 1 }});
|
if (menuInfo) {
|
||||||
if (menuInfo) {
|
return menuInfo
|
||||||
return menuInfo;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -53,7 +43,7 @@ Template.menuItemsTbl.events({
|
||||||
'click .deleteMenuItem' (event) {
|
'click .deleteMenuItem' (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
let theseIds = Session.get("menuId") + "_" + this.menuItemId;
|
let theseIds = Session.get("menuId") + "_" + this.menuItemId;
|
||||||
// console.log("These Ids: " + theseIds);
|
console.log("These Ids: " + theseIds);
|
||||||
Session.set("deleteId", theseIds);
|
Session.set("deleteId", theseIds);
|
||||||
Session.set("method", "delete.itemFromMenu");
|
Session.set("method", "delete.itemFromMenu");
|
||||||
Session.set("item", this.menuItemName);
|
Session.set("item", this.menuItemName);
|
||||||
|
|
@ -63,7 +53,7 @@ Template.menuItemsTbl.events({
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
Session.set("menuItemId", this.menuItemId);
|
Session.set("menuItemId", this.menuItemId);
|
||||||
Session.set("menuItemName", this.menuItemName);
|
Session.set("menuItemName", this.menuItemName);
|
||||||
// console.log("menu item name = " + this.menuItemName);
|
console.log("menu item name = " + this.menuItemName);
|
||||||
},
|
},
|
||||||
'click .addProdsToList' (event) {
|
'click .addProdsToList' (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
|
||||||
|
|
@ -20,5 +20,4 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
{{> snackbar}}
|
|
||||||
</template>
|
</template>
|
||||||
|
|
|
||||||
|
|
@ -18,29 +18,17 @@ Template.modalLinkProducts.onRendered(function() {
|
||||||
dropdownOptions: 4,
|
dropdownOptions: 4,
|
||||||
});
|
});
|
||||||
|
|
||||||
this.autorun(() => {
|
setTimeout(function() {
|
||||||
if (this.subscriptionsReady()) {
|
var instances = M.Modal.init(elems, {});
|
||||||
// setTimeout(function() {
|
var instancese = M.FormSelect.init(elemse, {
|
||||||
// var instances = M.Modal.init(elems, {});
|
dropdownOptions: 4,
|
||||||
var elemse = document.querySelectorAll('select');
|
});
|
||||||
var instancese = M.FormSelect.init(elemse, {
|
}, 250);
|
||||||
dropdownOptions: 4,
|
|
||||||
});
|
|
||||||
// }, 250);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.modalLinkProducts.helpers({
|
Template.modalLinkProducts.helpers({
|
||||||
products: function() {
|
products: function() {
|
||||||
let prodInfo = Products.find({}, { sort: { prodName:1 }});
|
return Products.find({});
|
||||||
// return Products.find({}, {sort: { prodName:1 }});
|
|
||||||
if (!prodInfo) {
|
|
||||||
console.log("no product info yet.");
|
|
||||||
} else {
|
|
||||||
console.log("prod info found.");
|
|
||||||
return prodInfo;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -54,7 +42,7 @@ Template.modalLinkProducts.events({
|
||||||
let links = M.FormSelect.getInstance(linkSelect).getSelectedValues();
|
let links = M.FormSelect.getInstance(linkSelect).getSelectedValues();
|
||||||
if (typeof links != undefined && links != [] && links != null) {
|
if (typeof links != undefined && links != [] && links != null) {
|
||||||
// let's split these links into their parts, and make an array of objects
|
// let's split these links into their parts, and make an array of objects
|
||||||
for (let i=0; i<links.length; i++) {
|
for (i=0; i<links.length; i++) {
|
||||||
let linkArray = links[i].split('|');
|
let linkArray = links[i].split('|');
|
||||||
let key = linkArray[0];
|
let key = linkArray[0];
|
||||||
let value = linkArray[1];
|
let value = linkArray[1];
|
||||||
|
|
@ -62,33 +50,25 @@ Template.modalLinkProducts.events({
|
||||||
linkObjArray.push(linkObj);
|
linkObjArray.push(linkObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
const addMenuProdLinks = async() => {
|
Meteor.call("add.menuProdLinks", menuItemId, menuItemName, linkObjArray, function(err, result) {
|
||||||
let result = await Meteor.callAsync("add.menuProdLinks", menuItemId, menuItemName, linkObjArray);
|
if (err) {
|
||||||
if (!result) {
|
console.log(" ERROR adding product links to this menu item: " + err);
|
||||||
// console.log(" ERROR adding product links to this menu item: " + err);
|
|
||||||
} else {
|
} else {
|
||||||
updMenuItemLinks();
|
Meteor.call('update.menuItemLinked', menuItemId, true, function(err, result) {
|
||||||
|
if (err) {
|
||||||
|
console.log(" ERROR adding link to menu item: " + err);
|
||||||
|
} else {
|
||||||
|
Meteor.call('link.inMenu', menuItemId, true, function(error, nresult) {
|
||||||
|
if (error) {
|
||||||
|
console.log(" ERROR adding link to menu sub-item: " + error);
|
||||||
|
} else {
|
||||||
|
showSnackbar("Products added to Menu Item successfully!", "green");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
addMenuProdLinks();
|
|
||||||
|
|
||||||
const updMenuItemLinks = async() => {
|
|
||||||
let result = await Meteor.callAsync('update.menuItemLinked', menuItemId, true);
|
|
||||||
if (!result) {
|
|
||||||
// console.log(" ERROR adding link to menu item: " + err);
|
|
||||||
} else {
|
|
||||||
linkInMenu();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const linkInMenu = async() => {
|
|
||||||
let result = await Meteor.callAsync('link.inMenu', menuItemId, true);
|
|
||||||
if (!result) {
|
|
||||||
console.log(" ERROR adding link to menu sub-item: " + error);
|
|
||||||
} else {
|
|
||||||
showSnackbar("Products added to Menu Item successfully!", "green");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -27,16 +27,14 @@ Template.addMenuModal.events({
|
||||||
if (menuName == "" || menuName == null) {
|
if (menuName == "" || menuName == null) {
|
||||||
Session.set("menuNameErr", true);
|
Session.set("menuNameErr", true);
|
||||||
} else {
|
} else {
|
||||||
const addMenu = async() => {
|
Meteor.call("add.menu", menuName, function(err, result) {
|
||||||
let result = await Meteor.callAsync("add.menu", menuName);
|
if (err) {
|
||||||
if (!result) {
|
console.log(" ERROR adding menu: " + err);
|
||||||
// console.log(" ERROR adding menu: " + err);
|
|
||||||
} else {
|
} else {
|
||||||
// console.log(" SUCCESS adding menu.");
|
console.log(" SUCCESS adding menu.");
|
||||||
$("#menuNameInp").val("");
|
$("#menuNameInp").val("");
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
addMenu();
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
import { Menus } from '../../imports/api/menu.js';
|
import { Menus } from '../../imports/api/menu.js';
|
||||||
import { M } from '../lib/assets/materialize.js';
|
import { M } from '../lib/assets/materialize.js';
|
||||||
import { FlowRouter } from 'meteor/ostrio:flow-router-extra';
|
|
||||||
|
|
||||||
Template.mainMenuTbl.onCreated(function() {
|
Template.mainMenuTbl.onCreated(function() {
|
||||||
this.subscribe("myMenus");
|
this.subscribe("myMenus");
|
||||||
|
|
@ -22,7 +21,7 @@ Template.mainMenuTbl.events({
|
||||||
'click li.collection-item' (event) {
|
'click li.collection-item' (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
let sender = event.target;
|
let sender = event.target;
|
||||||
// console.log("Sender originated from: ");
|
// console.log("Sender origination from: ");
|
||||||
// console.log(sender.localName);
|
// console.log(sender.localName);
|
||||||
if (sender.localName == "li") {
|
if (sender.localName == "li") {
|
||||||
let menuId = event.currentTarget.id;
|
let menuId = event.currentTarget.id;
|
||||||
|
|
@ -30,38 +29,33 @@ Template.mainMenuTbl.events({
|
||||||
// console.log("add menu clicked");
|
// console.log("add menu clicked");
|
||||||
} else {
|
} else {
|
||||||
// console.log("menuId is: " + menuId);
|
// console.log("menuId is: " + menuId);
|
||||||
const addUserLast = async() => {
|
Meteor.call('add.userLast', "Menu", menuId, function(err, result) {
|
||||||
Session.set("menuId", menuId);
|
if (err) {
|
||||||
let result = await Meteor.callAsync('add.userLast', "Menu", menuId);
|
console.log(" ERROR writing last menu viewed by user to db: " + err);
|
||||||
if (!result) {
|
|
||||||
// console.log(" ERROR writing last menu viewed by user to db.");
|
|
||||||
} else {
|
} else {
|
||||||
FlowRouter.go('/menuitems');
|
Session.set("menuId", menuId);
|
||||||
|
Meteor.setTimeout(function() {
|
||||||
|
FlowRouter.go('/menuitems');
|
||||||
|
}, 100);
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
addUserLast();
|
|
||||||
}
|
}
|
||||||
} else if (sender.localName == "i") {
|
} else if (sender.localName == "i") {
|
||||||
let menuId = this._id;
|
let menuId = this._id;
|
||||||
const makrMenuComp = async() => {
|
Meteor.call("markMenu.complete", menuId, function(err, result) {
|
||||||
let result = await Meteor.callAsync("markMenu.complete", menuId);
|
if (err) {
|
||||||
if (!result) {
|
console.log(" ERROR: can't mark menu complete: " + err);
|
||||||
// console.log(" ERROR: can't mark menu complete.");
|
|
||||||
} else {
|
} else {
|
||||||
// console.log(" SUCCESS marking menu complete.");
|
console.log(" SUCCESS marking menu complete.");
|
||||||
setAllMade();
|
Meteor.call('setAllMade.menuItem', menuId, function(err, result) {
|
||||||
|
if (err) {
|
||||||
|
console.log(" ERROR: cannot set all items as made: " + err);
|
||||||
|
} else {
|
||||||
|
console.log(" SUCCESS setting all items made.");
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
makrMenuComp();
|
|
||||||
|
|
||||||
const setAllMade = async() => {
|
|
||||||
let result = await Meteor.callAsync('setAllMade.menuItem', menuId);
|
|
||||||
if (!result) {
|
|
||||||
// console.log(" ERROR: cannot set all items as made.");
|
|
||||||
} else {
|
|
||||||
// console.log(" SUCCESS setting all items made.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
@ -33,26 +33,34 @@ Template.myTasksForm.events({
|
||||||
let taskDateArray = Session.get("taskDateArr");
|
let taskDateArray = Session.get("taskDateArr");
|
||||||
let actDate = [];
|
let actDate = [];
|
||||||
|
|
||||||
console.dir(taskNameArray);
|
|
||||||
console.dir(taskDateArray);
|
|
||||||
|
|
||||||
if (taskNameArray == null || taskNameArray == [] || taskNameArray == "") {
|
if (taskNameArray == null || taskNameArray == [] || taskNameArray == "") {
|
||||||
taskNameErr = true;
|
taskNameErr = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (taskDateArray == null || taskDateArray == []|| taskDateArray == "") {
|
if (taskDateArray == null || taskDateArray == []|| taskDateArray == "") {
|
||||||
taskDateErr = true;
|
taskDateErr = true;
|
||||||
|
} else {
|
||||||
|
for (i = 0; i < taskDateArray.length; i++) {
|
||||||
|
// console.log(taskDateArray[i]);
|
||||||
|
let actDateTask = new Date(taskDateArray[i]);
|
||||||
|
actDate.push(actDateTask);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// console.log("Date Error: " + taskDateErr + " - Name Error: " + taskNameErr);
|
console.log("Date Error: " + taskDateErr + " - Name Error: " + taskNameErr);
|
||||||
if (taskDateErr == false && taskNameErr == false) {
|
if (taskDateErr == false && taskNameErr == false) {
|
||||||
for (const task of taskNameArray) {
|
Meteor.call("add.task", taskNameArray, "self", "selfId", taskDateArray, actDate, function(err, result) {
|
||||||
for (const date of taskDateArray) {
|
if (err) {
|
||||||
let actDate = new Date(date);
|
console.log(" ERROR adding task for self: " + err);
|
||||||
|
showSnackbar("ERROR adding task for self!", "red");
|
||||||
addTask(task.id, date, actDate);
|
} else {
|
||||||
|
console.log(" SUCCESS adding task for self.");
|
||||||
|
Session.set("taskDateArr", []);
|
||||||
|
$("#myTaskName").val("");
|
||||||
|
$("#myTaskDate").val("");
|
||||||
|
showSnackbar("Added Tasks Successfully!", "green");
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
} else {
|
} else {
|
||||||
showSnackbar("Error! Both Task & Date are Required!", "red");
|
showSnackbar("Error! Both Task & Date are Required!", "red");
|
||||||
}
|
}
|
||||||
|
|
@ -83,18 +91,4 @@ Template.myTasksForm.events({
|
||||||
taskDateArr.push(taskDate);
|
taskDateArr.push(taskDate);
|
||||||
Session.set("taskDateArr", taskDateArr);
|
Session.set("taskDateArr", taskDateArr);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const addTask = async(task, date, actDate) => {
|
|
||||||
let result = await Meteor.callAsync("add.myTask", task, date, actDate);
|
|
||||||
if (!result) {
|
|
||||||
// console.log(" ERROR adding task for self: ");
|
|
||||||
showSnackbar("Error adding task for self!", "red");
|
|
||||||
} else {
|
|
||||||
// console.log(" SUCCESS adding task for self.");
|
|
||||||
// Session.set("taskDateArr", []);
|
|
||||||
// $("#myTaskName").val("");
|
|
||||||
// $("#myTaskDate").val("");
|
|
||||||
showSnackbar("Added Tasks Successfully!", "green");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -55,19 +55,19 @@ Template.myTasksTbl.events({
|
||||||
'click .markMyTaskComplete' (event) {
|
'click .markMyTaskComplete' (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
let taskId = this._id;
|
let taskId = this._id;
|
||||||
const makrTaskComp = async() => {
|
Meteor.call("markTask.complete", taskId, function(err, result) {
|
||||||
let result = await Meteor.callAsync("markTask.complete", taskId);
|
if (err) {
|
||||||
if (!result) {
|
console.log(" ERROR marking task completeL " + err);
|
||||||
// console.log(" ERROR marking task completeL " + err);
|
|
||||||
showSnackbar("ERROR Marking Task Complete!", "red");
|
showSnackbar("ERROR Marking Task Complete!", "red");
|
||||||
} else {
|
} else {
|
||||||
showSnackbar("Successfully Marked Task Complete!", "green");
|
showSnackbar("Successfully Marked Task Complete!", "green");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
},
|
},
|
||||||
'click .deleteMyTask' (event) {
|
'click .deleteMyTask' (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
// console.log("detected click");
|
console.log("detected click");
|
||||||
Session.set("deleteId", this._id);
|
Session.set("deleteId", this._id);
|
||||||
Session.set("method", "delete.task");
|
Session.set("method", "delete.task");
|
||||||
Session.set("item", this.taskName);
|
Session.set("item", this.taskName);
|
||||||
|
|
|
||||||
|
|
@ -5,29 +5,15 @@ Template.userConfig.onCreated(function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.userConfig.onRendered(function() {
|
Template.userConfig.onRendered(function() {
|
||||||
const getConfig = async() => {
|
let myConfig = UserConfig.findOne({ user: Meteor.userId() });
|
||||||
// console.log("tried to get switch config.")
|
if (typeof myConfig != 'undefined') {
|
||||||
let myConfig = await UserConfig.findOneAsync({ user: Meteor.userId() });
|
console.log("My Pref: " + myConfig.darkPref);
|
||||||
try {
|
if (myConfig.darkMode == 'light') {
|
||||||
// console.dir(myConfig);
|
$("#darkMode").prop('checked', false);
|
||||||
if (!myConfig) {
|
} else {
|
||||||
// console.log("config not found, setting to light mode.");
|
$("#darkMode").prop('checked', true);
|
||||||
$("#darkMode").prop('checked', false);
|
|
||||||
} else {
|
|
||||||
// console.log("My Pref: " + myConfig.darkMode);
|
|
||||||
if (myConfig.darkMode == 'light') {
|
|
||||||
$("#darkMode").prop('checked', false);
|
|
||||||
} else {
|
|
||||||
// console.log("should be checked.")
|
|
||||||
$("#darkMode").prop('checked', true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch(error) {
|
|
||||||
console.log(" ERROR getting dark theme for setting swtich: " + error);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
getConfig();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.userConfig.helpers({
|
Template.userConfig.helpers({
|
||||||
|
|
@ -36,22 +22,23 @@ Template.userConfig.helpers({
|
||||||
|
|
||||||
Template.userConfig.events({
|
Template.userConfig.events({
|
||||||
'click #darkMode' (event) {
|
'click #darkMode' (event) {
|
||||||
let darkModePref = $("#darkMode").prop('checked')
|
let darkModePref = $("#darkMode").prop('checked');
|
||||||
if (darkModePref == true) {
|
if (darkModePref == true) {
|
||||||
let mode = 'dark';
|
Meteor.call('update.darkModePref', 'dark', function(err, reuslt) {
|
||||||
setDarkMode(mode);
|
if (err) {
|
||||||
|
console.log(" ERROR: could not set dark mode preference to dark: " + err);
|
||||||
|
} else {
|
||||||
|
showSnackbar("Dark Mode Preference Set to Dark", "green");
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
let mode = 'light';
|
Meteor.call('update.darkModePref', 'light', function(err, result) {
|
||||||
setDarkMode(mode);
|
if (err) {
|
||||||
|
console.log(" ERROR: could not set dark mode preference to light: " + err);
|
||||||
|
} else {
|
||||||
|
showSnackbar("Dark Mode Preference Set to Light", "green");
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const setDarkMode = async(mode) => {
|
|
||||||
let result = await Meteor.callAsync('update.darkModePref', mode);
|
|
||||||
if (!result) {
|
|
||||||
// console.log(" - Did not receive back a 'result' from the update.");
|
|
||||||
} else {
|
|
||||||
showSnackbar("Dark Mode Preference Set to " + mode, "green");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -14,7 +14,7 @@ ListItems.allow({
|
||||||
});
|
});
|
||||||
|
|
||||||
Meteor.methods({
|
Meteor.methods({
|
||||||
async 'add.listItem' (itemName, listId) {
|
'add.listItem' (itemName, listId) {
|
||||||
check(itemName, String);
|
check(itemName, String);
|
||||||
check(listId, String);
|
check(listId, String);
|
||||||
|
|
||||||
|
|
@ -22,24 +22,18 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('You are not allowed to add items. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to add items. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
let iname = itemName.charAt(0).toUpperCase() + itemName.slice(1);
|
|
||||||
|
|
||||||
// look up the item from the Products collection
|
// look up the item from the Products collection
|
||||||
|
let prodInfo = Products.findOne({ prodName: itemName });
|
||||||
let prodInfo = await Products.findOneAsync({ prodName: iname });
|
if (typeof prodInfo == "undefined") {
|
||||||
try {
|
Meteor.call("add.product", itemName, "", "", "", function(err, result) {
|
||||||
if (!prodInfo) {
|
if (err) {
|
||||||
// add product info first
|
console.log(" ERROR adding item to products: " + err);
|
||||||
let added = await Meteor.callAsync("add.product", itemName, [""]);
|
|
||||||
if (!added) {
|
|
||||||
// console.log(" ERROR adding item to products: " + err);
|
|
||||||
} else {
|
} else {
|
||||||
// console.log(" SUCCESS adding item to Products.");
|
// console.log(" SUCCESS adding item to Products.");
|
||||||
|
return ListItems.insert({
|
||||||
return await ListItems.insertAsync({
|
itemName: itemName,
|
||||||
itemName: iname,
|
|
||||||
listId: listId,
|
listId: listId,
|
||||||
prodId: added,
|
prodId: result,
|
||||||
addedBy: this.userId,
|
addedBy: this.userId,
|
||||||
itemStore: "",
|
itemStore: "",
|
||||||
itemOrdered: false,
|
itemOrdered: false,
|
||||||
|
|
@ -47,23 +41,21 @@ Meteor.methods({
|
||||||
dateAddedToList: new Date(),
|
dateAddedToList: new Date(),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {
|
});
|
||||||
return await ListItems.insertAsync({
|
} else {
|
||||||
itemName: iname,
|
return ListItems.insert({
|
||||||
listId: listId,
|
itemName: itemName,
|
||||||
prodId: prodInfo._id,
|
listId: listId,
|
||||||
addedBy: this.userId,
|
prodId: prodInfo._id,
|
||||||
itemStore: prodInfo.prodStore,
|
addedBy: this.userId,
|
||||||
itemOrdered: false,
|
itemStore: prodInfo.prodStore,
|
||||||
itemReceived: false,
|
itemOrdered: false,
|
||||||
dateAddedToList: new Date(),
|
itemReceived: false,
|
||||||
});
|
dateAddedToList: new Date(),
|
||||||
}
|
});
|
||||||
} catch(error) {
|
|
||||||
console.log(" ERROR adding new product and item: " + error);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async 'add.itemsFromMenuItem' (itemIds, listId) {
|
'add.itemsFromMenuItem' (itemIds, listId) {
|
||||||
check(itemIds, [String]);
|
check(itemIds, [String]);
|
||||||
check(listId, String);
|
check(listId, String);
|
||||||
|
|
||||||
|
|
@ -72,81 +64,70 @@ Meteor.methods({
|
||||||
}
|
}
|
||||||
|
|
||||||
console.dir(itemIds);
|
console.dir(itemIds);
|
||||||
let noitems = itemIds.length;
|
|
||||||
let i;
|
|
||||||
|
|
||||||
for (i=0; i < noitems; i++) {
|
for (i=0; i < itemIds.length; i++) {
|
||||||
// let's check and make sure the product isn't already on the list
|
// let's check and make sure the product isn't already on the list
|
||||||
let onList = await ListItems.find({ listId: listId, prodId: itemIds[i] }).countAsync();
|
let onList = ListItems.find({ listId: listId, prodId: itemIds[i] }).count();
|
||||||
// console.log("Number On List: " + onList);
|
console.log("Number On List: " + onList);
|
||||||
if (onList == 0) {
|
if (onList == 0) {
|
||||||
// now pull the product
|
// now pull the product
|
||||||
let prodInfo = await Products.findOneAsync({ _id: itemIds[i] });
|
let prodInfo = Products.findOne({ _id: itemIds[i] });
|
||||||
if (!prodInfo) {
|
ListItems.insert({
|
||||||
console.log("Unable to load product info.");
|
itemName: prodInfo.prodName,
|
||||||
} else {
|
listId: listId,
|
||||||
console.log("Run " + i);
|
prodId: prodInfo._id,
|
||||||
ListItems.insertAsync({
|
addedBy: this.userId,
|
||||||
itemName: prodInfo.prodName,
|
itemStore: prodInfo.prodStore,
|
||||||
listId: listId,
|
itemOrdered: false,
|
||||||
prodId: prodInfo._id,
|
itemReceived: false,
|
||||||
addedBy: this.userId,
|
dateAddedToList: new Date(),
|
||||||
itemStore: prodInfo.prodStore,
|
});
|
||||||
itemOrdered: false,
|
|
||||||
itemReceived: false,
|
|
||||||
dateAddedToList: new Date(),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// product exists on list, move on to next
|
// product exists on list, move on to next
|
||||||
console.log("Product Exists on Selected List.");
|
console.log("Product Exists on Selected List.");
|
||||||
}
|
}
|
||||||
if (i == (noitems - 1)) {
|
|
||||||
console.log("Returning now.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async 'setOrdered.listItem' (itemId) {
|
'setOrdered.listItem' (itemId) {
|
||||||
check(itemId, String);
|
check(itemId, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to set items as ordered. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to set items as ordered. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await ListItems.updateAsync({ _id: itemId }, {
|
return ListItems.update({ _id: itemId }, {
|
||||||
$set: {
|
$set: {
|
||||||
itemOrdered: true,
|
itemOrdered: true,
|
||||||
dateOrdered: new Date(),
|
dateOrdered: new Date(),
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'setAllOrdered.listItem' (shopListId) {
|
'setAllOrdered.listItem' (shopListId) {
|
||||||
// set all items that are not already set as ordered, or set as received to ordered on this list
|
// set all items that are not already set as ordered, or set as received to ordered on this list
|
||||||
|
|
||||||
},
|
},
|
||||||
async 'setNotOrdered.listItem' (itemId) {
|
'setNotOrdered.listItem' (itemId) {
|
||||||
check(itemId, String);
|
check(itemId, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to set items as not ordered. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to set items as not ordered. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await ListItems.updateAsync({ _id: itemId }, {
|
return ListItems.update({ _id: itemId }, {
|
||||||
$set: {
|
$set: {
|
||||||
itemOrdered: false,
|
itemOrdered: false,
|
||||||
dateUnOrdered: new Date(),
|
dateUnOrdered: new Date(),
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'setReceived.listItem' (itemId) {
|
'setReceived.listItem' (itemId) {
|
||||||
check(itemId, String);
|
check(itemId, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to set items as received. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to set items as received. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await ListItems.updateAsync({ _id: itemId }, {
|
return ListItems.update({ _id: itemId }, {
|
||||||
$set: {
|
$set: {
|
||||||
itemReceived: true,
|
itemReceived: true,
|
||||||
dateReceived: new Date(),
|
dateReceived: new Date(),
|
||||||
|
|
@ -154,25 +135,25 @@ Meteor.methods({
|
||||||
});
|
});
|
||||||
|
|
||||||
},
|
},
|
||||||
async 'setNotReceived.listItem' (shopListId) {
|
'setNotReceived.listItem' (shopListId) {
|
||||||
check(itemId, String);
|
check(itemId, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to set items as not received. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to set items as not received. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await ListItems.updateAsync({ _id: itemId }, {
|
return ListItems.update({ _id: itemId }, {
|
||||||
$set: {
|
$set: {
|
||||||
itemReceived: false,
|
itemReceived: false,
|
||||||
dateNotReceived: new Date(),
|
dateNotReceived: new Date(),
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'setAllReceived.listItem' () {
|
'setAllReceived.listItem' () {
|
||||||
// set all items that are not already listed as received to received on this list
|
// set all items that are not already listed as received to received on this list
|
||||||
|
|
||||||
},
|
},
|
||||||
async 'edit.listItem' (itemId, itemName) {
|
'edit.listItem' (itemId, itemName) {
|
||||||
check(itemId, String);
|
check(itemId, String);
|
||||||
check(itemName, String);
|
check(itemName, String);
|
||||||
|
|
||||||
|
|
@ -180,19 +161,19 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('You are not allowed to add items. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to add items. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await ListItems.updateAsync({ _id: itemId }, {
|
return ListItems.update({ _id: itemId }, {
|
||||||
$set: {
|
$set: {
|
||||||
itemName: itemName,
|
itemName: itemName,
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'delete.listItem' (itemId) {
|
'delete.listItem' (itemId) {
|
||||||
check(itemId, String);
|
check(itemId, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to delete list items. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to delete list items. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await ListItems.removeAsync({ _id: itemId });
|
return ListItems.remove({ _id: itemId });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -12,7 +12,7 @@ Lists.allow({
|
||||||
});
|
});
|
||||||
|
|
||||||
Meteor.methods({
|
Meteor.methods({
|
||||||
async 'add.list' (listName, isShared) {
|
'add.list' (listName, isShared) {
|
||||||
check(listName, String);
|
check(listName, String);
|
||||||
check(isShared, Boolean);
|
check(isShared, Boolean);
|
||||||
|
|
||||||
|
|
@ -20,14 +20,14 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('You are not allowed to add lists. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to add lists. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await Lists.insertAsync({
|
return Lists.insert({
|
||||||
listName: listName,
|
listName: listName,
|
||||||
listShared: isShared,
|
listShared: isShared,
|
||||||
listOwner: this.userId,
|
listOwner: this.userId,
|
||||||
listComplete: false,
|
listComplete: false,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'edit.list' (listId, listName, isShared) {
|
'edit.list' (listId, listName, isShared) {
|
||||||
check(listId, String);
|
check(listId, String);
|
||||||
check(listName, String);
|
check(listName, String);
|
||||||
check(isShared, Boolean);
|
check(isShared, Boolean);
|
||||||
|
|
@ -36,55 +36,41 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('You are not allowed to edit lists. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to edit lists. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await Lists.updateAsync({ _id: listId }, {
|
return Lists.update({ _id: listId }, {
|
||||||
$set: {
|
$set: {
|
||||||
listName: listName,
|
listName: listName,
|
||||||
listShared: isShared,
|
listShared: isShared,
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'delete.list' (listId) {
|
'delete.list' (listId) {
|
||||||
check(listId, String);
|
check(listId, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to delete lists. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to delete lists. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await Lists.removeAsync({ _id: listId });
|
return Lists.remove({ _id: listId });
|
||||||
},
|
},
|
||||||
async 'mark.complete' (listId) {
|
'mark.complete' (listId) {
|
||||||
check(listId, String);
|
check(listId, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to mark lists complete. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to mark lists complete. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await Lists.updateAsync({ _id: listId }, {
|
return Lists.update({ _id: listId }, {
|
||||||
$set: {
|
$set: {
|
||||||
listComplete: true,
|
listComplete: true,
|
||||||
completedOn: new Date()
|
completedOn: new Date()
|
||||||
}
|
}
|
||||||
});
|
});;
|
||||||
},
|
},
|
||||||
async 'mark.incomplete' (listId) {
|
'clean.Lists' () {
|
||||||
check(listId, String);
|
|
||||||
|
|
||||||
if (!this.userId) {
|
|
||||||
throw new Meteor.Error('You are not allowed to restore completed lists. Make sure you are logged in with valid user credentials.');
|
|
||||||
}
|
|
||||||
|
|
||||||
return await Lists.updateAsync({ _id: listId }, {
|
|
||||||
$set: {
|
|
||||||
listComplete: false,
|
|
||||||
completedOn: new Date()
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
async 'clean.Lists' () {
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to clean up old lists. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to clean up old lists. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await Lists.removeAsync({ listComplete: true });
|
return Lists.remove({ listComplete: true });
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
import { Meteor } from 'meteor/meteor';
|
|
||||||
import { Mongo } from 'meteor/mongo';
|
|
||||||
import { check } from 'meteor/check';
|
|
||||||
|
|
||||||
export const MScripts = new Mongo.Collection('mScripts');
|
|
||||||
|
|
||||||
MScripts.allow({
|
|
||||||
insert: function(userId, doc){
|
|
||||||
// if use id exists, allow insert
|
|
||||||
return !!userId;
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
Meteor.methods({
|
|
||||||
async 'set.ScriptRun' (scriptName) {
|
|
||||||
check(scriptName, String);
|
|
||||||
|
|
||||||
return await MScripts.insertAsync({
|
|
||||||
scriptName: scriptName,
|
|
||||||
hasRun: true,
|
|
||||||
runOn: new Date(),
|
|
||||||
});
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
@ -15,20 +15,20 @@ Menus.allow({
|
||||||
});
|
});
|
||||||
|
|
||||||
Meteor.methods({
|
Meteor.methods({
|
||||||
async 'add.menu' (menuName) {
|
'add.menu' (menuName) {
|
||||||
check(menuName, String);
|
check(menuName, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to add menus. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to add menus. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await Menus.insertAsync({
|
return Menus.insert({
|
||||||
menuName: menuName,
|
menuName: menuName,
|
||||||
menuOwner: this.userId,
|
menuOwner: this.userId,
|
||||||
menuComplete: false,
|
menuComplete: false,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'edit.menu' (menuId, menuName) {
|
'edit.menu' (menuId, menuName) {
|
||||||
check(menuId, String);
|
check(menuId, String);
|
||||||
check(menuName, String);
|
check(menuName, String);
|
||||||
|
|
||||||
|
|
@ -36,55 +36,88 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('You are not allowed to edit menus. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to edit menus. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await Menus.updateAsync({ _id: menuId }, {
|
return Menus.update({ _id: menuId }, {
|
||||||
$set: {
|
$set: {
|
||||||
menuName: menuName,
|
menuName: menuName,
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'delete.menu' (menuId) {
|
'delete.menu' (menuId) {
|
||||||
check(menuId, String);
|
check(menuId, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to delete menus. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to delete menus. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await Menus.removeAsync({ _id: menuId });
|
return Menus.remove({ _id: menuId });
|
||||||
},
|
},
|
||||||
async 'markMenu.complete' (menuId) {
|
'markMenu.complete' (menuId) {
|
||||||
check(menuId, String);
|
check(menuId, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to mark menus complete. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to mark menus complete. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await Menus.updateAsync({ _id: menuId }, {
|
return Menus.update({ _id: menuId }, {
|
||||||
$set: {
|
$set: {
|
||||||
menuComplete: true,
|
menuComplete: true,
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'markMenu.notComplete' (menuId) {
|
'markMenu.notComplete' (menuId) {
|
||||||
check(menuId, String);
|
check(menuId, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to mark menus not complete. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to mark menus not complete. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await Menus.updateAsync({ _id: menuId }, {
|
return Menus.update({ _id: menuId }, {
|
||||||
$set: {
|
$set: {
|
||||||
menuComplete: false,
|
menuComplete: false,
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'clean.Menus' () {
|
'clean.Menus' () {
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to clean up old Menus. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to clean up old Menus. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await Menus.removeAsync({ menuComplete: true });
|
let removeMenuIds = [];
|
||||||
|
|
||||||
|
|
||||||
|
// let's find all the menus with menu items that are past their date.
|
||||||
|
let menuList = Menus.find({ menuComplete: false }).fetch();
|
||||||
|
for (i=0; i < menuList.length; i++) {
|
||||||
|
let removeMenu = true;
|
||||||
|
let items = MenuItems.find({ menuId: menuList[i]._id }).fetch();
|
||||||
|
for (j=0; j < items.length; j++) {
|
||||||
|
let srvDate = moment(items[j].serveDateActual);
|
||||||
|
let today = moment();
|
||||||
|
let expired = moment(today).isAfter(srvDate);
|
||||||
|
if (expired != true) {
|
||||||
|
removeMenu = false;
|
||||||
|
}
|
||||||
|
if (j == items.length - 1) {
|
||||||
|
if (removeMenu == true) {
|
||||||
|
removeMenuIds.push(menuList[i]._id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// next let's add the ids of any menus that are marked complete
|
||||||
|
let markedComplete = Menus.find({ menuComplete: true }).fetch();
|
||||||
|
for (k = 0; k < markedComplete.length; k++) {
|
||||||
|
let menuId = markedComplete[k]._id;
|
||||||
|
removeMenuIds.push(menuId);
|
||||||
|
}
|
||||||
|
|
||||||
|
// finally we'll cycle through the ids and remove the items we collected up.
|
||||||
|
for (l = 0; l < removeMenuIds.length; l++) {
|
||||||
|
Menus.remove({ _id: removeMenuIds[l] });
|
||||||
|
}
|
||||||
},
|
},
|
||||||
async 'addto.Menu' (menuId, menuItem, menuItemId, dateSrv, isLinked) {
|
'addto.Menu' (menuId, menuItem, menuItemId, dateSrv, isLinked) {
|
||||||
check(menuId, String);
|
check(menuId, String);
|
||||||
check(menuItem, String);
|
check(menuItem, String);
|
||||||
check(menuItemId, String);
|
check(menuItemId, String);
|
||||||
|
|
@ -95,9 +128,9 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('You are not allowed to add items to menus. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to add items to menus. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
let serveDateActual = new Date(dateSrv);
|
serveDateActual = new Date(dateSrv);
|
||||||
|
|
||||||
return await Menus.updateAsync({ _id: menuId }, {
|
return Menus.update({ _id: menuId }, {
|
||||||
$addToSet: {
|
$addToSet: {
|
||||||
menuItems:
|
menuItems:
|
||||||
{
|
{
|
||||||
|
|
@ -110,7 +143,7 @@ Meteor.methods({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'link.inMenu' (menuItemId, isLinked) {
|
'link.inMenu' (menuItemId, isLinked) {
|
||||||
check(menuItemId, String);
|
check(menuItemId, String);
|
||||||
check(isLinked, Boolean);
|
check(isLinked, Boolean);
|
||||||
|
|
||||||
|
|
@ -118,13 +151,13 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('You are not allowed to link menu items to products. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to link menu items to products. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await Menus.updateAsync({ 'menuItems.menuItemId': menuItemId }, {
|
return Menus.update({ 'menuItems.menuItemId': menuItemId }, {
|
||||||
$set: {
|
$set: {
|
||||||
"menuItems.$.isLinked": isLinked
|
"menuItems.$.isLinked": isLinked
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'delete.itemFromMenu' (itemIds) {
|
'delete.itemFromMenu' (itemIds) {
|
||||||
check(itemIds, String);
|
check(itemIds, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
|
|
@ -132,9 +165,9 @@ Meteor.methods({
|
||||||
}
|
}
|
||||||
|
|
||||||
let ids = itemIds.split('_');
|
let ids = itemIds.split('_');
|
||||||
// console.log("item ids: " + ids[0] + " and " + ids[1]);
|
console.log("item ids: " + ids[0] + " and " + ids[1]);
|
||||||
|
|
||||||
return await Menus.updateAsync({ _id: ids[0] }, {
|
return Menus.update({ _id: ids[0] }, {
|
||||||
$pull: {
|
$pull: {
|
||||||
menuItems: {
|
menuItems: {
|
||||||
menuItemId: ids[1],
|
menuItemId: ids[1],
|
||||||
|
|
|
||||||
|
|
@ -12,21 +12,23 @@ MenuItems.allow({
|
||||||
});
|
});
|
||||||
|
|
||||||
Meteor.methods({
|
Meteor.methods({
|
||||||
async 'add.menuItem' (itemName) {
|
'add.menuItem' (itemName) {
|
||||||
check(itemName, String);
|
check(itemName, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to add items. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to add items. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await MenuItems.insertAsync({
|
serveDateActual = new Date(serveDate);
|
||||||
|
|
||||||
|
return MenuItems.insert({
|
||||||
itemName: itemName,
|
itemName: itemName,
|
||||||
addedBy: this.userId,
|
addedBy: this.userId,
|
||||||
dateAddedtoMenu: new Date(),
|
dateAddedtoMenu: new Date(),
|
||||||
isLinked: false,
|
isLinked: false,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'update.menuItemLinked' (itemId, isLinked) {
|
'update.menuItemLinked' (itemId, isLinked) {
|
||||||
check(itemId, String);
|
check(itemId, String);
|
||||||
check(isLinked, Boolean);
|
check(isLinked, Boolean);
|
||||||
|
|
||||||
|
|
@ -34,36 +36,38 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('You are not allowed to set this menu item as linked to products. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to set this menu item as linked to products. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await MenuItems.updateAsync({ _id: itemId }, {
|
return MenuItems.update({ _id: itemId }, {
|
||||||
$set: {
|
$set: {
|
||||||
isLinked: isLinked,
|
isLinked: isLinked,
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'edit.madeItem' (itemId, itemName) {
|
'edit.madeItem' (itemId, itemName, serveDate) {
|
||||||
check(itemId, String);
|
check(itemId, String);
|
||||||
check(itemName, String);
|
check(itemName, String);
|
||||||
|
check(serveDate, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to edit menu items. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to edit menu items. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await MenuItems.updateAsync({ _id: itemId }, {
|
return MenuItems.update({ _id: itemId }, {
|
||||||
$set: {
|
$set: {
|
||||||
itemName: itemName,
|
itemName: itemName,
|
||||||
|
serveDate: serveDate,
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'delete.menuItem' (itemId) {
|
'delete.menuItem' (itemId) {
|
||||||
check(itemId, String);
|
check(itemId, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to delete menu items. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to delete menu items. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await MenuItems.removeAsync({ _id: itemId });
|
return MenuItems.remove({ _id: itemId });
|
||||||
},
|
},
|
||||||
async 'shiftDate' (itemId, momentAddDay) {
|
'shiftDate' (itemId, momentAddDay) {
|
||||||
check(itemId, String);
|
check(itemId, String);
|
||||||
check(momentAddDay, String);
|
check(momentAddDay, String);
|
||||||
|
|
||||||
|
|
@ -71,7 +75,7 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('You are not allowed to shift menu item dates. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to shift menu item dates. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await MenuItems.updateAsync({ _id: itemId }, {
|
return MenuItems.update({ _id: itemId }, {
|
||||||
$set: {
|
$set: {
|
||||||
serveDate: momentAddDay,
|
serveDate: momentAddDay,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ MenuProdLinks.allow({
|
||||||
});
|
});
|
||||||
|
|
||||||
Meteor.methods({
|
Meteor.methods({
|
||||||
async 'add.menuProdLinks' (menuItemId, menuItemName, prodNameArray) {
|
'add.menuProdLinks' (menuItemId, menuItemName, prodNameArray) {
|
||||||
check(menuItemId, String);
|
check(menuItemId, String);
|
||||||
check(menuItemName, String);
|
check(menuItemName, String);
|
||||||
check(prodNameArray, [Object]);
|
check(prodNameArray, [Object]);
|
||||||
|
|
@ -22,43 +22,12 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('You are not allowed to add menu and product links. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to add menu and product links. Make sure you are logged in with valid user credentials.');
|
||||||
};
|
};
|
||||||
|
|
||||||
let linkExists = await MenuProdLinks.findOneAsync({ menuItemId: menuItemId });
|
MenuProdLinks.insert({
|
||||||
|
menuItemId: menuItemId,
|
||||||
if (linkExists) {
|
menuItemName: menuItemName,
|
||||||
// console.log("sending to update method instead.");
|
products: prodNameArray,
|
||||||
await Meteor.callAsync('update.menuPordLInks', menuItemId, menuItemName, prodNameArray, function(err, result) {
|
dateCreated: Date(),
|
||||||
if (err) {
|
createdBy: this.userId
|
||||||
// console.log(" ERROR moving to the update method: " + err);
|
|
||||||
} else {
|
|
||||||
// console.log("Successfully updated the menu prod links.")
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
return await MenuProdLinks.insertAsync({
|
|
||||||
menuItemId: menuItemId,
|
|
||||||
menuItemName: menuItemName,
|
|
||||||
products: prodNameArray,
|
|
||||||
dateCreated: Date(),
|
|
||||||
createdBy: this.userId
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
async 'update.menuPordLInks' (menuItemId, menuItemName, prodNameArray) {
|
|
||||||
check(menuItemId, String);
|
|
||||||
check(menuItemName, String);
|
|
||||||
check(prodNameArray, [Object]);
|
|
||||||
|
|
||||||
if (!this.userId) {
|
|
||||||
throw new Meteor.Error('You are not allowed to add menu and product links. Make sure you are logged in with valid user credentials.');
|
|
||||||
};
|
|
||||||
|
|
||||||
console.log(" ---- Doing an Update instead! ---- ");
|
|
||||||
return await MenuProdLinks.updateAsync({ menuItemId: menuItemId }, {
|
|
||||||
$set: {
|
|
||||||
products: prodNameArray,
|
|
||||||
dateUpdated: Date(),
|
|
||||||
updatedBy: this.userId
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
},
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ Products.allow({
|
||||||
});
|
});
|
||||||
|
|
||||||
Meteor.methods({
|
Meteor.methods({
|
||||||
async 'add.product' (prodName, prodStore) {
|
'add.product' (prodName, prodStore) {
|
||||||
check(prodName, String);
|
check(prodName, String);
|
||||||
check(prodStore, [String]);
|
check(prodStore, [String]);
|
||||||
|
|
||||||
|
|
@ -20,24 +20,13 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('You are not allowed to add products. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to add products. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
let pname = prodName.charAt(0).toUpperCase() + prodName.slice(1);
|
return Products.insert({
|
||||||
|
prodName: prodName,
|
||||||
// first does this product already exist?
|
prodOwner: this.userId,
|
||||||
|
prodStore: prodStore,
|
||||||
let prodExists = await Products.findOneAsync({ prodName: pname });
|
});
|
||||||
try {
|
|
||||||
if (!prodExists) {
|
|
||||||
return await Products.insertAsync({
|
|
||||||
prodName: pname,
|
|
||||||
prodOwner: this.userId,
|
|
||||||
prodStore: prodStore,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} catch(error) {
|
|
||||||
console.log(" ERROR adding Pdocut: " + error);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
async 'edit.product' (prodId, prodName, prodStore) {
|
'edit.product' (prodId, prodName, prodStore) {
|
||||||
check(prodId, String);
|
check(prodId, String);
|
||||||
check(prodName, String);
|
check(prodName, String);
|
||||||
check(prodStore, [String]);
|
check(prodStore, [String]);
|
||||||
|
|
@ -46,32 +35,20 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('You are not allowed to edit products. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to edit products. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
let pname = prodName.charAt(0).toUpperCase() + prodName.slice(1);
|
return Products.update({ _id: prodId }, {
|
||||||
|
|
||||||
return await Products.updateAsync({ _id: prodId }, {
|
|
||||||
$set: {
|
$set: {
|
||||||
prodName: pname,
|
prodName: prodName,
|
||||||
prodStore: prodStore,
|
prodStore: prodStore,
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'delete.product' (prodId) {
|
'delete.product' (prodId) {
|
||||||
check(prodId, String);
|
check(prodId, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to delete products. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to delete products. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await Products.removeAsync({ _id: prodId });
|
return Products.remove({ _id: prodId });
|
||||||
},
|
|
||||||
async 'clean.Products' () {
|
|
||||||
if (!this.userId) {
|
|
||||||
throw new Meteor.Error('You are not allowed to delete products. Make sure you are logged in with valid user credentials.');
|
|
||||||
}
|
|
||||||
|
|
||||||
// first we need to find potential duplicate products
|
|
||||||
// next we need to see which of those are on incomplete lists
|
|
||||||
// Then we'll update those to use the main products ID instead
|
|
||||||
// finally we'll delete the duplicates
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ RecipeItems.allow({
|
||||||
});
|
});
|
||||||
|
|
||||||
Meteor.methods({
|
Meteor.methods({
|
||||||
async 'add.recipeItem' (recipeId, recipeItemType, recipeItem) {
|
'add.recipeItem' (recipeId, recipeItemType, recipeItem) {
|
||||||
check(recipeId, String);
|
check(recipeId, String);
|
||||||
check(recipeItemType, String);
|
check(recipeItemType, String);
|
||||||
check(recipeItem, String);
|
check(recipeItem, String);
|
||||||
|
|
@ -21,13 +21,13 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('You are not allowed to add recipe items. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to add recipe items. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await RecipeItems.insertAsync({
|
return RecipeItems.insert({
|
||||||
recipeId: recipeId,
|
recipeId: recipeId,
|
||||||
recipeItemType: recipeItemType,
|
recipeItemType: recipeItemType,
|
||||||
recipeItem: recipeItem,
|
recipeItem: recipeItem,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'edit.recipeItem' (recipeItemId, recipeId, recipeItemType, recipeItem) {
|
'edit.recipeItem' (recipeItemId, recipeId, recipeItemType, recipeItem) {
|
||||||
check(recipeItemId, String);
|
check(recipeItemId, String);
|
||||||
check(recipeId, String);
|
check(recipeId, String);
|
||||||
check(recipeItemType, String);
|
check(recipeItemType, String);
|
||||||
|
|
@ -37,7 +37,7 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('You are not allowed to edit recipe items. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to edit recipe items. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await RecipeItems.updateAsync({ _id: recipeItemId }, {
|
return RecipeItems.update({ _id: recipeItemId }, {
|
||||||
$set: {
|
$set: {
|
||||||
recipeId: recipeId,
|
recipeId: recipeId,
|
||||||
recipeItemType: recipeItemType,
|
recipeItemType: recipeItemType,
|
||||||
|
|
@ -45,13 +45,13 @@ Meteor.methods({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'delete.recipeItem' (recipeItemId) {
|
'delete.recipeItem' (recipeItemId) {
|
||||||
check(recipeItemId, String);
|
check(recipeItemId, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to delete recipe items. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to delete recipe items. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await RecipeItems.removeAsync({ _id: recipeItemId });
|
return RecipeItems.remove({ _id: recipeItemId });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -12,20 +12,20 @@ Recipes.allow({
|
||||||
});
|
});
|
||||||
|
|
||||||
Meteor.methods({
|
Meteor.methods({
|
||||||
async 'add.recipe' (recipeName) {
|
'add.recipe' (recipeName) {
|
||||||
check(recipeName, String);
|
check(recipeName, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to add recipes. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to add recipes. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await Recipes.insertAsync({
|
return Recipes.insert({
|
||||||
recipeName: recipeName,
|
recipeName: recipeName,
|
||||||
addedBy: this.userId,
|
addedBy: this.userId,
|
||||||
addedOn: new Date(),
|
addedOn: new Date(),
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'edit.recipe' (recipeId, recipeName) {
|
'edit.recipe' (recipeId, recipeName) {
|
||||||
check(recipeId, String);
|
check(recipeId, String);
|
||||||
check(recipeName, String);
|
check(recipeName, String);
|
||||||
|
|
||||||
|
|
@ -33,7 +33,7 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('You are not allowed to add recipes. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to add recipes. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await Recipes.updateAsync({ _id: recipeId }, {
|
return Recipes.update({ _id: recipeId }, {
|
||||||
$set: {
|
$set: {
|
||||||
recipeName: recipeName,
|
recipeName: recipeName,
|
||||||
updatedOn: new Date(),
|
updatedOn: new Date(),
|
||||||
|
|
@ -41,13 +41,13 @@ Meteor.methods({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'delete.recipe' (recipeId) {
|
'delete.recipe' (recipeId) {
|
||||||
check(recipeId, String);
|
check(recipeId, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to delete recipes. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to delete recipes. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await Recipes.removeAsync({ _id: recipeId });
|
return Recipes.remove({ _id: recipeId });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -12,19 +12,19 @@ ShopLists.allow({
|
||||||
});
|
});
|
||||||
|
|
||||||
Meteor.methods({
|
Meteor.methods({
|
||||||
async 'add.shopList' (shopName) {
|
'add.shopList' (shopName) {
|
||||||
check(shopName, Sring);
|
check(shopName, Sring);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to add shopping lists. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to add shopping lists. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await ShopLists.insert({
|
return ShopLists.insert({
|
||||||
shopName: shopName,
|
shopName: shopName,
|
||||||
shopOwner: this.userId,
|
shopOwner: this.userId,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'edit.shopList' (shopId, shopName) {
|
'edit.shopList' (shopId, shopName) {
|
||||||
check(shopId, String);
|
check(shopId, String);
|
||||||
check(shopName, String);
|
check(shopName, String);
|
||||||
|
|
||||||
|
|
@ -32,19 +32,19 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('You are not allowed to edit shopping lists. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to edit shopping lists. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await ShopLists.update({ _id: shopId }, {
|
return ShopLists.update({ _id: shopId }, {
|
||||||
$set: {
|
$set: {
|
||||||
shopName: shopName,
|
shopName: shopName,
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'delete.shopList' (shopId) {
|
'delete.shopList' (shopId) {
|
||||||
check(shopId, String);
|
check(shopId, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to delete shopping lists. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to delete shopping lists. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await ShopLists.remove({ _id: shopId });
|
return ShopLists.remove({ _id: shopId });
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
@ -12,19 +12,19 @@ Stores.allow({
|
||||||
});
|
});
|
||||||
|
|
||||||
Meteor.methods({
|
Meteor.methods({
|
||||||
async 'add.store' (storeName) {
|
'add.store' (storeName) {
|
||||||
check(storeName, String);
|
check(storeName, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to add stores. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to add stores. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await Stores.insertAsync({
|
return Stores.insert({
|
||||||
storeName: storeName,
|
storeName: storeName,
|
||||||
owner: this.userId,
|
owner: this.userId,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'edit.store' (storeId, storeName) {
|
'edit.store' (storeId, storeName) {
|
||||||
check(storeId, String);
|
check(storeId, String);
|
||||||
check(storeName, String);
|
check(storeName, String);
|
||||||
|
|
||||||
|
|
@ -32,19 +32,19 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('You are not allowed to edit stores. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to edit stores. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await Stores.updateAsync({ _id: storeId }, {
|
return Stores.update({ _id: storeId }, {
|
||||||
$set: {
|
$set: {
|
||||||
storeName: storeName,
|
storeName: storeName,
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'delete.store' (storeId) {
|
'delete.store' (storeId) {
|
||||||
check(storeId, String);
|
check(storeId, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to delete stores. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to delete stores. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await Stores.removeAsync({ _id: storeId });
|
return Stores.remove({ _id: storeId });
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
@ -12,7 +12,7 @@ SysConfig.allow({
|
||||||
});
|
});
|
||||||
|
|
||||||
Meteor.methods({
|
Meteor.methods({
|
||||||
async 'add.noSysAdminReg' (admReg, genReg) {
|
'add.noSysAdminReg' (admReg, genReg) {
|
||||||
check(admReg, Boolean);
|
check(admReg, Boolean);
|
||||||
check(genReg, Boolean);
|
check(genReg, Boolean);
|
||||||
|
|
||||||
|
|
@ -20,39 +20,25 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('Not able to change registration setting. Make sure you are logged in with valid system administrator credentials.');
|
throw new Meteor.Error('Not able to change registration setting. Make sure you are logged in with valid system administrator credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
const currConfig = async() => {
|
let curr = SysConfig.findOne({});
|
||||||
let curr = await SysConfig.findOneAsync({});
|
if (typeof curr != 'undefined') {
|
||||||
if (!curr) {
|
let configId = curr._id;
|
||||||
try {
|
Meteor.call('edit.noSysAdminReg', configId, admReg, genReg, function(err, result) {
|
||||||
return await SysConfig.insertAsync({
|
if (err) {
|
||||||
SysAdminReg: admReg,
|
console.log(" ERROR updating sys admin reg: " + err);
|
||||||
dateAdded: new Date(),
|
|
||||||
allowReg: genReg,
|
|
||||||
});
|
|
||||||
} catch(error) {
|
|
||||||
console.log(" ERROR trying to insert system config:");
|
|
||||||
console.log(error.message);
|
|
||||||
console.log(error.stack);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
let configId = curr._id;
|
|
||||||
const addNoSys = await Meteor.callAsync('edit.noSysAdminReg', configId, admReg, genReg);
|
|
||||||
if (!addNoSys) {
|
|
||||||
// console.log(" Couldn't edit the system config.");
|
|
||||||
} else {
|
} else {
|
||||||
// console.log("Success updating sys admin reg.");
|
console.log("Success updating sys admin reg.");
|
||||||
}
|
}
|
||||||
} catch(error) {
|
});
|
||||||
console.log(" ERROR trying to pull current system config:");
|
} else {
|
||||||
console.log(error.message);
|
return SysConfig.insert({
|
||||||
console.log(error.stack);
|
SysAdminReg: admReg,
|
||||||
}
|
dateAdded: new Date(),
|
||||||
|
allowReg: genReg,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
currConfig();
|
|
||||||
},
|
},
|
||||||
async 'edit.noSysAdminReg' (configId, canReg, genReg) {
|
'edit.noSysAdminReg' (configId, canReg, genReg) {
|
||||||
check(canReg, Boolean);
|
check(canReg, Boolean);
|
||||||
check(configId, String);
|
check(configId, String);
|
||||||
check(genReg, Boolean);
|
check(genReg, Boolean);
|
||||||
|
|
@ -61,7 +47,7 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('Not able to change registration setting. Make sure you are logged in with valid system administrator credentials.');
|
throw new Meteor.Error('Not able to change registration setting. Make sure you are logged in with valid system administrator credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await SysConfig.updateAsync({ _id: configId }, {
|
return SysConfig.update({ _id: configId }, {
|
||||||
$set: {
|
$set: {
|
||||||
SysAdminReg: canReg,
|
SysAdminReg: canReg,
|
||||||
allowReg: genReg,
|
allowReg: genReg,
|
||||||
|
|
@ -69,21 +55,4 @@ Meteor.methods({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'allow.updateInfo' (allowUpdate) {
|
});
|
||||||
check(allowUpdate, Boolean);
|
|
||||||
|
|
||||||
if (!this.userId) {
|
|
||||||
throw new Meteor.Error('Not able to change system update notification settings. Make sure you are logged in with valid system administrator credentials.');
|
|
||||||
}
|
|
||||||
|
|
||||||
let curr = SysConfig.findOne({});
|
|
||||||
|
|
||||||
let configId = curr._id;
|
|
||||||
|
|
||||||
return await SysConfig.updateAsync({ _id: configId }, {
|
|
||||||
$set: {
|
|
||||||
allowUpdates: allowUpdate,
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
@ -13,7 +13,7 @@ TaskItems.allow({
|
||||||
});
|
});
|
||||||
|
|
||||||
Meteor.methods({
|
Meteor.methods({
|
||||||
async 'add.task' (taskNameArr, assignedTo, assignedToId, taskDateArr, actDate) {
|
'add.task' (taskNameArr, assignedTo, assignedToId, taskDateArr, actDate) {
|
||||||
check(taskNameArr, [Object]);
|
check(taskNameArr, [Object]);
|
||||||
check(assignedTo, String);
|
check(assignedTo, String);
|
||||||
check(taskDateArr, [String]);
|
check(taskDateArr, [String]);
|
||||||
|
|
@ -23,14 +23,24 @@ Meteor.methods({
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to add tasks. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to add tasks. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let i=0; i < taskDateArr.length; i++) {
|
let username;
|
||||||
for (let j=0; j < taskNameArr.length; j++) {
|
|
||||||
await TaskItems.insertAsync({
|
if (assignedTo == "self") {
|
||||||
|
let userInfo = Meteor.users.findOne({ _id: this.userId });
|
||||||
|
username = userInfo.profile.fullname;
|
||||||
|
assignedToId = this.userId;
|
||||||
|
} else {
|
||||||
|
username = assignedTo;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=0; i < taskDateArr.length; i++) {
|
||||||
|
for (j=0; j < taskNameArr.length; j++) {
|
||||||
|
TaskItems.insert({
|
||||||
taskName: taskNameArr[j].id,
|
taskName: taskNameArr[j].id,
|
||||||
taskDate: taskDateArr[i],
|
taskDate: taskDateArr[i],
|
||||||
actualDate: actDate[i],
|
actualDate: actDate[i],
|
||||||
assignedTo: assignedTo,
|
assignedTo: username,
|
||||||
assignedToId: assignedToId,
|
assignedToId: assignedToId,
|
||||||
isComplete: false,
|
isComplete: false,
|
||||||
completedOn: null,
|
completedOn: null,
|
||||||
|
|
@ -40,7 +50,7 @@ Meteor.methods({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async 'add.myTask' (taskName, taskDate, actDate) {
|
'add.mytask' (taskName, assignedTo, assignedToId, taskDate, actDate) {
|
||||||
check(taskName, String);
|
check(taskName, String);
|
||||||
check(taskDate, String);
|
check(taskDate, String);
|
||||||
check(actDate, Date);
|
check(actDate, Date);
|
||||||
|
|
@ -49,28 +59,29 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('You are not allowed to add tasks. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to add tasks. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
let userInfo = await Meteor.users.findOneAsync({ _id: this.userId });
|
let username;
|
||||||
if (!userInfo) {
|
|
||||||
// console.log("No matching user info found.")
|
if (assignedTo == "self") {
|
||||||
|
let userInfo = Meteor.users.findOne({ _id: this.userId });
|
||||||
|
username = userInfo.profile.fullname;
|
||||||
|
assignedToId = this.userId;
|
||||||
} else {
|
} else {
|
||||||
try {
|
username = assignedTo;
|
||||||
return await TaskItems.insertAsync({
|
|
||||||
taskName: taskName,
|
|
||||||
taskDate: taskDate,
|
|
||||||
actualDate: actDate,
|
|
||||||
assignedTo: userInfo.profile.fullname,
|
|
||||||
assignedToId: this.userId,
|
|
||||||
isComplete: false,
|
|
||||||
completedOn: null,
|
|
||||||
assignedOn: new Date(),
|
|
||||||
assignedBy: this.userId,
|
|
||||||
});
|
|
||||||
} catch(error) {
|
|
||||||
console.log(" ERROR adding tasksL " + error.message);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return TaskItems.insert({
|
||||||
|
taskName: taskName,
|
||||||
|
taskDate: taskDate,
|
||||||
|
actualDate: actDate,
|
||||||
|
assignedTo: username,
|
||||||
|
assignedToId: assignedToId,
|
||||||
|
isComplete: false,
|
||||||
|
completedOn: null,
|
||||||
|
assignedOn: new Date(),
|
||||||
|
assignedBy: this.userId,
|
||||||
|
});
|
||||||
},
|
},
|
||||||
async 'edit.task' (taskId, taskName, assignedTo, taskDate) {
|
'edit.task' (taskId, taskName, assignedTo, taskDate) {
|
||||||
check(taskId, String);
|
check(taskId, String);
|
||||||
check(taskName, String);
|
check(taskName, String);
|
||||||
check(assignedTo, String);
|
check(assignedTo, String);
|
||||||
|
|
@ -80,7 +91,7 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('You are not allowed to edit tasks. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to edit tasks. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await TaskItems.updateAsync({ _id: taskId }, {
|
return TaskItems.update({ _id: taskId }, {
|
||||||
$set: {
|
$set: {
|
||||||
taskName: taskName,
|
taskName: taskName,
|
||||||
taskDate: taskDate,
|
taskDate: taskDate,
|
||||||
|
|
@ -90,23 +101,23 @@ Meteor.methods({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'delete.task' (taskId) {
|
'delete.task' (taskId) {
|
||||||
check(taskId, String);
|
check(taskId, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to delete tasks. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to delete tasks. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await TaskItems.removeAsync({ _id: taskId });
|
return TaskItems.remove({ _id: taskId });
|
||||||
},
|
},
|
||||||
async 'markTask.complete' (taskId) {
|
'markTask.complete' (taskId) {
|
||||||
check(taskId, String);
|
check(taskId, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to mark tasks complete. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to mark tasks complete. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await TaskItems.updateAsync({ _id: taskId }, {
|
return TaskItems.update({ _id: taskId }, {
|
||||||
$set: {
|
$set: {
|
||||||
isComplete: true,
|
isComplete: true,
|
||||||
completedOn: new Date(),
|
completedOn: new Date(),
|
||||||
|
|
@ -114,14 +125,14 @@ Meteor.methods({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'markTask.notComplete' (taskId) {
|
'markTask.notComplete' (taskId) {
|
||||||
check(taskId, String);
|
check(taskId, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('You are not allowed to mark tasks not complete. Make sure you are logged in with valid user credentials.');
|
throw new Meteor.Error('You are not allowed to mark tasks not complete. Make sure you are logged in with valid user credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await TaskItems.updateAsync({ _id: taskId }, {
|
return TaskItems.update({ _id: taskId }, {
|
||||||
$set: {
|
$set: {
|
||||||
isComplete: false,
|
isComplete: false,
|
||||||
markedUncomplteOn: new Date(),
|
markedUncomplteOn: new Date(),
|
||||||
|
|
@ -129,7 +140,7 @@ Meteor.methods({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'clean.Tasks' (timeFrame) {
|
'clean.Tasks' (timeFrame) {
|
||||||
check(timeFrame, String);
|
check(timeFrame, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
|
|
@ -140,29 +151,29 @@ Meteor.methods({
|
||||||
let upToDate = "";
|
let upToDate = "";
|
||||||
switch(timeFrame) {
|
switch(timeFrame) {
|
||||||
case "1-week":
|
case "1-week":
|
||||||
// console.log("1 Week");
|
console.log("1 Week");
|
||||||
upToDate = 7 * 24 * 60 * 60 * 1000;
|
upToDate = 7 * 24 * 60 * 60 * 1000;
|
||||||
break;
|
break;
|
||||||
case "2-weeks":
|
case "2-weeks":
|
||||||
// console.log("2 Week");
|
console.log("2 Week");
|
||||||
upToDate = 14 * 24 * 60 * 60 * 1000;
|
upToDate = 14 * 24 * 60 * 60 * 1000;
|
||||||
break;
|
break;
|
||||||
case '1-month':
|
case '1-month':
|
||||||
// console.log("1 month");
|
console.log("1 month");
|
||||||
upToDate = 30 * 24 * 60 * 60 * 1000;
|
upToDate = 30 * 24 * 60 * 60 * 1000;
|
||||||
break;
|
break;
|
||||||
case '3-months':
|
case '3-months':
|
||||||
// console.log("3 months");
|
console.log("3 months");
|
||||||
upToDate = 90 * 24 * 60 * 60 * 1000;
|
upToDate = 90 * 24 * 60 * 60 * 1000;
|
||||||
break;
|
break;
|
||||||
case 'all':
|
case 'all':
|
||||||
// console.log("all");
|
console.log("all");
|
||||||
upToDate = 1 * 24 * 60 * 60 * 1000;
|
upToDate = 1 * 24 * 60 * 60 * 1000;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return await TaskItems.removeAsync({ actualDate: { $lt: new Date((new Date()) - upToDate )}});
|
return TaskItems.remove({ actualDate: { $lt: new Date((new Date()) - upToDate )}});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -1,38 +0,0 @@
|
||||||
import { Meteor } from 'meteor/meteor';
|
|
||||||
import { Mongo } from 'meteor/mongo';
|
|
||||||
import { check } from 'meteor/check';
|
|
||||||
|
|
||||||
export const UpdateInfo = new Mongo.Collection('updateInfo');
|
|
||||||
|
|
||||||
UpdateInfo.allow({
|
|
||||||
insert: function(userId, doc){
|
|
||||||
// if use id exists, allow insert
|
|
||||||
return !!userId;
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
Meteor.methods({
|
|
||||||
async 'add.updateInfo' (updateObject) {
|
|
||||||
check(updateObject, Object);
|
|
||||||
|
|
||||||
return await UpdateInfo.insertAsync({
|
|
||||||
title: updateObject.title,
|
|
||||||
description: updateObject.description,
|
|
||||||
dateRelease: updateObject.date,
|
|
||||||
releaseLink: updateObject.link
|
|
||||||
});
|
|
||||||
},
|
|
||||||
async 'markUpdate.read' (updateId) {
|
|
||||||
check(updateId, String);
|
|
||||||
|
|
||||||
if (!this.userId) {
|
|
||||||
throw new Meteor.Error('You are not allowed to mark updates as read. Make sure you are logged in with valid user credentials.');
|
|
||||||
}
|
|
||||||
|
|
||||||
return await UpdateInfo.updateAsync({ _id: updateId }, {
|
|
||||||
$set: {
|
|
||||||
viewed: true
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
@ -9,38 +9,43 @@ UserConfig.allow({
|
||||||
// if use id exists, allow insert
|
// if use id exists, allow insert
|
||||||
return !!userId;
|
return !!userId;
|
||||||
},
|
},
|
||||||
update: function(userId, doc){
|
|
||||||
// if use id exists, allow insert
|
|
||||||
return !!userId;
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Meteor.methods({
|
Meteor.methods({
|
||||||
async 'add.darkModePref' (pref) {
|
'add.darkModePref' (pref) {
|
||||||
check(pref, String);
|
check(pref, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('Not able to change theme setting. Make sure you are logged in with valid system administrator credentials.');
|
throw new Meteor.Error('Not able to change registration setting. Make sure you are logged in with valid system administrator credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await UserConfig.insertAsync({
|
return UserConfig.insert({
|
||||||
user: this.userId,
|
user: this.userId,
|
||||||
darkMode: pref,
|
darkMode: pref,
|
||||||
dateAdded: Date()
|
dateAdded: Date()
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'update.darkModePref' (pref) {
|
'update.darkModePref' (pref) {
|
||||||
check(pref, String);
|
check(pref, String);
|
||||||
|
|
||||||
if (!this.userId) {
|
if (!this.userId) {
|
||||||
throw new Meteor.Error('Not able to change theme setting. Make sure you are logged in with valid system administrator credentials.');
|
throw new Meteor.Error('Not able to change registration setting. Make sure you are logged in with valid system administrator credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return await UserConfig.updateAsync({ user: this.userId }, {
|
let myConfig = UserConfig.findOne({ user: this.userId });
|
||||||
$set: {
|
if (typeof myConfig == 'undefined') {
|
||||||
darkMode: pref,
|
Meteor.call('add.darkModePref', pref, function(err, result) {
|
||||||
dateUpdate: Date()
|
if (err) {
|
||||||
}
|
console.log(" ERROR calling the add functioin for dark mode: " + err);
|
||||||
});
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return UserConfig.update({ user: this.userId }, {
|
||||||
|
$set: {
|
||||||
|
darkMode: pref,
|
||||||
|
dateUpdate: Date()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -12,10 +12,10 @@ UserConfigOptions.allow({
|
||||||
});
|
});
|
||||||
|
|
||||||
Meteor.methods({
|
Meteor.methods({
|
||||||
async 'change.userPass' (usersId, password) {
|
'change.userPass' (usersId, password) {
|
||||||
check(usersId, String);
|
check(usersId, String);
|
||||||
check(password, String);
|
check(password, String);
|
||||||
|
|
||||||
return await Accounts.setPasswordAsync(usersId, password);
|
return Accounts.setPassword(usersId, password);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
@ -12,7 +12,7 @@ UserLast.allow({
|
||||||
});
|
});
|
||||||
|
|
||||||
Meteor.methods({
|
Meteor.methods({
|
||||||
async 'add.userLast' (view, viewId) {
|
'add.userLast' (view, viewId) {
|
||||||
check(view, String);
|
check(view, String);
|
||||||
check(viewId, String);
|
check(viewId, String);
|
||||||
|
|
||||||
|
|
@ -22,33 +22,24 @@ Meteor.methods({
|
||||||
|
|
||||||
// first let's find out if there's an entry for this user and view, and if so
|
// first let's find out if there's an entry for this user and view, and if so
|
||||||
// we'll just edit that entry with updated information
|
// we'll just edit that entry with updated information
|
||||||
let userListInfo = await UserLast.findOneAsync({ userId: this.userId, view: view });
|
let userListInfo = UserLast.findOne({ userId: this.userId, view: view });
|
||||||
if (!userListInfo) {
|
if (typeof userListInfo != 'undefined' && userListInfo != "" && userListInfo != null) {
|
||||||
// console.log("Adding new user last item.");
|
// entry exists, call the edit function instead
|
||||||
return await UserLast.insertAsync({
|
Meteor.call('edit.userLast', view, viewId, function(err, result) {
|
||||||
|
if (err) {
|
||||||
|
console.log(" ERROR moving user to edit for last view: " + err);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return UserLast.insert({
|
||||||
userId: this.userId,
|
userId: this.userId,
|
||||||
view: view,
|
view: view,
|
||||||
viewId: viewId,
|
viewId: viewId,
|
||||||
dateAdded: Date(),
|
dateAdded: Date(),
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
// console.log("Editing existing user last itme.");
|
|
||||||
// entry exists, call the edit function instead
|
|
||||||
let result = await Meteor.callAsync('edit.userLast', view, viewId);
|
|
||||||
if (!result) {
|
|
||||||
try {
|
|
||||||
// console.log("Issue editing existing entry in userLast. Check the logs.");
|
|
||||||
} catch(error) {
|
|
||||||
console.log(" ERROR adding userLast item: " + error);
|
|
||||||
console.log(error.message);
|
|
||||||
console.log(error.stack);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async 'edit.userLast' (view, viewId) {
|
'edit.userLast' (view, viewId) {
|
||||||
check(view, String);
|
check(view, String);
|
||||||
check(viewId, String);
|
check(viewId, String);
|
||||||
|
|
||||||
|
|
@ -56,8 +47,7 @@ Meteor.methods({
|
||||||
throw new Meteor.Error('Not able to change user view last setting. Make sure you are logged in with valid system administrator credentials.');
|
throw new Meteor.Error('Not able to change user view last setting. Make sure you are logged in with valid system administrator credentials.');
|
||||||
}
|
}
|
||||||
|
|
||||||
// console.log("Edit in progress.");
|
return UserLast.update({ view: view, userId: this.userId }, {
|
||||||
return await UserLast.updateAsync({ view: view, userId: this.userId }, {
|
|
||||||
$set: {
|
$set: {
|
||||||
viewId: viewId,
|
viewId: viewId,
|
||||||
dateLastUpdate: Date(),
|
dateLastUpdate: Date(),
|
||||||
|
|
|
||||||
|
|
@ -1,134 +1,132 @@
|
||||||
import { FlowRouter } from 'meteor/ostrio:flow-router-extra';
|
|
||||||
|
|
||||||
FlowRouter.route('/dashboard', {
|
FlowRouter.route('/dashboard', {
|
||||||
name: 'home',
|
name: 'home',
|
||||||
action() {
|
action() {
|
||||||
this.render('MainLayout', { main: "dashboard" });
|
BlazeLayout.render('MainLayout', { main: "dashboard" });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
FlowRouter.route('/', {
|
FlowRouter.route('/', {
|
||||||
name: 'homeNoRoute',
|
name: 'homeNoRoute',
|
||||||
action() {
|
action() {
|
||||||
this.render('MainLayout', { main: "dashboard" });
|
BlazeLayout.render('MainLayout', { main: "dashboard" });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
FlowRouter.route('/', {
|
FlowRouter.route('/', {
|
||||||
name: 'homeNotLoggedIn',
|
name: 'homeNotLoggedIn',
|
||||||
action() {
|
action() {
|
||||||
this.render('MainLayout', { notLoggedIn: "login" });
|
BlazeLayout.render('MainLayout', { notLoggedIn: "login" });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
FlowRouter.route('/login', {
|
FlowRouter.route('/login', {
|
||||||
name: 'login',
|
name: 'login',
|
||||||
action() {
|
action() {
|
||||||
this.render('MainLayout', { notLoggedIn: "login" });
|
BlazeLayout.render('MainLayout', { notLoggedIn: "login" });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
FlowRouter.route('/reg', {
|
FlowRouter.route('/reg', {
|
||||||
name: 'reg',
|
name: 'reg',
|
||||||
action() {
|
action() {
|
||||||
this.render('MainLayout', { notLoggedIn: "reg" });
|
BlazeLayout.render('MainLayout', { notLoggedIn: "reg" });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
FlowRouter.route('/userMgmt', {
|
FlowRouter.route('/userMgmt', {
|
||||||
name: 'userMgmt',
|
name: 'userMgmt',
|
||||||
action() {
|
action() {
|
||||||
this.render('MainLayout', { main: 'userMgmt' });
|
BlazeLayout.render('MainLayout', { main: 'userMgmt' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
FlowRouter.route('/manageStore', {
|
FlowRouter.route('/manageStore', {
|
||||||
name: 'storeMgmt',
|
name: 'storeMgmt',
|
||||||
action() {
|
action() {
|
||||||
this.render('MainLayout', { main: 'storeMgmt' });
|
BlazeLayout.render('MainLayout', { main: 'storeMgmt' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
FlowRouter.route('/manage', {
|
FlowRouter.route('/manage', {
|
||||||
name: 'mgmtPage',
|
name: 'mgmtPage',
|
||||||
action() {
|
action() {
|
||||||
this.render('MainLayout', { main: 'mgmtPage' });
|
BlazeLayout.render('MainLayout', { main: 'mgmtPage' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
FlowRouter.route('/manageProduct', {
|
FlowRouter.route('/manageProduct', {
|
||||||
name: 'manageProduct',
|
name: 'manageProduct',
|
||||||
action() {
|
action() {
|
||||||
this.render('MainLayout', { main: 'prodMgmt' });
|
BlazeLayout.render('MainLayout', { main: 'prodMgmt' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
FlowRouter.route('/manageLists', {
|
FlowRouter.route('/manageLists', {
|
||||||
name: 'manageLists',
|
name: 'manageLists',
|
||||||
action() {
|
action() {
|
||||||
this.render('MainLayout', { main: 'listMgmt' });
|
BlazeLayout.render('MainLayout', { main: 'listMgmt' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
FlowRouter.route('/mylists', {
|
FlowRouter.route('/mylists', {
|
||||||
name: 'mylists',
|
name: 'mylists',
|
||||||
action() {
|
action() {
|
||||||
this.render('MainLayout', { main: 'listsMain' });
|
BlazeLayout.render('MainLayout', { main: 'listsMain' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
FlowRouter.route('/listItems', {
|
FlowRouter.route('/listItems', {
|
||||||
name: 'listItems',
|
name: 'listItems',
|
||||||
action() {
|
action() {
|
||||||
this.render('MainLayout', { main: 'listItemsMain' });
|
BlazeLayout.render('MainLayout', { main: 'listItemsMain' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
FlowRouter.route('/mymenus', {
|
FlowRouter.route('/mymenus', {
|
||||||
name: 'mymenus',
|
name: 'mymenus',
|
||||||
action() {
|
action() {
|
||||||
this.render('MainLayout', { main: 'mainMenu' });
|
BlazeLayout.render('MainLayout', { main: 'mainMenu' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
FlowRouter.route('/menuItems', {
|
FlowRouter.route('/menuItems', {
|
||||||
name: 'menuItems',
|
name: 'menuItems',
|
||||||
action() {
|
action() {
|
||||||
this.render('MainLayout', { main: 'menuItems' });
|
BlazeLayout.render('MainLayout', { main: 'menuItems' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
FlowRouter.route('/taskHome', {
|
FlowRouter.route('/taskHome', {
|
||||||
name: 'taskHome',
|
name: 'taskHome',
|
||||||
action() {
|
action() {
|
||||||
this.render('MainLayout', { main: 'taskHome' });
|
BlazeLayout.render('MainLayout', { main: 'taskHome' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
FlowRouter.route('/myTasks', {
|
FlowRouter.route('/myTasks', {
|
||||||
name: 'myTasks',
|
name: 'myTasks',
|
||||||
action() {
|
action() {
|
||||||
this.render('MainLayout', { main: 'myTasks' });
|
BlazeLayout.render('MainLayout', { main: 'myTasks' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
FlowRouter.route('/systemAdmin', {
|
FlowRouter.route('/systemAdmin', {
|
||||||
name: 'systemAdmin',
|
name: 'systemAdmin',
|
||||||
action() {
|
action() {
|
||||||
this.render('MainLayout', { main: 'systemAdmin' });
|
BlazeLayout.render('MainLayout', { main: 'systemAdmin' });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
FlowRouter.route('/cleanUp', {
|
FlowRouter.route('/cleanUp', {
|
||||||
name: 'cleanUp',
|
name: 'cleanUp',
|
||||||
action() {
|
action() {
|
||||||
this.render('MainLayout', { main: 'cleanUp'});
|
BlazeLayout.render('MainLayout', { main: 'cleanUp'});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
FlowRouter.route('/mySettings', {
|
FlowRouter.route('/mySettings', {
|
||||||
name: 'mySettings',
|
name: 'mySettings',
|
||||||
action() {
|
action() {
|
||||||
this.render('MainLayout', { main: 'userConfig'});
|
BlazeLayout.render('MainLayout', { main: 'userConfig'});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
2355
package-lock.json
generated
2355
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "get-my",
|
"name": "pPickup",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "meteor run",
|
"start": "meteor run",
|
||||||
|
|
@ -12,8 +12,6 @@
|
||||||
"jquery": "^3.6.0",
|
"jquery": "^3.6.0",
|
||||||
"meteor-node-stubs": "^1.2.5",
|
"meteor-node-stubs": "^1.2.5",
|
||||||
"moment": "^2.29.4",
|
"moment": "^2.29.4",
|
||||||
"node-cron": "^3.0.3",
|
|
||||||
"rss-url-parser": "^3.0.0",
|
|
||||||
"typeahead-standalone": "^5.2.0"
|
"typeahead-standalone": "^5.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
268
server/main.js
268
server/main.js
|
|
@ -1,239 +1,69 @@
|
||||||
// this file has been converted for meteor 3 and later
|
|
||||||
|
|
||||||
import { Meteor } from 'meteor/meteor';
|
import { Meteor } from 'meteor/meteor';
|
||||||
import { SysConfig } from '../imports/api/systemConfig';
|
import { SysConfig } from '../imports/api/systemConfig';
|
||||||
import { MenuItems } from '../imports/api/menuItems';
|
import { MenuItems } from '../imports/api/menuItems';
|
||||||
import { Products } from '../imports/api/products.js';
|
import { Products } from '../imports/api/products.js';
|
||||||
import { Menus } from '../imports/api/menu.js';
|
|
||||||
import { MScripts } from '../imports/api/mScripts.js';
|
|
||||||
import { UpdateInfo } from '../imports/api/updateInfo.js';
|
|
||||||
import { Roles } from 'meteor/roles';
|
|
||||||
|
|
||||||
Meteor.startup(async() => {
|
Meteor.startup(() => {
|
||||||
// code to run on server at startup
|
// code to run on server at startup
|
||||||
Roles.createRoleAsync("user", {unlessExists: true});
|
Roles.createRole("user", {unlessExists: true});
|
||||||
Roles.createRoleAsync("admin", {unlessExists: true});
|
Roles.createRole("admin", {unlessExists: true});
|
||||||
Roles.createRoleAsync("systemadmin", {unlessExists: true});
|
Roles.createRole("systemadmin", {unlessExists: true});
|
||||||
|
|
||||||
// set the systemconfig defaults for registration
|
// set the systemconfig defaults for registration
|
||||||
// check if this has already been run
|
let regPolicy = SysConfig.findOne({});
|
||||||
let regPolRun = await MScripts.findOneAsync({ scriptName: "DefaultRegPolicy", scriptRun: true });
|
if (typeof regPolicy == 'undefined') {
|
||||||
if (!regPolRun) {
|
return SysConfig.insert({
|
||||||
try {
|
SysAdminReg: false,
|
||||||
let regPolicy = await SysConfig.findOneAsync({});
|
dateAdded: new Date(),
|
||||||
if (!regPolicy) {
|
allowReg: true,
|
||||||
SysConfig.insertAsync({
|
});
|
||||||
SysAdminReg: false,
|
} else {
|
||||||
dateAdded: new Date(),
|
// console.log("Registration policy already set.");
|
||||||
allowReg: true,
|
|
||||||
allowUpdates: true,
|
|
||||||
});
|
|
||||||
markScriptRun("DefaultRegPolicy");
|
|
||||||
} else {
|
|
||||||
// console.log("Registration policy already set.");
|
|
||||||
markScriptRun("DefaultRegPolicy");
|
|
||||||
}
|
|
||||||
} catch(error) {
|
|
||||||
console.log(" ERROR trying to check if registration policy was set.");
|
|
||||||
console.log(error.message);
|
|
||||||
console.log(error.stack);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if the isLInked item exists on menuitems, and if not, add it (data cleanup task)
|
// check if the isLInked item exists on menuitems, and if not, add it (data cleanup task)
|
||||||
// see if already updated
|
let itemInfoNoLink = MenuItems.find({ isLinked: { $exists: false } }).fetch();
|
||||||
let linkUpdateRun = await MScripts.findOneAsync({ scriptName: "updateMenuItemLinks", scriptRun: true });
|
// console.log("No Ites with isLinked not set: " + itemInfoNoLink.length);
|
||||||
try {
|
if (itemInfoNoLink.length > 0) {
|
||||||
if (!linkUpdateRun) {
|
// console.log("found items with isLinked not set.");
|
||||||
let itemInfoNoLink = MenuItems.find({ isLinked: { $exists: false } }).fetch();
|
// console.dir(itemInfoNoLink);
|
||||||
// console.log("No Ites with isLinked not set: " + itemInfoNoLink.length);
|
let infoLength = itemInfoNoLink.length;
|
||||||
if (itemInfoNoLink.length > 0) {
|
for (i=0; i < infoLength; i++) {
|
||||||
// console.log("Found items with isLinked not set. Updating...");
|
MenuItems.update({ _id: itemInfoNoLink[i]._id }, {
|
||||||
// console.dir(itemInfoNoLink);
|
$set: {
|
||||||
let infoLength = itemInfoNoLink.length;
|
isLinked: false,
|
||||||
for (i=0; i < infoLength; i++) {
|
|
||||||
MenuItems.updateAsync({ _id: itemInfoNoLink[i]._id }, {
|
|
||||||
$set: {
|
|
||||||
isLinked: false,
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (i == (infoLength -1)) {
|
|
||||||
markScriptRun("updateMenuItemLinks");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
});
|
||||||
// this will show if all items are found to have isLInked set.
|
|
||||||
// console.log("No items with isLinked not set.");
|
|
||||||
markScriptRun("updateMenuItemLinks");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch(error) {
|
} else {
|
||||||
console.log(" ERROR running check for isLinked items.");
|
// this will show if all items are found to have isLInked set.
|
||||||
console.log(error.message);
|
console.log("No itesm with isLinked not set.");
|
||||||
console.log(error.stack);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// update Products to be able to have multiple stores in the document
|
// update Products to be able to have multiple stores in the document
|
||||||
// check if update already run
|
let prodInfo = Products.find({}).fetch();
|
||||||
let prodStoreArrayRun = await MScripts.findOneAsync({ scriptName: "changeProdStoreToArray", scriptRun: true });
|
let prodCount = prodInfo.length;
|
||||||
if (!prodStoreArrayRun) {
|
console.log("Updating Products to allow multiple store assocation for " + prodCount + " products.");
|
||||||
try {
|
for (j = 0; j < prodCount; j++) {
|
||||||
let prodInfo = Products.find({}).fetch();
|
if (typeof prodInfo[j].prodStore == 'object') {
|
||||||
let prodCount = prodInfo.length;
|
// console.log(typeof prodInfo[j].prodStore);
|
||||||
// console.log("Updating Products to allow multiple store assocation for " + prodCount + " products.");
|
// console.log("Is Array already");
|
||||||
for (let j = 0; j < prodCount; j++) {
|
} else {
|
||||||
if (typeof prodInfo[j].prodStore == 'object') {
|
let prodStoreArray = [];
|
||||||
// console.log(typeof prodInfo[j].prodStore);
|
// console.log("---- ---- ----");
|
||||||
// console.log("Is Array already");
|
// console.log(typeof prodInfo[j].prodStore);
|
||||||
} else {
|
// console.log("---- Is Not Array.");
|
||||||
let prodStoreArray = [];
|
let prodStore = prodInfo[j].prodStore;
|
||||||
// console.log("---- ---- ----");
|
|
||||||
// console.log(typeof prodInfo[j].prodStore);
|
|
||||||
// console.log("---- Is Not Array.");
|
|
||||||
let prodStore = prodInfo[j].prodStore;
|
|
||||||
|
|
||||||
prodStoreArray.push(prodStore);
|
prodStoreArray.push(prodStore);
|
||||||
// console.dir(prodStoreArray);
|
// console.dir(prodStoreArray);
|
||||||
Products.update({ _id: prodInfo[j]._id }, {
|
Products.update({ _id: prodInfo[j]._id }, {
|
||||||
$set: {
|
$set: {
|
||||||
prodStore: prodStoreArray,
|
prodStore: prodStoreArray,
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
if (j == (prodCount -1)) {
|
});
|
||||||
markScriptRun("changeProdStoreToArray");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch(error) {
|
|
||||||
console.log("Script to update product stores couldn't run.");
|
|
||||||
console.log(error.message);
|
|
||||||
console.log(error.stack);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// update menu items to new format so they get the linked products
|
|
||||||
// check if this update has run
|
|
||||||
let menuItemUpdRun = await MScripts.findOneAsync({ scriptName: "updateMenuProdLinks", scriptRun: true });
|
|
||||||
if (!menuItemUpdRun) {
|
|
||||||
try {
|
|
||||||
let openMenus = Menus.find({ menuComplete: false }).fetch();
|
|
||||||
let openMenuCount = openMenus.length;
|
|
||||||
// console.log("Open Menu count is: " + openMenuCount);
|
|
||||||
for (let k = 0; k < openMenuCount; k++) {
|
|
||||||
if (typeof openMenus.menuItems == 'object') {
|
|
||||||
// console.log(openMenus.menuName + " appears to be converted.");
|
|
||||||
markScriptRun("updateMenuProdLinks");
|
|
||||||
} else {
|
|
||||||
let menuId = openMenus[k]._id;
|
|
||||||
|
|
||||||
let thisMenuItems = MenuItems.find({ menuId: menuId }).fetch();
|
|
||||||
|
|
||||||
let itemCount = thisMenuItems.length;
|
|
||||||
|
|
||||||
for (l = 0; l < itemCount; l++) {
|
|
||||||
Menus.update({ _id: menuId }, {
|
|
||||||
$addToSet: {
|
|
||||||
menuItems:
|
|
||||||
{
|
|
||||||
menuItemId: thisMenuItems[l]._id,
|
|
||||||
menuItemName: thisMenuItems[l].itemName,
|
|
||||||
serveDate: thisMenuItems[l].serveDate,
|
|
||||||
serveDateActual: thisMenuItems[l].serveDateActual,
|
|
||||||
isLinked: thisMenuItems[l].isLinked
|
|
||||||
},
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (k == (openMenuCount - 1)) {
|
|
||||||
markScriptRun("updateMenuProdLinks");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch(error) {
|
|
||||||
console.log(" ERROR updating the menu product links: ");
|
|
||||||
console.log(error.message);
|
|
||||||
console.log(error.stack);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// console.log("Menu Item updates have already been run.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// get update available information if enabled in system confiuration
|
|
||||||
let currConfig = await SysConfig.findOneAsync({});
|
|
||||||
if (!currConfig) {
|
|
||||||
// console.log("No Current Config found.")
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
let feedurl = "https://gitlab.com/bmcgonag/get_my/-/releases.atom"
|
|
||||||
if (currConfig.allowUpdates == true) {
|
|
||||||
// console.log("Allow Updates is true");
|
|
||||||
startCronForUpdates(feedurl);
|
|
||||||
} else if (typeof currConfig.allowUpdates == 'undefined' || currConfig.allowUpdates == null) {
|
|
||||||
SysConfig.update({ _id: currConfig._id }, { $set: {
|
|
||||||
allowUpdates: true,
|
|
||||||
}});
|
|
||||||
startCronForUpdates(feedurl);
|
|
||||||
}
|
|
||||||
} catch(error) {
|
|
||||||
console.log(" ERROR checking current config for updates: " + error);
|
|
||||||
console.log(error.message);
|
|
||||||
console.log(error.stack);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
var startCronForUpdates = function(feedurl) {
|
|
||||||
var cron = require('node-cron');
|
|
||||||
|
|
||||||
cron.schedule('*/30 * * * *', () => {
|
|
||||||
getUpdateInfoNow(feedurl);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
var markScriptRun = async function(scriptName) {
|
|
||||||
// check if this is already set
|
|
||||||
let scriptRun = await MScripts.findOneAsync({ scriptName: scriptName });
|
|
||||||
if (!scriptRun) {
|
|
||||||
try {
|
|
||||||
return MScripts.insertAsync({
|
|
||||||
scriptName: scriptName,
|
|
||||||
scriptRun: true,
|
|
||||||
runOn: new Date()
|
|
||||||
});
|
|
||||||
} catch(error) {
|
|
||||||
console.log(" ERROR inserting the script run log: " + error);
|
|
||||||
console.log(error.message);
|
|
||||||
console.log(error.stack);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// console.log(scriptName + " already set as run on " + scriptRun.runOn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var getUpdateInfoNow = async function(feedurl) {
|
|
||||||
const parser = require('rss-url-parser')
|
|
||||||
|
|
||||||
const data = await parser(feedurl)
|
|
||||||
let dataLength = data.length;
|
|
||||||
// console.dir(data[0].title);
|
|
||||||
|
|
||||||
// check if this title already exists in db
|
|
||||||
let updatesExist = await UpdateInfo.findOneAsync({ title: data[0].title });
|
|
||||||
try {
|
|
||||||
if (!updatesExist) {
|
|
||||||
UpdateInfo.insertAsync({
|
|
||||||
title: data[0].title,
|
|
||||||
description: data[0].description,
|
|
||||||
dateRelease: data[0].date,
|
|
||||||
releaseLink: data[0].link,
|
|
||||||
viewed: false
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
console.log("No new updates available at this time.");
|
|
||||||
}
|
|
||||||
} catch(error) {
|
|
||||||
console.log(" ERROR checking for update: " + error);
|
|
||||||
console.log(error.message);
|
|
||||||
console.log(error.stack);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -2,67 +2,61 @@ import { Meteor } from 'meteor/meteor';
|
||||||
import { Mongo } from 'meteor/mongo';
|
import { Mongo } from 'meteor/mongo';
|
||||||
import { check } from 'meteor/check';
|
import { check } from 'meteor/check';
|
||||||
import { TaskItems } from '../imports/api/tasks';
|
import { TaskItems } from '../imports/api/tasks';
|
||||||
import { SysConfig } from '../imports/api/systemConfig';
|
|
||||||
import { Roles } from 'meteor/roles';
|
|
||||||
|
|
||||||
Meteor.methods({
|
Meteor.methods({
|
||||||
async 'addToRole' (role) {
|
'addToRole' (role) {
|
||||||
try {
|
let countOfUsers = Meteor.users.find().count();
|
||||||
let countOfUsers = await Meteor.users.find().countAsync();
|
|
||||||
const user = await Meteor.userAsync();
|
// if users = 1 - set to role passed in function call
|
||||||
if (user) {
|
if (countOfUsers > 1) {
|
||||||
let userId = user._id;
|
console.log("User id for role: " + Meteor.userId() );
|
||||||
if (countOfUsers > 1) {
|
let userId = Meteor.userId();
|
||||||
await Roles.addUsersToRolesAsync(userId, role);
|
Roles.addUsersToRoles(userId, role);
|
||||||
const result = await Meteor.callAsync('add.darkModePref', "light");
|
Meteor.call('add.darkModePref', "light", function(err, result) {
|
||||||
if (!result) {
|
if (err) {
|
||||||
console.log(" ERROR: can't set user dark mode preference: " + err);
|
console.log(" ERROR: can't set user dark mode preference: " + err);
|
||||||
} else {
|
|
||||||
// console.log(" SUCCESSFULLY set user dark mode preference.");
|
|
||||||
}
|
|
||||||
} else if (countOfUsers == 1) {
|
|
||||||
await Roles.addUsersToRolesAsync(userId, "systemadmin");
|
|
||||||
const result = await Meteor.callAsync('add.darkModePref', "light");
|
|
||||||
if (!result) {
|
|
||||||
console.log(" ERROR: can't set user dark mode preference: " + err);
|
|
||||||
} else {
|
|
||||||
console.log(" SUCCESSFULLY set user dark mode preference.");
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
console.log("The count of users didn't seem to work when adding a new user.");
|
// console.log(" SUCCESSFULLY set user dark mode preference.");
|
||||||
}
|
}
|
||||||
} else {
|
});
|
||||||
console.log(" ---- No user info found.")
|
} else if (countOfUsers == 1) {
|
||||||
}
|
console.log("Creating first system admin user: " + Meteor.userId() );
|
||||||
} catch(error) {
|
let userId = Meteor.userId();
|
||||||
console.log(" ERROR getting user info on server: " + error);
|
Roles.addUsersToRoles(userId, "systemadmin");
|
||||||
|
Meteor.call('add.darkModePref', "light", function(err, result) {
|
||||||
|
if (err) {
|
||||||
|
console.log(" ERROR: can't set user dark mode preference: " + err);
|
||||||
|
} else {
|
||||||
|
// console.log(" SUCCESSFULLY set user dark mode preference.");
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async 'edit.userPass' (userId, newPassword) {
|
'edit.userPass' (userId, newPassword) {
|
||||||
check(userId, String);
|
check(userId, String);
|
||||||
check(newPassword, String);
|
check(newPassword, String);
|
||||||
|
|
||||||
return await Accounts.setPasswordAsync(userId, newPassword);
|
return Accounts.setPassword(userId, newPassword);
|
||||||
},
|
},
|
||||||
async 'delete.userFromSys' (userId) {
|
'delete.userFromSys' (userId) {
|
||||||
check(userId, String);
|
check(userId, String);
|
||||||
|
|
||||||
return await Meteor.users.removeAsync({ _id: userId });
|
return Meteor.users.remove({ _id: userId });
|
||||||
},
|
},
|
||||||
async 'update.userEmail' (userId, email) {
|
'update.userEmail' (userId, email) {
|
||||||
check(userId, String);
|
check(userId, String);
|
||||||
check(email, String);
|
check(email, String);
|
||||||
|
|
||||||
return await Meteor.users.updateAsync({ _id: userId }, {
|
return Meteor.users.update({ _id: userId }, {
|
||||||
$set: {
|
$set: {
|
||||||
'emails.0.address': email,
|
'emails.0.address': email,
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
async 'edit.userRole' (userId, role) {
|
'edit.userRole' (userId, role) {
|
||||||
check(userId, String);
|
check(userId, String);
|
||||||
check(role, String);
|
check(role, String);
|
||||||
|
|
||||||
return await Roles.setUserRolesAsync(userId, role);
|
return Roles.setUserRoles(userId, role);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -11,14 +11,6 @@ import { TaskItems } from '../imports/api/tasks.js';
|
||||||
import { UserConfig } from '../imports/api/userConfig.js';
|
import { UserConfig } from '../imports/api/userConfig.js';
|
||||||
import { MenuProdLinks } from '../imports/api/menuProdLinks.js';
|
import { MenuProdLinks } from '../imports/api/menuProdLinks.js';
|
||||||
import { UserLast } from '../imports/api/userLast.js';
|
import { UserLast } from '../imports/api/userLast.js';
|
||||||
import { UpdateInfo } from '../imports/api/updateInfo.js';
|
|
||||||
|
|
||||||
Meteor.publish(null, function () {
|
|
||||||
if (this.userId) {
|
|
||||||
return Meteor.roleAssignment.find({ "user._id": this.userId });
|
|
||||||
}
|
|
||||||
this.ready();
|
|
||||||
});
|
|
||||||
|
|
||||||
Meteor.publish("SystemConfig", function() {
|
Meteor.publish("SystemConfig", function() {
|
||||||
try {
|
try {
|
||||||
|
|
@ -30,20 +22,12 @@ Meteor.publish("SystemConfig", function() {
|
||||||
|
|
||||||
Meteor.publish("UserConfigPrefs", function() {
|
Meteor.publish("UserConfigPrefs", function() {
|
||||||
try {
|
try {
|
||||||
return UserConfig.find({ user: this.userId });
|
return UserConfig.find({});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(" ERROR: Error accessing user config: " + error);
|
console.log(" ERROR: Error accessing user config: " + error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Meteor.publish("UpdateVersion", function() {
|
|
||||||
try {
|
|
||||||
return UpdateInfo.find({ viewed: false });
|
|
||||||
} catch(error) {
|
|
||||||
console.log(" ERROR pulling updated version info: " + error);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
Meteor.publish('userList', function() {
|
Meteor.publish('userList', function() {
|
||||||
return Meteor.users.find({});
|
return Meteor.users.find({});
|
||||||
});
|
});
|
||||||
|
|
@ -96,28 +80,6 @@ Meteor.publish("myListItems", function(listId) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Meteor.publish("allListItems", function() {
|
|
||||||
try {
|
|
||||||
return ListItems.find({});
|
|
||||||
} catch (error) {
|
|
||||||
console.log(" ERROR pulling all list items.");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Meteor.publish("myStoreListItems", function(listId) {
|
|
||||||
try {
|
|
||||||
let stores = Store.find({});
|
|
||||||
if (stores) {
|
|
||||||
for (i=0; i<stores.length; i++) {
|
|
||||||
let items = ListItems.find({ prodStore: store[i], listId: listId }).fetch();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.log(" ERROR pulling items or stores: " + error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Meteor.publish("myMenus", function() {
|
Meteor.publish("myMenus", function() {
|
||||||
try {
|
try {
|
||||||
return Menus.find({ menuComplete: false });
|
return Menus.find({ menuComplete: false });
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue