/**
* Este verbo es responsable de obtener los valores de epsilon y score entre una
* especie objetivo y un conjunto de variables bióticas y raster.
*
* @module controllers/getScoreDecilNiche
* @requires debug
* @requires pg-promise
* @requires moment
* @requires config
* @requires module:controllers/verb_utils
* @requires module:controllers/sql/queryProvider
*/
var debug = require('debug')('verbs:getScoreDecilNiche')
var pgp = require('pg-promise')()
var moment = require('moment')
var config = require('../config')
var verb_utils = require('./verb_utils')
var queries = require('./sql/queryProvider')
var pool= pgp(config.db)
var N = verb_utils.N
var iterations = verb_utils.iterations
var alpha = verb_utils.alpha
/**
* Obtiene el score por celda agrupado por decil con apriori
*
* @function
* @param {express.Request} req - Express request object
* @param {express.Response} res - Express response object
* @param {function} next - Express next middleware function
*/
function getScoreDecilNiche_A(req, res, next) {
debug('getScoreDecilNiche_A')
var spid = parseInt(verb_utils.getParam(req, 'id'))
var tfilters = verb_utils.getParam(req, 'tfilters')
// var alpha = 0.01
// var N = 14707
var res_celda = verb_utils.getParam(req, 'res_celda', 'cells_16km')
var res_grid = verb_utils.getParam(req, 'res_grid', 'gridid_16km')
// filtros por tiempo
var sfecha = verb_utils.getParam(req, 'sfecha', false)
var fecha_incio = moment(verb_utils.getParam(req, 'lim_inf', '1500'), ['YYYY-MM-DD', 'YYYY-MM', 'YYYY'], 'es')
var fecha_fin = moment(verb_utils.getParam(req, 'lim_sup', moment().format('YYYY-MM-DD') ), ['YYYY-MM-DD', 'YYYY-MM', 'YYYY'], 'es')
filter_time = false;
var idtabla = verb_utils.getParam(req, 'idtabla')
idtabla = iter > 1 ? idtabla : ""
debug(idtabla)
// Siempre incluidos en query, nj >= 0
var min_occ = verb_utils.getParam(req, 'min_occ', 0)
// variables configurables
var hasBios = verb_utils.getParam(req, 'hasBios')
var hasRaster = verb_utils.getParam(req, 'hasRaster')
var apriori = verb_utils.getParam(req, 'apriori')
var groupid = verb_utils.getParam(req, 'groupid')
var title_valor = verb_utils.processTitleGroup(groupid, tfilters)
var discardedDeleted = verb_utils.getParam(req, 'discardedFilterids',[])
if (hasBios === 'true' && hasRaster === 'true' && apriori === 'apriori' ) {
debug('TA')
var caso = verb_utils.getTimeCase(fecha_incio, fecha_fin, sfecha)
debug('caso: ' + caso)
filter_time = caso !== -1 ? true : filter_time
debug('filter_time: ' + filter_time)
res_celda = caso !== -1 ? res_celda.replace("cells","gridid") : res_celda
debug('res_celda: ' + res_celda)
var whereVar = verb_utils.processBioFilters(tfilters, spid)
var whereVarRaster = verb_utils.processRasterFilters(tfilters, spid)
pool.any(queries.getScoreDecilNiche.getScoreDecilA, {
spid: spid,
N: N,
alpha: alpha,
min_occ: min_occ,
where_config: whereVar,
where_config_raster: whereVarRaster,
res_celda: res_celda,
res_grid: res_grid,
discardedDeleted: discardedDeleted,
lim_inf: fecha_incio.format('YYYY'),
lim_sup: fecha_fin.format('YYYY'),
caso: caso,
filter_time: filter_time,
idtabla: idtabla
})
.then(function (data) {
for(var i = 0; i < data.length; i++){
var item = data[i]
item['title'] = title_valor
}
res.json({'data': data})
})
.catch(function (error) {
debug(error)
next(error)
})
} else if (hasBios === 'true' && apriori === 'apriori' ) {
debug('BA')
var caso = verb_utils.getTimeCase(fecha_incio, fecha_fin, sfecha)
debug('caso: ' + caso)
filter_time = caso !== -1 ? true : filter_time
debug('filter_time: ' + filter_time)
res_celda = caso !== -1 ? res_celda.replace("cells","gridid") : res_celda
debug('res_celda: ' + res_celda)
var whereVar = verb_utils.processBioFilters(tfilters, spid)
pool.any(queries.getScoreDecilNiche.getScoreDecilBioA, {
spid: spid,
N: N,
alpha: alpha,
min_occ: min_occ,
where_config: whereVar,
res_celda: res_celda,
res_grid: res_grid,
discardedDeleted: discardedDeleted,
lim_inf: fecha_incio.format('YYYY'),
lim_sup: fecha_fin.format('YYYY'),
caso: caso,
filter_time: filter_time,
idtabla: idtabla
})
.then(function (data) {
for(var i = 0; i < data.length; i++){
var item = data[i]
item['title'] = title_valor
}
res.json({'data': data})
})
.catch(function (error) {
debug(error)
next(error)
})
} else if (hasRaster === 'true' && apriori === 'apriori' ) {
debug('RaA')
var caso = verb_utils.getTimeCase(fecha_incio, fecha_fin, sfecha)
debug('caso: ' + caso)
filter_time = caso !== -1 ? true : filter_time
debug('filter_time: ' + filter_time)
res_celda = caso !== -1 ? res_celda.replace("cells","gridid") : res_celda
debug('res_celda: ' + res_celda)
var whereVarRaster = verb_utils.processRasterFilters(tfilters, spid)
pool.any(queries.getScoreDecilNiche.getScoreDecilRaA, {
spid: spid,
N: N,
alpha: alpha,
min_occ: min_occ,
where_config_raster: whereVarRaster,
res_celda: res_celda,
res_grid: res_grid,
discardedDeleted: discardedDeleted,
lim_inf: fecha_incio.format('YYYY'),
lim_sup: fecha_fin.format('YYYY'),
caso: caso,
filter_time: filter_time,
idtabla: idtabla
})
.then(function (data) {
for(var i = 0; i < data.length; i++){
var item = data[i]
item['title'] = title_valor
}
res.json({'data': data})
})
.catch(function (error) {
debug(error)
next(error)
})
} else {
next()
}
}
/**
* Obtiene el score por celda agrupado por decil con validacion.
*
* @function
* @param {express.Request} req - Express request object
* @param {express.Response} res - Express response object
* @param {function} next - Express next middleware function
*/
// function getScoreDecilNiche_V(req, res, next) {
// debug('getScoreDecilNiche_V')
// var spid = parseInt(verb_utils.getParam(req, 'id'))
// var tfilters = verb_utils.getParam(req, 'tfilters')
// var alpha = 0.01
// // var N = 14707; // Verificar N, que se esta contemplando
// var res_celda = verb_utils.getParam(req, 'res_celda', 'cells_16km')
// var res_grid = verb_utils.getParam(req, 'res_grid', 'gridid_16km')
// // Siempre incluidos en query, nj >= 0
// var min_occ = verb_utils.getParam(req, 'min_occ', 0)
// var groupid = verb_utils.getParam(req, 'groupid')
// var title_valor = verb_utils.processTitleGroup(groupid, tfilters)
// // variables configurables
// var hasBios = verb_utils.getParam(req, 'hasBios')
// var hasRaster = verb_utils.getParam(req, 'hasRaster')
// var discardedids = verb_utils.getParam(req, 'discardedids', [])
// var discardedDeleted = verb_utils.getParam(req, 'discardedFilterids',[])
// // debug(discardedids)
// if ( hasBios === 'true' && hasRaster === 'true' &&
// discardedids != undefined && discardedids.length > 0 ) {
// debug('V')
// var whereVar = verb_utils.processBioFilters(tfilters, spid)
// var whereVarRaster = verb_utils.processRasterFilters(tfilters, spid)
// pool.any(queries.getScoreDecilNiche.getScoreDecilV, {
// spid: spid,
// N: N,
// alpha: alpha,
// min_occ: min_occ,
// where_config: whereVar,
// where_config_raster: whereVarRaster,
// arg_gridids: discardedids.toString(),
// res_celda: res_celda,
// res_grid: res_grid,
// discardedDeleted: discardedDeleted
// })
// .then(function (data) {
// for(var i = 0; i < data.length; i++){
// var item = data[i]
// item['title'] = title_valor
// }
// res.json({'data': data})
// })
// .catch(function (error) {
// debug(error)
// next(error)
// })
// } else if (hasBios === 'true' && discardedids != undefined &&
// discardedids.length > 0 ) {
// debug('B')
// var whereVar = verb_utils.processBioFilters(tfilters, spid)
// // debug(whereVar)
// // debug(discardedDeleted)
// // debug(discardedids)
// pool.any(queries.getScoreDecilNiche.getScoreDecilBioV, {
// spid: spid,
// N: N,
// alpha: alpha,
// min_occ: min_occ,
// where_config: whereVar,
// arg_gridids: discardedids,
// res_celda: res_celda,
// res_grid: res_grid,
// discardedDeleted: discardedDeleted
// })
// .then(function (data) {
// // debug(data)
// for(var i = 0; i < data.length; i++){
// var item = data[i]
// item['title'] = title_valor
// }
// res.json({'data': data})
// })
// .catch(function (error) {
// debug(error)
// next(error)
// })
// } else if (hasRaster === 'true' && discardedids != undefined &&
// discardedids.length > 0 ) {
// debug('Ra')
// var whereVarRaster = verb_utils.processRasterFilters(tfilters, spid)
// // debug(whereVarRaster)
// pool.any(queries.getScoreDecilNiche.getScoreDecilRaV, {
// spid: spid,
// N: N,
// alpha: alpha,
// min_occ: min_occ,
// where_config_raster: whereVarRaster,
// arg_gridids: discardedids.toString(),
// res_celda: res_celda,
// res_grid: res_grid,
// discardedDeleted: discardedDeleted
// })
// .then(function (data) {
// for(var i = 0; i < data.length; i++){
// var item = data[i]
// item['title'] = title_valor
// }
// res.json({'data': data})
// })
// .catch(function (error) {
// debug(error)
// next(error)
// })
// } else {
// next()
// }
// }
/**
* Obtiene el score por celda agrupado por decil con filtro temporal
*
* @function
* @param {express.Request} req - Express request object
* @param {express.Response} res - Express response object
* @param {function} next - Express next middleware function
*/
// function getScoreDecilNiche_T(req, res, next) {
// debug('getScoreDecilNiche_T')
// var spid = parseInt(verb_utils.getParam(req, 'id'))
// var tfilters = verb_utils.getParam(req, 'tfilters')
// var alpha = 0.01
// // var N = 14707; // Verificar N, que se esta contemplando
// var res_celda = verb_utils.getParam(req, 'res_celda', 'cells_16km')
// var res_grid = verb_utils.getParam(req, 'res_grid', 'gridid_16km')
// // Siempre incluidos en query, nj >= 0
// var min_occ = verb_utils.getParam(req, 'min_occ', 0)
// // variables configurables
// var hasBios = verb_utils.getParam(req, 'hasBios')
// var hasRaster = verb_utils.getParam(req, 'hasRaster')
// var groupid = verb_utils.getParam(req, 'groupid')
// var title_valor = verb_utils.processTitleGroup(groupid, tfilters)
// // filtros por tiempo
// var sfecha = verb_utils.getParam(req, 'sfecha', false)
// var fecha_incio = moment(verb_utils.getParam(req, 'lim_inf', '1500'),
// ['YYYY-MM-DD', 'YYYY-MM', 'YYYY'], 'es')
// var fecha_fin = moment(verb_utils.getParam(req, 'lim_sup',
// moment().
// format('YYYY-MM-DD') ),
// ['YYYY-MM-DD', 'YYYY-MM', 'YYYY'], 'es')
// var discardedFilterids = verb_utils.getParam(req, 'discardedDateFilterids')
// // debug(discardedFilterids)
// var discardedDeleted = verb_utils.getParam(req, 'discardedFilterids',[])
// if (hasBios === 'true' && hasRaster === 'true' &&
// discardedFilterids === 'true') {
// var caso = verb_utils.getTimeCase(fecha_incio, fecha_fin, sfecha)
// debug(caso)
// debug('T')
// whereVar = verb_utils.processBioFilters(tfilters, spid)
// whereVarRaster = verb_utils.processRasterFilters(tfilters,spid)
// pool.any(queries.getScoreDecilNiche.getScoreDecilT, {
// spid: spid,
// N: N,
// alpha: alpha,
// min_occ: min_occ,
// where_config: whereVar,
// where_config_raster: whereVarRaster,
// lim_inf: fecha_incio.format('YYYY'),
// lim_sup: fecha_fin.format('YYYY'),
// caso: caso,
// res_celda: res_celda,
// res_grid: res_grid,
// discardedDeleted: discardedDeleted
// })
// .then(function (data) {
// for(var i = 0; i < data.length; i++){
// var item = data[i]
// item['title'] = title_valor
// }
// res.json({'data': data})
// })
// .catch(function (error) {
// debug(error)
// next(error)
// })
// } else if (hasBios === 'true' && discardedFilterids === 'true' ) {
// debug('B')
// var caso = verb_utils.getTimeCase(fecha_incio, fecha_fin, sfecha)
// debug(caso)
// whereVar = verb_utils.processBioFilters(tfilters, spid)
// // debug(whereVar)
// pool.any(queries.getScoreDecilNiche.getScoreDecilBioT, {
// spid: spid,
// N: N,
// alpha: alpha,
// min_occ: min_occ,
// where_config: whereVar,
// lim_inf: fecha_incio.format('YYYY'),
// lim_sup: fecha_fin.format('YYYY'),
// caso: caso,
// res_celda: res_celda,
// res_grid: res_grid,
// discardedDeleted: discardedDeleted
// })
// .then(function (data) {
// for(var i = 0; i < data.length; i++){
// var item = data[i]
// item['title'] = title_valor
// }
// res.json({'data': data})
// })
// .catch(function (error) {
// debug(error)
// next(error)
// })
// } else if (hasRaster === 'true' && discardedFilterids === 'true' ) {
// var caso = verb_utils.getTimeCase(fecha_incio, fecha_fin, sfecha)
// debug(caso)
// debug('Ra')
// whereVarRaster = verb_utils.processRasterFilters(tfilters,spid)
// pool.any(queries.getScoreDecilNiche.getScoreDecilRaT, {
// spid: spid,
// N: N,
// alpha: alpha,
// min_occ: min_occ,
// where_config_raster: whereVarRaster,
// lim_inf: fecha_incio.format('YYYY'),
// lim_sup: fecha_fin.format('YYYY'),
// caso: caso,
// res_celda: res_celda,
// res_grid: res_grid,
// discardedDeleted: discardedDeleted
// })
// .then(function (data) {
// for(var i = 0; i < data.length; i++){
// var item = data[i]
// item['title'] = title_valor
// }
// res.json({'data': data})
// })
// .catch(function (error) {
// debug(error)
// next(error)
// })
// } else {
// next()
// }
// }
/**
* Obtiene el score por celda agrupado por decil sin filtros
*
* @function
* @param {express.Request} req - Express request object
* @param {express.Response} res - Express response object
* @param {function} next - Express next middleware function
*/
function getScoreDecilNiche(req, res, next) {
debug('getScoreDecilNiche')
var spid = parseInt(verb_utils.getParam(req, 'id'))
var tfilters = verb_utils.getParam(req, 'tfilters')
// var N = 14707
var res_celda = verb_utils.getParam(req, 'res_celda', 'cells_16km')
var res_grid = verb_utils.getParam(req, 'res_grid', 'gridid_16km')
var discardedDeleted = verb_utils.getParam(req, 'discardedFilterids',[])
var sfosil = verb_utils.getParam(req, 'fossil', false)
// debug(sfosil)
var lb_fosil = sfosil === "false" || sfosil === false ? " and (ejemplarfosil <> 'SI' or ejemplarfosil is null) " : "";
var val_process = verb_utils.getParam(req, 'val_process', false)
var iter = val_process === "true" ? iterations : 1
var idtabla = verb_utils.getParam(req, 'idtabla')
idtabla = iter > 1 ? idtabla : ""
debug(idtabla)
// filtros por tiempo
var sfecha = verb_utils.getParam(req, 'sfecha', false)
var fecha_incio = moment(verb_utils.getParam(req, 'lim_inf', '1500'), ['YYYY-MM-DD', 'YYYY-MM', 'YYYY'], 'es')
var fecha_fin = moment(verb_utils.getParam(req, 'lim_sup', moment().format('YYYY-MM-DD') ), ['YYYY-MM-DD', 'YYYY-MM', 'YYYY'], 'es')
filter_time = false;
// Siempre incluidos en query, nj >= 0
var min_occ = verb_utils.getParam(req, 'min_occ', 0)
// variables configurables
var hasBios = verb_utils.getParam(req, 'hasBios')
var hasRaster = verb_utils.getParam(req, 'hasRaster')
var groupid = verb_utils.getParam(req, 'groupid')
var title_valor = verb_utils.processTitleGroup(groupid, tfilters)
if (hasBios === 'true' && hasRaster === 'true' ) {
debug('T')
var caso = verb_utils.getTimeCase(fecha_incio, fecha_fin, sfecha)
debug('caso: ' + caso)
filter_time = caso !== -1 ? true : filter_time
debug('filter_time: ' + filter_time)
//TODO: Revisar si se envian los dos parametros es necesaria esta validación
res_celda = caso !== -1 ? res_celda.replace("cells","gridid") : res_celda
debug('res_celda: ' + res_celda)
res_celda = caso !== -1 || lb_fosil.length > 1 ? res_celda.replace("cells","gridid") : res_celda
debug('res_celda: ' + res_celda)
var whereVar = verb_utils.processBioFilters(tfilters, spid)
var whereVarRaster = verb_utils.processRasterFilters(tfilters, spid)
pool.any(queries.getScoreDecilNiche.getScoreDecil, {
iterations: iter,
spid: spid,
N: N,
alpha: alpha,
min_occ: min_occ,
fossil: lb_fosil,
where_config: whereVar,
where_config_raster: whereVarRaster,
res_celda: res_celda,
res_grid: res_grid,
discardedDeleted: discardedDeleted,
lim_inf: fecha_incio.format('YYYY'),
lim_sup: fecha_fin.format('YYYY'),
caso: caso,
filter_time: filter_time,
idtabla: idtabla
})
.then(function (data) {
for(var i = 0; i < data.length; i++){
var item = data[i]
item['title'] = title_valor
}
res.json({'data': data})
})
.catch(function (error) {
debug(error)
next(error)
})
} else if (hasBios === 'true') {
debug('B')
var caso = verb_utils.getTimeCase(fecha_incio, fecha_fin, sfecha)
debug('caso: ' + caso)
filter_time = caso !== -1 ? true : filter_time
debug('filter_time: ' + filter_time)
res_celda = caso !== -1 ? res_celda.replace("cells","gridid") : res_celda
debug('res_celda: ' + res_celda)
res_celda = caso !== -1 || lb_fosil.length > 1 ? res_celda.replace("cells","gridid") : res_celda
debug('res_celda: ' + res_celda)
var whereVar = verb_utils.processBioFilters(tfilters, spid)
// debug(whereVar)
pool.any(queries.getScoreDecilNiche.getScoreDecilBio, {
iterations: iter,
spid: spid,
N: N,
alpha: alpha,
min_occ: min_occ,
fossil: lb_fosil,
where_config: whereVar,
res_celda: res_celda,
res_grid: res_grid,
discardedDeleted: discardedDeleted,
lim_inf: fecha_incio.format('YYYY'),
lim_sup: fecha_fin.format('YYYY'),
caso: caso,
filter_time: filter_time,
idtabla: idtabla
})
.then(function (data) {
for(var i = 0; i < data.length; i++){
var item = data[i]
item['title'] = title_valor
}
res.json({'data': data})
})
.catch(function (error) {
debug(error)
next(error)
})
} else if (hasRaster === 'true') {
debug('Ra')
var caso = verb_utils.getTimeCase(fecha_incio, fecha_fin, sfecha)
debug('caso: ' + caso)
filter_time = caso !== -1 ? true : filter_time
debug('filter_time: ' + filter_time)
res_celda = caso !== -1 ? res_celda.replace("cells","gridid") : res_celda
debug('res_celda: ' + res_celda)
res_celda = caso !== -1 || lb_fosil.length > 1 ? res_celda.replace("cells","gridid") : res_celda
debug('res_celda: ' + res_celda)
var whereVarRaster = verb_utils.processRasterFilters(tfilters, spid)
// debug(whereVarRaster)
pool.any(queries.getScoreDecilNiche.getScoreDecilRaster, {
iterations: iter,
spid: spid,
N: N,
alpha: alpha,
min_occ: min_occ,
fossil: lb_fosil,
where_config_raster: whereVarRaster,
res_celda: res_celda,
res_grid: res_grid,
discardedDeleted: discardedDeleted,
lim_inf: fecha_incio.format('YYYY'),
lim_sup: fecha_fin.format('YYYY'),
caso: caso,
filter_time: filter_time,
idtabla: idtabla
})
.then(function (data) {
for(var i = 0; i < data.length; i++){
var item = data[i]
item['title'] = title_valor
}
res.json({'data': data})
})
.catch(function (error) {
debug(error)
next(error)
})
} else {
next()
}
}
/**
* Esta variable es un arreglo donde se define el flujo que debe de tener una
* petición al verbo getScoreDecilNiche. Actualmente el flujo es
* getScoreDecilNiche_A, getScoreDecilNiche_V, getScoreDecilNiche_T y
* getScoreDecilNiche.
*
* @see controllers/getScoreDecilNiche~getScoreDecilNiche_A
* @see controllers/getScoreDecilNiche~getScoreDecilNiche_V
* @see controllers/getScoreDecilNiche~getScoreDecilNiche_T
* @see controllers/getScoreDecilNiche~getScoreDecilNiche
*/
exports.pipe = [
// getScoreDecil_VTA,
// getScoreDecil_VT,
// getScoreDecil_VA,
// getScoreDecil_TA,
getScoreDecilNiche_A,
// getScoreDecilNiche_V,
// getScoreDecilNiche_T,
getScoreDecilNiche
]