51 Commits

Author SHA1 Message Date
kikin 8bfc2c3f1d Merge branch 'caballero' into dev 2020-11-17 17:06:18 -06:00
kikin bc9ac9629c up 2020-11-17 17:05:08 -06:00
caballero 741b2897bd Se cree que es el final 2020-11-14 10:42:15 -06:00
kikin 3dd0c9e181 up 2020-11-13 11:46:59 -06:00
caballero e2ab22204b Para el conteo de registros presentados 2020-11-13 09:12:59 -06:00
alfredojl 200c933208 Update noInventario added 2020-10-16 18:49:07 -05:00
kikin 0046a045d8 Merge branch 'alima' into dev 2020-10-10 15:35:17 -05:00
alfredojl 0b9677351b . 2020-10-09 22:32:43 -05:00
alfredojl ad82fab926 . 2020-10-09 21:52:33 -05:00
kikin 2e06ca28ea Merge branch 'alima' into dev 2020-10-07 19:38:15 -05:00
alfredojl 3df51cc121 . 2020-10-07 18:57:34 -05:00
kikin bec473f906 Merge branch 'alima' into dev 2020-10-06 22:28:44 -05:00
alfredojl b4d59da25a Merge branch 'alima' of https://repositorio.acatlan.unam.mx/CIDWA/censo2020Back into alima
"."
2020-10-06 20:22:02 -05:00
alfredojl c24ddc4cf5 . 2020-10-06 20:16:17 -05:00
alfredojl 766f79b9d1 . 2020-10-06 19:56:55 -05:00
kikin 0de76b2a2e Merge branch 'caballero' into dev 2020-10-05 16:57:49 -05:00
caballero fc4c38e80d Eliminar opcion Impresora de Computadora 2020-10-01 18:15:39 -05:00
alfredojl 16c0ac5f6b Latest (hope) 2020-09-30 20:55:55 -05:00
KIKIN 7b4e7c20da examp 2020-09-30 12:30:04 -05:00
KIKIN b30bc5a55b examp 2020-09-28 14:47:37 -05:00
KIKIN 51d80ac825 up 2020-09-28 13:53:37 -05:00
KIKIN 943f2b065e fix 2020-09-27 20:13:38 -05:00
KIKIN cf2fc5bce5 Merge branch 'dev' of https://repositorio.acatlan.unam.mx/CIDWA/censo2020Back into dev 2020-09-27 19:58:54 -05:00
alfredojl cc1f7770fd Fill from excel added 2020-09-25 19:13:47 -05:00
KIKIN 9936184944 up back 2020-09-25 08:42:25 -05:00
caballero 7d689c103a Filtros en Computadoras, Impresoras e Inventario 2020-09-24 21:43:10 -05:00
caballero 78f2ae4a77 subiendo filtro y reporte excel como se pidió 2020-09-22 00:56:48 -05:00
KIKIN 7e99f242c4 carga masiva, plantilla 2020-09-21 19:06:03 -05:00
alfredojl ccbc286369 Error and improvements added(fixed). 2020-09-21 14:48:10 -05:00
caballero 055f10d7c4 utilidad para ver que ocurre 2020-09-20 16:59:08 -05:00
alfredojl 3b9a9492c2 /updateEquip and /updatePrinter added and working. 2020-09-18 22:08:30 -05:00
alfredojl 061ea3abe1 AddPrinter funcionando al cien 2020-09-17 21:24:57 -05:00
alfredojl a858262619 /api/addPrinter added 2020-09-16 19:57:44 -05:00
alfredojl 4701ee1a88 Varios archivos de backend agregados. 2020-09-16 18:03:09 -05:00
alfredojl 22ac369b47 /api/computers and /api/printers added 2020-09-14 18:30:15 -05:00
alfredojl f4f91d5c14 Improvements added. 2020-09-11 00:27:05 -05:00
alfredojl ef328ecf8a Filled out DB fixed. 2020-09-10 03:06:23 -05:00
alfredojl 57eb20271b Fake records added. 2020-09-07 19:03:04 -05:00
alfredojl bc9bffd0c9 Nombre de usuario agregado al sendemail 2020-08-25 21:05:32 -05:00
alfredojl 9a2c5640f3 . 2020-08-25 12:44:44 -05:00
alfredojl 7dfe5576d9 Merge branch 'dev' of https://repositorio.acatlan.unam.mx/CIDWA/censo2020Back into alima 2020-08-24 18:48:00 -05:00
alfredojl a933e665ed Git ignore actualizado 2020-08-21 22:29:28 -05:00
kikin 758c23d345 Merge branch 'alima' into dev 2020-08-21 18:05:08 -05:00
alfredojl 43a6d7be6f npm run sendemail 2020-08-21 14:55:08 -05:00
KIKIN 1562ea1a77 conectando archivos 2020-08-19 19:21:14 -05:00
KIKIN da2a5eb901 up 2020-08-17 14:16:10 -05:00
alfredojl 2b232f2c03 Login 2020-08-17 11:35:15 -05:00
kikin 11e0e4701b Merge branch 'caballero' of https://repositorio.acatlan.unam.mx/CIDWA/censo2020Back into caballero 2020-08-14 17:43:53 -05:00
caballero 4a7618a682 tablas creadas con sequelize 2020-08-14 17:22:42 -05:00
KIKIN 1ae438a299 subiendo un ejemplo en post del login 2020-08-12 17:06:46 -05:00
KIKIN 013a6b27ea scripts de db, listos 2020-08-11 14:00:28 -05:00
83 changed files with 3131 additions and 107 deletions
+19
View File
@@ -0,0 +1,19 @@
TYPEDB = mariadb
DB = ejemploCenso
USERDB = censoDev
PASSDB = holaC3ns0
HOSTDB = localhost
PORT = 3000
TOKEN_SEED = seedAcatlan
TOKEN_EXP = 1d
EMAIL = censo@acatlan.unam.mx
EMAILPASS = C3ns0-4cTln
+19
View File
@@ -0,0 +1,19 @@
TYPEDB =
DB =
USERDB =
PASSDB =
HOSTDB =
PORT =
TOKEN_SEED =
TOKEN_EXP =
EMAIL =
EMAILPASS =
+3
View File
@@ -36,6 +36,9 @@ build/Release
# Dependency directories
node_modules/
jspm_packages/
./.env
scratch/
./server/controller/api
# TypeScript v1 declaration files
typings/
+222
View File
@@ -0,0 +1,222 @@
const fillActivoFijo = require('./tables/ActivoFijo');
const fillEquipo = require('./tables/Equipo');
const fillInventario = require('./tables/Inventario');
const fillMarca = require('./tables/Marca');
const fillOS = require('./tables/OS');
const fillPrinters = require('./tables/Printers');
const fillTipo = require('./tables/Tipo');
const fillUbicacion = require('./tables/Ubicacion');
const fillUResponsable = require('./tables/UResponsable');
const fillUso = require('./tables/Uso');
const faker = require('faker');
faker.locale = "es_MX";
const colors = require('colors');
const symbols = require('log-symbols');
const progress = require('cli-progress');
const Inventario = require('../server/models/tablas/Inventario');
let rows = 100;
let faileds = 0;
let ok = 0;
let censo = 0;
async function fillingEquipo() {
let count = 1;
let barinventario = new progress.SingleBar({
format: 'inventario [' + colors.cyan('{bar}') + '] {percentage}%' + '|| {value}/{total} records created.',
barCompleteChar: '\u2588',
barIncompleteChar: '\u2591',
hideCursor: true,
stopOnComplete: true,
barsize: 30,
align: 'right'
});
let barequipo = new progress.SingleBar({
format: 'equipo [' + colors.cyan('{bar}') + '] {percentage}%' + '|| {value}/{total} records created.',
barCompleteChar: '\u2588',
barIncompleteChar: '\u2591',
hideCursor: true,
stopOnComplete: true,
barsize: 30,
align: 'right'
});
barinventario.start(rows, 0);
barequipo.start(rows, 0);
for (let i = 0; i < rows; i++) {
let noInventario = faker.phone.phoneNumber("2######");
let idActivoFijo = idUso = faker.random.number({
min: 1,
max: 5
});
await fillInventario(noInventario, idActivoFijo)
.then(() => censo++)
.catch(() => {
console.log(symbols.warning, 'Error creating «inventario-equipo»');
barinventario.stop();
throw new Error();
});
await fillEquipo(noInventario, idActivoFijo)
.catch(async() => {
await Inventario.destroy({
where: noInventario
})
then(() => censo--);
console.log(symbols.warning, 'Error creating «equipo»');
barequipo.stop();
throw new Error();
});
barinventario.increment();
barequipo.increment();
}
return;
}
async function fillingPrinters() {
let pInventario = new progress.SingleBar({
format: 'inventario [' + colors.cyan('{bar}') + '] {percentage}%' + '|| {value}/{total} records created.',
barCompleteChar: '\u2588',
barIncompleteChar: '\u2591',
hideCursor: true,
stopOnComplete: true,
barsize: 30,
align: 'right'
});
let barprinters = new progress.SingleBar({
format: 'printers [' + colors.cyan('{bar}') + '] {percentage}%' + '|| {value}/{total} records created.',
barCompleteChar: '\u2588',
barIncompleteChar: '\u2591',
hideCursor: true,
stopOnComplete: true,
barsize: 30,
align: 'right'
});
pInventario.start(rows, 0);
barprinters.start(rows, 0);
for (let i = 1; i <= rows; i++) {
let noInventario = faker.phone.phoneNumber("2######");
let idActivoFijo = 6;
await fillInventario(noInventario, idActivoFijo)
.then(() => censo++)
.catch(() => {
console.log(symbols.warning, 'Error creating «inventario-printers»');
pInventario.stop();
throw new Error();
});
await fillPrinters(noInventario, idActivoFijo)
.catch(async() => {
await Inventario.destroy({
where: noInventario
})
.then(() => censo--);
console.log(symbols.warning, 'Error creating «printers»');
barprinters.stop();
throw new Error();
});
pInventario.increment();
barprinters.increment();
}
return;
}
async function exec() {
await fillActivoFijo()
.then(() => {
console.log(symbols.success, '«activoFijo» filled out.'.green.bold)
ok++;
})
.catch(() => {
// console.log('\n');
console.log(symbols.warning, 'Error creating «activoFijo».'.yellow.bold);
faileds++;
});
await fillMarca()
.then(() => {
console.log(symbols.success, '«marca» filled out.'.green.bold)
ok++;
})
.catch(() => {
console.log(symbols.warning, 'Error creating marca».'.yellow.bold);
faileds++;
});
await fillOS()
.then(() => {
console.log(symbols.success, '«OS» filled out.'.green.bold)
ok++;
})
.catch(() => {
console.log(symbols.warning, 'Error creating «OS».'.yellow.bold);
faileds++;
});
await fillTipo()
.then(() => {
console.log(symbols.success, '«tipo» filled out.'.green.bold)
ok++;
})
.catch(() => {
console.log(symbols.warning, 'Error creating «tipo».'.yellow.bold);
faileds++;
});
await fillUResponsable()
.then((records) => {
console.log(symbols.success, `${ records } records filled out.`.green.bold)
ok++;
})
.catch(() => {
console.log(symbols.warning, 'Error creating «uResponsable».'.yellow.bold);
faileds++;
});
await fillUbicacion()
.then(() => {
console.log(symbols.success, '«ubicacion» filled out.'.green.bold)
ok++;
})
.catch(() => {
console.log(symbols.warning, 'Error creating «ubicacion».'.yellow.bold);
faileds++;
});
await fillUso()
.then(() => {
console.log(symbols.success, '«uso» filled out.'.green.bold)
ok++;
})
.catch(() => {
console.log(symbols.warning, 'Error creating «uso».'.yellow.bold);
faileds++;
});
console.log(`\nFilling out ${ rows } records on equipo, printers and inventario. Please wait...\n`.cyan.italic.bold);
// await fillingEquipo()
// .then(() => {
// console.log(symbols.success, `${ rows } records created on equipo.\n`.green.bold);
// ok++;
// })
// .catch((e) => {
// console.log(symbols.warning, 'Error creating «equipo».\n', e);
// faileds++;
// });
// await fillingPrinters()
// .then(() => {
// console.log(symbols.success, `${ rows } records created on printers.\n`.green.bold);
// ok++;
// })
// .catch((e) => {
// console.log(symbols.warning, 'Error creating «printers».\n', e);
// faileds++;
// });
// if (censo / 2 === rows) ok++;
// else faileds++;
// console.log(symbols.success, `${ censo } records added on inventario`.green.bold);
console.log(`\n${ symbols.success }`, ` ${ ok } tables filled out succesfully.`.green.bold);
console.log(symbols.error, ` ${ faileds } tables wasn't filled out successfully.`.red.bold);
process.exit();
}
exec();
+55
View File
@@ -0,0 +1,55 @@
const symbols = require('log-symbols');
const generator = require('generate-password');
const admin = require('../server/models/tablas/Admin');
const bcrypt = require('bcrypt');
const colors = require('colors');
const send = require('gmail-send')({
user: process.env.EMAIL,
pass: process.env.EMAILPASS,
subject: 'Credenciales para ingreso a sistema de censo.'
});
const emails = [
'alfredo.lima@acatlan.unam.mx',
'312047278@pcpuma.acatlan.unam.mx',
'enrique.mg.cd@gmail.com'
];
const nombres = [
'Alfredo Lima',
'José Alfredo',
'Enrique Maquinola'
]
emails.forEach(async(email, index) => {
let tempPass = generator.generate({
length: 8,
numbers: true,
symbols: true,
exclude: `"`,
strict: true
});
console.log(symbols.info, `Creating user ${email}...`.blue.bold);
let tempUser = await admin.create({
name: email,
userName: nombres[index],
password: bcrypt.hashSync(tempPass, 10),
isAdmin: false
});
if (!tempUser)
return console.log(symbols.error, 'Error creating user.'.red.bold);
console.log(symbols.info, `Sending email to ${email}`.blue);
await send({
to: email,
text: `Usuario: ${email}\nContraseña: ${tempPass}\nSaludos.`
},
async(err, res, resFull) => {
if (err)
return console.log(symbols.error, err);
console.log(symbols.success, 'User created. Email sent.'.green.bold);
});
})
+45
View File
@@ -0,0 +1,45 @@
const ActivoFijo = require('../../server/models/tablas/ActivoFijo');
const progress = require('cli-progress');
const colors = require('colors');
async function fillActivoFijo() {
let limit = 6;
const bar = new progress.SingleBar({
format: 'activoFijo |' + colors.cyan('{bar}') + '| {percentage}%' + ' || {value}/{total} records created.',
barCompleteChar: '\u2588',
barIncompleteChar: '\u2591',
hideCursor: true,
stopOnComplete: true,
barsize: 30,
align: 'right'
});
console.log('\n\tFilling out «activoFijo».'.cyan.italic.bold);
let af = [
"PC",
"Laptop",
"Servidor",
"Ipad",
"Chromebook",
"Impresora"
];
bar.start(limit, 0);
for (activoFijo of af) {
await ActivoFijo.create({
activoFijo
})
.then(() => {
// console.log(`${ count }/${ limit }\trecords created.`);
})
.catch(() => {
bar.stop();
throw new Error()
});
bar.increment();
};
};
module.exports = fillActivoFijo;
+72
View File
@@ -0,0 +1,72 @@
const Equipo = require('../../server/models/tablas/Equipo');
const faker = require('faker');
faker.locale = "es_MX";
async function fillEquipo(noInventario, idActivoFijo) {
let modelo = faker.vehicle.model();
let noSerie = faker.vehicle.vin();
let idMarca = faker.random.number({
min: 1,
max: 11
});
let idOS = faker.random.number({
min: 1,
max: 7
});
let procesador = faker.random.arrayElement([
"Intel Core i3",
"Intel Core i5",
"Intel Core i7",
"Ryzen 3",
"Ryzen 5",
"Ryzen 7",
]);
let vProcesador = faker.random.number({ min: 2000, max: 4500 })
let memoria = faker.random.arrayElement([
"DDR2",
"DDR3",
"DDR4"
]);
let memoriasz = faker.random.arrayElement([
4096,
2048,
8192
]);
let vMemoria = faker.random.number({ min: 1400, max: 1800, precision: 4 });
let graficos = faker.random.arrayElement([
"Intel HD Graphics",
"Intel Iris",
"Intel Iris Plus",
"Radeon Vega 8",
"Radeon Vega 7",
"Radeon Vega Plus",
"Radeon Vega Graphics",
]);
let hdd = faker.random.number({
min: 80,
max: 990,
precision: 2
});
await Equipo.create({
modelo,
noSerie,
procesador,
vProcesador,
memoria,
memoriasz,
vMemoria,
graficos,
hdd,
noInventario,
idMarca,
idOS,
idActivoFijo
})
.catch(() => {
throw new Error();
});
};
module.exports = fillEquipo;
+39
View File
@@ -0,0 +1,39 @@
const Inventario = require('../../server/models/tablas/Inventario');
const faker = require('faker');
faker.locale = "es_MX";
async function fillInventario(noInventario, idActivoFijo) {
let idUbicacion = faker.random.number({
min: 1,
max: 15
});
let idUnidadResponsable = faker.random.number({
min: 1,
max: 101
});
let idUso = faker.random.number({
min: 1,
max: 6
});
let noResguardo = faker.phone.phoneNumber("#####")
// console.log("Inventario: ", noInventario, "\nResguardo: ", noResguardo);
await Inventario.create({
noResguardo,
idActivoFijo,
noInventario,
idUnidadResponsable,
idUbicacion,
idUso
})
.then(() => {
// console.log(`${ count }/${ limit }\trecords created.`);
// count++;
})
.catch(() => {
throw new Error();
});
};
module.exports = fillInventario;
+49
View File
@@ -0,0 +1,49 @@
const Marca = require('../../server/models/tablas/Marca');
const progress = require('cli-progress');
const colors = require('colors');
async function fillMarca() {
let limit = 11;
const bar = new progress.SingleBar({
format: 'marca |' + colors.cyan('{bar}') + '| {percentage}%' + ' || {value}/{total} records created.',
barCompleteChar: '\u2588',
barIncompleteChar: '\u2591',
hideCursor: true,
stopOnComplete: true,
barsize: 30,
align: 'right'
});
let marcas = [
"HP",
"ECOIN",
"SONY",
"LENOVO",
"DELL",
"ACER",
"ASUS",
"APPLE",
"COMPAQ",
"GATEWAY",
"IBM"
];
console.log('\n\tFilling out «marca».'.cyan.italic.bold);
bar.start(limit, 0);
for (marca of marcas) {
await Marca.create({
marca
})
.then(() => {
// console.log(`${ count }/${ limit }\trecords created.`);
})
.catch(() => {
bar.stop();
throw new Error();
});
bar.increment();
};
};
module.exports = fillMarca;
+41
View File
@@ -0,0 +1,41 @@
const OS = require('../../server/models/tablas/OS');
const colors = require('colors');
const progress = require('cli-progress');
async function fillOS() {
let limit = 7;
const bar = new progress.SingleBar({
format: 'OS |' + colors.cyan('{bar}') + '| {percentage}%' + ' || {value}/{total} records created.',
barCompleteChar: '\u2588',
barIncompleteChar: '\u2591',
hideCursor: true,
stopOnComplete: true,
barsize: 30,
align: 'right'
});
let sistemas = [
"Windows 7",
"Windows 10",
"Debian",
"Fedora",
"CentOS",
"Ubuntu",
"MacOS"
];
console.log('\n\tFilling out «OS».'.cyan.italic.bold);
bar.start(limit, 0);
for (osname of sistemas) {
await OS.create({
osname
})
.catch(() => {
bar.stop();
throw new Error();
});
bar.increment();
};
};
module.exports = fillOS;
+31
View File
@@ -0,0 +1,31 @@
const Printers = require('../../server/models/tablas/Printers');
const faker = require('faker');
faker.locale = "es_MX";
async function fillPrinters(noInventario, idActivoFijo) {
let noSerie = faker.vehicle.vin();
let idMarca = faker.random.number({
min: 1,
max: 11
});
let idTipo = faker.random.number({
min: 1,
max: 4
});
let descripcion = faker.lorem.sentence();
let modelo = faker.vehicle.model();
// console.log("Número de serie impresora: ", noSerie);
await Printers.create({
noInventario,
noSerie,
modelo,
descripcion,
idMarca,
idTipo,
idActivoFijo
});
};
module.exports = fillPrinters;
+42
View File
@@ -0,0 +1,42 @@
const Tipo = require('../../server/models/tablas/Tipo');
const progress = require('cli-progress');
const colors = require('colors');
async function fillTipo() {
let limit = 4;
const bar = new progress.SingleBar({
format: 'tipo |' + colors.cyan('{bar}') + '| {percentage}%' + ' || {value}/{total} records created.',
barCompleteChar: '\u2588',
barIncompleteChar: '\u2591',
hideCursor: true,
stopOnComplete: true,
barsize: 30,
align: 'right'
});
let tipos = [
"Impresora",
"Multifuncional",
"Láser",
"Plotter"
];
console.log('\n\tFilling out «tipo».'.cyan.italic.bold);
bar.start(limit, 0);
for (tipo of tipos) {
await Tipo.create({
tipo
})
// .then(() => {
// console.log(`${ count }/${ limit }\trecords created.`);
// count++;
// })
.catch(() => {
bar.stop();
throw new Error();
});
bar.increment();
};
};
module.exports = fillTipo;
+43
View File
@@ -0,0 +1,43 @@
const UResponsable = require('../../server/models/tablas/UResponsable');
const progress = require('cli-progress');
const colors = require('colors');
const faker = require('faker');
faker.locale = 'es_MX';
async function fillUResponsable() {
let unidades = require('./unidades.json');
var nombres = require('./nombres.json');
let limit = unidades.length;
let count = 0;
const bar = new progress.SingleBar({
format: 'uResponsable |' + colors.cyan('{bar}') + '| {percentage}%' + ' || {value}/{total} records created.',
barCompleteChar: '\u2588',
barIncompleteChar: '\u2591',
hideCursor: true,
stopOnComplete: true,
barsize: 30,
align: 'right'
});
console.log(`\n\tFilling out with ${ limit } records on uResponsable, please wait...`.cyan.italic.bold);
bar.start(limit, 0);
for (uResponsable of unidades) {
nombreResponsable = nombres[count];
await UResponsable.create({
uResponsable,
nombreResponsable
})
.catch(() => {
bar.stop();
throw new Error();
});
bar.increment();
count++;
};
return limit;
};
module.exports = fillUResponsable;
+36
View File
@@ -0,0 +1,36 @@
const Ubicacion = require('../../server/models/tablas/Ubicacion');
const progress = require('cli-progress');
const colors = require('colors');
const faker = require('faker');
faker.locale = "es_MX";
async function fillUbicacion() {
let ubicaciones = require('./ubicaciones');
let limit = ubicaciones.length;
const bar = new progress.SingleBar({
format: 'ubicacion |' + colors.cyan('{bar}') + '| {percentage}%' + ' || {value}/{total} records created.',
barCompleteChar: '\u2588',
barIncompleteChar: '\u2591',
hideCursor: true,
stopOnComplete: true,
barsize: 30,
align: 'right'
});
console.log('\n\tFilling out «ubicacion».'.cyan.italic.bold);
bar.start(limit, 0);
for (ubicacion of ubicaciones) {
await Ubicacion.create({
ubicacion
})
.catch(() => {
bar.stop();
throw new Error();
});
bar.increment();
};
};
module.exports = fillUbicacion;
+33
View File
@@ -0,0 +1,33 @@
const Uso = require('../../server/models/tablas/Uso');
const progress = require('cli-progress');
const colors = require('colors');
async function fillUso() {
let usos = require('./usos.json');
let limit = 6;
const bar = new progress.SingleBar({
format: 'uso |' + colors.cyan('{bar}') + '| {percentage}%' + ' || {value}/{total} records created.',
barCompleteChar: '\u2588',
barIncompleteChar: '\u2591',
hideCursor: true,
stopOnComplete: true,
barsize: 30,
align: 'right'
});
console.log('\n\tFilling out «uso».'.cyan.italic.bold);
bar.start(limit, 0);
for (uso of usos) {
await Uso.create({
uso
})
.catch(() => {
bar.stop();
throw new Error();
});
bar.increment();
};
}
module.exports = fillUso;
+100
View File
@@ -0,0 +1,100 @@
[
"Lic. María Claudia Otake González",
"Mtro. José Luis Castañón Zurita",
"Lic. Fernando Israel González Trejo",
"Dra. Lucía Elena Acosta Ugalde",
"Lic. Gloria Isabel Moctezuma Nájera",
"Lic. Verónica Puma Galicia",
"Ing. Carlos Rojas Gutiérrez",
"Mtra. Laura Angélica Chávez Tovar",
"Ing. Gabriel Alejandro López Campos",
"Lic. Alberto Guerrero Meneses",
"Mtro. Christian Roberto Salazar Montiel",
"Dr. Felipe Cruz Díaz",
"Mtro. Fernando Martínez Ramírez",
"Dra. Ericka Judith Arias Guzmán",
"NO HAY",
"Profa. Yuritzia Navarrete Avila",
"Lic. Cynthia Maricela Uribe Pacheco",
"Lic. Gloria Elena Araiza Ledezma",
"Prof. Carlos Gerardo Cabrera Lerma",
"Lic. José Ángel Hernández Rivera",
"Ing. Carlos Arce León",
"Prof. Emmanuel Castañeda Pérez",
"Mtra. Heidy Jojana Oliva Tello",
"Lic. Eva Ocaña Islas",
"Mtro. Juan José Sanabria López",
"Mtra. Nancy Lara Hernández",
"Mtro. Adrián Luis Maldonado González",
"Lic. José Antonio González Santos",
"Lic. Adriana Zúñiga Pérez",
"No es Adscripción",
"Lic. Leticia Juárez Ortega",
"Lic. María Patricia Javier Pérez",
"Dra. Rosa Martha Gutiérrez Rodríguez",
"Lic. Miguel Ángel De La Calleja López",
"Prof. David Rey Ávila",
"Arq. Miguel Ángel Guevara Reyes",
"Dra. Graciela Carrazco López",
"C. Marfides Oralia Godoy Cortés",
"Lic. Edna Cristina Gutiérrez López",
"Lic. Omar Alberto González Contreras",
"Lic. José Alberto Bravo Hernández",
"Lic. Fabiola Virginia Lara Treviño",
"Lic. Jesús Jiménez Cruz",
"Lic. José Roberto Bautista Mora",
"Mtro. Gilberto González Pérez",
"Mtra. María Guadalupe Durán Pérez",
"Lic. Sandra Trejo Legorreta",
"D. G. Hugo Enrique García Ruiz",
"Mtra. Adriana Roque Del Angel",
"NO HAY",
"Lic. Juan Carlos Ramírez Martínez",
"Lic. Araceli Perez Palma",
"C. Francisco Gutiérrez Pérez",
"Lic. Anabel Moreno Baltazar",
"Arq. Erick Eduardo Casas Gutiérrez",
"Lic. Jesús Cervantes Arias",
"Ing. Leydi Rubí Pérez Vera",
"D. G. Laura Gutiérrez Ochoa",
"Lic. Gerardo Gabriel Mares Velasco",
"Lic. César Gómez Gómez",
"Lic. Erasmo González Castro",
"Lic. Jorge Reyes Caldera Arroyo",
"Dra. Claudia Márquez Díaz",
"Mtro. Rubén Juárez Santana",
"Mtra. María Luisa Morales Martínez",
"Act. Luz María Lavín Alanís",
"Lic. Aída Villalobos Sosa",
"Mtra. Marisela Rodríguez Pacheco",
"Act. Mahil Herrera Maldonado",
"Arq. Marcial Álvarez Salgado",
"Lic. Ariadna Uribe Ortiz",
"Mtra. Lidia Chávez Fonseca",
"Mtro. Esteban Piña Pérez",
"Lic. Jorge Villegas Hernández",
"Mtra. Xóchitl Adriana Hernández Martínez",
"Mtro. Ernesto de Icaza Villalpando",
"Ing. Omar Ulises Morales Dávila",
"Lic. Christian Carlos Delgado Elizondo",
"Mtra. María de Jesús Solís Solís",
"Lic. María Elena González Lupercio",
"Lic. María Guadalupe Alonso Quintana",
"Mtro. José Luis Castañón Zurita",
"Mtro. Carlos Nandayapa Hernández",
"Dr. Alejandro Byrd Orozco",
"Dr. David Morales González",
"Dra. Laura Páez Díaz de León",
"Mtra. Nora Del Consuelo Goris Mayans",
"Médico Lorena Hortensia Vázquez Bustos",
"Ing. Hugo César González Ramírez",
"Prof. Aarón Juárez Chávez",
"Lic. Roberto Carlos Castro Azcué",
"Lic. Yareth Perez Salgado",
"Lic. Samuel Ornelas Rosales",
"NO HAY",
"C. Carlos Armando Rosas Cruz",
"Profa. Norma Guadalupe Rojas Borja",
"Lic. José Gerardo Pérez Aguilar",
"Lic. Sara Luz Alvarado Aranda"
]
+3
View File
@@ -0,0 +1,3 @@
[
"Aula 1"
]
+100
View File
@@ -0,0 +1,100 @@
[
"ÁREA DE CURSOS",
"AREA DE SERVICIOS DE COMPUTO DE LA SECRETARIA ADMINISTRATIVA",
"CENTRO DE DESARROLLO TECNOLOGICO",
"CENTRO DE DIFUSION CULTURAL",
"CENTRO DE EDUCACION CONTINUA",
"CENTRO DE ENSEñANZA DE IDIOMAS",
"CENTRO DE ESTUDIOS MUNICIPALES Y METROPOLITANOS",
"CENTRO TECNOLÓGICO PARA LA EDUCACION A DISTANCIA, CETED",
"COORDINACION DE ACTIVIDADES DEPORTIVAS Y RECREATIVAS",
"COORDINACION DE COMUNICACION SOCIAL",
"COORDINACIÓN DE GESTIÓN DE LA DIRECCIÓN",
"COORDINACIÓN DE INVESTIGACIÓN MULTIDISCIPLINARIA",
"COORDINACIÓN DE SERVICIOS ACADEMICOS",
"COORDINACION DE ESTUDIOS DE POSGRADO",
"DEPARTAMENTO DE HEMEROTECA Y DOCUMENTACION",
"DEPARTAMENTO DE ACTIVIDADES CULTURALES Y DIFUSIÓN",
"DEPARTAMENTO DE ADQUISICIONES",
"DEPARTAMENTO DE ADQUISICIONES BIBLIOGRAFICAS Y PROCESOS TECNICOS",
"DEPARTAMENTO DE ALEMAN, GRIEGO Y RUSO",
"DEPARTAMENTO DE ALMACENES E INVENTARIOS",
"DEPARTAMENTO DE ANALISIS DE RIESGOS NATURALES Y ANTROPOENICOS (UIM)",
"DEPARTAMENTO DE APOYO TECNICO AL CENTRO CULTURAL",
"DEPARTAMENTO DE CONSULTA",
"DEPARTAMENTO DE ESPAÑOL PARA EXT. Y LENGUAS NO INDOEUROPEAS",
"DEPARTAMENTO DE ESTUDIOS DE GOBIERNO Y POLÍTICAS PÚBLICAS",
"DEPARTAMENTO DE ESTUDIOS DE PROCURACION DE JUSTICIA Y SEGURIDAD PUBLICA",
"DEPARTAMENTO DE EXTENSION CULTURAL",
"DEPARTAMENTO DE FORMACION DOCENTE Y SUPERACION ACADEMICA",
"DEPARTAMENTO DE FRANCES",
"DEPARTAMENTO DE IMAGEN CORPORATIVA E INSTITUCIONAL",
"DEPARTAMENTO DE INGLÉS",
"DEPARTAMENTO DE INTENDENCIA",
"DEPARTAMENTO DE INVESTIGACION EDUCATIVA",
"DEPARTAMENTO DE DESARROLLO E INVESTIGACIÓN EN COMUNICACIÓN Y ESTUDIOS CULTURALES",
"DEPARTAMENTO DE ITALIANO Y LATÍN",
"DEPARTAMENTO DE OBRA CIVIL Y PROYECTOS",
"DEPARTAMENTO DE ORIENTACION EDUCATIVA",
"DEPARTAMENTO DE PERSONAL",
"DEPARTAMENTO DE PORTUGUES",
"DEPARTAMENTO DE PRESUPUESTO",
"DEPARTAMENTO DE PROMOCION Y ORGANIZACION DEPORTIVA",
"DEPARTAMENTO DE DESARROLLO EMPRESARIAL E INTERCAMBIO Y COLABORACION",
"DEPARTAMENTO DE PROYECTOS ADMINISTRATIVOS",
"DEPARTAMENTO DE REDES Y SOPORTE TÉCNICO (CEDETEC)",
"DEPARTAMENTO DE REGISTRO Y CERTIFICACION DE LA DIVISION S. U. A.",
"DEPARTAMENTO DE REGISTRO Y CERTIFICACION DE POSGRADO",
"DEPARTAMENTO DE REGISTRO Y CERTIFICACION DEL C.E.I.",
"DEPARTAMENTO DE REPRODUCCIONES GRAFICAS",
"DEPARTAMENTO DE SERVICIO SOCIAL Y BOLSA DE TRABAJO",
"DEPARTAMENTO DE SERVICIOS AL PUBLICO (CID)",
"DEPARTAMENTO DE SERVICIOS AUDIOVISUALES",
"DEPARTAMENTO DE SERVICIOS DE COMPUTO",
"DEPARTAMENTO DE SERVICIOS GENERALES DE MANTENIMIENTO",
"DEPARTAMENTO DE SISTEMAS DE INFORMACIÓN",
"DEPARTAMENTO DE SUPERVISION TECNICA",
"DEPARTAMENTO DE TALLERES Y LABORATORIOS",
"DEPARTAMENTO DE TECNOLOGIA AMBIENTAL (UIM)",
"DEPARTAMENTO DE TIPOGRAFIA Y DISEÑO",
"DEPARTAMENTO DE TITULOS PROFESIONALES Y CERTIFICACION",
"DEPARTAMENTO DE TRANSPORTES Y SERVICIOS DE APOYO",
"DEPARTAMENTO DE VIGILANCIA",
"DIVISION DE CIENCIAS JURIDICAS",
"DIVISION DE CIENCIAS SOCIOECONOMICAS",
"DIVISION DE DISEÑO Y EDIFICACION",
"DIVISION DE HUMANIDADES",
"DIVISIÓN DE MATEMÁTICAS E INGENIERÍA",
"DIVISION DEL SISTEMA DE UNIVERSIDAD ABIERTA Y EDUCACIÓN A A DISTANCIA",
"LIBRERIA UNIVERSITARIA DE LA FES ACATLAN",
"PROGRAMA DE ACTUARIA",
"PROGRAMA DE ARQUITECTURA",
"PROGRAMA DE COMUNICACIÓN",
"PROGRAMA DE DERECHO",
"PROGRAMA DE DISEÑO GRAFICO",
"PROGRAMA DE ECONOMIA",
"PROGRAMA DE ENSEÑANZA DEL INGLES",
"PROGRAMA DE HUMANIDADES",
"PROGRAMA DE INGENIERIA CIVIL",
"PROGRAMA DE MATEMATICAS APLICADAS Y COMPUTACION",
"PROGRAMA DE PEDAGOGIA",
"PROGRAMA DE SOCIOLOGIA",
"PROGRAMA POLITICO",
"SECRETARÍA ADMINISTRATIVA",
"SECRETARÍA DE ESTUDIOS PROFESIONALES",
"SECRETARÍA DE EXTENSION UNIVERSITARIA Y VINCULACIÓN INSTITUCIONAL",
"SECRETARÍA DE LA DIRECCIÓN",
"SECRETARÍA DE POSGRADO E INVESTIGACIÓN",
"SECRETARIA GENERAL",
"SERVICIO MEDICO",
"SUPERINTENDENCIA DE OBRAS Y MANTENIMIENTO",
"UNIDAD DE ADMINISTRACION ESCOLAR",
"UNIDAD DE ADMINISTRACION Y RECURSOS",
"UNIDAD DE LA OFICINA JURIDICA",
"UNIDAD DE PLANEACION",
"UNIDAD DE PROCESO (U.P.A.)",
"UNIDAD DE SERVICIOS A LA COMUNIDAD",
"UNIDAD DE SERVICIOS EDITORIALES",
"UNIDAD DE TALLERES, LABORATORIOS Y AUDIOVISUALES",
"UNIDAD DEL CENTRO DE INFORMACIÓN Y DOCUMENTACIÓN"
]
+1
View File
@@ -0,0 +1 @@
["Analista","Estratega","Especialista","Product Owner","Asistente","Gerente"]
+356 -46
View File
@@ -22,8 +22,12 @@
"@types/color-name": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
"integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
"dev": true
"integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ=="
},
"@types/geojson": {
"version": "7946.0.7",
"resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.7.tgz",
"integrity": "sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ=="
},
"@types/node": {
"version": "14.0.27",
@@ -44,6 +48,15 @@
"negotiator": "0.6.2"
}
},
"adler-32": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz",
"integrity": "sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=",
"requires": {
"exit-on-epipe": "~1.0.1",
"printj": "~1.1.0"
}
},
"ansi-align": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz",
@@ -96,7 +109,6 @@
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
"integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
"dev": true,
"requires": {
"@types/color-name": "^1.1.1",
"color-convert": "^2.0.1"
@@ -272,6 +284,19 @@
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
"integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
},
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
},
"busboy": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz",
"integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==",
"requires": {
"dicer": "0.3.0"
}
},
"bytes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
@@ -293,9 +318,9 @@
},
"dependencies": {
"get-stream": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
"integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
"integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
"dev": true,
"requires": {
"pump": "^3.0.0"
@@ -324,6 +349,16 @@
"redeyed": "~2.1.0"
}
},
"cfb": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.0.tgz",
"integrity": "sha512-sXMvHsKCICVR3Naq+J556K+ExBo9n50iKl6LGarlnvuA2035uMlGA/qVrc0wQtow5P1vJEw9UyrKLCbtIKz+TQ==",
"requires": {
"adler-32": "~1.2.0",
"crc-32": "~1.2.0",
"printj": "~1.1.2"
}
},
"chalk": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
@@ -341,9 +376,9 @@
"dev": true
},
"supports-color": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
"integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
@@ -352,9 +387,9 @@
}
},
"chokidar": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz",
"integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==",
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz",
"integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==",
"dev": true,
"requires": {
"anymatch": "~3.1.1",
@@ -364,7 +399,7 @@
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.4.0"
"readdirp": "~3.5.0"
}
},
"chownr": {
@@ -379,11 +414,61 @@
"dev": true
},
"cli-boxes": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz",
"integrity": "sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==",
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
"integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
"dev": true
},
"cli-progress": {
"version": "3.8.2",
"resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.8.2.tgz",
"integrity": "sha512-qRwBxLldMSfxB+YGFgNRaj5vyyHe1yMpVeDL79c+7puGujdKJHQHydgqXDcrkvQgJ5U/d3lpf6vffSoVVUftVQ==",
"dev": true,
"requires": {
"colors": "^1.1.2",
"string-width": "^4.2.0"
},
"dependencies": {
"ansi-regex": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
"dev": true
},
"emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
"is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true
},
"string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
"dev": true,
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.0"
}
},
"strip-ansi": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
"dev": true,
"requires": {
"ansi-regex": "^5.0.0"
}
}
}
},
"clone-response": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
@@ -398,11 +483,26 @@
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
},
"codepage": {
"version": "1.14.0",
"resolved": "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz",
"integrity": "sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k=",
"requires": {
"commander": "~2.14.1",
"exit-on-epipe": "~1.0.1"
},
"dependencies": {
"commander": {
"version": "2.14.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz",
"integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw=="
}
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
@@ -410,8 +510,17 @@
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"colors": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
"integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
},
"commander": {
"version": "2.17.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
"integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
},
"concat-map": {
"version": "0.0.1",
@@ -474,6 +583,15 @@
"vary": "^1"
}
},
"crc-32": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz",
"integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==",
"requires": {
"exit-on-epipe": "~1.0.1",
"printj": "~1.1.0"
}
},
"crypto-random-string": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
@@ -533,10 +651,18 @@
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
"integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
},
"dicer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz",
"integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==",
"requires": {
"streamsearch": "0.1.2"
}
},
"dot-prop": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz",
"integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==",
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
"integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
"dev": true,
"requires": {
"is-obj": "^2.0.0"
@@ -612,6 +738,11 @@
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
},
"exit-on-epipe": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
"integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw=="
},
"express": {
"version": "4.17.1",
"resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
@@ -664,6 +795,20 @@
}
}
},
"express-fileupload": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/express-fileupload/-/express-fileupload-1.2.0.tgz",
"integrity": "sha512-oe4WpKcSppXnl5peornawWUa6tKmIc1/kJxMNRGJR1A0v4zyLL6VsFR6wZ8P2a4Iq3aGx8xae3Vlr+MOMQhFPw==",
"requires": {
"busboy": "^0.3.1"
}
},
"faker": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/faker/-/faker-5.1.0.tgz",
"integrity": "sha512-RrWKFSSA/aNLP0g3o2WW1Zez7/MnMr7xkiZmoCfAGZmdkDQZ6l2KtuXHN5XjdvpRjDl8+3vf+Rrtl06Z352+Mw==",
"dev": true
},
"fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
@@ -707,6 +852,11 @@
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
"integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
},
"frac": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz",
"integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
},
"fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
@@ -755,6 +905,12 @@
"is-property": "^1.0.2"
}
},
"generate-password": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/generate-password/-/generate-password-1.5.1.tgz",
"integrity": "sha512-XdsyfiF4mKoOEuzA44w9jSNav50zOurdWOV3V8DbA7SJIxR3Xm9ob14HKYTnMQOPX3ylqiJMnQF0wEa8gXZIMw==",
"dev": true
},
"get-stream": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
@@ -795,6 +951,16 @@
"ini": "^1.3.5"
}
},
"gmail-send": {
"version": "1.8.10",
"resolved": "https://registry.npmjs.org/gmail-send/-/gmail-send-1.8.10.tgz",
"integrity": "sha512-QMpWwzeA64U69HzOEzI37UNc73xXkhTg8LuqsfKX9W7LjiQY3yRvViVn7ZhuJWLTV4136vsLJf2sXiZKmdykbw==",
"dev": true,
"requires": {
"lodash": "^4.17.15",
"nodemailer": "^6.3.0"
}
},
"got": {
"version": "9.6.0",
"resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
@@ -817,8 +983,7 @@
"graceful-fs": {
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
"dev": true
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
},
"has-flag": {
"version": "3.0.0",
@@ -893,8 +1058,7 @@
"imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
"dev": true
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
},
"inflection": {
"version": "1.12.0",
@@ -1122,6 +1286,38 @@
"resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
"integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
},
"log-symbols": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz",
"integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==",
"requires": {
"chalk": "^4.0.0"
},
"dependencies": {
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
},
"supports-color": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
"integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"long": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
@@ -1158,6 +1354,35 @@
}
}
},
"mariadb": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/mariadb/-/mariadb-2.4.2.tgz",
"integrity": "sha512-ybK520CO/8Z74MNJ77dEwXjRMhxMbQdpPia+/uJakJWiZoLEmuwSHqs51qWr4FE5WcgHQfL5KCmOiHErR/LpTg==",
"requires": {
"@types/geojson": "^7946.0.7",
"@types/node": "^13.9.8",
"denque": "^1.4.1",
"iconv-lite": "^0.5.1",
"long": "^4.0.0",
"moment-timezone": "^0.5.31",
"please-upgrade-node": "^3.2.0"
},
"dependencies": {
"@types/node": {
"version": "13.13.15",
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.15.tgz",
"integrity": "sha512-kwbcs0jySLxzLsa2nWUAGOd/s21WU1jebrEdtzhsj1D4Yps1EOuyI1Qcu+FD56dL7NRNIJtDDjcqIG22NwkgLw=="
},
"iconv-lite": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz",
"integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
}
}
},
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -1323,6 +1548,26 @@
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.0.0.tgz",
"integrity": "sha512-sSHCgWfJ+Lui/u+0msF3oyCgvdkhxDbkCS6Q8uiJquzOimkJBvX6hl5aSSA7DR1XbMpdM8r7phjcF63sF4rkKg=="
},
"node-localstorage": {
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-2.1.6.tgz",
"integrity": "sha512-yE7AycE5G2hU55d+F7Ona9nx97C+enJzWWx6jrsji7fuPZFJOvuW3X/LKKAcXRBcEIJPDOKt8ZiFWFmShR/irg==",
"requires": {
"write-file-atomic": "^1.1.4"
},
"dependencies": {
"write-file-atomic": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz",
"integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=",
"requires": {
"graceful-fs": "^4.1.11",
"imurmurhash": "^0.1.4",
"slide": "^1.1.5"
}
}
}
},
"node-pre-gyp": {
"version": "0.15.0",
"resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.15.0.tgz",
@@ -1340,10 +1585,25 @@
"tar": "^4.4.2"
}
},
"node-xlsx": {
"version": "0.15.0",
"resolved": "https://registry.npmjs.org/node-xlsx/-/node-xlsx-0.15.0.tgz",
"integrity": "sha512-rQyhWDJ/k60wQemov7a8MlToastWTidrAVFRwTWV+s53LN/SRwU4lnmc5xuFXx/ay+uaLAsAQBp6BkVob5OjOA==",
"requires": {
"buffer-from": "^1.1.0",
"xlsx": "^0.14.1"
}
},
"nodemailer": {
"version": "6.4.11",
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.4.11.tgz",
"integrity": "sha512-BVZBDi+aJV4O38rxsUh164Dk1NCqgh6Cm0rQSb9SK/DHGll/DrCMnycVDD7msJgZCnmVa8ASo8EZzR7jsgTukQ==",
"dev": true
},
"nodemon": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.4.tgz",
"integrity": "sha512-Ltced+hIfTmaS28Zjv1BM552oQ3dbwPqI4+zI0SLgq+wpJhSyqgYude/aZa/3i31VCQWMfXJVxvu86abcam3uQ==",
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.6.tgz",
"integrity": "sha512-4I3YDSKXg6ltYpcnZeHompqac4E6JeAMpGm8tJnB9Y3T0ehasLa4139dJOcCrB93HHrUMsCrKtoAlXTqT5n4AQ==",
"dev": true,
"requires": {
"chokidar": "^3.2.2",
@@ -1354,8 +1614,8 @@
"semver": "^5.7.1",
"supports-color": "^5.5.0",
"touch": "^3.1.0",
"undefsafe": "^2.0.2",
"update-notifier": "^4.0.0"
"undefsafe": "^2.0.3",
"update-notifier": "^4.1.0"
}
},
"nopt": {
@@ -1505,12 +1765,25 @@
"integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
"dev": true
},
"please-upgrade-node": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
"integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
"requires": {
"semver-compare": "^1.0.0"
}
},
"prepend-http": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
"integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
"dev": true
},
"printj": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
"integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ=="
},
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@@ -1547,9 +1820,9 @@
}
},
"pupa": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz",
"integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==",
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz",
"integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==",
"dev": true,
"requires": {
"escape-goat": "^2.0.0"
@@ -1602,9 +1875,9 @@
}
},
"readdirp": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz",
"integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==",
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
"integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
"dev": true,
"requires": {
"picomatch": "^2.2.1"
@@ -1619,9 +1892,9 @@
}
},
"registry-auth-token": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz",
"integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz",
"integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==",
"dev": true,
"requires": {
"rc": "^1.2.8"
@@ -1681,6 +1954,11 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
},
"semver-compare": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
"integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w="
},
"semver-diff": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz",
@@ -1811,16 +2089,34 @@
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
"integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
},
"slide": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz",
"integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc="
},
"sqlstring": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.2.tgz",
"integrity": "sha512-vF4ZbYdKS8OnoJAWBmMxCQDkiEBkGQYU7UZPtL8flbDRSNkhaXvRJ279ZtI6M+zDaQovVU4tuRgzK5fVhvFAhg=="
},
"ssf": {
"version": "0.10.3",
"resolved": "https://registry.npmjs.org/ssf/-/ssf-0.10.3.tgz",
"integrity": "sha512-pRuUdW0WwyB2doSqqjWyzwCD6PkfxpHAHdZp39K3dp/Hq7f+xfMwNAWIi16DyrRg4gg9c/RvLYkJTSawTPTm1w==",
"requires": {
"frac": "~1.1.2"
}
},
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
},
"streamsearch": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
"integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
},
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
@@ -1876,9 +2172,9 @@
}
},
"term-size": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz",
"integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==",
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz",
"integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==",
"dev": true
},
"to-readable-stream": {
@@ -1991,9 +2287,9 @@
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
},
"update-notifier": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.0.tgz",
"integrity": "sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew==",
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz",
"integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==",
"dev": true,
"requires": {
"boxen": "^4.2.0",
@@ -2133,6 +2429,20 @@
"integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
"dev": true
},
"xlsx": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.14.5.tgz",
"integrity": "sha512-s/5f4/mjeWREmIWZ+HtDfh/rnz51ar+dZ4LWKZU3u9VBx2zLdSIWTdXgoa52/pnZ9Oe/Vu1W1qzcKzLVe+lq4w==",
"requires": {
"adler-32": "~1.2.0",
"cfb": "^1.1.2",
"codepage": "~1.14.0",
"commander": "~2.17.1",
"crc-32": "~1.2.0",
"exit-on-epipe": "~1.0.1",
"ssf": "~0.10.2"
}
},
"yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+36 -22
View File
@@ -1,24 +1,38 @@
{
"name": "censo2020back",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"bcrypt": "^5.0.0",
"cors": "^2.8.5",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"jsonwebtoken": "^8.5.1",
"moment": "^2.27.0",
"mysql2": "^2.1.0",
"sequelize": "^6.3.4"
},
"devDependencies": {
"nodemon": "^2.0.4"
}
"name": "censo2020back",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"test:db": "node server/config/test",
"install:db": "node server/models/install",
"sendemail": "node helpers/sendEmail",
"fillDB": "node helpers/fillDB"
},
"author": "",
"license": "ISC",
"dependencies": {
"bcrypt": "^5.0.0",
"colors": "^1.4.0",
"cors": "^2.8.5",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"express-fileupload": "^1.2.0",
"jsonwebtoken": "^8.5.1",
"log-symbols": "^4.0.0",
"mariadb": "^2.4.2",
"moment": "^2.27.0",
"mysql2": "^2.1.0",
"node-localstorage": "^2.1.6",
"node-xlsx": "^0.15.0",
"sequelize": "^6.3.4"
},
"devDependencies": {
"cli-progress": "^3.8.2",
"faker": "^5.1.0",
"generate-password": "^1.5.1",
"gmail-send": "^1.8.10",
"nodemon": "^2.0.6"
}
}
+1
View File
@@ -0,0 +1 @@
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7ImlkQWRtaW4iOjIsIm5hbWUiOiJiaWxsaWUiLCJ1c2VyTmFtZSI6IkJpbGxpZSIsInBhc3N3b3JkIjoiJDJiJDEwJGhGdXF0OW82NXNHREpxNkl3OTVicU9JQmUuZjZ1Z2d0SGVWQ0ZTNFFOc1ovWUtQT0R1d1pxIiwiaXNBZG1pbiI6ZmFsc2UsImNyZWF0ZWRBdCI6IjIwMjAtMDktMTFUMjE6MjY6MzUuMDAwWiIsInVwZGF0ZWRBdCI6IjIwMjAtMDktMTFUMjE6MjY6MzUuMDAwWiJ9LCJpYXQiOjE2MDAxMjIwODMsImV4cCI6MTYwMDIwODQ4M30.XO3aUWGUxtV7R7ESEy4VNeukPEeQ1UFR9SVAp89KWWo
+4 -4
View File
@@ -6,17 +6,17 @@ let app = express();
let config = require("./config/config.js");
app.use(cors());
app.get("/", function (req, res) {
res.send("Servicio activo");
app.get("/", function(req, res) {
res.send("Servicio activo");
});
app.use(bodyParser.urlencoded({ extended: false }));
app.use(
bodyParser.json()
bodyParser.json()
);
app.use(require('./routes/index'))
app.listen(process.env.PORT, function () {
app.listen(process.env.PORT, function() {
console.log(`Censo 2020 corriendo en puerto ${process.env.PORT}`)
});
+1 -1
View File
@@ -12,7 +12,7 @@ try {
}
process.env.TYPE_DB = process.env.TYPE_DB || 'mariadb'
process.env.DB = process.env.DB || 'ejem'
process.env.DB = process.env.DB || 'ejemplo'
process.env.USER_DB = process.env.USER_DB || 'root'
process.env.PASSWORD_DB = process.env.PASSWORD_DB || ''
process.env.HOST_DB = process.env.HOST_DB || 'localhost'
+21
View File
@@ -0,0 +1,21 @@
const Sequelize = require("sequelize");
require("./config");
const sequelize = new Sequelize(
process.env.DB,
process.env.USERDB,
process.env.PASSDB, {
host: process.env.HOSTDB,
dialect: process.env.TYPEDB,
logging: false,
dialectOptions: {
useUTC: false, //for reading from database
timezone: "Etc/GMT+5" //for writing to database
},
// timezone: "-05:00" //for writing to database
timezone: "Etc/GMT+5" //for writing to database
}
);
module.exports = sequelize;
+15
View File
@@ -0,0 +1,15 @@
const Sequelize = require("sequelize");
const sequelize = require("./sequelize.conf");
const colors = require("colors");
sequelize
.authenticate()
.then(() => {
console.log("Conexion establecida con exito.".green);
process.exit();
})
.catch(err => {
console.error("No se ha podido establacer conexion con la base de datos:".red, err);
process.exit();
});
+9
View File
@@ -0,0 +1,9 @@
const get = require('./get');
const post = require('./post');
const put = require('./put');
module.exports = {
get,
post,
put
};
+55
View File
@@ -0,0 +1,55 @@
const ActivoFijo = require('../../models/tablas/ActivoFijo');
const Marca = require('../../models/tablas/Marca');
const OS = require('../../models/tablas/OS');
const Ubicacion = require('../../models/tablas/Ubicacion')
const UResponsable = require('../../models/tablas/UResponsable');
const Uso = require('../../models/tablas/Uso');
const get = async(req, res) => {
let activosFijos = await ActivoFijo.findAll({
attributes: ['idActivoFijo', 'activoFijo'],
order: ['idActivoFijo']
})
.catch((e) => { throw new Error(e) });
let marcas = await Marca.findAll({
attributes: ['idMarca', 'marca'],
order: ['idMarca']
})
.catch((e) => { throw new Error(e) });
let distros = await OS.findAll({
attributes: ['idOS', 'osname'],
order: ['idOS']
})
.catch((e) => { throw new Error(e) });
let ubicaciones = await Ubicacion.findAll({
attributes: ['idUbicacion', 'ubicacion'],
order: ['idUbicacion']
})
.catch((e) => { throw new Error(e) });
let unidades = await UResponsable.findAll({
attributes: ['idUnidadResponsable', 'uResponsable'],
order: ['idUnidadResponsable']
})
.catch((e) => { throw new Error(e) });
let usos = await Uso.findAll({
attributes: ['idUso', 'uso'],
order: ['idUso']
})
.catch((e) => { throw new Error(e) });
return res.json({
activosFijos,
marcas,
distros,
ubicaciones,
unidades,
usos
})
};
module.exports = get;
+69
View File
@@ -0,0 +1,69 @@
const Equipo = require('../../models/tablas/Equipo');
const Inventario = require('../../models/tablas/Inventario');
const post = async(req, res) => {
const modelo = req.body.modelo;
const idMarca = req.body.idMarca;
const noSerie = req.body.noSerie;
const idOS = req.body.idOS;
const procesador = req.body.procesador;
const vProcesador = req.body.vProcesador;
const memoria = req.body.memoria;
const memoriasz = req.body.memoriasz;
const vMemoria = req.body.vMemoria;
const graficos = req.body.graficos;
const hdd = req.body.hdd;
const noInventario = req.body.noInventario;
const idActivoFijo = req.body.idActivoFijo;
const noResguardo = req.body.noResguardo;
const idUnidadResponsable = req.body.idUnidadResponsable;
const idUbicacion = req.body.idUbicacion;
const idUso = req.body.idUso;
let err = '';
await Inventario.create({
noInventario,
idActivoFijo,
noResguardo,
idUnidadResponsable,
idUbicacion,
idUso
})
.then()
.catch((e) => err = e);
await Equipo.create({
modelo,
noSerie,
procesador,
vProcesador,
memoria,
memoriasz,
vMemoria,
graficos,
hdd,
noInventario,
idMarca,
idOS,
idActivoFijo
})
.then(() => res.json({
ok: true,
message: 'Equipo agregado en inventario con éxito.'
}))
.catch(async(e) => {
await Inventario.destroy({
where: {
noInventario
}
});
res.status(500).json({
ok: false,
error: [e, err],
message: 'Equipo'
})
});
};
module.exports = post;
View File
@@ -0,0 +1,7 @@
const get = require('./get');
const post = require('./post');
module.exports = {
get,
post
};
+47
View File
@@ -0,0 +1,47 @@
const Tipo = require('../../models/tablas/Tipo');
const Marca = require('../../models/tablas/Marca');
const Ubicacion = require('../../models/tablas/Ubicacion');
const Uso = require('../../models/tablas/Uso');
const UResponsable = require('../../models/tablas/UResponsable');
const get = async(req, res) => {
const marcas = await Marca.findAll({
attributes: ['idMarca', 'marca'],
order: ['idMarca']
})
.catch((e) => { throw new Error(e) });
const unidades = await UResponsable.findAll({
attributes: ['idUnidadResponsable', 'uResponsable'],
order: ['idUnidadResponsable']
})
.catch((e) => { throw new Error(e) });
const ubicaciones = await Ubicacion.findAll({
attributes: ['idUbicacion', 'ubicacion'],
order: ['idUbicacion']
})
.catch((e) => { throw new Error(e) });
const usos = await Uso.findAll({
attributes: ['idUso', 'uso'],
order: ['idUso']
})
.catch((e) => { throw new Error(e) });
const tipos = await Tipo.findAll({
attributes: ['idTipo', 'tipo'],
order: ['idTipo']
})
.catch((e) => { throw new Error(e) });
return res.json({
unidades,
ubicaciones,
marcas,
usos,
tipos
});
};
module.exports = get;
+49
View File
@@ -0,0 +1,49 @@
const Printers = require('../../models/tablas/Printers');
const Inventario = require('../../models/tablas/Inventario');
const post = async(req, res) => {
const idActivoFijo = 6;
const noSerie = req.body.noSerie;
const noInventario = req.body.noInventario;
const modelo = req.body.modelo;
const idMarca = req.body.idMarca;
const idTipo = req.body.idTipo;
const descripcion = req.body.descripcion;
const noResguardo = req.body.noResguardo;
const idUnidadResponsable = req.body.idUnidadResponsable;
const idUbicacion = req.body.idUbicacion;
const idUso = req.body.idUso;
await Inventario.create({
noInventario,
noResguardo,
idActivoFijo,
idUnidadResponsable,
idUbicacion,
idUso
})
.catch((e) => res.json({
ok: false,
error: e
}));
await Printers.create({
noSerie,
noInventario,
modelo,
idActivoFijo,
idMarca,
idTipo,
descripcion
})
.then(() => res.json({
ok: true,
message: 'Impresora agregada en inventario con éxito.'
}))
.catch((e) => res.json({
ok: false,
error: e
}));
};
module.exports = post;
+25
View File
@@ -0,0 +1,25 @@
const sequelize = require('../../config/sequelize.conf');
const { QueryTypes } = require('sequelize');
const procesador = async(req, res) => {
// res.json({
// message: "Listo"
// });
await sequelize.query(`
SELECT DISTINCT procesador procesa
FROM equipo`, { type: QueryTypes.SELECT })
.then(procesador => {
return res.json({
procesador
})
})
.catch(error => res.status(500).json({
error
}));
}
module.exports = procesador;
+25
View File
@@ -0,0 +1,25 @@
const sequelize = require('../../config/sequelize.conf');
const { QueryTypes } = require('sequelize');
const sisoper = async(req, res) => {
// res.json({
// message: "Listo"
// });
await sequelize.query(`
SELECT idOS, osname
FROM os`, { type: QueryTypes.SELECT })
.then(sisoper => {
return res.json({
sisoper
})
})
.catch(error => res.status(500).json({
error
}));
}
module.exports = sisoper;
+25
View File
@@ -0,0 +1,25 @@
const sequelize = require('../../config/sequelize.conf');
const { QueryTypes } = require('sequelize');
const tipo = async(req, res) => {
// res.json({
// message: "Listo"
// });
await sequelize.query(`
SELECT idActivoFijo, activoFijo
FROM activoFijo WHERE activoFijo <> "Impresora"`, { type: QueryTypes.SELECT })
.then(tipo => {
return res.json({
tipo
})
})
.catch(error => res.status(500).json({
error
}));
}
module.exports = tipo;
+25
View File
@@ -0,0 +1,25 @@
const sequelize = require('../../config/sequelize.conf');
const { QueryTypes } = require('sequelize');
const tipoPrinters = async(req, res) => {
// res.json({
// message: "Listo"
// });
await sequelize.query(`
SELECT idTipo, tipo
FROM tipo`, { type: QueryTypes.SELECT })
.then(tipoPrinters => {
return res.json({
tipoPrinters
})
})
.catch(error => res.status(500).json({
error
}));
}
module.exports = tipoPrinters;
+25
View File
@@ -0,0 +1,25 @@
const sequelize = require('../../config/sequelize.conf');
const { QueryTypes } = require('sequelize');
const ubica = async(req, res) => {
// res.json({
// message: "Listo"
// });
await sequelize.query(`
SELECT idUbicacion, ubicacion
FROM ubicacion`, { type: QueryTypes.SELECT })
.then(ubica => {
return res.json({
ubica
})
})
.catch(error => res.status(500).json({
error
}));
}
module.exports = ubica;
+25
View File
@@ -0,0 +1,25 @@
const sequelize = require('../../config/sequelize.conf');
const { QueryTypes } = require('sequelize');
const uso = async(req, res) => {
// res.json({
// message: "Listo"
// });
await sequelize.query(`
SELECT idUso, uso
FROM uso`, { type: QueryTypes.SELECT })
.then(uso => {
return res.json({
uso
})
})
.catch(error => res.status(500).json({
error
}));
}
module.exports = uso;
+52 -5
View File
@@ -1,8 +1,55 @@
const post = async () => {
return {
message: 'Mensaje del post'
}
const Admin = require("../../models/tablas/Admin");
const bcrypt = require("bcrypt");
const jwt = require("jsonwebtoken");
const post = async(req, res) => {
const body = req.body;
await Admin.findOne({
where: {
name: body.name,
},
})
.then((user) => {
if (!bcrypt.compareSync(body.password, user.password)) {
return res.status(500).json({
err: {
message: 'Invalid user or password'
}
})
}
let token = jwt.sign({
user
}, process.env.TOKEN_SEED, { expiresIn: process.env.TOKEN_EXP });
res.json({
user,
token
})
})
.catch(() => {
console.log("Invalid user or password");
return res.status(500).json({
err: {
message: "Invalid user or password"
}
});
});;
// if (typeof localStorage === "undefined" || localStorage === null) {
// var LocalStorage = require('node-localstorage').LocalStorage;
// localStorage = new LocalStorage('./scratch');
// }
// localStorage.setItem('token', token);
}
module.exports = post;
+32
View File
@@ -0,0 +1,32 @@
const Inventario = require('../../models/tablas/Inventario');
const Equipo = require('../../models/tablas/Equipo');
const remove = async(req, res) => {
const noInventario = req.body.noInventario;
await Inventario.destroy({
where: {
noInventario
}
})
.catch(e => res.status(500).json({
ok: false,
err
}));
await Equipo.destroy({
where: {
noInventario
}
})
.then(() => res.json({
ok: true,
message: 'Eliminado con éxito'
}))
.catch(err => res.status(500).json({
ok: false,
err
}));
}
module.exports = remove;
+27
View File
@@ -0,0 +1,27 @@
const sequelize = require('../../config/sequelize.conf');
const { QueryTypes } = require('sequelize');
const get = async(req, res) => {
const noInventario = req.query.noInventario;
await sequelize.query(`
SELECT I.noInventario, E.idActivoFijo, E.modelo, E.idMarca, E.noSerie, E.procesador, E.vProcesador, E.hdd, E.memoriasz, E.memoria, E.vMemoria, E.graficos, E.idOS, I.idUnidadResponsable, I.idUbicacion, I.idUso, I.noResguardo
FROM inventario I, equipo E
WHERE I.noInventario = E.noInventario
AND I.noInventario = :noInventario
`, {
replacements: { noInventario },
type: QueryTypes.SELECT
})
.then(equipo => {
return res.json({
equipo
})
})
.catch(error => res.status(500).json({
error
}));
};
module.exports = get;
+70
View File
@@ -0,0 +1,70 @@
const Inventario = require('../../models/tablas/Inventario');
const Equipo = require('../../models/tablas/Equipo');
const put = async(req, res) => {
const noInventario = req.body.noInventario;
const noInventarioAdd = req.body.noInventarioAdd;
const modelo = req.body.modelo;
const idMarca = req.body.idMarca;
const noSerie = req.body.noSerie;
const idOS = req.body.idOS;
const procesador = req.body.procesador;
const vProcesador = req.body.vProcesador;
const memoria = req.body.memoria;
const memoriasz = req.body.memoriasz;
const vMemoria = req.body.vMemoria;
const graficos = req.body.graficos;
const hdd = req.body.hdd;
const idActivoFijo = req.body.idActivoFijo;
const noResguardo = req.body.noResguardo;
const idUnidadResponsable = req.body.idUnidadResponsable;
const idUbicacion = req.body.idUbicacion;
const idUso = req.body.idUso;
await Inventario.update({
noInventario: noInventarioAdd,
idActivoFijo,
noResguardo,
idUnidadResponsable,
idUbicacion,
idUso
}, {
where: {
noInventario
}
})
.catch((err) => res.status(500).json({
ok: false,
err
}));
await Equipo.update({
modelo,
noSerie,
procesador,
vProcesador,
memoria,
memoriasz,
vMemoria,
graficos,
hdd,
noInventario: noInventarioAdd,
idMarca,
idOS,
idActivoFijo
}, {
where: {
noInventario
}
})
.then(() => res.json({
ok: true,
message: 'Equipo actualizado.'
}))
.catch(err => {
ok: false,
err
});
};
module.exports = put;
@@ -0,0 +1,9 @@
const get = require('./get');
const put = require('./put');
const remove = require('./delete');
module.exports = {
get,
put,
remove
};
+32
View File
@@ -0,0 +1,32 @@
const Inventario = require('../../models/tablas/Inventario');
const Printers = require('../../models/tablas/Printers');
const remove = async(req, res) => {
const noInventario = req.body.noInventario;
await Inventario.destroy({
where: {
noInventario
}
})
.catch(err => res.status(500).json({
ok: false,
err
}));
await Printers.destroy({
where: {
noInventario
}
})
.then(() => res.json({
ok: true,
message: 'Impresora eliminada.'
}))
.catch(err => res.status(500).json({
ok: false,
err
}));
};
module.exports = remove;
+26
View File
@@ -0,0 +1,26 @@
const sequelize = require('../../config/sequelize.conf');
const { QueryTypes } = require('sequelize');
const get = async(req, res) => {
const noInventario = req.query.noInventario;
await sequelize.query(`
SELECT I.noInventario, I.noResguardo, I.idUnidadResponsable, I.idUbicacion, I.idUso, P.idTipo, P.modelo, P.idMarca, P.noSerie, P.descripcion
FROM inventario I, printers P
WHERE I.noInventario = P.noInventario
AND I.noInventario = :noInventario`, {
replacements: { noInventario },
type: QueryTypes.SELECT
})
.then((printer) => {
return res.json({
printer
})
}).catch((err) => res.status(500).json({
ok: false,
err
}));
};
module.exports = get;
+58
View File
@@ -0,0 +1,58 @@
const Inventario = require('../../models/tablas/Inventario');
const Printers = require('../../models/tablas/Printers');
const put = async(req, res) => {
const noInventario = req.body.noInventario;
const noInventarioAdd = req.body.noInventarioAdd;
const idActivoFijo = 6;
const noSerie = req.body.noSerie;
const modelo = req.body.modelo;
const idMarca = req.body.idMarca;
const idTipo = req.body.idTipo;
const descripcion = req.body.descripcion;
const noResguardo = req.body.noResguardo;
const idUnidadResponsable = req.body.idUnidadResponsable;
const idUbicacion = req.body.idUbicacion;
const idUso = req.body.idUso;
await Inventario.update({
noInventario: noInventarioAdd,
idActivoFijo,
noResguardo,
idUnidadResponsable,
idUbicacion,
idUso
}, {
where: {
noInventario
}
})
.catch((err) => res.status(500).json({
ok: 'Inventario',
err
}));
await Printers.update({
noSerie,
noInventario: noInventarioAdd,
modelo,
idActivoFijo,
idMarca,
idTipo,
descripcion
}, {
where: {
noInventario
}
})
.then(() => res.json({
ok: true,
message: 'Impresora actualizada.'
}))
.catch((err) => res.status(500).json({
ok: 'Printer',
err
}));
}
module.exports = put;
@@ -0,0 +1,9 @@
const get = require('./get');
const put = require('./put');
const remove = require('./delete');
module.exports = {
get,
put,
remove
};
+158
View File
@@ -0,0 +1,158 @@
const xlsx = require('node-xlsx');
const UResponsable = require('../../models/tablas/UResponsable');
const Ubicacion = require('../../models/tablas/Ubicacion');
const Uso = require('../../models/tablas/Uso');
const ActivoFijo = require('../../models/tablas/ActivoFijo');
const OS = require('../../models/tablas/OS');
const Marca = require('../../models/tablas/Marca');
const Inventario = require('../../models/tablas/Inventario');
const Equipo = require('../../models/tablas/Equipo');
const post = async(req, res) => {
const file = req.files.equipos;
let equipos = [];
let data = await xlsx.parse(file.tempFilePath);
data = Object.entries(data[0]);
data.shift();
data = data[0][1]
data.shift();
for (row of data) {
if (row[1]) {
var activoFijo = await ActivoFijo.findOne({
where: {
activoFijo: row[1] || 'No declarado'
}
})
.catch((e) => { throw new Error(e); });
}
if (row[3]) {
var marca = await Marca.findOrCreate({
where: {
marca: row[3] || 'No declarado'
}
})
.catch((e) => { throw new Error(e); });
}
if (row[12]) {
var os = await OS.findOrCreate({
where: {
osname: row[12] || 'No declarado'
}
})
.catch((e) => { throw new Error(e); });
}
if (row[14]) {
var uResponsable = await UResponsable.findOne({
where: {
uResponsable: row[14] || 'No declarado'
}
})
.catch((e) => { throw new Error(e); });
}
if (row[16]) {
var ubicacion = await Ubicacion.findOrCreate({
where: {
ubicacion: row[16] || 'No declarado'
}
})
.catch((e) => { throw new Error(e); });
}
if (row[17]) {
var uso = await Uso.findOrCreate({
where: {
uso: row[17] || 'No declarado'
}
})
.catch((e) => { throw new Error(e); });
}
let equipo = {
noInventario: row[0],
idActivoFijo: activoFijo.dataValues.idActivoFijo,
modelo: row[2],
marca: marca[0]['idMarca'],
noSerie: row[4],
procesador: row[5],
vProcesador: row[6],
hdd: row[7],
memoriasz: row[8],
memoria: row[9],
vMemoria: row[10],
graficos: row[11],
osname: os[0]['idOS'],
noResguardo: row[13],
uResponsable: uResponsable.dataValues.idUnidadResponsable,
ubicacion: ubicacion[0]['idUbicacion'],
uso: uso[0]['idUso']
}
equipos.push(equipo);
}
var count = 0;
for (equipo of equipos) {
count++;
await Inventario.create({
noInventario: equipo.noInventario,
noResguardo: equipo.noResguardo,
idActivoFijo: equipo.idActivoFijo,
idUnidadResponsable: equipo.uResponsable,
idUbicacion: equipo.ubicacion,
idUso: equipo.uso
})
.then(async() => {
await Equipo.create({
noInventario: equipo.noInventario,
idActivoFijo: equipo.idActivoFijo,
idMarca: equipo.marca,
idOS: equipo.osname,
modelo: equipo.modelo,
noSerie: equipo.noSerie,
procesador: equipo.procesador,
vProcesador: equipo.vProcesador,
memoria: equipo.memoria,
vMemoria: equipo.vMemoria,
memoriasz: equipo.memoriasz,
graficos: equipo.graficos,
hdd: equipo.hdd
})
.catch(async(err) => {
await Inventario.destroy({
where: {
noInventario: equipo.noInventario
}
});
res.status(500).json({
ok: false,
err
});
throw new Error(e);
})
})
.catch((e) => {
res.status(500).json({
ok: false,
e
});
throw new Error(e);
})
}
res.json({
ok: true,
message: `${ count } records created successfully.`
// equipos
// activoF
})
}
module.exports = post
+128
View File
@@ -0,0 +1,128 @@
const xlsx = require('node-xlsx');
const UResponsable = require('../../models/tablas/UResponsable');
const Ubicacion = require('../../models/tablas/Ubicacion');
const Uso = require('../../models/tablas/Uso');
const Marca = require('../../models/tablas/Marca');
const Tipo = require('../../models/tablas/Tipo');
const Inventario = require('../../models/tablas/Inventario');
const Printers = require('../../models/tablas/Printers');
const post = async(req, res) => {
const file = req.files.printers;
let printers = [];
let data = await xlsx.parse(file.tempFilePath);
data = Object.entries(data[0]);
data.shift();
data = data[0][1]
data.shift();
for (row of data) {
if (row[1]) {
var tipo = await Tipo.findOrCreate({
where: {
tipo: row[1] || 'No declarado'
}
})
.catch((e) => { throw new Error(e); });
}
if (row[3]) {
var marca = await Marca.findOrCreate({
where: {
marca: row[3] || 'No declarado'
}
})
.catch((e) => { throw new Error(e); });
}
if (row[7]) {
var uResponsable = await UResponsable.findOne({
where: {
uResponsable: row[7] || 'No declarado'
}
})
.catch((e) => { throw new Error(e); });
}
if (row[9]) {
var ubicacion = await Ubicacion.findOrCreate({
where: {
ubicacion: row[9] || 'No declarado'
}
})
.catch((e) => { throw new Error(e); });
}
if (row[10]) {
var uso = await Uso.findOrCreate({
where: {
uso: row[10] || 'No declarado'
}
})
.catch((e) => { throw new Error(e); });
}
let printer = {
noInventario: row[0],
idTipo: tipo[0]['idTipo'],
modelo: row[2],
idMarca: marca[0]['idMarca'],
noSerie: row[4],
descripcion: row[5],
idActivoFijo: 6,
noResguardo: row[6],
idUnidadResponsable: uResponsable.dataValues.idUnidadResponsable,
idUbicacion: ubicacion[0]['idUbicacion'],
idUso: uso[0]['idUso']
}
printers.push(printer);
};
let count = 0;
for (printer of printers) {
count++;
await Inventario.create({
noInventario: printer.noInventario,
noResguardo: printer.noResguardo,
idActivoFijo: printer.idActivoFijo,
idUnidadResponsable: printer.idUnidadResponsable,
idUbicacion: printer.idUbicacion,
idUso: printer.idUso
})
.then(async() => {
await Printers.create({
noInventario: printer.noInventario,
idMarca: printer.idMarca,
modelo: printer.modelo,
noSerie: printer.noSerie,
idTipo: printer.idTipo,
descripcion: printer.descripcion,
idActivoFijo: printer.idActivoFijo
})
.catch(async(err) => {
await Inventario.destroy({
where: {
noInventario: printer.noInventario
}
});
return res.status(500).json({
ok: false,
err
})
})
})
.catch((e) => res.status(500).json({
ok: false,
e
}))
}
res.json({
ok: true,
message: `${ count } records created successfully.`
})
}
module.exports = post
+30
View File
@@ -0,0 +1,30 @@
const sequelize = require('../../../config/sequelize.conf');
const { QueryTypes } = require('sequelize');
const get = async(req, res) => {
// res.json({
// message: "Listo"
// });
//console.log(req["tipo"].value);
await sequelize.query(`
SELECT I.noInventario, AF.activoFijo, E.modelo, M.marca, E.noSerie, E.procesador, E.vProcesador, E.hdd, E.memoriasz, E.memoria, E.vMemoria, E.graficos, OS.osname, I.noResguardo, UR.uResponsable, UR.nombreResponsable, Ub.ubicacion, U.uso
FROM inventario I
INNER JOIN activoFijo AF ON AF.idActivoFijo = I.idActivoFijo
INNER JOIN equipo E ON E.noInventario = I.noInventario
INNER JOIN marca M ON M.idMarca = E.idMarca
INNER JOIN OS ON OS.idOS = E.idOS
INNER JOIN uResponsable UR ON UR.idUnidadResponsable = I.idUnidadResponsable
INNER JOIN ubicacion Ub ON Ub.idUbicacion = I.idUbicacion
INNER JOIN uso U ON U.idUso = I.idUso
ORDER BY E.noInventario ASC`, { type: QueryTypes.SELECT })
.then(equipo => res.json({
equipo
}))
.catch(error => res.status(500).json({
error
}));
}
module.exports = get;
+29
View File
@@ -0,0 +1,29 @@
const sequelize = require('../../../config/sequelize.conf');
const { QueryTypes } = require('sequelize');
const get = async(req, res) => {
await sequelize.query(`
SELECT I.noInventario, T.tipo, P.modelo, M.marca, P.noSerie, P. descripcion, I.noResguardo, UR.uResponsable, UR.nombreResponsable, Ub.ubicacion, U.uso
FROM inventario I
INNER JOIN printers P ON P.noInventario = I.noInventario
INNER JOIN marca M ON M.idMarca = P.idMarca
INNER JOIN tipo T ON T.idTipo = P.idTipo
INNER JOIN uResponsable UR ON UR.idUnidadResponsable = I.idUnidadResponsable
INNER JOIN ubicacion Ub ON Ub.idUbicacion = I.idUbicacion
INNER JOIN uso U ON U.idUso = I.idUso
ORDER BY P.noInventario ASC
`, { type: QueryTypes.SELECT })
.then(printers => {
return res.json({
printers
});
})
.catch(error => res.status(500).json({
error
}));
}
module.exports = get;
+40
View File
@@ -0,0 +1,40 @@
const jwt = require('jsonwebtoken');
const verifyToken = (req, res, next) => {
let localToken = req.header('token');
jwt.verify(localToken, process.env.TOKEN_SEED, (err, decoded) => {
if (err) {
return res.status(409).json({
err: {
message: 'Invalid token.',
token: localToken
}
})
}
req.user = decoded.user;
next();
});
}
const verifyAdmin = (req, res, next) => {
let isAdmin = !!req.user.isAdmin;
if (!isAdmin) {
return res.status(401).json({
err: {
message: 'Is not admin.'
}
})
};
next();
}
module.exports = {
verifyToken,
verifyAdmin
};
+22
View File
@@ -0,0 +1,22 @@
const Sequelize = require("sequelize");
const sequelize = require("../../config/sequelize.conf");
class Ubicacion extends Sequelize.Model {}
Ubicacion.init({
idUbicacion: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false,
},
ubicacion: {
type: Sequelize.CHAR,
allowNull: false,
// unique: true
},
}, {
sequelize,
tableName: "ubicacion",
});
module.exports = Ubicacion;
+114
View File
@@ -0,0 +1,114 @@
const logSymbols = require("log-symbols");
const colors = require("colors");
const bcrypt = require("bcrypt");
const admin = require("./tablas/Admin");
const os = require("./tablas/OS");
const activofijo = require("./tablas/ActivoFijo");
const marca = require("./tablas/Marca");
const uso = require("./tablas/Uso");
const ubicacion = require("./tablas/Ubicacion");
const tipo = require("./tablas/Tipo");
const unidadresponsable = require("./tablas/UResponsable");
const inventario = require("./tablas/Inventario");
const printers = require("./tablas/Printers");
const equipo = require("./tablas/Equipo");
require("../config/config");
async function remove() {
console.log(logSymbols.info, "Paso 1 : Borrando base de datos \n".blue.bold);
await admin.drop();
console.log(logSymbols.success, "admin");
await equipo.drop();
console.log(logSymbols.success, "equipo");
await printers.drop();
console.log(logSymbols.success, "impresoras");
await inventario.drop();
console.log(logSymbols.success, "inventario");
await os.drop();
console.log(logSymbols.success, "os");
await activofijo.drop();
console.log(logSymbols.success, "activo fijo");
await marca.drop();
console.log(logSymbols.success, "marca");
await uso.drop();
console.log(logSymbols.success, "uso");
await ubicacion.drop();
console.log(logSymbols.success, "ubicacion");
await tipo.drop();
console.log(logSymbols.success, "tipo");
await unidadresponsable.drop();
console.log(logSymbols.success, "Unidad Responsable");
}
async function install() {
console.log(
logSymbols.info,
"Paso 2 : Instalando base de datos \n".blue.bold
);
await admin.sync();
console.log(logSymbols.success, "admin");
await os.sync();
console.log(logSymbols.success, "os");
await activofijo.sync();
console.log(logSymbols.success, "activo fijo");
await marca.sync();
console.log(logSymbols.success, "marca");
await uso.sync();
console.log(logSymbols.success, "uso");
await ubicacion.sync();
console.log(logSymbols.success, "ubicacion");
await tipo.sync();
console.log(logSymbols.success, "tipo");
await unidadresponsable.sync();
console.log(logSymbols.success, "Unidad Responsable");
await inventario.sync();
console.log(logSymbols.success, "inventario");
await printers.sync();
console.log(logSymbols.success, "impresoras");
await equipo.sync();
console.log(logSymbols.success, "equipo");
//crear clave foranea de una tabla a otra, ejemplo
// responsable.hasMany(programa, {
// foreignKey: "idResponsable",
// });
};
async function createFirstUsers() {
console.log(
logSymbols.info,
"Paso 3 : Creating first users in database...\n".blue.bold
);
await admin.create({
name: 'alima',
userName: 'Alfredo Lima',
password: bcrypt.hashSync('contraseña', 10),
isAdmin: true
});
await admin.create({
name: 'billie',
userName: 'Billie',
password: bcrypt.hashSync('contraseña', 10)
});
}
async function exec() {
await remove();
await install();
await createFirstUsers();
console.log(logSymbols.success, "Éxito al instalar \n".underline.bold.green);
process.exit();
}
exec();
+22
View File
@@ -0,0 +1,22 @@
const Sequelize = require("sequelize");
const sequelize = require("../../config/sequelize.conf");
class ActivoFijo extends Sequelize.Model {}
ActivoFijo.init({
idActivoFijo: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false,
},
activoFijo: {
type: Sequelize.CHAR,
allowNull: false,
unique: true
},
}, {
sequelize,
tableName: "activoFijo",
});
module.exports = ActivoFijo;
+34
View File
@@ -0,0 +1,34 @@
const Sequelize = require("sequelize");
const sequelize = require("../../config/sequelize.conf");
class Admin extends Sequelize.Model {}
Admin.init({
idAdmin: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false,
},
name: {
type: Sequelize.STRING(50),
allowNull: false,
},
userName: {
type: Sequelize.STRING(50),
allowNull: false
},
password: {
type: Sequelize.STRING(100),
allowNull: false,
},
isAdmin: {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false
}
}, {
sequelize,
tableName: "users",
});
module.exports = Admin;
+62
View File
@@ -0,0 +1,62 @@
const ActivoFIjo = require("./ActivoFijo");
const Sequelize = require("sequelize");
const sequelize = require("../../config/sequelize.conf");
const Inventario = require("./Inventario");
const Marca = require("./Marca");
const OS = require("./OS");
class Equipo extends Sequelize.Model {}
Equipo.init({
idEquipo: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false,
},
modelo: {
type: Sequelize.CHAR,
allowNull: false,
},
noSerie: {
type: Sequelize.CHAR,
allowNull: false,
},
procesador: {
type: Sequelize.CHAR,
allowNull: false,
},
vProcesador: {
type: Sequelize.INTEGER,
allowNull: false,
},
memoria: {
type: Sequelize.CHAR,
allowNull: false,
},
memoriasz: {
type: Sequelize.INTEGER,
allowNull: false,
},
vMemoria: {
type: Sequelize.INTEGER,
allowNull: false,
},
graficos: {
type: Sequelize.CHAR,
allowNull: false,
},
hdd: {
type: Sequelize.INTEGER,
allowNull: false,
},
}, {
sequelize,
tableName: "equipo",
});
Inventario.hasOne(Equipo, { foreignKey: 'noInventario' });
Marca.hasOne(Equipo, { foreignKey: 'idMarca' });
OS.hasOne(Equipo, { foreignKey: 'idOS' });
ActivoFIjo.hasOne(Equipo, { foreignKey: 'idActivoFijo' });
module.exports = Equipo;
+32
View File
@@ -0,0 +1,32 @@
const Sequelize = require("sequelize");
const sequelize = require("../../config/sequelize.conf");
const Marca = require("./Marca");
const Tipo = require("./Tipo");
const ActivoFijo = require("./ActivoFijo");
const UResponsable = require("./UResponsable");
const Ubicacion = require("./Ubicacion");
const Uso = require("./Uso");
class Inventario extends Sequelize.Model {}
Inventario.init({
noInventario: {
type: Sequelize.CHAR,
primaryKey: true,
allowNull: false,
unique: true
},
noResguardo: {
type: Sequelize.INTEGER,
allowNull: false,
},
}, {
sequelize,
tableName: "inventario",
});
ActivoFijo.hasOne(Inventario, { foreignKey: 'idActivoFijo' });
UResponsable.hasOne(Inventario, { foreignKey: 'idUnidadResponsable' });
Ubicacion.hasOne(Inventario, { foreignKey: 'idUbicacion' });
Uso.hasOne(Inventario, { foreignKey: 'idUso' });
module.exports = Inventario;
+22
View File
@@ -0,0 +1,22 @@
const Sequelize = require("sequelize");
const sequelize = require("../../config/sequelize.conf");
class Marca extends Sequelize.Model {}
Marca.init({
idMarca: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false,
},
marca: {
type: Sequelize.CHAR,
allowNull: false,
unique: true
},
}, {
sequelize,
tableName: "marca",
});
module.exports = Marca;
+22
View File
@@ -0,0 +1,22 @@
const Sequelize = require("sequelize");
const sequelize = require("../../config/sequelize.conf");
class OS extends Sequelize.Model {}
OS.init({
idOS: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false,
},
osname: {
type: Sequelize.CHAR,
allowNull: false,
unique: true
},
}, {
sequelize,
tableName: "OS",
});
module.exports = OS;
+38
View File
@@ -0,0 +1,38 @@
const Sequelize = require("sequelize");
const sequelize = require("../../config/sequelize.conf");
const Marca = require("./Marca");
const Tipo = require("./Tipo");
const Inventario = require("./Inventario");
const ActivoFijo = require('./ActivoFijo');
class Printers extends Sequelize.Model {}
Printers.init({
idImpresora: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false,
},
noSerie: {
type: Sequelize.CHAR,
allowNull: false,
},
modelo: {
type: Sequelize.CHAR,
allowNull: false
},
descripcion: {
type: Sequelize.CHAR,
allowNull: false
},
}, {
sequelize,
tableName: "printers",
});
Inventario.hasOne(Printers, { foreignKey: 'noInventario' });
Marca.hasOne(Printers, { foreignKey: 'idMarca' });
Tipo.hasOne(Printers, { foreignKey: 'idTipo' });
ActivoFijo.hasOne(Printers, { foreignKey: 'idActivoFijo' });
module.exports = Printers;
+22
View File
@@ -0,0 +1,22 @@
const Sequelize = require("sequelize");
const sequelize = require("../../config/sequelize.conf");
class Tipo extends Sequelize.Model {}
Tipo.init({
idTipo: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false,
},
tipo: {
type: Sequelize.CHAR,
allowNull: false,
unique: true
},
}, {
sequelize,
tableName: "tipo",
});
module.exports = Tipo;
+26
View File
@@ -0,0 +1,26 @@
const Sequelize = require("sequelize");
const sequelize = require("../../config/sequelize.conf");
class UResponsable extends Sequelize.Model {}
UResponsable.init({
idUnidadResponsable: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false,
},
uResponsable: {
type: Sequelize.CHAR,
allowNull: false,
unique: true
},
nombreResponsable: {
type: Sequelize.CHAR,
allowNull: false,
},
}, {
sequelize,
tableName: "uResponsable",
});
module.exports = UResponsable;
+22
View File
@@ -0,0 +1,22 @@
const Sequelize = require("sequelize");
const sequelize = require("../../config/sequelize.conf");
class Ubicacion extends Sequelize.Model {}
Ubicacion.init({
idUbicacion: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false,
},
ubicacion: {
type: Sequelize.CHAR,
allowNull: false,
// unique: true
},
}, {
sequelize,
tableName: "ubicacion",
});
module.exports = Ubicacion;
+22
View File
@@ -0,0 +1,22 @@
const Sequelize = require("sequelize");
const sequelize = require("../../config/sequelize.conf");
class Uso extends Sequelize.Model {}
Uso.init({
idUso: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
allowNull: false,
},
uso: {
type: Sequelize.CHAR,
allowNull: false,
unique: true
},
}, {
sequelize,
tableName: "uso",
});
module.exports = Uso;
+21
View File
@@ -0,0 +1,21 @@
let express = require('express');
let app = express();
const addEquip = require('../controller/addEquip/addEquip');
const { verifyToken, verifyAdmin } = require('../middlewares/authentication');
const route = '/api/addEquip';
app.get(route, [verifyToken, verifyAdmin], (req, res) => {
return addEquip.get(req, res);
});
app.post(route, [verifyToken, verifyAdmin], (req, res) => {
return addEquip.post(req, res);
});
app.put(route, [verifyToken, verifyAdmin], (req, res) => {
return addEquip.put(req, res);
});
module.exports = app;
+17
View File
@@ -0,0 +1,17 @@
const express = require('express');
const app = express();
const addPrinter = require('../controller/addPrinter/addPrinter');
const { verifyToken, verifyAdmin } = require('../middlewares/authentication');
const route = '/api/addPrinter';
app.get(route, [verifyToken, verifyAdmin], (req, res) => {
return addPrinter.get(req, res);
});
app.post(route, [verifyToken, verifyAdmin], (req, res) => {
return addPrinter.post(req, res);
});
module.exports = app;
+8 -2
View File
@@ -1,6 +1,12 @@
let express = require("express");
let app = express();
app.use(require('./login'))
app.use(require('./login'));
app.use(require('./user'));
app.use(require('./addEquip'));
app.use(require('./addPrinter'));
app.use(require('./updateEquip'));
app.use(require('./updatePrinter'));
app.use(require('./upload'));
module.exports = app
module.exports = app;
+6 -27
View File
@@ -1,38 +1,17 @@
let express = require("express");
let app = express();
let verifyToken = require('../middlewares/authentication');
const route = '/login'
//logica del login, ejemplo
let post = require('../controller/login/post')
let post = require('../controller/login/post');
//let get = require('../controller/login/get')
app.post(route, (req, res) => {
console.log(req.query)
console.log(req.body)
return post()
.then(data => {
res.status(200).json(data)
})
.catch(err => {
console.log(err)
res.status(400).json({
err: err.message
})
})
})
app.post(route, async(req, res) => {
return post(req, res);
// app.get(route, (req, res) => {
// return get()
// .then(data => {
// res.status(200).json(data)
// })
// .catch(err => {
// res.status(400).json({
// err: err.message
// })
// })
// })
});
module.exports = app
module.exports = app;
+21
View File
@@ -0,0 +1,21 @@
const express = require('express');
const app = express();
const updateEquip = require('../controller/updateEquip/updateEquip');
const { verifyToken, verifyAdmin } = require('../middlewares/authentication');
const route = '/api/updateEquip';
app.get(route, [verifyToken, verifyAdmin], (req, res) => {
return updateEquip.get(req, res);
});
app.put(route, [verifyToken, verifyAdmin], (req, res) => {
return updateEquip.put(req, res);
})
app.delete(route, [verifyToken, verifyAdmin], (req, res) => {
return updateEquip.remove(req, res);
})
module.exports = app;
+21
View File
@@ -0,0 +1,21 @@
const express = require('express');
const app = express();
const updatePrinter = require('../controller/updatePrinter/updatePrinter');
const { verifyToken, verifyAdmin } = require('../middlewares/authentication');
const route = '/api/updatePrinter';
app.get(route, (req, res) => {
return updatePrinter.get(req, res);
});
app.put(route, (req, res) => {
return updatePrinter.put(req, res);
});
app.delete(route, (req, res) => {
return updatePrinter.remove(req, res);
})
module.exports = app;
+23
View File
@@ -0,0 +1,23 @@
const express = require("express");
const fileUpload = require("express-fileupload");
const postE = require("../controller/upload/postE");
const postP = require("../controller/upload/postP");
const app = express();
const { verifyToken, verifyAdmin } = require('../middlewares/authentication');
const route = "/upload";
// app.use(fileUpload({ createParentPath: true }));
app.use(fileUpload({ useTempFiles: true }));
app.post(`${ route }/equips`, (req, res) => {
return postE(req, res);
});
app.post(`${ route }/printers`, (req, res) => {
return postP(req, res);
});
module.exports = app;
+81
View File
@@ -0,0 +1,81 @@
let express = require('express');
let app = express();
// const computers_get = require('../controller/user/computers/get');
// const printers = require('../controller/user/printers/get');
const computers = require('../controller/user/computers/get');
const printers = require('../controller/user/printers/get');
// const computers = require('../controller/api/computers');
// const printers = require('../controller/api/printers');
const tipo = require('../controller/api/tipo');
const tipoPrinters = require('../controller/api/tipoPrinters');
const ubica = require('../controller/api/ubica');
const uso = require('../controller/api/uso');
const procesador = require('../controller/api/procesador');
const sisoper = require('../controller/api/sisoper');
const { verifyToken, verifyAdmin } = require('../middlewares/authentication');
const computersRoute = '/api/computers';
const printersRoute = '/api/printers';
/*=============================================
computer
=============================================*/
app.get('/api/computers', verifyToken, (req, res) => {
return computers(req, res);
});
/*=============================================
printers
=============================================*/
app.get(printersRoute, verifyToken, (req, res) => {
return printers(req, res);
});
app.get('/api/tipo', verifyToken, (req, res) => {
return tipo(req, res);
});
app.get('/api/tipoPrinters', verifyToken, (req, res) => {
return tipoPrinters(req, res);
});
app.get('/api/ubica', verifyToken, (req, res) => {
return ubica(req, res);
});
app.get('/api/uso', verifyToken, (req, res) => {
return uso(req, res);
});
app.get('/api/procesador', verifyToken, (req, res) => {
return procesador(req, res);
});
app.get('/api/sisoper', verifyToken, (req, res) => {
return sisoper(req, res);
});
module.exports = app;
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.