Tabla de Contenidos

LedgerSMB: instalación en Debian Wheezy

Introducción

Para ayudar a un amigo que deseaba instalar LedgerSMB sobre un Debian Wheezy sin resultado, decidí escribir este instructivo de instalación.

Parto de la base que se tiene instalado y configurado Apache usando la configuración de dynamic virtual hosting. Este tutorial en particular explica cómo crear un virtual host para SQL Ledger, configuración que no debe ser usada en este caso.

Para todo el proceso, se necesita conexión a Internet.

Prerrequisitos

aptitude install cpp cpp-4.7 dbconfig-common dbus ed fontconfig-config fonts-droid ghostscript gsfonts \
latex-beamer latex-xcolor libalgorithm-c3-perl libappconfig-perl libaprutil1-dbd-pgsql libarchive-zip-perl \
libavahi-client3 libavahi-common-data libavahi-common3 libb-hooks-endofscope-perl libcgi-simple-perl \
libclass-accessor-perl libclass-c3-perl libclass-c3-xs-perl libclass-data-inheritable-perl libclass-load-perl \
libclass-load-xs-perl libclass-singleton-perl libclass-std-perl libcommon-sense-perl libconfig-any-perl \
libconfig-general-perl libconfig-std-perl libconfig-tiny-perl libcups2 libcupsimage2 libdata-optlist-perl \
libdatetime-locale-perl libdatetime-perl libdatetime-timezone-perl libdbd-pg-perl libdbi-perl libdbus-1-3 \
libdevel-globaldestruction-perl libdevel-partialdump-perl libdevel-stacktrace-perl libdrm-intel1 \
libdrm-nouveau1a libdrm-radeon1 libdrm2 libemail-date-format-perl libencode-locale-perl liberror-perl \
libeval-closure-perl libexception-class-perl libfile-basedir-perl libfile-desktopentry-perl \
libfile-listing-perl libfile-mimeinfo-perl libfile-slurp-perl libfont-afm-perl libfontconfig1 libfontenc1 \
libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa libgmp10 libgraphite3 libgs9 libgs9-common libhtml-form-perl \
libhtml-format-perl libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl libhttp-cookies-perl \
libhttp-daemon-perl libhttp-date-perl libhttp-message-perl libhttp-negotiate-perl libice6 libijs-0.35 \
libio-socket-ip-perl libio-socket-ssl-perl libio-stringy-perl libipc-shareable-perl libjasper1 libjbig0 \
libjbig2dec0 libjpeg8 libjson-perl libjson-xs-perl libkpathsea6 liblatex-driver-perl liblatex-encode-perl \
liblatex-table-perl liblcms1 liblcms2-2 liblist-moreutils-perl liblocale-maketext-lexicon-perl \
liblog-dispatch-perl liblog-log4perl-perl liblwp-mediatypes-perl liblwp-protocol-https-perl libmailtools-perl \
libmath-bigint-gmp-perl libmath-bigint-perl libmath-round-perl libmime-lite-perl libmime-types-perl \
libmodule-implementation-perl libmodule-runtime-perl libmoose-perl libmoosex-followpbp-perl libmpc2 libmpfr4 \
libmro-compat-perl libnamespace-clean-perl libnet-daemon-perl libnet-dbus-perl libnet-http-perl \
libnet-ssleay-perl libnumber-format-perl libopenjpeg2 libopenoffice-oodoc-perl libossp-uuid16 \
libpackage-deprecationmanager-perl libpackage-stash-perl libpackage-stash-xs-perl libpaper-utils libpaper1 \
libparams-classify-perl libparams-util-perl libparams-validate-perl libparse-recdescent-perl libpciaccess0 \
libplrpc-perl libpng12-0 libpoppler19 libpq5 libptexenc1 libreadonly-perl libreadonly-xs-perl libruby1.9.1 \
libsm6 libsocket-perl libsub-exporter-perl libsub-identify-perl libsub-install-perl libsub-name-perl \
libsystemd-login0 libtask-weaken-perl libtemplate-perl libtemplate-plugin-latex-perl libtext-csv-perl \
libtext-csv-xs-perl libtext-wrapper-perl libtie-ixhash-perl libtiff4 libtimedate-perl libtry-tiny-perl \
liburi-perl libutempter0 libvariable-magic-perl libwww-perl libwww-robotrules-perl libx11-protocol-perl \
libx11-xcb1 libxaw7 libxcb-glx0 libxcb-shape0 libxcomposite1 libxcursor1 libxdamage1 libxfixes3 libxfont1 \
libxft2 libxi6 libxinerama1 libxml-namespacesupport-perl libxml-parser-perl libxml-sax-base-perl \
libxml-sax-expat-perl libxml-sax-perl libxml-simple-perl libxml-twig-perl libxml-xpathengine-perl libxmu6 \
libxpm4 libxrandr2 libxrender1 libxslt1.1 libxt6 libxtst6 libxv1 libxxf86dga1 libxxf86vm1 libyaml-0-2 \
libyaml-libyaml-perl lmodern luatex make pgf poppler-data postgresql-9.1 postgresql-client \
postgresql-client-9.1 postgresql-client-common postgresql-common postgresql-contrib postgresql-contrib-9.1 \
prosper ps2eps ruby ruby1.9.1 sudo tcl8.4 tex-common texlive-base texlive-binaries texlive-common \
texlive-doc-base texlive-extra-utils texlive-font-utils texlive-generic-recommended texlive-latex-base \
texlive-latex-base-doc texlive-latex-recommended texlive-latex-recommended-doc texlive-luatex \
texlive-pstricks texlive-pstricks-doc tk8.4 ttf-dejavu-core x11-common x11-utils x11-xserver-utils xbitmaps \
xdg-utils xfonts-encodings xfonts-utils

Instalación de LedgerSMB

cd /var/www/sites/
tar xzf ledgersmb-1.3.37.tar.gz
chown -R www-data:www-data ledgersmb
chmod 750 ledgersmb

Editar /var/www/sites/ledgersmb/ledgersmb-httpd.conf.template y cambiar la palabra WORKING_DIR por /var/www/sites/ledgersmb

Además, si se desea acceder a LedgerSMB desde las estaciones de la intranet, se debe permitirlo en la línea, poniendo algo como:

Allow from 192.168.0.0/24

Mover el archivo /var/www/sites/ledgersmb/ledgersmb-httpd.conf.template a /etc/apache2/sites-available/ledgersmb-httpd.conf y activarlo en Apache, así como el módulo rewrite:

mv /var/www/sites/ledgersmb/ledgersmb-httpd.conf.template /etc/apache2/sites-available/ledgersmb-httpd.conf
a2ensite ledgersmb-httpd.conf
a2enmod rewrite

Reiniciar Apache:

service apache2 restart

Instalar los módulos Perl necesarios, ingresando previamente al directorio de instalación de LedgerSMB; este paso hará un montón de magia, y tardará unos minutos:

cd /var/www/sites/ledgersmb
cpan Module::Install

Ejecutar el script Makefile.pl respondiendo “y” o “n” cuando corresponda:

perl Makefile.PL

Ejecutar un make y esperar a que termine, proceso que llevará unos minutos:

make

Instalar el módulo Latex de Perl:

cpan Template::Latex

Y finalmente, ejecutar test; advierto que algunos test van a fallar. Son pocos, no sé exactamente qué significa, pero LedgerSMB funciona a pesar de estos errores. Este paso se puede obviar entonces :-) :

 make test

Configuración de PostgreSQL

su postgres -c psql template1
ALTER USER postgres WITH PASSWORD '<password>';
\q
passwd -d postgres
su postgres -c passwd # Ingresar la contraseña
adduser ledgersmb # Ingresar la contraseña y los datos necesarios
sudo -u postgres createuser -D -A -P ledgersmb
sudo -u postgres createdb -O ledgersmb ledgersmb

Reiniciar PostgreSQL:

service postgresql restart

Configuración básica de LedgerSMB

  1. Crear el directorio temporal y asignarlo al usuario www-data:
    mkdir /var/tmp/ledgersmb
    chown -R www-data: /var/tmp/ledgersmb
    chmod 750 /var/tmp/ledgersmb/
  2. Cambiar en ledgersmb.conf:
    1. el directorio temporal por /var/tmp/ledgersmb
    2. donde dice /usr/share/pgsql/contrib por /usr/share/postgresql/9.1/extension
    3. dejar en blanco la variable default_db

Configuración inicial de LedgerSMB

Una vez hecho todo esto, deberían funcionar los URLs de login y de setup:

http://host.dominio/ledgersmb/login.pl

y

http://host.dominio/ledgersmb/setup.pl

Crear la empresa (DB)

Se debe ingresar a este último y con el usuario y contraseña de PostgreSQL previamente configurados, crear una base de datos, que será también el nombre de la empresa.

También se debe crear un usuario con todos los permisos (Full permissions). Este usuario será una especie de administrador. Luego, se pueden crear otros usuarios, con menos permisos o no según se necesite. Además, se puede activar el acceso de cada uno de estos usuarios a las distintas partes que conforman el LedgerSMB, según se necesite, y en una manera granular.

Se debe tener en claro que estos usuarios son creados por LedgerSMB en la base de usuarios de PostgreSQL, por lo que deben ser usernames únicos, relacionados o no con LedgerSMB.

Por esta razón, deben ser usuarios únicos por empresa; es decir, si se tiene dos empresas empresa1 y empresa2, y un usuario Juan Pérez que debe trabajar con ambas, se debe crear un usuario para cada una, por ejemplo jperez1 para la primera y jperez2 para la segunda.

Ingresar a la empresa

Para comenzar a trabajar con el sistema, se debe ingresar con uno de los usuarios creados específicamente para esa empresa o DB, en el URL de login.

Hecho esto, ya se puede comenzar a ingresar datos. Algunas recomendaciones y sugerencias a continuación.

Recomendaciones de uso y sugerencias

Nota: estas sugerencias fueron escritas para SQL Ledger, por lo que quizá no sean perfectamente aplicables a LedgerSMB. Las revisaré en cuanto pueda

Usuarios: uno para cada operador por empresa

Contraseña: una para cada operador por empresa

El LedgerSMB, si bien es muy completo, y tiene muchísima funcionalidad, se basa en cuatro partes principales que deben poner a punto.

  1. Plan de cuentas (opción Sistema > Cuadro de cuentas): si bien implementar un plan de cuentas contables no es lo más interesante ni sexy que se puede hacer en la vida, lo ideal es empezar por aquí. Si lo hacen adecuadamente según necesite la empresa, luego la conciliación, los balances, y cualquier otro dato surge naturalmente con perfección. También pueden usar el que viene preconfigurado.
    • El plan de cuentas incluye los impuestos como IVA. Éste ya está cargado en el plan que tienen actualmente en la empresa de pruebas, tanto para ventas como compras, para los tres valores que se usan en Argentina: 10,5, 21 y 27 por ciento.
  2. Proveedores (opción Cartera de pagos y Proveedores): aquí se debe agregar el número de proveedor si lo tiene, el nombre y el resto de los datos de contacto habituales. Es importante el correo-e ya que luego puede usarse para realizar pedidos en forma automática.
    • Se debe marcar qué IVA tiene el proveedor, o corresponde a su condición de IVA. También el idioma del proveedor, así como la moneda con la que se van a manejar. Es importante que la fecha inicial sea ANTERIOR a la primer factura que se tenga del proveedor.
    • En el campo NIT/CC/CE debe ingresarse el CUIT del proveedor sin los guiones
    • En el campo BIC debe ingresarse la condición frente al IVA
  3. Clientes (opción Cartera de cobros y Clientes): de manera similar a los proveedores, se deben indicar todos los datos de contacto del cliente. Se pueden utilizar los números de cliente que ya tengan, o bien dejar que el sistema utilice la propia numeración. Es importante seleccionar correctamente el IVA, o la opción “Impuestos incluidos en el precio”, lo cual indica que el operador calculará el IVA manualmente y lo incluirá en los precios, y que no debe adicionarse en la factura una línea de impuesto.
    • Es importante que la fecha inicial sea ANTERIOR a la primer factura que se le haga al cliente.
    • En el campo NIT/CC/CE debe ingresarse el CUIT del cliente sin los guiones
    • En el campo BIC debe ingresarse la condición frente al IVA
  4. Productos (opción Bienes y servicios): cada producto debe cargarse utilizando el código estándar internacional que estén usando, o bien tanto el internacional como el propio interno. También se puede especificar un SKU diferente para cada proveedor, con lo cual al realizar un pedido por ejemplo, el Ledger automáticamente se encarga de enviarle al proveedor sus propios SKUs. También se debe indicar el costo y el margen que se desea obtener.
    • Adicionalmente, se puede ingresar la unidad, el peso, y muchos otros datos que serán útiles luego para el trabajo diario. Para cada producto, puede indicarse varios proveedores, cada uno con su propio SKU, costo y moneda

Notas/trucos/ayudas

  1. Verán que para muchas cosas tendrán abajo de todo un botón “Guardar como nuevo”. Permite utilizar un comprobante o dato preexistente y sólo cambiando algunos datos, generar uno nuevo. Por ejemplo, pueden tomar una factura de telefonía del mes pasado, y generar la nueva sólo cambiando el número, la fecha y los importes, y pulsando el botón “Guardar como nuevo”
  2. Al ingresar los productos en una factura o cotización, pueden escribir el SKU, o parte de la descripción y pulsar Enter. El sistema buscará automáticamente lo que coincida: si es una sola coincidencia ya ingresará el ítem; si son varias coincidencias mostrará el listado para que el operador pueda seleccionar lo que necesita
  3. En la opción “Exchange rates” pueden ingresar los valores de compraventa de una moneda para el día de la fecha
  4. Se pueden ingresar pagos parciales o en formas diferentes para cada factura de compra o venta, así como la fecha en que ingresó dicho pago
  5. Para ver el estado de una cuenta corriente, se puede pulsar sobre Cartera de cobros > Informes > Impagados. Ahí deseleccionar Descripción y seleccionar Due (Adeudado), Line item, Moneda, y cualquier otra cosa que se necesite y luego pulsar en Continuar
  6. Para realizar una cotización, los pasos son:
    1. Ingresar los productos a cotizar, o bien actualizar los precios si ya están en el sistema
    2. Ir a Cotizaciones > Cotización, seleccionar el cliente y la moneda (y la tasa de cambio si es necesario)
    3. Indicar correctamente la validez, y el crédito
    4. Agregar los productos tal como se indicó anteriormente, escribiendo el SKU o parte del nombre, y una vez que el producto haya sido agregado, la cantidad y cualquier otro dato que se necesite cambiar manualmente
    5. Revisar cuidadosamente la cotización, actualizando y corrigiendo lo necesario
    6. Una vez que esté lista, pulsar el botón Guardar
    7. Para enviarla, pulsar en Correo electrónico, completar cualquier dato que se necesite incluyendo el asunto y el mensaje para el cliente, y seleccionar abajo formato HTML, y el método Incrustado (lo cual significa que no va a ir como adosado, sino en el cuerpo del mensaje)

Bibliografía