Todas las entradas de: Oriol Soriano

Actualización v1.0.2 Android

Lanzamiento al market Google Play de la versión beta de la APP Horizoon. Esta versión contiene la funcionalidad de registro instantáneo de ubicaciones, para geolocalizar a los usuarios (operarios, comerciales, agentes, técnicos) de tal forma que ellos mismos son los que envían la ubicación manualmente sin que haya ningún tipo de seguimiento de sus geolocalizaciones.

Los usuarios pueden registrar tanto una entrada como una salida, y se guardará su geolocalización y hora de registro.

Actualización v3.525

insert into permisosusuariosinternos set idPermisoUsuariosInternos=261, NombrePermiso=’Configuración, acceso pestaña TPV’, Descripcion=’¿Tiene acceso a la pestaña TPV de configuración?’, Activo=1, Orden=0, Modalidad=9;
insert into permisosgruposusuarios (idPermisoUsuariosInternos,idGrupoUsuarios,Valor) select 261,idGrupousuarios,0 from gruposusuarios;

insert into permisosusuariosinternos set idPermisoUsuariosInternos=262, NombrePermiso=’Configuración, acceso pestaña APP’, Descripcion=’¿Tiene acceso a la pestaña APP de configuración?’, Activo=1, Orden=0, Modalidad=9;
insert into permisosgruposusuarios (idPermisoUsuariosInternos,idGrupoUsuarios,Valor) select 262,idGrupousuarios,0 from gruposusuarios;

Actualización v3.522

— se crea nuevo permiso de configuración general para negociar TLS o no, en envíos SMTP
— OJO para limpiezas barcino hay que poner este permiso despues de actualizar a 0 – NO NEGOCIAR TLS

INSERT INTO parametrosconfiguracion_1 (
idParametroConfiguracion ,
Valor ,
idEntorno ,
ConstanteIdiomaParam ,
ConstanteIdiomaDesc ,
Activo
)
VALUES (115,1, ‘1’, ‘PARAM_CONF_NUM115’, ‘PARAMDESC_CONF_NUM115’, ‘1’);

insert into idiomasaplicacion set idPage=70, nomVar=’PARAM_CONF_NUM115′, idiom_es=’Negociación TLS’, idiom_ca=’Negociació TLS’;
insert into idiomasaplicacion set idPage=70, nomVar=’PARAMDESC_CONF_NUM115′, idiom_es=’Activar o desactivar negociación TLS en envíos SMTP, normalmente Negociar TLS’, idiom_ca=’Activar o desactivar negociació TLS en l´enviament SMTP, normalment Negociar TLS’;

insert into idiomasaplicacion set idPage=70, nomvar=’NUM115_OPC1′, idiom_es=’Negociar TLS’, idiom_ca=’Negociar TLS’;
insert into idiomasaplicacion set idPage=70, nomvar=’NUM115_OPC2′, idiom_es=’No negociar TLS’, idiom_ca=’No negociar TLS’;

update version set Version=’3.522′;

Actualización v3.521

ALTER TABLE tokensappsusuarios CHANGE sisOpe sisOpe VARCHAR(25) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;

CREATE TABLE colaenvionotificacionespush (
idNotificacionPush INT(11) UNSIGNED NOT NULL AUTO_INCREMENT ,
idUsuarioNotificar INT(10) UNSIGNED NOT NULL ,
idAvisoUsuarios INT(11) NULL ,
FechaGenerado INT(11) UNSIGNED NOT NULL ,
RDateGenerado DATE NOT NULL ,
RTimeGenerado TIME NOT NULL ,
FechaProcesado INT(11) UNSIGNED NULL ,
RDateProcesado DATE NULL ,
RTimeProcesado TIME NULL ,
idTokensAppsUsuarios INT(11) NOT NULL ,
PRIMARY KEY (idNotificacionPush)) ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_general_ci;

ALTER TABLE colaenvionotificacionespush ADD INDEX idAvisoUsuarios (idAvisoUsuarios);

ALTER TABLE colaenvionotificacionespush ADD CONSTRAINT idAvisoUsuarios
FOREIGN KEY (idAvisoUsuarios) REFERENCES avisosusuarios(idAvisoUsuarios) ON DELETE CASCADE ON UPDATE CASCADE;

  update version set Version='3.521';

Actualización v3.520

— Una vista para funcionalidades de geolocalizacion de elementos

drop view IF EXISTS v_geocoord_elementos;

create view v_geocoord_elementos
as SELECT idElementoMantenimiento,
NombreElemento,
TokenElemento,
LatDec,
LonDec FROM elementosmantenimiento
WHERE (LatDec is not null and LonDec is not null);

ALTER TABLE elementosmantenimiento CHANGE LatDec LatDec FLOAT(10,6) NULL DEFAULT NULL;
ALTER TABLE elementosmantenimiento CHANGE LonDec LonDec FLOAT(10,6) NULL DEFAULT NULL;

  update version set Version='3.520';

Migración de base de datos horizoon

Antes de hacer el backup para migrar la base de datos, si el tamaño de la misma es muy grande (varios Gigas) se pueden eliminar algunos datos. Dependerá del cliente si desea o no conservarlos, aunque se puede hacer un borrado por fechas, por ejemplo, los anteriores a X años anteriores.

Algunas tablas que podemos eliminar información son:

delete from consultasreports;

delete from colaenvionotificaciones where FechaProcesado is not null;

delete from historiconotificaciones;

delete from logins;

Una vez vaciado espacio innecesario podremos bajarnos un backup de la misma.

Hay que tener en cuenta que dependiendo del programa que utilizemos para hacer el backup, quizá nos deje comentarios o sentencias SQL con referencia al usuario o la base de datos original. Si la nueva base de datos o su usuario tiene otro nombre, habrá que editar el backup generado para modificar dichas referencias. Por ejemplo, si hemos generado el backup con phpMyAdmin con el usuario usuarioA, puede que nos deje algo parecido en el archivo sql generado:

CREATE ALGORITHM=UNDEFINED DEFINER=usuarioA@localhost

Por tanto, si el usuario de la base de datos es distinto a usuarioA, por ejemplo es usuarioB, deberemos editar estas sqls para renombrarlo a:

CREATE ALGORITHM=UNDEFINED DEFINER=usuarioB@localhost

SOBRE EL TAMAÑO DEL BACKUP:

Si el archivo sql generado es muy grande podemos utilizar el comando split en una consola linux para dividir el archivo en varios más pequeños:

split -d -b 25M mibackup.sql (este comando nos divide el archivo mibackup.sql en varios archivos de 25 Megas cada uno (-b 25M) y nos enumera con un número en su extensión generada (-d) ). IMPORTANTE: La división la hace justo por el tañamo de bytes indicados (Megas en este caso), lo que nos cortará las SQL finales e iniciales de cada archivo. Antes de ejecutar cada archivo deberemos desplazarnos al final de cada archivo y recomponer las sql con el principio del siguiente archivo generado.

O mejor podemos utilizar el siguiente comando: split -d -C 4000KB mibackup.sql . Este comando los generará archivos de un máximo de 4Mb pero sin cortar ninguna linea, aunque deberemos de comprobar igualmente la integridad de las SQL finales e iniciales de cada archivo generado.

Tened en cuenta que hay una variable de configuración de MySQL que limita el tamaño de bytes del buffer de cada comunicación. Por tanto, si los archivos los dividimos en 25Mb pero la variable max_allowed_packet=20M, no podremos subirlo a menos que aumentemos el valor de dicha variable, o bien reduzcamos el tamaño de los sql a ejectutar.

SOBRE PERMISOS NECESARIOS:

Hay que tener en cuenta que para restaurar el backup de la base de datos de horizoon necesitaremos permisos para ejecutar TRIGGERS i PROCEDURES. El usuario con el que conectemos a la base de datos para restaurar el backup debe tener dichos privilegios, además de los privilegios SUPER.

Algunos servidores no admiten que configuremos permisos SUPER, como es el caso de Amazon. En este caso podemos cambiar la variable de MySQL log_bin_trust_function_creators=1 (enabled) para que omita el privilegio SUPER y nos permita ejecutar TRIGGERS i PROCEDURES siempre que el usuario tenga dichos permisos.

También necesitaremos que nuestro usuario tenga el permiso para crear VIEWS.

Actualización v3.519

— se permite seleccionar la moneda de facturación

CREATE TABLE monedas (
idMoneda int(10) UNSIGNED NOT NULL,
NombreMoneda varchar(30) COLLATE utf8_unicode_ci NOT NULL,
CodigoMoneda varchar(10) COLLATE utf8_unicode_ci NOT NULL,
SimboloMoneda varchar(5) COLLATE utf8_unicode_ci NOT NULL,
RedSysCurrency int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO monedas (idMoneda, NombreMoneda, CodigoMoneda, SimboloMoneda, RedSysCurrency) VALUES
(‘1’, ‘Euro’, ‘EUR’, ‘€’, ‘978’),
(‘2’, ‘USA Dolar’, ‘USD’, ‘$’, ‘840’);

ALTER TABLE pedidos ADD idMoneda INT(10) UNSIGNED NOT NULL DEFAULT ‘1’ AFTER idPedido;
ALTER TABLE pedidos ADD INDEX idMoneda (idMoneda);

ALTER TABLE ofertas ADD idMoneda INT(10) UNSIGNED NOT NULL DEFAULT ‘1’ AFTER idOferta;
ALTER TABLE ofertas ADD INDEX idMoneda (idMoneda);

ALTER TABLE partes ADD idMoneda INT(10) UNSIGNED NOT NULL DEFAULT ‘1’ AFTER idParte;
ALTER TABLE partes ADD INDEX idMoneda (idMoneda);

ALTER TABLE albaranes ADD idMoneda INT(10) UNSIGNED NOT NULL DEFAULT ‘1’ AFTER idAlbaran;
ALTER TABLE albaranes ADD INDEX idMoneda (idMoneda);

ALTER TABLE facturas ADD idMoneda INT(10) UNSIGNED NOT NULL DEFAULT ‘1’ AFTER idFactura;
ALTER TABLE facturas ADD INDEX idMoneda (idMoneda);

ALTER TABLE remesascomisiones ADD idMoneda INT(10) UNSIGNED NOT NULL DEFAULT ‘1’ AFTER idRemesaComisiones;
ALTER TABLE remesascomisiones ADD INDEX idMoneda (idMoneda);

ALTER TABLE gastos ADD idMoneda INT(10) UNSIGNED NOT NULL DEFAULT ‘1’ AFTER idGasto;
ALTER TABLE gastos ADD INDEX idMoneda (idMoneda);

ALTER TABLE monedas ADD PorDefecto TINYINT(1) NULL AFTER RedSysCurrency;
ALTER TABLE monedas ADD Activa TINYINT(1) NULL DEFAULT ‘1’ AFTER RedSysCurrency;

update monedas set PorDefecto=1 where idMoneda=1;

 DROP VIEW `v_pedidos`;
CREATE VIEW `v_pedidos` AS select `o`.`idPedido` AS `idPedido`,
                              `o`.`DateFechaPedido` AS `DateFechaPedido`,
                              `c`.`idEntidad` AS `idEntidad`,
                              `c`.`Nombre` AS `NombreEntidad`,
                              `o`.`idEstadoPedido` AS `idEstadoPedido`,
                              `te`.`Color` AS `Color`,
                              `moned`.*,
                              (select sum(`lineaspedidos`.`SubTotalLinea`)
                                     from `lineaspedidos` 
                                     where (`lineaspedidos`.`idPedido` = `o`.`idPedido`)) AS `SubTotalPedido`,
                              (select sum(`lineaspedidos`.`TotalImpuestoLinea`) 
                                     from `lineaspedidos` 
                                     where (`lineaspedidos`.`idPedido` = `o`.`idPedido`)) AS `TotalImpuestoPedido`,
                              (select sum(`lineaspedidos`.`TotalLinea`) 
                                     from `lineaspedidos` 
                                     where (`lineaspedidos`.`idPedido` = `o`.`idPedido`)) AS `TotalPedido`,
                              `o`.`TokenPedido` AS `TokenPedido`,
                              `o`.`idElementoMantenimiento` AS `idElementoMantenimiento`,
                              `o`.`FechaEntrada` AS `FechaEntrada`,
                              `o`.`FechaEntrega` AS `FechaEntrega`,
                              `o`.`FechaEntregado` AS `FechaEntregado`

                               from (   (`pedidos` `o` 

                               join `entidades` `c` on((`c`.`idEntidad` = `o`.`idEntidad`))) 
                               join `tiposestadospedidos` `te` on((`te`.`idEstadoPedido` = `o`.`idEstadoPedido`))
                               join `

Obtener API KEY de GoogleMaps

Para Obtener una API KEY de GoogleMaps y poder utilizar los mapas de Horizoon, debes acceder a Google Cloud Platform con una cuenta de Google.

En primer lugar (si no lo hemos hecho antes), tendremos que crear un proyecto. Recomendamos crear un proyecto exclusivo para horizoon, asó podrás tener todas las APIS que necesites integrar en tu instalación de horizoon dentro de un sólo proyecto:

Al crear al proyecto, tendrás que asignarle una cuenta de facturación. Creala y validala, sinó lo haces es posible que pasado un tiempo de gracia las APIs dejen de funcionar hasta que no asignes una cuenta de facturación a tu proyecto. Aunque crees la cuenta de facturación, si tu volumen de tráfico de las APIS no es muy elevado, es coste será 0. Consulta las tarifas de Google para cada API.

Una vez creado el proyecto, buscaremos la API de Google Maps Javascript para habilitarla:

Una vez habilitada, tenemos que generar nuestra API KEY, para ello, accedemos a «APIS y Servicios»:

Dentro de CREDENCIALES, seleccionamos CREAR CREDENCIALES y seleccionamos CLAVE DE API:

Esto nos generará una API KEY, aprovechamos la ventana de confirmación para RESTRINGIR CLAVE:

Aprovechamos la pantalla de restringuir clave para canviarle el nombre a nuestra clave, así podremos identificarla en el futuro. Un buen nombre podría ser «API KEY horizoon javascript MAPS». Podemos utilizar la opción de restricciones de aplicaciones para limitar el uso de la KEY al dominio donde tenemos instalado horizoon.

Finalizado el proceso, tan sólo nos queda copiar la KEY generada y guardarla en el parámetro de configuración 109 de Horizoon: