Taller de Programación Orientada a Objetos – Semana 5 – Reporte 5`
SISTEMA DE FACTURACIÓN
Título: Especificación Técnica "Sistema de Facturación"
Autor: Juan Carlos Espinosa Ceniceros
Version del software: 0.3
Índice:
0. Introducción y Generalidades
1. Clases y Métodos
2. GUI
3. Base de Datos
0. Introducción
El Sistema de Facturación involucra una serie de interfaces que en conjunto generan uno de los sistemas de administración más poderoso del mundo.
0.1 Objetivo
El objetivo del software es mejorar la administración de una empresa, proporcionando las herramientas necesarias para:
- Facilitar la creación de facturas.
- Facilitar la contabilidad de la empresa.
- Reducir tiempos y costos.
0.2 Descripcion Funcional
El sistema contempla las siguientes funciones:
- Manejar una base de datos con todos clientes.
- Manejar una base de datos con las facturas.
- Mantener un registro de todos los movimientos realizados a una factura, un cliente y a la base de datos en general.
- Generar de forma automática reportes de contabilidad, ya sean diarios, semanales, quincenales o mensuales.
- Generar según las necesidades del usuario, copias digitales de cada documento, las cuales podrán ser impresas cuando sea necesario.
- Permitir la búsqueda de un documento, aplicando una variedad de filtros según las necesidades del usuario.
0.3 Aspectos técnicos
- Sistema portable (compatible, por lo menos, con los 3 sistemas operativos más usados en PCs)
- Escrito en lenguaje de programación JAVA, integrando librerías de MySQL.
- Incorporación de todas las librerías necesarias para exportar documentos a PDF, impresora y facturación electrónica
Se trata de un sistema monousuario, basado en las necesidades de una sola persona que a su vez es la administradora del negocio, por lo que no se ha pensado en implementar algún sistema de seguridad. Aún asi se ha evaluado esta opción y posiblemente se incluya un sistema de control en el cual sea necesario introducir una contraseña para realizar algunas acciones delicadas. No se tienen visualizadas dichas acciones delicadas, pero se espera que con el tiempo salgan a relucir estos detalles.
1. Clases y Métodos
Se contemplan 4 clases padre diferentes y 5 subclases. Una mejor funcionalidad posiblemente se traduzca en algunas clases extra, pero eso se verá conforme haya más avances.
1.1 Clase Billing
Es la clase principal, prepara la interfaz gráfica creando la ventana principal, una barra con menús y una barra de herramientas. Controla las comunicaciones entre las demás clases y la comunicación entre la base de datos y la aplicación principal. Cierra las comunicaciones y finaliza la aplicación.
1.1.1 Subclase Proxy
Su función principal es abrir un camino entre la aplicación principal y la base de datos. Sus atributos pueden ser una factura y una persona. Abre, manipula, guarda y cierra la base de datos. Busca, abre, manipula, guarda y cierra archivos.
Métodos de la Subclase
1.1.1.1 Método write()
Su función es guardar algún dato dependiendo del tipo de información recibida, puede recibir una factura o un cliente. El método responde de diferente forma a cada caso. Si el dato es un cliente, se procede a almacenarlo en la base de datos. Si el dato es una factura, se procede a guardarla en un formato compatible. Para ello se genera ya sea un nuevo archivo en la computadora o un nuevo registro en la base de datos. Los datos se escriben en el archivo de forma que puedan ser extraídos fácilmente después y se procede a almacenarlo. Los datos del cliente se vacían en el registro y se procede a guardarlo en la base de datos.
*NOTA: Aún falta definir el formato y la manera de guardar la factura. Falta generar la base de datos.
1.1.1.2 Método read()
Su función es extraer datos, ya de una factura o de la base de datos. Recibe un string que indica el valor a extraer y un entero cuya función es actuar como bandera e indicar el tipo de dato enviado. El método abre la base de datos o un archivo según sea el caso. Posteriormente se lee en busca de coincidencias, una vez que se ha dado con el dato, esté se almacena en alguna variable, lista o estructura y se regresan los datos que se han pedido.
*NOTA: Aún falta definir el proceso para ejecutar este método y la forma en que los datos serán regresados.
1.1.1.3 Método find()
Su función es realizar búsquedas profundas, puede combinarse con el método read() para generar resultados. Una vez realizado el proceso de read() su función será ordenar los datos hallados y mostrarlos en una estructura lógica que pueda ser interpretada fácilmente por el usuario.
Recibe un string que indica el valor a extraer y un entero cuya función es actuar como bandera e indicar el tipo de dato enviado. Regresa los resultados de la búsqueda.
*NOTA: Falta la implementación completa.
1.1.1.4 Método delete()
Se encarga de eliminar una factura o cliente de la base de datos. Su funcionalidad se combina con los métodos read() y find() para poder ubicar el archivo o dato preciso a eliminar.
Simplemente borra el archivo o registro seleccionado sin alterar la estructura de los demás registros o archivos. Recibe un string que indica el nombre del archivo o registro a eliminar y un entero cuya función es actuar como bandera e indicar el tipo de dato enviado. Regresa un entero, 0 para éxito, cualquier otro valor para error. Posteriormente se muestra un mensaje indicando la razón del error.
*NOTA: Falta la implementación
1.1.2 Método gui()
Como su nombre lo indica, contiene todas aquellas instrucciones necesarias para generar la interfaz gráfica. Importa funciones de la librería javax.swing para crear ventanas, paneles y botones necesarios para la interfaz. Se genera la ventana principal y los paneles donde se colocarán los demás elementos (botones, cuadros de texto, etcétera). Se definen tamaños, colores y demás elementos necesarios.
1.1.3 Constructor
public Billing(): Es el constructor de la clase, su función es generar una nueva área de trabajo. Provee los canales de comunicación y demás funciones.
1.1.4 Método principal
public static void main (String[] args ): Clase principal dentro de cualquier código generado en el lenguaje de programación JAVA, se encarga de llamar al contructor y al método Gui().
*NOTA: Falta la implementación avanzada del constructor, el método gui() y el método main().
1.2 Clase Person
Son las personas involucradas en una factura, es decir, el proveedor y el cliente.
Esta clase tiene dos subclases:
1.2.1 Subclase Client
Genera un nuevo cliente, es el primer paso para generar la factura. Los atributos son los justos para lograr una buena identificación del mismo.
1.2.2 Subclase Supplier
Genera un nuevo proveedor para la factura, esto es en teoría ya que solo existe un solo proveedor. Por consiguiente se tiene la teoría de que los datos de esta persona serán estáticos a menos que se necesite lo contrario.
1.2.3 Método getData()
Su función es pedir los datos que almacenaran los atributos del cliente. Se necesita primero implementarlo en la línea de comandos, una entrada y salida básica de datos. Posteriormente se debe implementar en forma de cuadros de texto en la ventana principal. Los datos son almacenados en el cliente. El cliente debe enviarse a la factura para su posterior manipulación.
1.3 Clase Order
Es el primer paso para generar una factura, se crea una lista con todos los artículos incluidos en la orden de compra.
1.3.1Método getOrder()
Su función es capturar la orden y almacenar la información en los atributos de la misma. Se implementa una interfaz secilla, una entrada y salida de datos básica en la terminal. Después se implementa por medio de campos de texto en la interfaz. Toda la orden se almacena, se empaqueta y es enviada a la factura.
1.4 Clase Bill
Es el último lugar que visita toda la información que hemos capturado, por consiguiente, es la clase que se encarga de generar la factura y redireccionarla de diferentes formas.
La clase tiene como atributos un proveedor (Supplier), un cliente (Client) y un pedido (Order). La unión de estos tres conforma la factura. Posteriormente la factura queda en Standby, esperando alguna instrucción del usuario. Dichas instrucciones quedan definidas por los siguientes métodos:
1.4.1 Método make()
Hasta ahora es un método hipotético. Su función será generar folios para sí misma, el cual debe ser progresivo y diferente a todos los anteriores, posteriormente se unirán las 2 personas (Person [Supplier, Client]) y el pedido. Se generara la factura.
Su función parece más la de un constructor, pero veremos si es necesario para realizar otras acciones.
1.4.2 Método export()
Su función es la de exportar la factura a diferentes formatos, puede ser en formato local para simplemente guardarla en la computadora.
También se puede exportar la factura a PDF para generar una versión electrónica. Y la última opción es generar una versión compatible para ser impresa.
*NOTA: Falta la implementación de ambos métodos y las librerías que ayudaran a exportar
2. GUI
La ventana principal es generada por el método gui() dentro de la clase principal Billing.
gui() genera una ventana, posteriormente se genera la barra de menús con 3 botones a los cuales se asignan estas funciones:
1. Nueva Factura: Provee herramientas para generar una nueva factura y otras acciones.
2. Base de Datos: Provee herramientas para manipular la base de datos.
3. Búsqueda: Provee herramientas y filtros para buscar un cliente o factura.
Los tres botones anteriores son montados en un panel tipo gridLayout()
Cada uno de los menús afecta una segunda barra llamada barra de herramientas. Esta barra provee acciones específicas para cada menú por lo cual debe ser redibujada cada vez que se cambia entre los 3 menús antes escritos.
Al centro se encontrara el panel principal, por asi llamarlo. Es el panel que cambiara dependiendo del menú seleccionado y posteriormente servirá para mostrar el área con los campos para generar una nueva factura, los resultados de una búsqueda o la visualización de una factura en PDF.
3. Base de datos
Se integra al sistema una base de datos usando MySQL.
*NOTA: Falta la base de datos.
4. Referencias
Estas referencias explican a grandes razgos lo que es una especificación técnica:
http://spanish.joelonsoftware.com/PainlessSpecs/2.html
http://spanish.joelonsoftware.com/PainlessSpecs/WhatTimeIsIt_Spanish.html
http://www.ub.edu.ar/catedras/ingenieria/ing_software/ubftecwwwdfd/espsoft/espsoft.htm
http://es.w3support.net/index.php?db=so&id=677901
Estas referencia contienen ejemplos acerca de como realizar una especificación técnica
http://www.joelonsoftware.com/articles/fog0000000043.html
http://www.cajatrujillo.com.pe/portalnew/doc/proveedores/ESPECIFICACIONESTECNICASSWANTIFRAUDE.pdf
http://www.gridlab.org/Resources/Deliverables/D9.2.pdf