mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-03-27 05:11:29 -04:00
Create call tasks and opps for license requests
This commit is contained in:
parent
b8bdc0c726
commit
18de9ab298
3 changed files with 82 additions and 24 deletions
|
@ -62,7 +62,7 @@ module.exports = class TeachersContactModal extends ModalView
|
|||
return unless _.isEmpty(formErrors)
|
||||
|
||||
@state.set('sendingState', 'sending')
|
||||
data = _.extend({ country: me.get('country'), recipientID: 'schools@codecombat.com' }, formValues)
|
||||
data = _.extend({ country: me.get('country') }, formValues)
|
||||
contact.send({
|
||||
data
|
||||
context: @
|
||||
|
|
|
@ -66,33 +66,81 @@ module.exports =
|
|||
return done("Unexpected activities format: " + body) unless activities.data?
|
||||
for activity in activities.data when activity._type is 'Email'
|
||||
if /@codecombat\.(?:com)|(?:nl)/ig.test(activity.sender) and not activity.sender?.indexOf(config.mail.username) >= 0
|
||||
return done(null, activity.sender, lead.id)
|
||||
return done(null, activity.sender, activity.user_id, lead.id)
|
||||
return done(null, config.mail.supportSchools, lead.id)
|
||||
catch error
|
||||
log.error("closeIO.getSalesContactEmail Error for #{email}: #{JSON.stringify(error)}")
|
||||
return done(error)
|
||||
|
||||
sendMail: (fromAddress, subject, content, done) ->
|
||||
sendMail: (fromAddress, subject, content, salesContactEmail, leadID, done) ->
|
||||
# log.info("DEBUG: closeIO.sendMail #{fromAddress} #{subject} #{content}")
|
||||
@getSalesContactEmail fromAddress, (err, salesContactEmail, leadID) ->
|
||||
return done("Error getting sales contact for #{fromAddress}: #{err}") if err
|
||||
matches = salesContactEmail.match(/^[a-zA-Z_]+ <(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3})>$|(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3})/i)
|
||||
salesContactEmail = matches?[1] ? matches?[2] ? config.mail.supportSchools
|
||||
salesContactEmail = config.mail.supportSchools if salesContactEmail?.indexOf('brian@codecombat.com') >= 0
|
||||
matches = salesContactEmail.match(/^[a-zA-Z_]+ <(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3})>$|(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3})/i)
|
||||
salesContactEmail = matches?[1] ? matches?[2] ? config.mail.supportSchools
|
||||
salesContactEmail = config.mail.supportSchools if salesContactEmail?.indexOf('brian@codecombat.com') >= 0
|
||||
|
||||
postData =
|
||||
to: [salesContactEmail]
|
||||
sender: config.mail.username
|
||||
subject: subject
|
||||
body_text: content
|
||||
lead_id: leadID
|
||||
status: 'outbox'
|
||||
options =
|
||||
uri: "https://#{apiKey}:X@app.close.io/api/v1/activity/email/"
|
||||
body: JSON.stringify(postData)
|
||||
request.post options, (error, response, body) =>
|
||||
return done(error) if error
|
||||
result = JSON.parse(body)
|
||||
if result.errors or result['field-errors']
|
||||
errorMessage = "Close.io Send email POST error for #{fromAddress} #{JSON.stringify(result.errors)} #{JSON.stringify(result['field-errors'])}"
|
||||
return done(errorMessage)
|
||||
return done()
|
||||
|
||||
processLicenseRequest: (teacherEmail, userID, leadID, licensesRequested, amount, done) ->
|
||||
# Update lead with licenses requested
|
||||
putData = 'custom.licensesRequested': licensesRequested
|
||||
options =
|
||||
uri: "https://#{apiKey}:X@app.close.io/api/v1/lead/#{leadID}/"
|
||||
body: JSON.stringify(putData)
|
||||
request.put options, (error, response, body) =>
|
||||
return done(error) if error
|
||||
result = JSON.parse(body)
|
||||
if result.errors or result['field-errors']
|
||||
errorMessage = "Update Close.io lead PUT error for #{teacherEmail} #{leadID}"
|
||||
return done(errorMessage)
|
||||
|
||||
# Create call task
|
||||
postData =
|
||||
to: [salesContactEmail]
|
||||
sender: config.mail.username
|
||||
subject: subject
|
||||
body_text: content
|
||||
_type: "lead"
|
||||
lead_id: leadID
|
||||
status: 'outbox'
|
||||
assigned_to: userID
|
||||
text: "Call #{teacherEmail}"
|
||||
is_complete: false
|
||||
options =
|
||||
uri: "https://#{apiKey}:X@app.close.io/api/v1/activity/email/"
|
||||
uri: "https://#{apiKey}:X@app.close.io/api/v1/task/"
|
||||
body: JSON.stringify(postData)
|
||||
request.post options, (error, response, body) =>
|
||||
return done(error) if error
|
||||
result = JSON.parse(body);
|
||||
return done(error) if error
|
||||
result = JSON.parse(body)
|
||||
if result.errors or result['field-errors']
|
||||
errorMessage = "Close.io Send email POST error for #{fromAddress} #{JSON.stringify(result.errors)} #{JSON.stringify(result['field-errors'])}";
|
||||
errorMessage = "Create Close.io call task POST error for #{teacherEmail} #{leadID}"
|
||||
return done(errorMessage)
|
||||
return done()
|
||||
|
||||
# Create opportunity
|
||||
postData =
|
||||
note: "#{licensesRequested} licenses requested"
|
||||
confidence: 5
|
||||
lead_id: leadID
|
||||
status: 'Active'
|
||||
value: parseInt(licensesRequested) * amount
|
||||
value_period: "annual"
|
||||
options =
|
||||
uri: "https://#{apiKey}:X@app.close.io/api/v1/opportunity/"
|
||||
body: JSON.stringify(postData)
|
||||
request.post options, (error, response, body) =>
|
||||
return done(error) if error
|
||||
result = JSON.parse(body)
|
||||
if result.errors or result['field-errors']
|
||||
errorMessage = "Create Close.io opportunity POST error for #{teacherEmail} #{leadID}"
|
||||
return done(errorMessage)
|
||||
return done()
|
||||
|
|
|
@ -3,8 +3,9 @@ log = require 'winston'
|
|||
User = require '../models/User'
|
||||
sendwithus = require '../sendwithus'
|
||||
async = require 'async'
|
||||
LevelSession = require '../models/LevelSession'
|
||||
moment = require 'moment'
|
||||
LevelSession = require '../models/LevelSession'
|
||||
Product = require '../models/Product'
|
||||
closeIO = require '../lib/closeIO'
|
||||
|
||||
module.exports.setup = (app) ->
|
||||
|
@ -13,10 +14,19 @@ module.exports.setup = (app) ->
|
|||
# log.info "Sending mail from #{req.body.email} saying #{req.body.message}"
|
||||
fromAddress = req.body.sender or req.body.email or req.user.get('email')
|
||||
createMailContent req, fromAddress, (subject, content) ->
|
||||
if req.body.recipientID is 'schools@codecombat.com' or req.user.isTeacher()
|
||||
req.user.update({$set: { enrollmentRequestSent: true }}).exec(_.noop) if req.body.recipientID is 'schools@codecombat.com'
|
||||
closeIO.sendMail fromAddress, subject, content, (err) ->
|
||||
log.error "Error sending contact form email via Close.io: #{err.message or err}" if err
|
||||
if req.body.licensesNeeded or req.user.isTeacher()
|
||||
closeIO.getSalesContactEmail fromAddress, (err, salesContactEmail, userID, leadID) ->
|
||||
return log.error("Error getting sales contact for #{fromAddress}: #{err.message or err}") if err
|
||||
closeIO.sendMail fromAddress, subject, content, salesContactEmail, leadID, (err) ->
|
||||
return log.error("Error sending contact form email via Close.io: #{err.message or err}") if err
|
||||
if licensesNeeded = req.body.licensesNeeded
|
||||
Product.findOne({name: 'course'}).exec (err, product) =>
|
||||
return log.error(err) if err
|
||||
return log.error('course product not found') if not product
|
||||
amount = product.get('amount')
|
||||
closeIO.processLicenseRequest fromAddress, userID, leadID, licensesNeeded, amount, (err) ->
|
||||
return log.error("Error processing license request via Close.io: #{err.message or err}") if err
|
||||
req.user.update({$set: { enrollmentRequestSent: true }}).exec(_.noop)
|
||||
else
|
||||
createSendWithUsContext req, fromAddress, subject, content, (context) ->
|
||||
sendwithus.api.send context, (err, result) ->
|
||||
|
@ -53,7 +63,7 @@ createSendWithUsContext = (req, fromAddress, subject, content, done) ->
|
|||
premium = user?.isPremium()
|
||||
teacher = user?.isTeacher()
|
||||
|
||||
if recipientID is 'schools@codecombat.com' or teacher
|
||||
if teacher or req.body.licensesNeeded
|
||||
return done("Tried to send a teacher contact us email via sendwithus #{fromAddress} #{subject}")
|
||||
|
||||
toAddress = switch
|
||||
|
|
Loading…
Add table
Reference in a new issue