Inspiration// Download the helper library from https://www.twilio.com/docs/node/install

// Your Account Sid and Auth Token from twilio.com/console const accountSid = 'AC77db423b4d581b20fcd1bba23e1efa42'; const authToken = 'd75852b0f7c1a05ce32ebcb7d170f239';

const lib = require('lib'); const sms = lib.utils.sms['@1.0.9']; const bodyParser = require('body-parser'); const client = require('twilio')(accountSid, authToken); const http = require('http'); const express = require('express'); const MessagingResponse = require('twilio').twiml.MessagingResponse; const app = express(); var mongoose = require ('mongoose');

mongoose.connect('mongodb://localhost/test');

app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json());

http.createServer(app).listen(1337, () => { console.log('Express server listening on port 1337'); });

app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json());

client.messages .create({ body: 'Hi! I am Budget Buddy, your frienly neighborhood financial helper', from: '+13658045239', to: '+14168047937' }) .then(message => console.log(message.sid)) .done();

app.post('/sms', (req, res) => { const twiml = new MessagingResponse(); //Grab the phone number from the POST request var phoneNumber = req.body.From; //Init the string to return, or text back var string = ''; // Interpret the text message the user sent var input = req.body.Body; var body = input.split(" ");

var command = body[0]; var category = body[1]; var amount = body[2];

// We should check if the size of the input is too large before we do anything if (command == 'helpme'){ string = help(); console.log('helpme sent'); } // Function Works if(command == 'create'){ createAccount(phoneNumber); string = 'Account Succesfully Created'; }

if (command == 'log'){ str1 = log(phoneNumber, category, amount); str2 = ' expenditure logged, total this week is now: '; str3 = category ; stringTEMP = str3.concat(str2); string = stringTEMP.concat(str1); }

if (command == 'report'){ string = report(phoneNumber, category); } // Function Works if(command == 'set'){ str1 = set(phoneNumber, category, amount); str2 = ' budget now Set To '; str3 = category ; stringTEMP = str3.concat(str2); string = stringTEMP.concat(str1); }

twiml.message(string); console.log(string); res.writeHead(200, {'Content-Type': 'text/xml'}); res.end(twiml.toString()); });

function createAccount(phoneNumber){ createUser(phoneNumber); console.log('Account Created For ', phoneNumber); }

var foodbu = 0; var entbu = 0 ; var clobu = 0 ; var othbu = 0 ; function set(phoneNumber, category, amount){ var updatedValue = new String if (category == 'food'){ updatedValue = updateUserFoodBudget(phoneNumber, amount); foodbu = Number(amount);

} if (category == 'entertainment'){ updatedValue = updateUserEntertainBudget(phoneNumber, amount); entbu = Number(amount); }

if (category == 'clothing'){ updatedValue = updateUserClothingBudget(phoneNumber, amount); catbu = Number(amount); } if (category == 'other'){ updatedValue = updateUserOtherBudget(phoneNumber, amount); othbu = Number(amount); } return updatedValue ; }

function report(phoneNumber, category, amount){ user = lookupUser(phoneNumber); }

var foodlog = 0; var entlog = 0 ; var clolog = 0 ; var othlog = 0 ;

function log(phoneNumber, category, amount){ var amt = 0; if (category == 'food'){ amt = Number(foodlog) + Number(amount) ; foodlog = Number(foodlog) + Number(amount) ; updateUserFoodBudget(phoneNumber, amt); } if (category == 'entertainment'){ amt = Number(entlog) + Number(amount) ; entlog = Number(entlog) + Number(amount) ; updateUserEntertainBudget(phoneNumber, amt); }

if (category == 'clothing'){ amt = Number(clolog) + Number(amount) ; clolog = Number(clolog) + Number(amount) ; updateUserClothingBudget(phoneNumber, amt); } if (category == 'other'){ amt = Number(othlog) + Number(amount) ; othlog = Number(othlog) + Number(amount) ; updateUserOtherBudget(phoneNumber, amt); } return amt; }

function report(phoneNumber, category){ var report = '' ; if (category == 'food'){ progress = foodlog/foodbu ; report = 'Food Budget ' + foodbu + '\nFood Expenditure ' + foodlog + '\nPercent of total Spent ' + progress ; } if (category == 'entertainment'){ progress = entlog/entbu ; report = 'Entertainment Budget ' + entbu + '\nEntertainment Expenditure ' + entlog + '\nPercent of total Spent ' + progress ; }

if (category == 'clothing'){ progress = clolog/clobu ; report = 'Clothing Budget ' + clobu + '\nClothing Expenditure ' + clolog + '\nPercent of total Spent ' + progress ; } if (category == 'other'){ progress = othlog/othbu ; report = 'Other Budget ' + othbu + '\nOther Expenditure ' + othlog + '\nPercent of total Spent ' + progress ; } if (category == 'all'){ progress = ((foodlog/foodbu) + (entlog/entbu)+(clolog/clobu) + (othlog/othbu))/4 ; report = 'Food Budget ' + foodbu + '\nFood Expenditure ' + foodlog + '\nEntertainment Budget ' + entbu + '\nEntertainment Expenditure ' + entlog + '\nClothing Budget ' + clobu + '\nClothing Expenditure ' + clolog +'\nOther Budget ' + othbu + '\nOther Expenditure ' + othlog ; } if (category == 'advise') { f = foodlog/foodbu ; e = entlog/entbu; c = clolog/clobu; o = othlog/othbu ; if(f>e && f>c && f>o ){ report = 'You sure do spend a lot on food! Consider buying in bulk' ; } else if (e>c && e>o){ report = 'You spend the most above budget on entertainment... remember your social life can be expensive!' } else if (c>o){ report = 'You spend a whole lot on clothing... Shopaholic alert!' } else { report = 'Other is your most overbudget spending category... mysterious!' }

} return report; }

/*

  • Functions to interact with the database and update the tables */

function help(){ var string = 'Piggy Bank is a simple SMS app that allows you to easily track your budget, anywhere!!\n'; string = string + 'To get started, text us the word create and we will get you setup!\n'; string = string + 'To set your budget for each category, text set category amount. Available categories are food and clothes\n'; string = string + 'To add money you have spent, text log category amount\n'; string = string + 'To see a weekly report, text report weekly\n'; string = string + 'To see a monthly report, text report monthly\n'; string = string + 'As always, text helpme to get some help'; return string; }

var budgetSchema = new mongoose.Schema({ phoneNo: String, foodb: Number, foode: Number, entertainb: Number, entertaine: Number, clothingb: Number, clothinge: Number, otherb: Number, othere: Number }); var userBudget = mongoose.model('UserBudget', budgetSchema);

function createUser(phoneNo){ var userOne = new userBudget ({ phoneNo: phoneNo, foodb: 0, foode: 0, entertainb: 0, entertaine: 0, clothingb: 0, clothinge: 0, otherb: 0, othere: 0
});

userOne.save(function(err,userBudget){ 
if(err) return console.error(err); 
console.log('User Saved'); 
}); 

};

function lookupUser(userNo){ userBudget.find({phoneNo: userNo},function (err, user) { if (err) return console.error(err); console.log('UserData \n',user); }); };

// GET VALUE FUNCTIONS /////////////////////////////////////////

// MODIFY FUNCTIONS ////////////////////////////////////////////////////

function updateUserFoodExpend(userNo, amt){ userBudget.updateOne({phoneNo: userNo}, {$set: {foode:amt}}, () => { console.log("worked"); }) }

function updateUserFoodBudget(userNo, amt){ userBudget.updateOne({phoneNo: userNo}, {$set: {foodb:amt}}, () => { console.log("worked"); }) var ret = amt.toString(); return ret;
}

function updateUserEntertainExpend(userNo, amt){ userBudget.updateOne({phoneNo: userNo}, {$set: {entertaine:amt}}, () => { console.log("worked"); }) }

function updateUserEntertainBudget(userNo, amt){ userBudget.updateOne({phoneNo: userNo}, {$set: {entertainb:amt}}, () => { console.log("worked"); }) var ret = amt.toString(); return ret;
}

function updateUserClothingExpend(userNo, amt){ userBudget.updateOne({phoneNo: userNo}, {$set: {clothinge:amt}}, () => { console.log("worked"); }) }

function updateUserClothingBudget(userNo, amt){ userBudget.updateOne({phoneNo: userNo}, {$set: {clothingb:amt}}, () => { console.log("worked"); }) var ret = amt.toString(); return ret;
}

function updateUserOtherExpend(userNo, amt){ userBudget.updateOne({phoneNo: userNo}, {$set: {othere:amt}}, () => { console.log("worked"); }) }

function updateUserOtherBudget(userNo, amt){ userBudget.updateOne({phoneNo: userNo}, {$set: {otherb:amt}}, () => { console.log("worked"); }) var ret = amt.toString(); return ret;
}## What it does

How I built it

Challenges I ran into

Accomplishments that I'm proud of

What I learned

What's next for SMS Banks app

Built With

Share this project:

Updates