Mostrando entradas con la etiqueta jGnash. Mostrar todas las entradas
Mostrando entradas con la etiqueta jGnash. Mostrar todas las entradas

martes, septiembre 24, 2013

Developing a jGnash plugin

jGnash is a personal financial software, available as Free Libre Open Source Software (FLOSS). I've been using it since some years, and i can say that is a great software. It has many functionalities, PDF reports and charts, to register and control your incomes and expenses. It just lack of some analysis reports, so i decided to build my own.

It's possible to create plug-ins for jGnash. So you can add a new functionality or a new report, without recompile the whole software. There's a folder in jGnash installation directory called "plugins", in this folder you can add a JAR file containing the new plug-in and next time you start jGnash, it will load your plug-in.

Requirements to build a new plug-in

For build a new plug-in you will need Java programing knowledge, and some specifics thing depending on the kind of functionalities that you are trying to extend. For building new graph charts or reports, I will suggest experience related to: Java Swing, JFreeChart, DynamicJasper and JasperReports. There is not good documentation about packages and source code of jGnash, but you can download the source code and will find is not hard to read, also you will find help on email lists.

According to jGnash help menu, these are the external libraries they use, so could be good also know a little bit about them: args4j, db4o, JasperReports, DynamicJasper, JFreeChart, JGoodies Animation, JGoodies Forms, JGoodies Looks, Apache MINA, XStream and SwingX.

I like Eclipse IDE, so I will use it, but any Java IDE should be good.

Of course, you must have installed jGnash, to link the jars files to your new plugin project.

Architecture

jGnash provides a plug-in system that is easy to understand. The jgnash2.jar provides a interface called: jgnash.plugin.Plugin and a abstract class called: jgnash.plugin.AbstractEnabledAction, to create a new plugin, inside the new plugin jar, just implement the Plugin interface and extend the AbstractEnabledAction.


Also it will be needed to write a couple of lines inside the jar MANIFEST file.

Steps to create a basic plugin

1- Start a new Java Project, this is a normal Java project in Eclipse IDE.

2-In the Java Build Path of the project (Right click on the project, Properties, Java Build Path, Libraries) add the External Jar: jgnash2.jar from your jGnash installation path.


3- Inside the project, create a new file called: MANIFEST.MF

This file must contain something similar to this:

Manifest-Version: 1.0
Plugin-Activator: myplugin.mypackage.MyPlugin
Plugin-Version: 1.0

Where "Plugin-Activator:" points to the class that implements the jgnash.plugin.Plugin interface.

4- Create the Plugin implementation class, that indicate, which menus will be added to the user interface and which actions will be executed. This is a simple example:

package myplugin.mypackage;

import javax.swing.JMenuItem;
import javax.swing.JPanel;

import jgnash.plugin.Plugin;

public class MyPlugin implements Plugin{

    @Override
    public JMenuItem[] getMenuItems() {
        JMenuItem menuItem = new JMenuItem();

        menuItem.putClientProperty(Plugin.PRECEDINGMENUIDREF, "new-command");
        menuItem.setAction(new MyAction());

        return new JMenuItem[] { menuItem };
    }

    @Override
    public String getName() {
        return "My Plugin";
    }

    @Override
    public JPanel getOptionsPanel() {
        return null;
    }

    @Override
    public void start() {
    }

    @Override
    public void stop() {  
    }
}

The line menuItem.putClientProperty(Plugin.PRECEDINGMENUIDREF, "new-command"); will tell to jGnash where to add the new menuItem, the preceding code, indicate before New Command menuItem. Other places you can choose are listed in the source code of jGnash, check this file:

/jgnash2/jgnash-resources/src/main/resources/jgnash/resource/main-frame-actions.xml

Another important line is: menuItem.setAction(new MyAction()); it says, when user clicks this menuItem execute the code inside MyAction class, that we must create later.

5- Implementing AbstractEnabledAction.

package myplugin.mypackage;

import java.awt.event.ActionEvent;

import javax.swing.Action;
import javax.swing.JOptionPane;

import jgnash.ui.actions.AbstractEnabledAction;

public class MyAction extends AbstractEnabledAction {

    public MyAction(){
        putValue(NAME, "Title");
        putValue(Action.SHORT_DESCRIPTION, "Description");
    }
  
    @Override
    public void actionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(null, "Hello World");
    }
}

It's important to set the "NAME" and "Action.SHORT_DESCRIPTION" values, they will be shown as the title and tool tip text of the menuItem.

The actionPerformed method will be executed when the menuItem is clicked by the user, in this example will show a simple dialog window saying "Hello World".

6- Creating the jar file. In Eclipse, right click over your project, select Export, and then Jar File.


After that, follow the instructions, and take care when "Jar Manifest Specification" windows appear, select the option: "Use existing manifest from workspace", and choose the "MANIFEST.MF" file that we have created before.


7- Copy the generated jar file inside "plugins" folder of jGnash, run jGnash and you will see the message "Hello World" when you click the new menu "Title" inside "File" menu.



Thanks to jGnash developers for this great software. My hope is that lots of jGnash plug-ins come alive to make it a better software for all.

domingo, enero 08, 2012

Contabilidad personal con jGnash

Contabilidad personal con jGnash


El año pasado junto con otros amigos (Hamer y Marconi) nos apuntamos a recibir un curso de Finanzas para no Financieros en la UPOLI.



En ese curso aprendimos un poco de contabilidad por partida doble, activo, pasivo, capital, etc. Luego intentando implementar los conocimientos recién adquiridos y llevar control de mis finanzas personales busqué un software libre que me asistiera, así encontré: jGnash.


jGnash según Wikipedia:

jGnash es una aplicación libre de gestión de finanzas personales programada en Java.

Entre sus principales características destaca:

- Está basado en transacciones de partida doble (debe y haber)
- Cuenta de ajuste o reconciliación
- Generación de informes o reportes en PDF
- Soporte para múltiples monedas
- Actualizaciones automáticas en línea de tasas de cambio de monedas
- Catálogo de cuentas personalizable
- Interfaz de usuario amigable
- Multiplataforma, es ejecutable en cualquier plataforma que soporte Java (linux y windows)

Su sitio Web, desde el cual se puede encontrar más información o desde el cual se puede descargar, es:

http://sourceforge.net/apps/mediawiki/jgnash/index.php?title=Main_Page

Instalar jGnash

1- Descargar la última versión de jGnash de su sitio Web.
2- Descomprimir el zip

Ejecutar jGnash y crear una nueva base de datos

Desde una consola ejecutar el jar de la siguiente manera (en windows se puede hacer doble clic sobre el ejecutable):

denis@host:~/jGnash$ java -jar jgnash2.jar

Seleccionar del menú Archivo, la opción Nuevo. Y en los siguientes pasos es necesario indicar la ruta y el nombre del archivo a crear, moneda por defecto, otras monedas a ser soportadas, aunque luego se puede ajustar esta configuración, al final se selecciona el catálogo de cuentas inicial que es posible también personalizar.

Ruta y nombre del archivo:


Moneda por defecto de las cuentas:



Seleccionar otras monedas a soportar:


Los catálogos de cuentas disponibles por defecto están en inglés, pero el usuario luego puede crear el suyo propio en español.



Al finalizar ya se tiene un archivo con el catálogo de cuentas inicial y sin ninguna transacción.

Ejercicio simple con jGnash

1. Suponer que a la fecha se tiene una cuenta de ahorro en un banco, con C$ 10,459.45 córdobas
2. En mi cartera del pantalón tengo C$ 350.00 córdobas
3. Suponer ingresos mensuales en concepto de salario de fin de mes por C$ 4,000.00 en 3 meses, estos son depositados al banco.
4. Cada 15 de mes retiro el 75% del salario y ahorro el 25%.
5.En el primer mes he gastado C$ 110.00 córdobas en recargas al celular, en el segundo mes C$ 55.00 y en el tercero C$ 20.00 los cuales pago con cash.
6. Suponer que en el primer mes fuí al cine y pagué C$ 65.00 córdobas con la tarjeta de débito de la cuenta bancaria
7. Generar los informes siguientes para el período registrado: patrimonio o capital neto, balance general, y el estado de resultados o pérdidas y ganancias.

La contabilidad por partida doble, se basa en que el dinero que entra debe haber salido de algún lugar, y el dinero que sale debe entrar en algún lugar. "No hay deudor sin acreedor, ni acreedor sin deudor", entendiendo este principio es fácil usar jGnash.

Para este ejemplo, en el punto número 1 para que en el banco (cuenta Saving en jGnash) ingresen (o se depositen) los C$ 10,459.45 córdobas iniciales de este conteo, es necesario que ese mismo monto salga de otra cuenta (contracuenta), la contracuenta para este punto es básicamente lo que los contadores llaman el balance de apertura o capital inicial (cuenta Opening Balances en jGnash).

Con el botón Registro de la izquierda de la pantalla activada, seleccionar la cuenta Opening Balances, en la parte derecha hay 4 fichas Disminución, Aumento, Transferencia y Ajuste, evidentemente estamos aumentando el capital inicial por lo que es necesario seleccionar la ficha Aumento, el siguiente paso importante es seleccionar la contra cuenta, o sea donde se va depositar el dinero, en este ejemplo en la cuanta de bancos (Savings), luego colocar una breve descripción de la transacción, completar la fecha y el monto:



Dado que se utiliza partida doble, es posible seleccionar la cuenta Savings, para verificar que en efecto el banco tiene un depósito de C$ 10,459.45 córdobas.



Vale destacar que el registro de la transacción no necesariamente tenía que realizarse desde la cuenta Opening Balances, sino que también se pudo haber realizado desde la cuenta Saving y seleccionar como contra cuenta Opening Balances sin alterar el mismo resultado.

El punto número dos del ejemplo también corresponde con un balance de apertura de la caja chica, cash, o en finanzas personales mi cartera. Se puede registrar igual que antes, usando las cuentas Opening Balances y Cash:



Punto número 3, suponer ingresos mensuales en concepto de salario de fin de mes por C$ 4,000.00 en 3 meses, estos son depositados al banco.

Para este ejemplo suponer que cada fin de mes se depositan 4000 en la cuenta Saving, este dinero debe ingresar por algún lado, es evidente que debe ingresar por la cuenta Salary del grupo Income Accounts.



Es fácil usar jGnash como registrador de transacciones contables. En otro momento comparto el ejercicio resuelto completamente.