calc-transporte
Version:
Calculadora de transporte AMBA
98 lines (79 loc) • 3.08 kB
JavaScript
;
var defaultsValues = require('../data/default-values.json');
var defaults = require('lodash.defaults');
var flowRight = require('lodash.flowright');
var utils = require('./utils');
var clone = flowRight(JSON.parse, JSON.stringify);
function Transport(values) {
var self = this;
values = defaults(clone(values || {}), defaultsValues);
self.values = values
}
Transport.prototype.getTransports = function getTransports() {
var self = this;
return Object.keys(self.values);
}
Transport.prototype.getTrainLines = function getTrainLines() {
var self = this;
return Object.keys(self.values.train);
}
Transport.prototype.getPricesByDate = function getPricesByDate(date) {
var self = this;
var transports = self.getTransports();
var _result = {};
transports.forEach(function (transport) {
self.getPricesByTransportAndDate(transport, date, _result);
});
return _result;
}
Transport.prototype.getPricesByTransportAndDate = function getPricesByTransportAndDate(transport, date, _result) {
var self = this;
if (transport == 'train') {
_result[transport] = {};
var lines = self.getTrainLines();
lines.forEach(function (line) {
var _date = date;
if (date === undefined || date == null) {
_date = utils.formatDate(new Date());
}
_date = utils.getClosestDate(_date, self.values[transport][line]);
_result[transport][line] = { date: _date, values: null };
_result[transport][line].values = self.values[transport][line].find(function (element) {
return element.date === _date;
}).values;
});
} else {
var _date = date;
if (date === undefined || date == null) {
_date = utils.formatDate(new Date());
}
_date = utils.getClosestDate(_date, self.values[transport]);
_result[transport] = { date: _date, values: null };
_result[transport].values = self.values[transport].find(function (element) {
return element.date === _date;
}).values;
}
return _result;
};
Transport.prototype.getPriceByTransportLineDateAndId = function getPriceByTransportLineDateAndId(transport, line, date, id) {
var self = this;
var transports = self.getTransports();
var _result = {};
self.getPricesByTransportAndDate(transport, date, _result);
transports.forEach(function (transport) {
self.getPricesByTransportAndDate(transport, date, _result);
});
var data;
if (transport == 'train') {
data = _result[transport][line].values;
} else {
data = _result[transport].values;
}
var ids = data.map(function (o) { return o.id; })
ids.sort(utils.Comparator);
var idToFind = utils.getNearest(ids, id);
return data.find(function (element) {
return element.id === idToFind;
}).price;
}
module.exports = Transport;