Programar un script que hace algo pero que es difícil comprobar el resultado es una práctica poco segura.
Nuestros scripts incorporan la salida de todos los procesos que llevan a cabo a un fichero que se situará en la raíz del la zona del usuario administrador.
Este fichero de log registra todos los movimientos que el script ha llevado a cabo o no por distintos motivos. Los principales controles que registra son:
Incorrecto formato del fichero de clientes CSV
Creación de usuario correcta o no.
Factura repartida a qué usuario.
etc.
Espero que estos scripts puedan servir de base o ayudar al desarrollo de una versión adaptada a las necesidades de cualquier pequeña empresa.
Nuestro segundo y último script «repartir_ficheros.py» tiene como misión repartir los ficheros que el administrador suba a la carpeta «Reparto_Factura» de su zona de administración a todos los usuarios del sistema que les correspondan.
La lógica debe ser que el nombre del fichero a repartir comience con el código del usuario en nuestra intranet.
Por ejemplo: la factura «1000-noviembre.pdf» moverá dicho fichero a la zona de usuario con código 1000.
El administrador puede crear una estructura de carpetas en su carpeta «Reparto_Factura« que se replicará a la zona del usuario. Por ejemplo:
Estructura opcional de la carpeta Reparto_Factura
Cron
Al igual que el script de creación de usuario, nuestro script de reparto se debe programar con la frecuencia estimada por el administrador de la plataforma atendiendo a sus necesidades. Esto es, si las facturas se suben con poca frecuencia, no tiene sentido establecer la programación muy frecuentemente.
En el caso de Hostens, el panel de control nos ofrece un asistente para los trabajos de cron como se muestra a continuación:
Fichero de reparto de facturas programado cada 5 minutos
Nuestro primer script «importar_usuario.py» tiene como misión importar los ficheros CSV que el administrador suba a la carpeta Clientes_CSV de nuestra intranet. Los pasos que sigue en script son:
Crea el usuario en NextCloud
Manda un email a dicho usuario notificándole su usuario y contraseña aleatoria que el usuario puede/debe cambiar en el primer acceso.
Crea la estructura de carpetas en la zona de usuario.
Formato del fichero
El fichero de clientes con extensión csv debe tener la siguiente estructura:
Abonado;Razón social Cliente;Email empresa 1000;Pepe;[email protected]
El primero (1000) es el código que recibirá el cliente en nuestra plataforma. Puede ser numérico o alfanumérico. En cualquier caso dicho código será la primera cadena del nombre del fichero de facturas a repartir.
En nuestro ejemplo, las facturas para el usuario 1000 deben empezar por 1000_loquesea.pdf.
Los demás campos se explican por sí mismos.
Cron
Nuestro script se debe programar con la frecuencia estimada por el administrador de la plataforma atendiendo a sus necesidades. Esto es, si la necesidad de crear clientes nuevos no fuera mucha no tiene sentido establecer la programación con demasiada frecuencia.
En el caso de Hostens, el panel de control nos ofrece un asistente para los trabajos de cron como se muestra a continuación:
Fichero de creación de usuarios programado cada 5 minutos
Nuestra Intranet parte de una instalación de Nextcloud con varios retoques.
Cualquier proveedor de internet tiene en su panel cpanel/plesk una forma de instalar Nextcloud muy sencilla. En nuestro caso el hosting de pruebas está en https://www.hostens.com que para las pruebas iniciales está bien.
En su amplio repertorio de aplicaciones está Nextcloud:
Parte del repertorio de aplicaciones de Hostens
La instalación no nos llevará mas que unos cuantos clics. De esta forma ya tenemos nuestro Nextcloud instalado:
Nextcloud instalado en el panel de Hostens
Una vez instalado necesitaremos acceder a él y crear el usuario y la contraseña que será el administrador de nuestra intranet. En este momento tenemos Nextcloud instalado pero todavía nos quedan unos ajustes para adaptarlo a nuestras necesidades de Intranet.
Ponerlo en castellano y habilitar nuestro dominio.
Tenemos que modificar/añadir un par de claves que se encuentran en el archivo config/config.ini del directorio de nuestra instalación.
Hostens nos provee en el panel de control de un administrador de ficheros con el que podemos hacer los cambios:
Acceso a config.php
Aquí retocaremos el apartado dominio y el lenguaje:
En el array ponemos los dominios desde los que llamaremos a nextcloudPara que todo aparezca en castellano
2. Estructura de carpetas para los usuarios
También hay que preparar el /core/skeleton para que al crear el usuario nos aseguremos que la estructura es correcta.
Cada usuario tendrá la carpeta Factura en su home.
3. Cron
Nextcloud recomienda en su instalación que se programe una tarea de cron en el sistema que lo albergue para su correcto funcionamiento. Aunque existen varias posibilidades, lo mejor, cron.
Seleccionamos cron en los ajustes del administrador.
Hostens nos provee también de una interfaz muy amigable para establecer la tarea de cron de Nextcloud cada 5 minutos.
Acceso a Cron en el panel de HostensTarea de cron creada con el asistente
4. Configuración de nuestro correo saliente.
Necesitaremos una cuenta de email que será el remitente de cuantos correos mandemos a los clientes. Se ha de configurar en los ajustes del administrador de NextCloud (Ajustes básicos):
Configuración de correo saliente
5. Configurar las aplicaciones instaladas.
Por defecto, Nextcloud incluye muchas aplicaciones instaladas que en nuestro caso no son necesarias.
En el panel de control del administrador debemos dejar exclusivamente las aplicaciones que se describen en la siguiente captura:
Aplicaciones instaladas en nuestra intranet
Todas las demás aplicaciones no aportan para nuestro caso. Las dejaremos deshabilitadas.
6. Estructura del usuario administrador.
El usuario administrador debe tener una configuración de carpetas como la que se describe en la siguiente imagen:
Estructura de las carpeta en la zona de administración
Clientes_CSV : Contendrá los ficheros csv con los clientes que nuestros scripts crearán en NextCloud en un formato que se verá mas adelante.
Plantillas_Email: Nuestros scripts pueden mandar correos con un formato preestablecido o bien leer los ficheros html de esta carpeta para mandar emails personalizados.
Reparto_Facturas: El administrador subirá a esta carpeta los ficheros de facturas con formato pdf que nuestros scripts repartirán a los clientes que les correspondan.
scripts: Contiene los scripts python del programa.
Hace un tiempo desarrollé unos scripts en Python para cubrir una necesidad que puede surgir en una empresa pequeña con pocos recursos como es la de dotar a sus propios clientes de un espacio donde éstos puedan consultar sus facturas y descargarlas.
Los scripts que funcionarán prácticamente en cualquier hosting o máquina dedicada efectuarán las siguientes acciones:
Creación de usuarios importando un script csv sencillo. Se mandará al usuario un email con los datos para el primer acceso incluyendo una clave aleatoria.
Reparto de las facturas en pdf que la empresa subirá a su zona de administración con el formato id_factura.pdf. El sistema notificará al usuario por email de nuevas facturas en su zona de usuario.
Las ventajas de este sistema son muchas:
Aprovechar la infraestructura que crea una software open source como es Nextcloud: seguridad de los datos y simplicidad de manejo.
Los documentos sensibles como son las facturas «no viajan» al correo electrónico del usuario, sino que es el cliente final el que accede a sus facturas.
Aislamiento. Aunque Nextcloud es una plataforma en la que se fomenta el intercambio de información entre usuarios también se puede adaptar para que los usuarios estén aislados de los otros.
A través de un fichero de configuración de texto, el administrador puede adaptar distintos parámetros de su hosting como son los distintos paths o la configuración de su correo saliente.
Los scripts en Python serán publicados en Github para que se puedan adaptar a otras necesidades si así se requiere.
A través de una serie de próximos artículos iré explicando desde la configuración inicial de Nextcloud hasta la configuración de los scripts y su programación en cron.