Files
PetitTetonMeteor/imports/api/Sale.js

111 lines
2.4 KiB
JavaScript
Raw Normal View History

import { Meteor } from 'meteor/meteor';
import { Mongo } from 'meteor/mongo';
import { check } from 'meteor/check';
import {SimpleSchema} from 'meteor/aldeed:simple-schema';
Sales = new Mongo.Collection('Sales');
let SalesSchema = new SimpleSchema({
date: {
type: Date,
label: "Date",
optional: false,
index: 1
},
amount: {
type: Number,
label: "Amount",
optional: false,
decimal: true
},
price: {
type: Number,
label: "Price",
optional: false,
min: 0,
exclusiveMin: true,
decimal: true
},
measureId: {
type: String,
label: "Measure Id",
trim: false,
regEx: SimpleSchema.RegEx.Id,
index: 1
},
productId: {
type: String,
label: "Product Id",
trim: false,
regEx: SimpleSchema.RegEx.Id,
index: 1
},
venueId: {
type: String,
label: "Vendor Id",
trim: false,
regEx: SimpleSchema.RegEx.Id,
index: 1
// autoform: {
// type: 'relation',
// settings: {
// collection: 'Venues',
// fields: ['name']
// }
// }
},
createdAt: {
type: Date,
label: "Created On",
optional: false
}
});
Sales.attachSchema(SalesSchema);
if(Meteor.isServer) {
Meteor.publish('sales', function(query, limit = 100) {
let dbQuery = {};
if(query) {
_.each(_.keys(query), function(key) {
if(_.isObject(query[key])) dbQuery[key] = query[key];
else if(_.isNumber(query[key])) dbQuery[key] = query[key];
else dbQuery[key] = {$regex: RegExp.escape(query[key]), $options: 'i'};
})
}
if(!_.isNumber(limit)) limit = 100;
return Meteor.collections.Sales.find(dbQuery, {limit: limit, sort: {date: -1}});
});
Meteor.methods({
insertSale: function(sale) {
//TODO: Check the structure of sale. Use: check(sale, {name: String, ...});
sale.createdAt = new Date();
if(Roles.userIsInRole(this.userId, [Meteor.UserRoles.ROLE_UPDATE])) {
Sales.insert(sale, function(err, id) {
if(err) console.log(err);
});
}
else throw new Meteor.Error(403, "Not authorized.");
},
deleteSale: function(id) {
check(id, String);
if(Roles.userIsInRole(this.userId, [Meteor.UserRoles.ROLE_UPDATE])) {
Sales.remove(id);
}
else throw new Meteor.Error(403, "Not authorized.");
}
});
}
//Allows the client to do DB interaction without calling server side methods, while still retaining control over whether the user can make changes.
Sales.allow({
insert: function() {return false;},
update: function() {return false;},
remove: function() {return false;}
});
export default Sales;