/**
* Category
* @typedef {Object} Category
* @property {number} [categoriaid] identificador de categoria
* @property {number} userid identificador de usuario
* @property {string} nombre nombre de la categoria
* @property {boolean} activo flag si indica que la categoria esta disponible
* @property {string} [imagen] string base64 de la imagen
*/
const { Notification } = require('electron');
const { Database } = require('../database/database');
const CRUD = require('../database/CRUD');
/** clase que gestiona las categorias */
class CategoriasController {
/** @type {?Database} */
databaseInstance = null;
/** Propiedad get database retorna una nueva instancia de la clase Database */
static get database() {
return this.databaseInstance || ( this.databaseInstance = new Database() );
}
/**
* Añade una nueva categoria
*
* @param {Category} categoria instancia de categoria
* @param {User} usuario instancia de usuario
*/
static crearCategoria( categoria, usuario ) {
let nuevaCategoria = {
...categoria,
userid: usuario['userid']
};
this.database.insert( CRUD.crearCategoria, nuevaCategoria, ( error ) => {
const notificacion = new Notification({
title: '',
body: ''
});
if ( error ) {
notificacion['title'] = 'Error!!';
notificacion['body'] = 'Error al crear categoria';
notificacion.show();
return;
}
notificacion['title'] = 'Éxito';
notificacion['body'] = 'Categoria creada con éxito';
notificacion.show();
});
}
/**
* activar categoria
*
* @param {Object} categoria
* @param {number} categoriaid identificador de categoria
* @param {boolean} activo flag de disponibilidad de categoria
*/
static activarCategoria( categoria ) {
this.database.update( CRUD.activarCategoria, categoria, ( error ) => {
const notificacion = new Notification({
title: '',
body: ''
});
if ( error ) {
console.log( error );
notificacion['title'] = 'Error!!';
notificacion['body'] = 'Error al crear categoria';
notificacion.show();
return;
}
notificacion['title'] = 'Éxito';
notificacion['body'] = 'Categoria actualizada con éxito';
notificacion.show();
});
}
/**
* Obtiene el total de los categorias
* @returns {Promise<{ totalPaginas: number, totalRegistros: number }>}
*/
static obtenerTotalCategorias() {
return new Promise( ( resolve, reject ) => {
this.database.getTotalRecords( CRUD.obtenerTotalCategorias, ( error, resultado ) => {
const notificacion = new Notification({
title: 'Error en obtener los registros',
body: 'No se pudo obtener el total de registros'
});
if ( error ) {
notificacion.show();
console.log( error );
return reject( error );
}
const totalRegistros = resultado[0]['COUNT(*)'];
let totalPaginas = ( totalRegistros / 10 );
resolve({
totalPaginas: Math.ceil( totalPaginas ),
totalRegistros: totalRegistros
});
});
});
}
/**
* Listar categorias
*
* @param {Array<number>} pagination array de paginacion
* @return {Promise<Array<Category>>} devuelve una promesa con los categorias paginados
*/
static listarCategorias( pagination ) {
return new Promise(( resolve, reject ) => {
pagination = { start: pagination[0], limit: pagination[1] };
this.database.consult( CRUD.listarCategorias, pagination, ( error, results ) => {
if ( error ) {
console.log( error );
return reject( error );
}
// console.log( results );
resolve( results );
});
});
}
/**
* edita una categoria
*
* @param {Category} categoria instancia de la categoria
* @param {User} usuario usuario logeado
* @param {?string} [imagenRegistrada] imagen registrada por el usuario
*/
static editarCategoria( categoria, usuario, imagenRegistrada ) {
this.database.update( CRUD.editarCategoria, categoria, ( error ) => {
const notificacion = new Notification({
title: '',
body: ''
});
if ( error ) {
// throw error; // mostrará el error en pantalla
notificacion['title'] = 'Error!!';
notificacion['body'] = 'Error al actualizar categoria';
notificacion.show();
console.log( error );
return;
}
notificacion['title'] = 'Exito!!';
notificacion['body'] = 'Categoria Actualizada';
notificacion.show();
});
}
/**
* Permite buscar categorias en la BD
* @param {Object} search producto a buscar
* @param {string} search.search cadena de busqueda del producto
* @return {Promise<Array<Category>>} devuelve una promesa con los resultados encontrados
*/
static buscarCategoria( search ) {
return new Promise(( resolve, reject ) => {
this.database.find( CRUD.buscarCategoria, search, ( error, results ) => {
const notificacion = new Notification({
title: '',
body: ''
});
if ( error ) {
// throw error; // mostrará el error en pantalla
notificacion['title'] = 'Error!!';
notificacion['body'] = 'Error al buscar categoria';
notificacion.show();
console.log( error );
return reject( error );
}
return resolve( results );
});
});
}
}
module.exports = {
CategoriasController
};