Add way for admins to grant users course prepaids

This commit is contained in:
Scott Erickson 2015-11-10 14:33:27 -08:00
parent a0212da789
commit cddf000276
4 changed files with 54 additions and 4 deletions

View file

@ -31,7 +31,24 @@ block modal-body-content
select.form-control#coupon-select
for couponOption in coupons
option(value=couponOption.id selected=coupon===couponOption.id)= couponOption.format
button#save-changes.btn.btn-primary Save Changes
h3 Grant Prepaid for Courses
#prepaid-form.form
if view.state === 'creating-prepaid'
.progress.progress-striped.active
.progress-bar(style="width: 100%")
else if view.state === 'made-prepaid'
.alert.alert-success Prepaid created!
else
.form-group
label Seats
input#seats-input.form-control(type="number")
.form-group
button#add-seats-btn.btn.btn-primary Add Seats
block modal-footer-content
button#save-changes.btn.btn-primary Save Changes

View file

@ -1,6 +1,7 @@
ModalView = require 'views/core/ModalView'
template = require 'templates/admin/administer-user-modal'
User = require 'models/User'
Prepaid = require 'models/Prepaid'
module.exports = class AdministerUserModal extends ModalView
id: "administer-user-modal"
@ -9,6 +10,7 @@ module.exports = class AdministerUserModal extends ModalView
events:
'click #save-changes': 'onSaveChanges'
'click #add-seats-btn': 'onClickAddSeatsButton'
constructor: (options, @userHandle) ->
super(options)
@ -58,3 +60,18 @@ module.exports = class AdministerUserModal extends ModalView
options = {}
options.success = => @hide()
@user.patch(options)
onClickAddSeatsButton: ->
maxRedeemers = parseInt(@$('#seats-input').val())
return unless maxRedeemers and maxRedeemers > 0
prepaid = new Prepaid({
maxRedeemers: maxRedeemers
type: 'course'
creator: @user.id
})
prepaid.save()
@state = 'creating-prepaid'
@renderSelectors('#prepaid-form')
@listenTo prepaid, 'sync', ->
@state = 'made-prepaid'
@renderSelectors('#prepaid-form')

View file

@ -1,6 +1,8 @@
mongoose = require 'mongoose'
config = require '../../server_config'
PrepaidSchema = new mongoose.Schema {}, {strict: false, minimize: false,read:config.mongo.readpref}
PrepaidSchema = new mongoose.Schema {
creator: mongoose.Schema.Types.ObjectId
}, {strict: false, minimize: false,read:config.mongo.readpref}
PrepaidSchema.index({code: 1}, { unique: true })
PrepaidSchema.index({'redeemers.userID': 1})
@ -16,10 +18,19 @@ PrepaidSchema.statics.generateNewCode = (done) ->
PrepaidSchema.pre('save', (next) ->
@set('exhausted', @get('maxRedeemers') <= _.size(@get('redeemers')))
next()
if not @get('code')
Prepaid.generateNewCode (code) =>
@set('code', code)
next()
else
next()
)
PrepaidSchema.post 'init', (doc) ->
doc.set('maxRedeemers', parseInt(doc.get('maxRedeemers')))
PrepaidSchema.statics.postEditableProperties = [
'creator', 'maxRedeemers', 'type'
]
module.exports = Prepaid = mongoose.model('prepaid', PrepaidSchema)

View file

@ -242,5 +242,10 @@ PrepaidHandler = class PrepaidHandler extends Handler
return @sendSuccess(res, (@formatEntity(req, prepaid) for prepaid in prepaids))
else
super(arguments...)
makeNewInstance: (req) ->
prepaid = super(req)
prepaid.set('redeemers', [])
return prepaid
module.exports = new PrepaidHandler()