Thank you to anyone who has already donated - your generous donations helped make three months of treatment possible.

My brother Nate continues to fight stage IV Hodgkin's lymphoma. He's just 31, with a wife and baby girl. They have no active income (since he's been unable to return to work), no insurance, and cannot afford the treatment he needs. Nate and his family need your help. Please consider a donation, every dollar helps. Thanks.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/**
 * Customer controller
 */
var xml2js = require('xml2js'),
	fs     = require('fs');

exports.init = function(app) {
	// Setup routes for this controller
	app.get('/customer/:id', render);
	app.get('/customer/:id/:component', render);
	app.get('/customer/:id/:component/:index', render);
};

function render(req, res) {
	parseConfig(req.params.id, function(_data) {

		var componentIndex = (req.params.index >= 0 && _data.tabs.item[req.params.index]) ? req.params.index : 0;
		var	component      = require('../components/' + _data.tabs.item[componentIndex].type);

		component.render(_data.tabs.item[componentIndex], function(e) {
			res.render('customer', {
				type: 'customer',
				id: _data.appid,
				data: _data,
				index: componentIndex,
				component: e,
				params: req.params
			});
		});
	}); // Nested callbacks are so ugly.  Need to refactor
};

function parseConfig(_id, _callback) {
	// Parse and consume the configuration for the app
	var parser = new xml2js.Parser();
	
	// Build the data to be passed to the views
	parser.addListener('end', function(_result) {
		_callback(_result);
	});
	
	// Read the file and parse it / converting it to JSON
	// TODO This will probably be done via a request I assume, in which case we don't need to read a file but rather
	// make a remote request to retrieve the xml file.
	fs.readFile('./auti/customers/' + _id + '/application.xml', function (err, data) {
		if (err) throw err;
		parser.parseString(data);		
	});	
};