2017-12-31 14:06:46 -08:00
import { Meteor } from 'meteor/meteor' ;
import { Mongo } from 'meteor/mongo' ;
import { check } from 'meteor/check' ;
import { SimpleSchema } from 'meteor/aldeed:simple-schema' ;
2019-10-07 15:51:50 -07:00
let Workers = new Mongo . Collection ( 'Workers' ) ;
2017-12-31 14:06:46 -08:00
let WORKER _ACTIVITIES = [ 'sales' , 'prep' , 'canning' , 'farming' ] ;
let workersSchema = new SimpleSchema ( {
name : {
type : String ,
label : "Name" ,
optional : false ,
trim : true ,
index : 1 ,
unique : true
} ,
activities : {
type : [ String ] ,
label : "Activities" ,
optional : false ,
trim : true
} ,
hourlyRate : {
type : SimpleSchema . Integer ,
label : "HourlyRate" ,
optional : false ,
min : 0
} ,
createdAt : { //Force the value to the current date on the server.
type : Date ,
label : "Created On" ,
// autoValue: function() { //The disadvantage of autoValue is that it sets the date after insertion, causing the UI to update twice - once where the item has no date, and then again where the date is set. Sorted lists will cause the item to bounce around.
// if(this.isInsert) return new Date();
// else if(this.isUpsert) return {$setOnInsert: new Date()};
// else this.unset();
// },
// denyUpdate: true,
optional : false
} ,
updatedAt : {
type : Date ,
label : "Updated On" ,
// autoValue: function() {
// if(this.isUpdate) return new Date();
// },
// denyInsert: true,
optional : true
} ,
deactivated : {
type : Boolean ,
label : "Deactivated" ,
optional : true
} ,
hidden : {
type : Boolean ,
label : "Hidden" ,
optional : true
}
} ) ;
workersSchema . constants = { activities : WORKER _ACTIVITIES } ;
Workers . attachSchema ( workersSchema ) ;
2019-10-07 15:51:50 -07:00
if ( Meteor . isServer ) Meteor . publish ( 'workers' , function ( ) {
2017-12-31 14:06:46 -08:00
return Workers . find ( { } ) ;
} ) ;
if ( Meteor . isServer ) {
Meteor . methods ( {
createWorker : function ( name , activities , hourlyRate ) {
check ( name , String ) ;
check ( activities , [ String ] ) ;
check ( hourlyRate , Number ) ;
if ( Roles . userIsInRole ( this . userId , [ Meteor . UserRoles . ROLE _UPDATE ] ) ) {
Workers . insert ( { name , activities , hourlyRate , createdAt : new Date ( ) } ) ;
}
else throw new Meteor . Error ( 403 , "Not authorized." ) ;
} ,
//deleteWorker: function(id) {
// if(Roles.userIsInRole(this.userId, [Meteor.UserRoles.ROLE_UPDATE])) {
// //TODO: Should troll the database looking for references to remove or replace. This is currently not used.
// Workers.remove(id);
// }
// else throw new Meteor.Error(403, "Not authorized.");
//},
updateWorker : function ( id , name , activities , hourlyRate ) {
check ( id , String ) ;
check ( name , String ) ;
check ( activities , [ String ] ) ;
check ( hourlyRate , Number ) ;
if ( Roles . userIsInRole ( this . userId , [ Meteor . UserRoles . ROLE _UPDATE ] ) ) {
Workers . update ( id , { $set : { name , activities , hourlyRate , updatedAt : new Date ( ) } } ) ;
}
else throw new Meteor . Error ( 403 , "Not authorized." ) ;
} ,
deactivateWorker : function ( id ) {
if ( Roles . userIsInRole ( this . userId , [ Meteor . UserRoles . ROLE _UPDATE ] ) ) {
//Workers.remove(id);
Workers . update ( id , { $set : { deactivated : true } } , { bypassCollection2 : true } ) ;
}
else throw new Meteor . Error ( 403 , "Not authorized." ) ;
} ,
reactivateWorker : function ( id ) {
if ( Roles . userIsInRole ( this . userId , [ Meteor . UserRoles . ROLE _UPDATE ] ) ) {
Workers . update ( id , { $set : { deactivated : false } } , { bypassCollection2 : true } ) ;
}
else throw new Meteor . Error ( 403 , "Not authorized." ) ;
} ,
hideWorker : function ( id ) { //One step past deactivated - will only show in the Workers list if hidden Workers are enabled.
if ( Roles . userIsInRole ( this . userId , [ Meteor . UserRoles . ROLE _UPDATE ] ) ) {
Workers . update ( id , { $set : { hidden : true } } , { bypassCollection2 : true } ) ;
}
else throw new Meteor . Error ( 403 , "Not authorized." ) ;
} ,
showWorker : function ( id ) { //Returns the measure to being simply deactivated. Will again show in lists.
if ( Roles . userIsInRole ( this . userId , [ Meteor . UserRoles . ROLE _UPDATE ] ) ) {
Workers . update ( id , { $set : { hidden : false } } , { bypassCollection2 : true } ) ;
}
else throw new Meteor . Error ( 403 , "Not authorized." ) ;
}
} ) ;
}
2019-10-07 15:51:50 -07:00
//Allows the client to do DB interaction without calling server side methods, while still retaining control over whether the user can make changes.
Workers . allow ( {
insert : function ( ) { return false ; } ,
update : function ( ) { return false ; } ,
remove : function ( ) { return false ; }
} ) ;
2017-12-31 14:06:46 -08:00
export default Workers ;