# Programa de caja (WIP)

### Que es?
Es un pequeño programa pensado para realizar el conteo de dinero en la caja de nuestro restaurant familiar `:3`
Ademas de tener la capacidad de generar informes en xls.

### Como utilizarlo?
Para poder hacer build del programa es necesario importarlo a IntelliJ y hacer build del artifact `Programa Caja`, por ello esta incluida la carpeta `.idea` en el repositorio. IntelliJ deberia hacerse cargo de las dependencias del projecto (intente utilizar maven sinceramente pero no funciono muy bien al hacer una build junto desde el IDE).

Luego de hacer la build, en la carpeta `dist` se encontrara el archivo `caja.jar` el cual es el ejecutable, junto al el se encuentra el archivo `properties` que ya esta disponible en el repositorio, en este se puede seleccionar el look and feel que tendra el programa y el sistema de base de datos que se utilizara, por ahora solo tiene soporte para mysql y sqlite, siendo sqlite el que realmente funcionara ya que aun no termino de portar las querys para mysql.

La base de datos actualmente deberia crearse por si misma, los scripts que se utilizan son los que estan en la carpeta `database` y estos son comprimidos en un zip el cual se guarda en la carpeta `data` bajo el nombre `version_scripts`, este es el archivo que el programa buscara para descomprimir y ejecutar los scripts cuando encuentre que no existe base de datos, el objetivo de esto es que la base de datos sea facilmente actualizable agregando un script sql el cual sera ejecutado para actualizar de version.
Deberia usar un orm pero no e encontrado uno que realmente me venga bien, tomando en cuenta que estoy usando sqlite y no hay mucho soporte para el en los orm para java.

### Screenshots!
##### Pantalla de ingresos
![ingresos](/screenshots/pantalla_ingresos_croped.png)
##### Pantalla de egresos
![egresos](/screenshots/pantalla_egresos_croped.png)
##### Pantalla de arqueo
![arqueo](/screenshots/pantalla_arqueo_croped.png)
##### Libro de ventas
![libro_de_ventas](/screenshots/informe_generado_croped.png)
##### Informe de egresos
![informe_egreso](/screenshots/informe_egresos_croped.png)

### Features?
* Calcula total de ingresos y total de egresos
* Generacion de informes, en estos momentos genera un informe de libro mensual y uno de egresos.
* Pueden agregarse distintos tipos de ingresos y egresos facilmente (Aunque los informes deben ser modificados para agregar esta informacion en ellos)
* Realiza los calculos del arqueo de la caja, comprobando cuanta diferencia existe entre los lo que se a rendido y lo que se debe rendir.
* Se pueden realizar operaciones matematicas en los campos numericos, como son los campos de valor, efectivo y documentos.
* Borrador con el que se puede separar el fondo del deposito, se debe indicar el deposito cada vez que se abra, pero ahi esta :3

### TODO
- [x] Informe de libro mensual.
- [x] Informe de egresos.
- [x] Alguna especie de borrador para contar el dinero y separar el fondo del deposito antes de ingresarlo en la ventana de arqueo
- [ ] Migrar a un ORM para mejor soporte de base de datos y mayor velocidad (Mi codigo de comunicacion con base de datos no es el mejor).
