108 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| var Rx = require('rx');
 | |
| var debug = require('debug')('freecc:nonprofits');
 | |
| var observeMethod = require('../utils/rx').observeMethod;
 | |
| var unDasherize = require('../utils').unDasherize;
 | |
| var dasherize = require('../utils').dasherize;
 | |
| 
 | |
| module.exports = function(app) {
 | |
|   var router = app.loopback.Router();
 | |
|   var Nonprofit = app.models.Nonprofit;
 | |
|   var findNonprofits = observeMethod(Nonprofit, 'find');
 | |
|   var findOneNonprofit = observeMethod(Nonprofit, 'findOne');
 | |
| 
 | |
|   router.get('/nonprofits/directory', nonprofitsDirectory);
 | |
|   router.get('/nonprofits/:nonprofitName', returnIndividualNonprofit);
 | |
| 
 | |
|   app.use(router);
 | |
| 
 | |
|   function nonprofitsDirectory(req, res, next) {
 | |
|     findNonprofits({
 | |
|       order: 'moneySaved DESC'
 | |
|     })
 | |
|       .flatMap(
 | |
|         (nonprofits = []) => {
 | |
|           // turn array of nonprofits into observable array
 | |
|           return Rx.Observable.from(nonprofits)
 | |
|             .pluck('moneySaved')
 | |
|             .reduce((sum, moneySaved = 0) => sum + moneySaved, 0);
 | |
|         },
 | |
|         (nonprofits = [], totalSavings) => ({ nonprofits, totalSavings })
 | |
|       )
 | |
|       .subscribe(({ nonprofits, totalSavings }) => {
 | |
|         res.render('nonprofits/directory', {
 | |
|           title: 'Nonprofits we help',
 | |
|           nonprofits: nonprofits,
 | |
|           totalSavings: totalSavings.toString().replace(/000$/, ',000')
 | |
|         });
 | |
|       },
 | |
|       next
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   function returnIndividualNonprofit(req, res, next) {
 | |
|     var dashedName = req.params.nonprofitName;
 | |
|     var nonprofitName = unDasherize(dashedName);
 | |
|     var query = { where: { name: {
 | |
|       like: nonprofitName,
 | |
|       options: 'i'
 | |
|     } } };
 | |
| 
 | |
|     debug('looking for %s', nonprofitName);
 | |
|     debug('query', query);
 | |
|     findOneNonprofit(query).subscribe(
 | |
|       function(nonprofit) {
 | |
|         if (!nonprofit) {
 | |
|           req.flash('errors', {
 | |
|             msg: "404: We couldn't find a nonprofit with that name. " +
 | |
|               'Please double check the name.'
 | |
|           });
 | |
|           return res.redirect('/nonprofits');
 | |
|         }
 | |
| 
 | |
|         var dashedNameFull = dasherize(nonprofit.name);
 | |
|         if (dashedNameFull !== dashedName) {
 | |
|           return res.redirect('../nonprofit/' + dashedNameFull);
 | |
|         }
 | |
| 
 | |
|         res.render('nonprofits/show', {
 | |
|           dashedName: dashedNameFull,
 | |
|           title: nonprofit.name,
 | |
|           logoUrl: nonprofit.logoUrl,
 | |
|           estimatedHours: nonprofit.estimatedHours,
 | |
|           projectDescription: nonprofit.projectDescription,
 | |
| 
 | |
|           approvedOther:
 | |
|             nonprofit.approvedDeliverables.indexOf('other') > -1,
 | |
|           approvedWebsite:
 | |
|             nonprofit.approvedDeliverables.indexOf('website') > -1,
 | |
| 
 | |
|           approvedDonor:
 | |
|             nonprofit.approvedDeliverables.indexOf('donor') > -1,
 | |
|           approvedInventory:
 | |
|             nonprofit.approvedDeliverables.indexOf('inventory') > -1,
 | |
| 
 | |
|           approvedVolunteer:
 | |
|             nonprofit.approvedDeliverables.indexOf('volunteer') > -1,
 | |
|           approvedForm:
 | |
|             nonprofit.approvedDeliverables.indexOf('form') > -1,
 | |
| 
 | |
|           approvedCommunity:
 | |
|             nonprofit.approvedDeliverables.indexOf('community') > -1,
 | |
|           approvedELearning:
 | |
|             nonprofit.approvedDeliverables.indexOf('eLearning') > -1,
 | |
| 
 | |
|           websiteLink: nonprofit.websiteLink,
 | |
|           imageUrl: nonprofit.imageUrl,
 | |
|           whatDoesNonprofitDo: nonprofit.whatDoesNonprofitDo,
 | |
|           interestedCampers: nonprofit.interestedCampers,
 | |
|           assignedCampers: nonprofit.assignedCampers,
 | |
|           buttonActive: false,
 | |
|           moneySaved: nonprofit.moneySaved,
 | |
|           currentStatus: nonprofit.currentStatus
 | |
|         });
 | |
|       },
 | |
|       next
 | |
|     );
 | |
|   }
 | |
| };
 |