mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-03-22 10:55:19 -04:00
Add way for admins to grant users course prepaids
This commit is contained in:
parent
a0212da789
commit
cddf000276
4 changed files with 54 additions and 4 deletions
app
server/prepaids
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in a new issue