Skip to content

Commit

Permalink
Merge e629d28 into 9234a2c
Browse files Browse the repository at this point in the history
  • Loading branch information
chethana-sastry committed Jul 18, 2018
2 parents 9234a2c + e629d28 commit f79e8f2
Show file tree
Hide file tree
Showing 5 changed files with 116 additions and 4 deletions.
29 changes: 25 additions & 4 deletions app/templates/admin/administer-user-modal.jade
Expand Up @@ -63,7 +63,8 @@ block modal-body-content
th End (PT)
th Used
for prepaid in view.prepaids.models
tr
- var prepaidControlId=prepaid.id
tr(id=prepaidControlId)
td= prepaid.id
td
if prepaid.creator
Expand All @@ -76,11 +77,31 @@ block modal-body-content
td= moment.timezone(new Date(parseInt(prepaid.id.substring(0, 8), 16) * 1000)).tz('America/Los_Angeles').format('l')
td
if prepaid.get('startDate')
= moment.timezone(prepaid.get('startDate')).tz('America/Los_Angeles').format('l')
if view.prepaidTableState && view.prepaidTableState[prepaid.id] === 'editMode'
- var startDateControlId='startDate-'+prepaid.id
input(id= startDateControlId type="date" name="startDate" value=moment.timezone(prepaid.get('startDate')).tz('America/Los_Angeles').format('YYYY-MM-DD'))
else
= moment.timezone(prepaid.get('startDate')).tz('America/Los_Angeles').format('l')
td
if prepaid.get('endDate')
= moment.timezone(prepaid.get('endDate')).tz('America/Los_Angeles').format('l')
td #{(prepaid.get('redeemers') || []).length} / #{prepaid.get('maxRedeemers') || 0}
if view.prepaidTableState && view.prepaidTableState[prepaid.id] === 'editMode'
- var endDateControlId='endDate-'+prepaid.id
input(id= endDateControlId type="date" name="endDate" value=moment.timezone(prepaid.get('endDate')).tz('America/Los_Angeles').format('YYYY-MM-DD'))
else
= moment.timezone(prepaid.get('endDate')).tz('America/Los_Angeles').format('l')
td
if view.prepaidTableState && view.prepaidTableState[prepaid.id] === 'editMode'
- var totalLicensesControlId='totalLicenses-'+prepaid.id
= (prepaid.get('redeemers') || []).length + ' / '
input(id=totalLicensesControlId type="number" name="totalLicenses" value=prepaid.get('maxRedeemers'), style="width:50px")
else
= (prepaid.get('redeemers') || []).length + ' / ' + prepaid.get('maxRedeemers') || 0
td
if view.prepaidTableState && view.prepaidTableState[prepaid.id] === 'editMode'
button.btn.btn-primary.save-prepaid-info-btn(data-prepaid-id=prepaid.id) Save
button.btn.btn-primary.cancel-prepaid-info-edit-btn(data-prepaid-id=prepaid.id) Cancel
else
button.btn.btn-primary.edit-prepaids-info-btn(data-prepaid-id=prepaid.id) Edit
hr

h3.m-t-3#licenses Grant Student Licenses
Expand Down
40 changes: 40 additions & 0 deletions app/views/admin/AdministerUserModal.coffee
Expand Up @@ -26,6 +26,9 @@ module.exports = class AdministerUserModal extends ModalView
'click .add-new-courses-btn': 'onClickAddNewCoursesButton'
'click .user-link': 'onClickUserLink'
'click #verified-teacher-checkbox': 'onClickVerifiedTeacherCheckbox'
'click .edit-prepaids-info-btn': 'onClickEditPrepaidsInfoButton'
'click .cancel-prepaid-info-edit-btn': 'onClickCancelPrepaidInfoEditButton'
'click .save-prepaid-info-btn': 'onClickSavePrepaidInfo'

initialize: (options, @userHandle) ->
@user = new User({_id:@userHandle})
Expand Down Expand Up @@ -53,6 +56,7 @@ module.exports = class AdministerUserModal extends ModalView
@currentCouponID = stripe.couponID
@none = not (@free or @freeUntil or @coupon)
@trialRequest = @trialRequests.first()
@prepaidTableState={}
super()

onClickCreatePayment: ->
Expand Down Expand Up @@ -207,3 +211,39 @@ module.exports = class AdministerUserModal extends ModalView
@render()
), 2000)
null

onClickEditPrepaidsInfoButton: (e) ->
prepaidId=@$(e.target).data('prepaid-id')
@prepaidTableState[prepaidId] = 'editMode'
@renderSelectors('#'+prepaidId)

onClickCancelPrepaidInfoEditButton: (e) ->
@prepaidTableState[@$(e.target).data('prepaid-id')] = 'viewMode'
@renderSelectors('#'+@$(e.target).data('prepaid-id'))

onClickSavePrepaidInfo: (e) ->
prepaidId= @$(e.target).data('prepaid-id')
prepaidStartDate= @$el.find('#'+'startDate-'+prepaidId).val()
prepaidEndDate= @$el.find('#'+'endDate-'+prepaidId).val()
prepaidTotalLicenses=@$el.find('#'+'totalLicenses-'+prepaidId).val()
@prepaids.each (prepaid) =>
if (prepaid.get('_id') == prepaidId)
#validations
unless prepaidStartDate and prepaidEndDate and prepaidTotalLicenses
return
if(prepaidStartDate >= prepaidEndDate)
alert('End date cannot be on or before start date')
return
if(prepaidTotalLicenses < (prepaid.get('redeemers') || []).length)
alert('Total number of licenses cannot be less than used licenses')
return
prepaid.set('startDate', moment.timezone.tz(prepaidStartDate, "America/Los_Angeles").toISOString())
prepaid.set('endDate', moment.timezone.tz(prepaidEndDate, "America/Los_Angeles").toISOString())
prepaid.set('maxRedeemers', prepaidTotalLicenses)
options = {}
prepaid.patch(options)
@listenTo prepaid, 'sync', ->
@prepaidTableState[prepaidId] = 'viewMode'
@renderSelectors('#'+prepaidId)
return

12 changes: 12 additions & 0 deletions server/middleware/prepaids.coffee
Expand Up @@ -51,6 +51,18 @@ module.exports =
yield delighted.checkTriggerPrepaidAdded user, req.body.type
res.status(201).send(prepaid.toObject())

put: wrap (req, res) ->
prepaid = yield database.getDocFromHandle(req, Prepaid)
if not prepaid
throw new errors.NotFound('Prepaid not found.')
prepaid.set(_.pick(req.body, 'startDate'))
prepaid.set(_.pick(req.body, 'endDate'))
maxRedeemers = req.body['maxRedeemers']
if maxRedeemers
prepaid.set('maxRedeemers',parseInt(maxRedeemers))
database.validateDoc(prepaid)
prepaid = yield prepaid.save()
res.status(200).send(prepaid.toObject())

redeem: wrap (req, res) ->
if not req.user?.isTeacher()
Expand Down
1 change: 1 addition & 0 deletions server/routes/index.coffee
Expand Up @@ -268,6 +268,7 @@ module.exports.setup = (app) ->
app.get('/db/prepaid/-/active-schools', mw.auth.checkHasPermission(['admin']), mw.prepaids.fetchActiveSchools)
app.post('/db/prepaid', mw.auth.checkHasPermission(['admin','licensor']), mw.prepaids.post)
app.post('/db/starter-license-prepaid', mw.auth.checkLoggedIn(), mw.prepaids.purchaseStarterLicenses)
app.put('/db/prepaid/:handle', mw.auth.checkHasPermission(['admin']), mw.prepaids.put)
app.post('/db/prepaid/:handle/redeemers', mw.prepaids.redeem)
app.post('/db/prepaid/:handle/joiners', mw.prepaids.addJoiner)
app.delete('/db/prepaid/:handle/redeemers', mw.prepaids.revoke)
Expand Down
38 changes: 38 additions & 0 deletions spec/server/functional/prepaid.spec.coffee
Expand Up @@ -84,6 +84,44 @@ describe 'GET /db/prepaid', ->
expect(body.length).toEqual(4)
done()

describe 'PUT /db/prepaid/:handle', ->
beforeEach utils.wrap (done) ->
@admin = yield utils.initAdmin()
yield utils.loginUser(@admin)
user = yield utils.initUser()
@prepaid = yield utils.makePrepaid({ creator: user.id })
done()

it 'does not work for non-admins', utils.wrap (done) ->
nonAdminUser = yield utils.initUser()
yield utils.loginUser(nonAdminUser)
@url=getURL("/db/prepaid/#{@prepaid._id}")
[res, body] = yield request.putAsync({url: @url, json: {
startDate: moment("2018-1-1","YYYY-MM-DD").toISOString()
endDate: moment("2019-1-1","YYYY-MM-DD").toISOString()
maxRedeemers: 10
}})
expect(res.statusCode).toBe(403)
done()

it 'works for admins', utils.wrap (done) ->
@url = getURL("/db/prepaid/#{@prepaid._id}")
[res, body] = yield request.putAsync ({url: @url, json: {
startDate: moment("2018-1-1","YYYY-MM-DD").toISOString()
endDate: moment("2019-1-1","YYYY-MM-DD").toISOString()
maxRedeemers: 10
}})
expect(res.statusCode).toBe(200)
prepaid = yield Prepaid.findById(res.body._id)
expect(prepaid).toBeDefined()
expect(prepaid.get('startDate')).toBeDefined()
expect(prepaid.get('startDate')).toBe(moment("2018-1-1","YYYY-MM-DD").toISOString())
expect(prepaid.get('endDate')).toBeDefined()
expect(prepaid.get('endDate')).toBe(moment("2019-1-1","YYYY-MM-DD").toISOString())
expect(prepaid.get('maxRedeemers')).toBeDefined()
expect(prepaid.get('maxRedeemers')).toBe(10)
done()

describe 'GET /db/prepaid/:handle/creator', ->
beforeEach utils.wrap (done) ->
yield utils.clearModels([Course, CourseInstance, Payment, Prepaid, User])
Expand Down

0 comments on commit f79e8f2

Please sign in to comment.