2017-01-15 11:33:37 -08:00
import { Meteor } from 'meteor/meteor' ;
import { Mongo } from 'meteor/mongo' ;
import { check } from 'meteor/check' ;
import { SimpleSchema } from 'meteor/aldeed:simple-schema' ;
Measures = new Mongo . Collection ( 'Measures' ) ;
Measures . attachSchema ( new SimpleSchema ( {
name : {
type : String ,
label : "Name" ,
optional : false ,
trim : true ,
index : 1 ,
unique : true
} ,
postfix : {
type : String ,
label : "Postfix" ,
optional : true , //Note: Each does not have a postfix.
trim : true
} ,
order : {
type : SimpleSchema . Integer ,
label : "Order" ,
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
} ,
2017-02-03 09:20:29 -08:00
deactivated : {
type : Boolean ,
label : "Deactivated" ,
2017-01-15 11:33:37 -08:00
optional : true
} ,
2017-02-03 09:20:29 -08:00
hidden : {
type : Boolean ,
label : "Hidden" ,
2017-01-15 11:33:37 -08:00
optional : true
}
} ) ) ;
if ( Meteor . isServer ) Meteor . publish ( 'measures' , function ( ) {
return Measures . find ( { } ) ;
} ) ;
if ( Meteor . isServer ) {
Meteor . methods ( {
2017-02-03 09:20:29 -08:00
createMeasure : function ( name , postfix , order ) {
check ( name , String ) ;
check ( postfix , String ) ;
check ( order , Number ) ;
2017-01-15 11:33:37 -08:00
if ( Roles . userIsInRole ( this . userId , [ Meteor . UserRoles . ROLE _UPDATE ] ) ) {
2017-02-03 09:20:29 -08:00
Measures . insert ( { name , postfix , order , createdAt : new Date ( ) } ) ;
}
else throw new Meteor . Error ( 403 , "Not authorized." ) ;
} ,
deactivateMeasure : function ( id ) {
if ( Roles . userIsInRole ( this . userId , [ Meteor . UserRoles . ROLE _UPDATE ] ) ) {
//Measures.remove(id);
Measures . update ( id , { $set : { deactivated : true } } , { bypassCollection2 : true } ) ;
}
else throw new Meteor . Error ( 403 , "Not authorized." ) ;
} ,
reactivateMeasure : function ( id ) {
if ( Roles . userIsInRole ( this . userId , [ Meteor . UserRoles . ROLE _UPDATE ] ) ) {
Measures . update ( id , { $set : { deactivated : false } } , { bypassCollection2 : true } ) ;
}
else throw new Meteor . Error ( 403 , "Not authorized." ) ;
} ,
hideMeasure : function ( id ) { //One step past deactivated - will only show in the measures list if hidden measures are enabled.
if ( Roles . userIsInRole ( this . userId , [ Meteor . UserRoles . ROLE _UPDATE ] ) ) {
//Measures.remove(id);
Measures . update ( id , { $set : { hidden : true } } , { bypassCollection2 : true } ) ;
2017-01-15 11:33:37 -08:00
}
else throw new Meteor . Error ( 403 , "Not authorized." ) ;
} ,
2017-02-03 09:20:29 -08:00
showMeasure : function ( id ) { //Returns the measure to being simply deactivated. Will again show in lists.
2017-01-15 11:33:37 -08:00
if ( Roles . userIsInRole ( this . userId , [ Meteor . UserRoles . ROLE _UPDATE ] ) ) {
2017-02-03 09:20:29 -08:00
Measures . update ( id , { $set : { hidden : false } } , { bypassCollection2 : true } ) ;
2017-01-15 11:33:37 -08:00
}
else throw new Meteor . Error ( 403 , "Not authorized." ) ;
} ,
2017-02-03 09:20:29 -08:00
//deleteMeasure: 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.
// Measures.remove(id);
// }
// else throw new Meteor.Error(403, "Not authorized.");
//},
updateMeasure : function ( id , name , postfix , order ) {
check ( id , String ) ;
check ( name , String ) ;
check ( postfix , String ) ;
check ( order , Number ) ;
2017-01-15 11:33:37 -08:00
if ( Roles . userIsInRole ( this . userId , [ Meteor . UserRoles . ROLE _UPDATE ] ) ) {
2017-02-03 09:20:29 -08:00
Products . update ( id , { $set : { name , postfix , order , updatedAt : new Date ( ) } } ) ;
2017-01-15 11:33:37 -08:00
}
else throw new Meteor . Error ( 403 , "Not authorized." ) ;
}
} ) ;
}
export default Measures ;