Índice general - ugrepositorio.ug.edu.ec/bitstream/redug/18899/1/ug... · 5.6.2 pruebas con modulo...
TRANSCRIPT
ÍNDICE GENERAL
AGRADECIMIENTO I
DEDICATORIA II
TRIBUNAL DE GRADUACIÓN III
DECLARACIÓN EXPRESA IV
RESUMEN V
ÍNDICE GENERAL VI
CAPÍTULO 1
MANUAL TÉCNICO 1
1.1 Introducción 1
1.2 MVC: Model View Controller 2
1.3 Struts Framework 5
1.4 Estructura 6
1.5 Diagrama de Secuencia. 6
1.6 Diagrama de Clases 8
1.7 Diagrama de Colaboración 9
1.8 Diagrama de objetos relación modulo de cartera 10
1.9 Script para la creación de las tablas 11
1.10 Codificación de los componentes 28
CAPÍTULO 2
MANUAL DE USUARIO 134
2.1. Funcionalidad del Módulo 134
2.2. Ingreso al Sistema. 135
0
UNIVERSIDAD DE GUAYAQUIL
Facultad de Ciencias Matemáticas y Físicas
Carrera de Ingeniería en Sistemas Computacionales
“Desarrollo del Módulo de Cartera”
PROYECTO DE GRADO
Previo a la Obtención del Título de:
INGENIERO EN SISTEMAS COMPUTACIONALES
Autores:
Sthefanie de Lourdes Izurieta Jaramillo
Ernestina Yesenia Suárez Jiménez.
Víctor Arcángel Soriano Cruz
G U A Y A Q U I L - E C U A D O R
AÑO: 2 0 0 6
1
ÍNDICE GENERAL
AGRADECIMIENTO I
DEDICATORIA II
TRIBUNAL DE GRADUACIÓN III
DECLARACIÓN EXPRESA IV
RESUMEN V
ÍNDICE GENERAL VI
CAPITULO 1:
INTRODUCCIÓN
1.1 Problemáticas 1
1.2 Solución de las problemáticas 3
1.3 Definición del proyecto del modulo cartera 5
1.4 Visión 8
1.5 Misión 8
1.6 Objetivos del proyecto 8
1.6.1 Objetivos generales 8
1.6.2 Objetivos específicos 9
1.7 Alcances del proyecto 10
1.8 Beneficios del proyecto 11
1.9 Cronograma 12
2
1.10 Recursos necesarios 13
1.10.1 Recurso de Hardware 13
1.10.2 Recurso de Software 14
1.10.3 Recurso Humano 15
1.11 Metodología del proyecto 15
1.11.1 Metodología del Análisis 15
1.11.2 Metodología del Diseño 18
CAPITULO 2:
ANÁLISIS
2.1 Levantamiento de información 27
2.1.1 Introducción 27
2.1.2 Métodos de levantamiento de información 28
2.1.2.1 Entrevista 28
2.1.2.2 Observación 29
2.1.2.3 Investigación tecnológica (Internet) 30
2.1.3 Conclusiones 30
2.1.4 Análisis de Requerimiento 31
2.2 Diccionario de datos 35
2.3 Diagrama de flujo de datos (DFD) 43
2.3.1 Flujo de procesos de Seguridad de la Aplicación 43
2.3.2 Flujo de procesos de Auditoria de la Aplicación 44
3
2.3.2 Flujos de procesos del módulo de cartera 45
2.4 Diagrama caso de usos 48
2.4.1 Casos de uso Seguridad de la Aplicación 48
2.4.2 Casos de uso Auditoria de la Aplicación 49
2.4.3 Casos de uso para módulo de cartera 50
2.5 Descripción de Casos de Uso 56
2.5.1 Detalle de Usos Seguridad de la Aplicación 56
2.5.2 Detalle de Usos Auditoria de la Aplicación 58
2.5.3 Detalle de Usos Modulo Cartera 59
2.6 Diagrama de objeto y relación 68
2.6.1 Módulo de Cartera 68
2.7 Diagrama de secuencias 70
2.7.1 Diagrama de Secuencias para Seguridad de la Aplicación 71
2.7.2 Diagrama de Secuencias para Auditoria de la Aplicación 75
2.7.3 Diagrama de Secuencias Módulo Cartera 76
CAPITULO 3
DISEÑO
3.1 Diagrama de clase 89
3.1.1 Diagrama de Clase para la Seguridad de la Aplicación 90
3.1.2 Diagrama de Clase para Auditoria de la Aplicación 90
3.1.3 Diagrama de Clase Módulo Cartera 91
4
3.2 Generalización 103
3.2.1 Esquema de Generalización Modulo Cartera 103
3.3 Diagrama Objeto-Relación con atributos 104
3.3.1 Seguridad de la Aplicación 104
3.3.1 Auditoria de la Aplicación 105
3.3.1 Diagrama O-R Módulo de Cartera 105
3.4 Detalle de Tablas del Módulo Cartera 108
CAPITULO 4
CODIFICACION
4.1 Desarrollo de Sistema 116
4.1.1 Creación de la Base de Datos 116
4.1.2 Creación de los Componentes (Módulos) 116
4.1.2.1. Seguridad 117
4.1.2.2. Auditoria 118
4.2 Principales Técnicas de Desarrollo 118
4.2.1 Técnicas Estructuradas con M.O.O. 118
4.2.2 Codificación Utilizando Strusts 119
4.3 Calidad del Sistema 120
4.3.1 Cumpliendo los Requerimientos o Alcances 120
4.3.2 valor Agregado (Otros Alcances) 120
5
CAPITULO 5
IMPLEMENTACIÓN Y PRUEBAS DEL SISTEMA
5.1 Elementos Físicos 122
5.2 Elementos Lógicos 123
5.3 Recurso Humano 124
5.4 Infraestructuras 124
5.5 Capacitación de Usuarios 125
5.6 Pruebas del Sistema 125
5.6.1 Pruebas con Módulo Operaciones 125
5.6.2 Pruebas con Modulo Inventario 126 5.6.3 Pruebas con Modulo Tesorería 126 5.6.4 Pruebas con Modulo Contabilidad 127
5.7 Recomendaciones y Conclusiones 128
5.7.1 Recomendaciones 128
5.7.2 Conclusiones 129 5.8 Glosario Técnico 130
1
CAPITULO 1
1. INTRODUCCIÓN
1.1. Problemáticas
Una empresa dedicada a la actividad comercial que no cuenta con un
sistema automatizado de oficina ERP, será nuestro caso de estudio a
resolver, para esto nos valdremos de toda las fuentes necesarias para
recopilar la información convertidas en datos útiles para la realización de
este proyecto. Siendo la problemática la que a continuación se detalla.
La mayoría de las empresas al no contar con un sistema organizado y
automatizado no podrán realizar sus operaciones de manera eficiente y
que estas vayan de la mano con todos los módulos del sistema financiero,
para nuestro caso, siendo el módulo de cartera el asignado; el problema
radica en la recuperación de valores pendiente de cobro por los
siguientes problemas:
La falta de control de pagos: El departamento encargado no cuenta
con las herramientas necesarias para el seguimiento oportuno en el
2
cobro de valores pendientes; considerando además, los diferentes
factores de situación político-económico del país, por lo cual un
cliente involuntariamente pudiera llegar a caer en mora.
No cuentan con las herramientas necesarias para establecer
acuerdos de refinanciamientos o reestructuración de cuentas por
cobrar: El departamento debe estar al día con las políticas internas
establecidas o por las que crean los entes reguladores.
El no tener un sistema integrado con los otros módulos: Lo cual se
debe a la poca comunicación con los departamentos relacionados y
por ende, la falta de actualización de las bases que contiene la
información de los clientes en mora.
A continuación se muestra un esquema Figura 1.1.1 de las
problemáticas del módulo de cartera.
Figura 1.1.1 Principales Problemáticas de Cartera
3
1.2. Solución de las problemáticas
Una vez que se han determinado los puntos críticos, se da una solución
general al mismo. El desarrollo de un sistema ERP (Enterprise Resource
Planning) no requiere que un negocio cambie sus prácticas, los ERP se
adaptan a las reglas de los negocios, y operan vía bases de datos
integradas y básicamente en un conjunto de datos, ya que los ERP son
un conjunto integrado de finanzas, distribución y manufactura con
interfases de algunas otras aplicaciones, cada uno de ellos se
complementan para dar un proceso óptimo del negocio; siendo los
módulos a desarrollar:
Módulo de Ventas: Venta de bienes y/o servicios de la organización
Módulo de Compras: Adquisición de bienes y/o servicios para la
organización
Modulo de Presupuesto: Gestión presupuestario para los diferentes
departamentos.
Módulo de Contabilidad: Control de todo el plan de cuentas y estado
financiero de la empresa.
Modulo de Tesorería: Cancelación de valores por pagar y por cobrar
Módulo de Cartera: Recuperación de cartera corriente o vencida.
Módulo de Activo Fijo: Registro de todos lo bienes tangibles e
intangibles con los que cuenta la empresa.
4
Módulo de Recursos Humanos: Control y evaluación constante del
recurso humano, así como también de la convocatoria interna o
externa para la ocupación de alguna vacante en determinada área.
Módulo de Rol de Pago: Se llevará un registro de los ingresos y
egresos del empleado.
Módulo de Mercadotecnia: Análisis de estrategias y competencia
para enfrentar los retos del mercado.
Módulo de Operaciones: Área encaminada al control y/o entrega de
productos cancelados cuya transacción finaliza al momento de llegar
al cliente en óptimas condiciones y con guía de remisión como
constancia de la misma.
Módulo de Inventario: Registro de todos los movimientos de bodega.
Estos módulos se desarrollaran con una tecnología avanzada, de una
arquitectura de 3 capas:
Capa de Presentación: Se define el diseño de Interfaz de
Usuario.
Capa de Negocios: Las entidades empresariales, que representa
objetos que van a ser manejados o consumidos por toda la
aplicación; los componentes no deben tener acceso directo a la
base datos pero deben utilizar componentes lógicos de acceso a
datos.
5
Capa de acceso a los datos: Uso de las transacciones siempre
que se acceda a la base de datos. No colocar elementos de
conexión de la base de datos en formularios. Evitar cualquier
código de la lógica del negocio en los procedimientos
almacenados.
En el siguiente gráfico Figura 1.1.2 se puede apreciar de una manera
más clara la arquitectura de 3 capas.
Interface de Usuario(Visual Basic,
Java, ..)Lógica del Negocio
(C++, Java, ..)
Servidor de BDs(C++ & SQL, ..)
Interface de Usuario(Visual Basic,
Java, ..)Lógica del Negocio
(C++, Java, ..)
Servidor de BDs(C++ & SQL, ..)
Figura 1.1.2 Arquitectura De Tres Capas
1.3. Definición del proyecto del modulo cartera
En los actuales momentos nos encontramos en una economía global y
competitiva, por lo cual es indispensable que los administradores de las
empresas desarrollen estrategias que les ayuden a satisfacer las
necesidades de clientes, quienes son cada vez más exigentes;
6
anticipándonos a sus requerimientos y dándoles un trato personalizado a
cada uno de ellos.
En la actualidad, las compañías buscan implementar sistemas para que
manejen todas las áreas del negocio de tal forma que estén integrados.
Muchas han buscado nuevas herramientas tecnológicas para poder
optimizar los procesos operativos internos para así ahorrar costos y ser
más eficientes, lo que tiene como consecuencia un mejor posicionamiento
y la atracción o bien conservación de clientes.
Los sistemas de ERP forman parte fundamental de las estrategias de las
grandes empresas actuales, y para el desarrollo de los mismos
utilizaremos la tecnología OPEN SOURCE la cual nos permitirá llevar a
cabo nuestros objetivos.
Para nuestro caso de estudio módulo de cartera podemos acotar lo
siguiente:
El Sistema de Cartera surge como una necesidad de la empresa para
satisfacer a sus clientes más importantes otorgando un crédito definido a
través de políticas generales de la empresa.
Los clientes más importantes son evaluados en su solvencia moral y
económica como un medio de garantizar la recuperabilidad de la cartera.
Los niveles de autorización de crédito para evitar posibles malas
interpretaciones o autorizaciones de crédito inadecuadas, son evaluados
en el interior de la empresa.
7
Por lo tanto esto no constituye un alto riesgo crediticio, puesto que el
crédito es celosamente vigilado por el Jefe del Área (Autorizador) y en
casos de montos más elevados para las compañías relacionadas, por el
Gerente de la empresa. Por tanto existe un menor riesgo de contraer
cuentas malas o incobrables.
En muchos casos de créditos las empresas otorgan una extensión del
crédito en un plazo específico con cargo de intereses. En otras empresas
esto no se cumple, por lo tanto las Cuentas por Cobrar se hacen efectivas
en el plazo indicado y se convierten en un activo verdadero en ese
tiempo.
Esta aplicación tiene como finalidad manejar toda la información referente
a la cartera, la misma que interactúa con los módulos de Ventas,
Tesorería, Contabilidad, Rol de Pagos, entre otros.
Por ejemplo, la unión entre las áreas de cartera, venta y contabilidad es
cada vez más importante, pues ayudan a modernizar los procesos
internos y mejorar la eficiencia. Los empleados pueden, por ejemplo,
utilizar un proceso seguro para presentar informes de cobros, con muy
poco trámite, simplemente un sistema que es utilizado para unir diferentes
elementos de la organización, y por lo tanto ayuda a acelerar los procesos
de negocios y hacer mejor uso de los recursos.
8
Dicho enfoque, debe por supuesto, caracterizarse por altos niveles de
desempeño, un bajo costo y, en términos prácticos, flujos de trabajo y
reglas.
1.4. Visión
Llevar un control exhaustivo de todos los clientes en mora, lo cual me
permita de una manera eficiente disminuir la cartera en el menor tiempo
posible generando ingresos que podrán ser reutilizados en beneficio de la
organización.
1.5. Misión
Es proveerles una herramienta funcional que ayuden a mejorar la
eficiencia en el desarrollo de sus actividades, liberándolos de los
procesos manuales, proporcionando los instrumentos necesarios que
conlleven a un mejor análisis en el soporte de la toma de decisiones.
1.6. Objetivos del proyecto
1.6.1. Objetivos generales
Automatizar las funciones que se efectúan en el área de cuentas
por cobrar o cartera de tal manera que permita realizar las
operaciones de manera eficiente y efectiva.
9
La necesidad de responder a los requerimientos de la Gerencia
de otorgar créditos a sus principales clientes dándole facilidades
de pago, acorde a su solicitud previamente establecida.
Facilitar el manejo de gran volumen de información en el área de
cartera.
Obtener una gran variedad de reportes, para que de esta manera
se puedan tomar decisiones.
Satisfacer las necesidades de los usuarios en áreas relacionadas
a los clientes (cartera).
Acceder a la información de forma rápida, fácil y completa.
1.6.2. Objetivos específicos
A través de la toma de decisiones, mejorar el desempeño de las
actividades de a Empresa; proporcionando información oportuna
a todo nivel de la corporación.
Ofrecer una total flexibilidad y parametrización en la definición del
control de tarjetas de crédito.
Proporcionar una conciliación de los índices financieros.
Recuperar el dinero o efectivo que son generados por concepto
de intereses en mora de pagos vencidos.
Manejar la información de los datos de manera confidencial a
través de control de accesos y claves a usuarios.
10
Proporcionar una base sólida para la integración de los otros
módulos.
Reducción de tiempo de ejecución entre de procesos.
1.7. Alcances del proyecto
El presente proyecto por su característica particular nos permitirá de
manera oportuna el cobro y refinanciamiento de cartera vencida, de tal
forma se puedan realizar pagos parciales, mediante acuerdos
internos o políticas establecidas al aperturar un crédito.
Establecer un control riguroso en la oportuna cancelación de vouchers
en las ventas realizadas con tarjetas de crédito (crédito diferido),
canceladas y pendientes de cobro.
Análisis de las cuentas vencidas (30-60-90 días o superior) y
asignación de los respectivos intereses de acuerdo a las
estiputalaciones establecidas por la Superintendencia de Bancos.
Se clasificara a los clientes por su puntualidad en los pagos (A, B, C)
con el objetivo de emitir un reporte que tiene un historial crediticio con
varios meses de vencimientos o endeudamiento.
Generar reportes que permitan visualizar las ventas a créditos y el
vendedor que realizo dichas ventas.
Creación de directorio de clientes con información detallada de cada
uno de ellos.
11
Generar un proceso de cancelación de tarjetas de crédito, en el cual
se pueda controlar las tarjetas canceladas, para posteriormente emitir
un reporte de tarjetas y su vez le permitirá al modulo de contabilidad y
tesorería realizar la conciliación de todas las tarjetas que la empresa
maneje.
Efectuar o elaboración de crédito a clientes y débitos a clientes, los
cuales los utilizaremos para aumentar o disminuir la deuda del cliente.
Control de cheque protestado en el cual se emitirá un debito a cliente
por el concepto de protesto de cheque de acuerdo al valor que cobra
el banco por dicha transacción.
Realizar el pronto pago, esta transacción se maneja según la empresa
tiene un % de descuento por concepto de pagos anticipados y se
realiza una nota de crédito para la disminución de la deuda.
Reporte de cheques posfechado, para que tesorería los envíe al
cobro.
1.8. Beneficios del proyecto
Automatizar Procesos.
Proporcionan mayor integración de la información y modernización de
los procesos de negocio para permitirle a la organización mayor
eficiencia y productividad.
El de unir el sistema ERP a aplicaciones Web.
12
Utiliza métodos, procesos y herramientas en lo que prime la calidad de
desarrollo.
Extender sus alcances, reducir sus costos, y bajar sus tiempos de
respuesta para proporcionar un fácil acceso a los clientes, empleados
y proveedores.
Ayuda a los ejecutivos a realizar un seguimiento más estrecho de las
operaciones para poder modificar sobre la marcha los planes
comerciales.
1.9 Cronograma Reducido. Ver Cronograma Completo Anexo “A”
Nombre de la Tarea Duración Inicio Comienzo Pre Nombre de los Recurso
- Propuesta 25 días 18/01/2006 17/02/2006 SIzurieta35%, Vsoriano35% y Ysuarez 30%
Ambito del Problema 3 días 18/01/2006 20/01/2006 SIzurieta30%, Vsoriano30% y Ysuarez 35%
Definición Objetivos y Alcances 5 días 23/01/2006 27/01/2006 SIzurieta25%, Vsoriano30% y Ysuarez45%
Refinamiento de información inicial 8 días 30/01/2006 08/02/2006 SIzurieta33,3%, Vsoriano33,4% y Ysuarez 33,3%
Definición y Beneficios del Proyecto 6 días 09/02/2006 15/02/2006 SIzurieta35%, Vsoriano35% y Ysuarez 30%
Recursos de Software, Hardware y Humano 1 día 16/02/2006 16/02/2006 SIzurieta30%, Vsoriano30% y Ysuarez 35%
Metodología del Proyecto 1 día 17/02/2006 17/02/2006 SIzurieta25%, Vsoriano30% y Ysuarez45%
- Análisis del Proyecto 37 días? 17/02/2006 06/04/2006 SIzurieta33,3%, Vsoriano33,4% y Ysuarez 33,3%
Levantamiento de la Información 1 día 17/02/2006 17/02/2006 SIzurieta35%, Vsoriano35% y Ysuarez 30%
Análisis de Requerimiento 1 día 18/02/2006 18/02/2006 SIzurieta30%, Vsoriano30% y Ysuarez 35%
Diccionario de Datos 1 día 20/02/2006 20/02/2006 SIzurieta25%, Vsoriano30% y Ysuarez45%
Diagrama de flujo de datos 3 días 23/02/2006 27/02/2006 SIzurieta33,3%, Vsoriano33,4% y Ysuarez 33,3%
Flujo de proceso del módulo de seguridad-auditoria 2 días 28/02/2006 01/03/2006
SIzurieta35%, Vsoriano35% y Ysuarez 30%
Flujos de procesos del módulo de cartera 5 días 02/03/2006 08/03/2006 SIzurieta30%, Vsoriano30% y Ysuarez 35%
Diagrama caso de usos 2 días 10/03/2006 13/03/2006 SIzurieta25%, Vsoriano30% y Ysuarez45%
Descripción del caso de uso 5 días 14/03/2006 18/03/2006 SIzurieta33,3%, Vsoriano33,4% y Ysuarez 33,3%
Diagrama de objeto y relación 6 días 20/03/2006 27/03/2006 SIzurieta35%, Vsoriano20% y Ysuarez 25%
Diagrama de secuencias 9 días? 27/03/2006 06/04/2006 17 SIzurieta30%, Vsoriano30% y Ysuarez 35%
- Diseño del Proyecto 7 días? 07/04/2006 17/04/2006 18 SIzurieta30%, Vsoriano30% y Ysuarez 35%
13
Diagrama de Clases 6 días? 07/04/2006 14/04/2006 SIzurieta35%, Vsoriano35% y Ysuarez 30%
Diseño de Base de Datos 4 días? 12/04/2006 17/04/2006 SIzurieta30%, Vsoriano30% y Ysuarez 35%
- Desarrollo del Módulo Cartera 64 días? 20/04/2006 18/07/2006 SIzurieta25%, Vsoriano30% y Ysuarez45%
Desarrollo de la Interfaz 2 días? 20/04/2006 21/04/2006 SIzurieta33,3%, Vsoriano33,4% y Ysuarez 33,3%
Programación, conexión 53 días? 24/04/2006 05/07/2006 SIzurieta35%, Vsoriano35% y Ysuarez 30%
Integración con otros módulos 7 días 10/07/2006 18/07/2006 SIzurieta30%, Vsoriano30% y Ysuarez 35%
- Pruebas Preliminares 11 días? 19/07/2006 02/08/2006 SIzurieta25%, Vsoriano30% y Ysuarez45%
Revisión Preliminar 4 días? 19/07/2006 24/07/2006 SIzurieta33,3%, Vsoriano33,4% y Ysuarez 33,3%
Corrección de Proyecto y Documentación Final 3 días? 25/07/2006 27/07/2006
SIzurieta30%, Vsoriano30% y Ysuarez 35%
Corrección Varias 2 días? 28/07/2006 31/07/2006 SIzurieta30%, Vsoriano30% y Ysuarez 35%
Pruebas Finales 3 días? 31/07/2006 02/08/2006 SIzurieta30%, Vsoriano30% y Ysuarez 35%
1.10. Recursos necesarios
Se detallarán todos los equipos Hardware, Software y el recurso humano
que se necesitará para la implementación del proyecto asignado.
1.10.1. Recurso de Hardware
Para el desarrollo de la aplicación se necesitara:
2 computadoras con las siguientes características:
Monitores de 15’’
Memorias de 256 MB
Procesadores Pentium IV de 2.8 GH
80 GB de Disco Duro
Fax MODEM 56 Kbps
Tarjetas de video 32 Mb.
Flash memory (Pen Drive)
Unidades de CD WRITER SAMSUNG
Impresora de inyección a tinta
14
1.10.2. Recurso de Software
J2SE Development Kit 5.0 Update 3
J2SE Runtime Environment Kit 5.0 Update 3
Eclipse 3.1
Ireports 1.2.5
Adobe Acrobat 5.0
Servidor de Aplicaciones Apache Tomcat/5.0.28
Macromedia Dreamweaver 8
Macromedia Flash MX
Base de datos: PostgresSQL 8.1
EMS SQL Manager 2005 for PostgresSQL Version
3.6.0.1
Sistema Operativo Windows XP Profesional con Server
Pack 2.
Utilitarios Microsoft Office
Linux Distribución Fedora Core 4.0.
Corel Draw.
15
1.10.3. Recurso Humano
Grupo de desarrolladores de 3 personas:
Sthefanie de Lourdes Izurieta Jaramillo,
Víctor Arcángel Soriano Cruz
Ernestina Yesenia Suárez Jiménez
Cada uno de los cuales con diferentes destrezas, habilidades y
aptitudes en las diferentes ramas necesarias para la elaboración de
este proyecto, con su perfecta compaginación y valiosa utilidad de
las mismas.
1.11. Metodología del Proyecto
1.11.1. Metodología del Análisis
Análisis Orientado a Objetos (OOA por sus siglas en inglés de
Object Oriented and Análisis) El objetivo del análisis orientado a
objetos es desarrollar una serie de modelos que describan el
software de computadora al trabajar para satisfacer un conjunto de
requisitos difundidos por el usuario. Forma un modelo multiparte
para satisfacer este objetivo.
Con este modelo de análisis se busca definir todas las CLASES
(estructuras de datos y las operaciones asociadas con ese tipo) que
son relevantes y OBJETOS (contiene datos y las funciones que
operan sobre esos datos).
16
Esta metodología, conduce a un modelo del dominio del problema
con cuatro principios esenciales: abstracción, encapsulamiento,
polimorfismo y herencia.
Dichos elementos juegan papel fundamental en la programación
orientado a objetos. Hablar de un objeto, es referirnos a algo
abstracto acerca del cual almacenamos datos y los métodos que
controlan a esos datos, representaciones verdaderas de objetos que
tenemos en la vida real, mediante el uso e implementación de la
metodología de “Programación Orientada a Objetos”, intentamos
crear objetos de software que tengan correlación con los objetos del
mundo real en la solución que intentamos implementar, o sea, en el
módulo de cartera de un sistema de gestión comercial, vamos a
crear nuestro objeto CLIENTE, que tendrá relaciones con nuestros
objetos CLIENTE NATURAL y CLIENTE JURÍDICO, utilizando
GENERALIZACIÓN en los mismos, de manera que CLIENTE
NATURAL tenga los campos exclusivos para ese objeto y CLIENTE
JURÍDICO de igual forma, mientras que CLIENTE tendrá los datos
en común, la aplicación de esta concepción de trabajo es la que nos
permite aislar cada componente del resto de la aplicación y de esa
forma aprovechar en mayor medida nuestro esfuerzo, nuestra
concentración en el buen funcionamiento de dichos componentes,
17
nuestro control sobre ellos, mas prolijidad en la codificación y por
sobre todas las cosas REUTILIZAR EL CÓDIGO escrito.
Definición de las características:
Abstracción: Es la capacidad de un objeto de cumplir sus funciones
independientemente del contexto en el que se lo utilice; o sea, un
objeto siempre expondrá sus mismas propiedades y dará los mismos
resultados a través de sus eventos, sin importar el ámbito en el cual
se lo haya creado.
Encapsulamiento: Es el proceso de esconder, ocultar los detalles
de implantación de un objeto respecto al usuario para que nadie
pueda modificar la Información.
Herencia: La herencia es la propiedad que permite a los objetos
construirse a partir de otros objetos. Una clase se puede dividir en
subclases. La clase original se denomina clase base; las clases que
se definen a partir de la clase base, compartiendo sus características
y añadiendo otras nuevas, se denominan clases derivadas. Las
clases derivadas pueden heredar código y datos de su clase base
añadiendo su propio código y datos a la misma. La herencia impone
una relación jerárquica entre clases en la cual una clase hija hereda
de su clase padre. Si una clase sólo puede recibir características de
otra clase base, la herencia se denomina herencia simple.
18
Si una clase recibe propiedades de más de una clase base, la
herencia se denomina herencia múltiple.
Polimorfismo: El término de polimorfismo define la capacidad de
que más de un objeto puedan crearse usando la misma clase de
base para lograr dos conceptos de objetos diferentes, en este caso
podemos citar el típico ejemplo de los teléfonos, los cuales se basan
en un teléfono base, con la capacidad de hacer ring y tener un
auricular, para luego obtener un teléfono digital, inalámbrico, con
botonera de marcado y también, tomando la misma base, construir
un teléfono analógico y con disco de marcado.
1.11.2. Metodología del Diseño
Diseño Orientado a Objetos, Transforma el modelo de análisis
creado usando el análisis orientado a objetos en un modelo de
diseño que sirve para la construcción del software. Es un método de
diseño de descomposición orientado a objeto y una notación para
representar ambos modelos lógicos y físicos tal como los modelos
estáticos y dinámicos del sistema bajo diseño.
Modelo lógico y físico
Un Modelo de Diseño de Soluciones esta compuesto por diferentes
perspectivas. Una perspectiva es una forma de ver algo, lo que en
19
este caso es el proceso de diseño de la aplicación. Se utiliza para
centrarse en el proceso mismo del diseño. Estas perspectivas son:
Diseño Conceptual
Diseño Lógico
Diseño Físico
Las perspectivas son usadas para identificar los requerimientos
técnicos y de negocios para la aplicación. El resultado de utilizar
este modelo es una mejor distribución de los recursos del proyecto,
lo que puede facilitar mucho las cosas.
Diseño Conceptual
El diseño conceptual se considera como un análisis de actividades y
consiste en la solución de negocios para el usuario y se expresa con
los casos de uso.
El diseño conceptual esta compuesto de las siguientes tareas para
determinar y substanciar los requerimientos de la aplicación:
Identificar los usuarios y sus roles
Obtener datos de los usuarios
Evaluar la información
Documentar los escenarios de uso
Validación de diseño
20
Una forma de obtener estos requerimientos es construir una matriz
usuarios-actividades de negocios, realizar entrevistas, encuestas y/o
visitas a los usuarios, de tal manera que se obtenga quién, qué,
cuándo, dónde y por qué de la solución.
Perfiles de Usuario
Perfiles de usuario son documentos que describen con quien se esta
lidiando, y proveen una descripción de la gente y los grupos que
usan el sistema. Esta información es usada para organizar como la
información será recolectada e identificar quien dará dicha
información para su recolección.
Estos perfiles también pueden ser creados al tiempo que se generan
los escenarios de uso.
Escenarios de Uso
Los escenarios de uso describen los requerimientos del sistema en
el contexto del usuario, mostrando como se efectúan los procesos
de negocios, o como se deberían efectuar. Los escenarios de uso
toman los datos que han sido recolectados, y los aplica en un
documento donde paso a paso se describe que pasa primero, luego
y después en la ejecución de una tarea específica. Esto transforma
los requerimientos que se han recolectado en el contexto de cómo
se usan los procesos, funciones y procedimientos
21
Diseño Lógico
El diseño lógico traduce los escenarios de uso creados en el diseño
conceptual en un conjunto de objetos de negocio y sus servicios. El
diseño lógico se convierte en parte en la especificación funcional que
se usa en el diseño físico. El diseño lógico es independiente de la
tecnología; refina, organiza y detalla la solución de negocios y define
formalmente las reglas y políticas específicas de negocios.
El diseño lógico es el proceso de tomar los requerimientos de
usuario obtenido en el Diseño Conceptual y mapearlos a sus
respectivos objetos de negocio y servicios.
Organización de las Estructuras lógicas
Una vez que se han identificados los objetos, es necesario
organizarlos según los servicios que proveen, y las relaciones que
tiene unos con otros.
Existen muchas consideraciones que deben ser tomadas en cuenta
al diseñar una aplicación en tres capas que proporciona ciertos
beneficios como ser escalabilidad, disponibilidad y eficiencia.
Cuando se diseñan los objetos se debe dejar que estos factores
dirijan la manera de organizar las estructuras lógicas. A pesar de
que estos conceptos también se aplican al Diseño Físico, tienen
igualmente importancia en esta etapa de Diseño Lógico. Es bueno
22
definir que tan granular tiene que ser los componentes. Si estos
mantendrán un estado o no con el fin de maximizar la escalabilidad,
estos y otros elementos deben analizarse detenidamente para
obtener un buen Diseño Lógico.
Del diseño Conceptual al Diseño Lógico
Crear un Diseño Lógico consiste en mapear a objetos las reglas del
negocio y los requerimientos de usuario identificados en el Diseño
conceptual. Estos objetos pueden ser así más fácilmente
identificados de los requerimientos de usuario por los nombres o
sustantivos, los servicios que proveen estos objetos representan las
reglas y requerimientos del dominio del negocio que se está
modelando y son reconocidos por verbos, para reconocer las
propiedades o atributos de un objeto se deben identificar los datos
asociados al objeto.
Cuando se diseñan los objetos es importante que estos se centren
en una sola cosa en lo posible, en otras palabras los objetos
deberían solamente proveer servicios relacionados con un único
propósito.
La funcionalidad de un objeto se llama granularidad. Mientras su
granularidad es más fuerte el objeto presta muchos servicios,
23
mientras más débil es su granularidad menos servicios presta. Lo
óptimo es que el objeto tenga granularidad fuerte.
Objetivo del diseño lógico
El objetivo principal es transformar el esquema conceptual de datos
en el esquema lógico de datos
Otros objetivos del diseño lógico son:
Eliminar redundancias
Conseguir máxima simplicidad
Evitar cargas suplementarias de programación para conseguir
una estructura lógica adecuada
Un equilibrio entre los requisitos de usuario y la eficiencia
Diseño lógico con la máxima portabilidad
Diseño Físico
Es donde los requerimientos del diseño conceptual y lógico son
puestos en una forma tangible. Es en este diseño que las
restricciones de la tecnología son aplicadas al Diseño lógico de la
solución. El diseño físico define como los componentes de la
solución, así como la interfaz de usuario y la base de datos física
trabajan juntos. Desempeño, implementación, ancho de banda,
escalabilidad, adaptabilidad y mantenibilidad son todos los resueltos
24
e implementados a través del diseño Físico. Ya que esta perspectiva
transforma los diseños previos en una forma concreta, es posible
estimar que recursos, costos o programación de tiempo serán
necesarios para concretar el proyecto.
Al lidiar con estas tres perspectivas, es importante notar que éstas
no son series de pasos con puntos de finalización claros. No es
necesario alcanzar un punto específico en una de las perspectivas
antes de continuar con la siguiente. De hecho, un área de diseño
puede ser usada en combinación con otra de manera tal que
mientras una parte de la solución es diseñada conceptual o
lógicamente, otra esta siendo codificada o implementada en el
producto final. Desde que no existen etapas con puntos definidos o
límites, es posible regresar a las distintas perspectivas de diseño
cuantas veces sea necesario. Esto permite afinar el diseño
revisando y rediseñando la solución.
Objetivos del diseño físico
Minimizar el tiempo de respuesta
Tiempo en la introducción de una transacción T de BD y la
obtención de respuesta
Maximizar la productividad de las transacciones
Optimizar el aprovechamiento del espacio.
25
Cantidad de espacio ocupado por ficheros de la BD y sus
estructuras de acceso.
En el esquema Figura 1.11.2.1 que se muestra a continuación
detalla gráficamente el diseño físico de una base de datos.
Figura 1.11.2.1 Diseño Físico de Base de Datos
En general se especifica límites promedio y de peor de los casos de cada
parámetro anterior como aporte de los requisitos de rendimiento del sistema.
Durante el diseño físico hay que tener en cuenta:
Que el rendimiento depende del tamaño y número de registros
en los ficheros
Estimar tamaño de registro y número de registros para cada fichero
Estimar crecimiento de cada fichero, “como y cuánto va a crecer”, en
tamaño de registro, o en número de registros.
Alternativa n De diseño físico
Alternativa 1 De diseño físico
Alternativa 3 De diseño físico
Alternativa 2 De diseño físico
Técnicas analíticas o
experimentales
Estimaciones Valor Promedio y del
Peor Caso Alternativa 1
Estimaciones Valor Promedio y del
Peor Caso Alternativa 3
Estimaciones Valor Promedio y del
Peor Caso Alternativa 2
Estimaciones Valor Promedio y del
Peor Caso Alternativa n
Límites para el
Promedio y peor caso
¿Cumplan requisitos de rendimientos?
Prototipos Simulación, …
26
El uso que se espera dar a la base de datos
Estimar patrones de actualización y obtención de datos para cada
fichero, considerando todas las transacciones.
A continuación se muestra gráficamente en la Figura 1.11.2.2. El uso
que se espera dar a la base de datos
Figura 1.11.2.2. Uso de la Base de Datos
B.D
IMPLEMENTACION
DISEÑO FISICO
ESTRUCTURA DE ALMACENAMIENTO Y
CAMINO DE ACCESO INICIAL
27
CAPITULO 2
2. ANÁLISIS
2.1. Levantamiento de información
2.1.1. Introducción
Según la información recopilada, las Cuentas por Cobrar registran
los documentos, es decir, las transacciones de ventas a créditos,
pagos, etc., también es conocida como cartera.
Este manejo es llevado de forma no automatizada e incluso manual
en muy pocos casos, lo cual conlleva a un proceso tedioso y
desorganizado al momento de guardar y relacionar la información.
Por esta y muchas otras razones hemos decidido elaborar un
programa que le facilite a las empresas llevar un mejor control de
estas cuentas y que cumplan con todas las necesidades como
agilizar de forma automatizada para una excelente organización al
momento de llevar los estados financieros.
28
2.1.2 Métodos de levantamiento de información
Para el tema en estudio utilizaremos la entrevista y la observación
para recolectar información.
2.1.2.1 Entrevistas
Para establecer las necesidades de un departamento
estrechamente relacionado con cartera nos hemos valido de
información recopilada por medio de las siguientes entrevistas
(selección de los elementos muestrales)
Entrevistamos a quien es el encargado del manejo de las
cuentas por cobrar.
Dentro de los aspectos más sobresalientes de nuestra
entrevista podemos destacar:
1.- ¿Considera usted que los procesos de su empresa se están
realizando de manera automatizada?
2.- ¿con que otros módulos cree que se relaciona el modulo de
cartera?
3.- ¿Qué información le seria útil de los otros departamentos?
4.- ¿Cuál son los procesos que realiza para hacer un análisis
de cartera?
5.- ¿Estarían ustedes dispuestos a invertir en software y
equipo?
29
Las personas entrevistadas fueron los abajo detallados:
• Oficiales de créditos.
• Auxiliares contables.
• Encargado de roles.
• Y algunos casos, clientes de determinada empresa.
• Vendedores.
Esto nos preemitió obtener calidad de información por que
palpamos directamente las necesidades de la empresa.
2.1.2.2. Observación
Al asistir a la empresa para aplicar nuestra encuesta se nos
permitió observar un poco de cómo son llevadas las cuentas
por cobrar, donde pudimos percatarnos de una manera
detallada el desenvolvimiento de la misma en cuanto a nuestro
tema de estudio, para poder establecer las partes primordiales
en el desarrollo de nuestro proyecto.
Métodos de observación
Aspectos a observar:
1. Forma en que se llevan las cuentas por cobrar.
2. El control con que cuentan los datos actualmente.
3. Forma en la que podemos sistematizar el sistema actual.
4. Tiempo que se requiere para realizar una transacción.
30
Tipo de investigación
Los realizadores de este proyecto consideramos que esta es
una investigación de tipo descriptiva.
2.1.2.3 Investigación tecnológica (Internet)
Esta herramienta siempre será un soporte para quienes inicien
la aventura de un proyecto, para nosotros fue de trascendental
utilidad e importancia.
2.1.3 Conclusiones
Mediante los métodos de investigación utilizados construimos el
siguiente gráfico estadístico Figura 2.1.3.1., el cual nos muestra
cómo se implementa en diferentes empresas el departamento de
cartera.
Gráfico Estadístico del Manejo de la
Información de Cartera En Diferentes
Empresas
0%
20%
40%
60%
Formas de Manejo del Sistema En El Módulo de Cartera
%
% 15% 50% 25% 10%
ManualSistemas no
automatizados
Sistemas
automatizados con
fallas
Sistemas ERP
Figura 2.1.3.1. Estadístico Del Manejo de Información de Cartera
31
2.1.4. Análisis de requerimientos.
Después de analizar la información recopilada por medio de los
métodos de investigación puestos en prácticas, se puede indicar
¿Qué se requiere para cambiar un esquema actual a un esquema de
cambio sin que esto afecte los objetivos fundamentales de una
organización?, los cuales radican en la optimización e integración de
sus procesos.
Hay que recalcar que las Cuentas por Cobrar registran los
documentos, es decir, las transacciones de ventas a créditos, debito
o crédito cliente, etc.
Este modulo esta encargado de la actualización de datos de clientes,
autorización de los créditos y gestionar el control de los cheques
post-fechados y protestos de los mismos, con sus respectivas multas
que se generen por concepto de protestos de cheques.
Enviar información al modulo de contabilidad en el momento que se
realiza un créditos y/o debitos a clientes.
El modulo de tesorería nos remite información de cada uno de los
cobros que se efectuaron para poder habilitar al cliente y que realice
nuevas compras.
El modulo de ventas es el que nos entrega información del cliente
como: si es crédito, fecha, valor, etc.
32
Si la forma de pago es cheque tendrá que reflejar el nombre del
banco, la fecha de emisión y fecha de deposito; esto nos ayudara a
definir si es post-fechado, valor, etc.
Si es tarjeta de crédito: el código de la tarjeta, el valor a cobrar,
fecha, etc.
El modulo de roles se relaciona con cartera en el momento de
generar el reporte de comisiones ganadas de cada uno de los
vendedores.
En el siguiente gráfico Figura 2.1.4.1 se puede observar como se
interactúa con otros módulos.
VENTASVENTAS
TESORERIATESORERIA
CONTABILIDADCONTABILIDAD
ROL DE PAGOSROL DE PAGOS
CARTERA
(CUENTAS POR COBRAR)
Vendedores(comisiones)
Figura 2.1.4.1 Cartera Relacionado Con Otros Módulos
33
A continuación se hace énfasis de los puntos que hay que tomar en
consideración para el desarrollo del módulo:
Se necesita un software (ERP) que nos permita mejorar el
proceso de las consultas de los clientes, debido a que en
muchas empresas comerciales el inconveniente principal radica
al no tener los módulos integrados, y al querer presentar los
estados financieros, no se lo realiza de una forma eficaz y
rápida, ya que debe realizar los asientos contables de cada uno
de las transacciones que se efectúan día a día, si no se tiene
actualizada dicha información no se podrá presentar los
estados financieros, ni tampoco los estados de perdida y
ganancias.
Mejorar el control de créditos y sobregiros de cada uno de mis
clientes.
Brindar al usuario y clientes datos precisos sin errores y
veraces.
El módulo de Cuentas por Cobrar se integra por movimientos,
los cuales reciben datos, directa e indirectamente, generando
información confiable, la cual permite actualizar el saldo del
cliente, y así obtener el reporte contable requerido por
contabilidad.
34
Los datos de entrada serán aquellos que provienen de varios
módulos como el de ventas con los movimientos tipo factura,
requisición, nota, especificando una condición de pago/cobro a
determinado tiempo, cuyo concepto será identificado como
cuenta por cobrar, generando una afectación en el Módulo.
Auditar las tablas que sean necesarias con la finalidad de
obtener un mayor control en el contenido de la información, que
podría ser modificada de manera constante por el usuario, es
decir, cuándo se tuvo acceso a dichas tablas.
Auditar las transacciones que se realicen día a día, en
determinadas tablas ingresos, consultas modificación,
eliminación, etc., o cualquier otra transacción en particular.
En este proyecto existen procesos que hacen usos de datos
almacenados en tablas diseñadas por módulos externos que
han sido creadas y usadas por la organización, por ejemplo, el
uso en nuestro modulo de tablas del módulo de operaciones
como calle, para extraer de la misma la dirección de un
determinado cliente.
35
2.2. Diccionario de datos
Los diccionarios de datos son el segundo componente a analizar del
análisis del flujo de datos, en sí los diagramas de flujos de datos no
describen por completo el objeto de la investigación, este proporciona
información adicional sobre el sistema. Esta sección analiza qué es, por
qué se necesita en el análisis de flujo de datos y como desarrollarlo. Se
utilizará el ejemplo del sistema de contabilidad para describir los
diccionarios de datos.
Un diccionario de datos es una lista de todos los elementos incluido en el
conjunto de los diagramas de flujo de datos que describen un sistema.
Los elementos principales en un sistema, estudiados en las secciones
anteriores, son el flujo de datos, el almacenamiento de datos y los
procesos. El diccionario de datos almacena detalles y descripciones de
estos elementos.
Si los analistas desean conocer cuántos caracteres hay en un dato, con
qué otros nombres se los conoce en el sistema, o en donde se utilizan
dentro del sistema, deben ser capaces de encontrar las respuestas en un
diccionario de datos desarrollado apropiadamente.
El diccionario de datos se desarrolla durante el análisis de flujo de datos y
ayuda al analista involucrado en la determinación de los requerimientos
36
de sistemas. Sin embargo, como se verá más adelante, también el
contenido del diccionario de datos se utiliza durante el diseño del sistema.
En informática, base de datos acerca de la terminología que se utilizará
en un sistema de información. Para comprender mejor el significado de un
diccionario de datos, puede considerarse su contenido como "datos
acerca de los datos"; es decir, descripciones de todos los demás objetos
(archivos, programas, informes, sinónimos...) existentes en el sistema. Un
diccionario de datos almacena la totalidad de los diversos esquemas y
especificaciones de archivos, así como sus ubicaciones. Si es completo
incluye también información acerca de qué programas utilizan qué datos,
y qué usuarios están interesados en unos u otros informes. Por lo
general, el diccionario de datos está integrado en el sistema de
información que describe.
Elementos de Datos
Descripción de los Datos en el Diccionario: Cada entrada en el
diccionario de datos consiste en un conjunto de detalles que describen los
datos utilizados o producidos en el sistema. Cada artículo se identifica por
un nombre de dato, descripción, sinónimo y longitud de campo y tiene
valores específicos que se permiten para éste en el sistema estudiado.
37
Nombre de los Datos: Para distinguir un dato de otro, el analista le
asigna nombres significativos que se utilizan para tener una referencia de
cada elemento a través del proceso total de desarrollo de sistemas. Por lo
tanto, debe tenerse cuidado para seleccionar, en forma significativa y
entendible, los nombres de los datos, por ejemplo la fecha de factura es
más significativa si se llama FECHA FACTURA que si se le conoce como
ABCXXX.
Descripción: Establece brevemente lo que representa el dato en el
sistema; por ejemplo, la descripción para FECHA-DE-FACTURA indica
que es la fecha en la cual se está preparando la misma (para distinguirla
de la fecha en la que se envió por correo o se recibió.
Las descripciones de datos se deben realizar suponiendo que los
usuarios no conocen nada en relación del sistema. Deben evitarse
termino especiales o argot, todas las palabras deben se entendible para
el lector
Alias: Con frecuencia el mismo dato puede conocerse con diferentes
nombres, dependiendo de quien lo utilice. El uso de los alias debe evitar
confusión. Un diccionario de dato significativo incluirá todos los alias.
38
Longitud: Cuando las características del diseño del sistema se ejecuten
más tarde en el proceso de desarrollo del sistema, será importante
conocer la cantidad de espacio que necesita para cada dato.
Valores de los datos: En algunos procesos solo se permiten valores de
datos específicos. Por ejemplo, en muchas compañías con frecuencia los
números de orden de compra se proporcionan con un prefijo de una letra
para indicar el departamento del origen.
Estructura de datos
Conjunto de datos relacionados unos con otros y que describen un
componente del sistema.
Descripción: Construidas sobre cuatro relaciones de componentes, se
puede utilizar la siguiente combinación ya sean individual o en conjunción
con alguna otra.
Relación secuencial: Define los componentes que siempre se incluyen
en una estructura de datos.
39
A continuación un ejemplo práctico de la tabla Usuario para establecer la
seguridad en el sistema.
Tabla Usuarios
Estructura de datos
En esta figura 2.2.1 se puede observar de forma general las características de la tabla Usuario.
ID
Nombre
Alias
Descripción
Formato de Archivo Directo
Indexado
Cantidad de
registros: Máximo: 42,000
Llave primaria idusuarios
Llaves secundarias
Comentario Tabla que almacenan todos los usuarios del
sistema, estos usuarios pueden tener rol de
administrador, credito, tesoreria
Características del alamacén de datos
DS1
Tabla Maestra Usuario
USUARIOS
Contiene un registro para cada usuario
Secuencial
Base de datos
45,000 Promedio:
Figura 2.2.1 Tabla Usuarios- Estructura de datos
Elementos de datos
A continuación se detalla cada uno de los atributos de la tabla usuario con
sus respectivas características.
40
ID
Nombre
Alias
Descripción
Longitud 4 Alfabética Directo
Formato de
entrada 4 X Alfanumérico
Formato de
salida 4 Fecha
Valor por
omision Numérico
Continúo Discreto
Comentario El ID del usuario debe pasar una prueba de validación
en que el sistema automáticamente Este campo forma parte
de la sgte. Tabla: Usuarios
Forma de descripción del elemento de la Tabla
idusuario
Código del usuario
Identifica de manera única a los usuarios que han
registrado en el sistema
Características del Elemento
Figura 2.2.2 Elementos de Datos- Atributo idusuario
ID
Alias
Descripción
Longitud 20 Alfabética
Formato de entrada 20 Alfanumérico
Formato de salida 20 Fecha
Valor por omisión Numérico
Continúo Discreto
El nombre del usuario que está registrado en el sistema
Características del Elemento
Forma de descripción del elemento de la Tabla
username
Nombre del usuario para ingresar a la sesion
Figura 2.2.3 Elementos de Datos- Atributo username
41
Nombre
Alias
Descripción
correspondiente inicio de sesion
Longitud 20 x Alfabética
Formato de entrada 20 Alfanumérico
Formato de salida 20 Fecha
Valor por omisión Numérico
Continúo Discreto
Comentarios:
Características del Elemento
Forma de descripción del elemento de la Tabla
password
Clave del usuario
guarda en la tabla la contraseña de cada usuario para su
Figura 2.2.4 Elementos de Datos- Atributo password
Nombre
Alias
Descripción
Longitud 30 x Alfabética
Bit
Formato de entrada 30 Alfanumérico
Formato de salida 30 Fecha
Valor por omisión 0 Numérico
Continúo Discreto
Comentarios: indica el nombre respectvo , no el rol que desempeña
Características del Elemento
Forma de descripción del elemento de la Tabla
nombres
ninguno
Indica el nombre respectivo del usuario
Figura 2.2.5 Elementos de Datos- Atributo nombres
42
Nombre
Alias
Descripción
Longitud 30 Alfabética
Formato de entrada 30 Alfanumérico
Formato de salida 30 Fecha
Valor por omisión Numérico
Continúo Discreto
Características del Elemento
Forma de descripción del elemento de la Tabla
apellidos
Apellido del usuario
El apellido del usuario, está registrado en el Sistema
Figura 2.2.6 Elementos de Datos- Atributo apellidos
Nombre
Alias
Descripción
registrado en el sistema
Longitud 20 x Alfabética
Formato de entrada 20 Alfanumérico
Formato de salida 20 Fecha
Valor por omisión Numérico
Continúo Discreto
Comentarios: Cada rol tendra un acceso total o limitado
Características del Elemento
Forma de descripción del elemento de la Tabla
rol
perfil
rol o perfil asiganado a cada usuario
Figura 2.2.7 Elementos de Datos- Atributo rol
43
2.3. Diagrama de flujo de datos (DFD)
2.3.1 Flujo de Proceso de Seguridad de la Aplicación.
El administrador crea los usuarios que tendrán acceso al modulo de
cartera, de acuerdo con los diferentes perfiles que tendrán cada uno
de estos.
El usuario debe identificarse para poder ingresar su aplicación
ingresando su login y password correspondiente.
Definiciones de Perfiles para los
usuarios
Administración de datos permisos
control de contreseñas
Autenticación de
Usuarios
Ingreso al sistema, los accesos
dependen del perfil configurado
Fin
Asigna
Opciones
Usuarios
Usuarios
Crea
Administrador
de Seguridad
Accesan
Figura 2.3.1.1 Flujo de datos- Flujo Proceso de seguridad
44
2.3.2. Flujo del Proceso de la Auditoria de la Aplicación
Se crean las tablas que van a ser utilizadas para realizar la auditoria
del sistema las cuales son car_acci_dat, y car_audi_log. El auditor o
administrador del sistema selecciona las transacciones a auditar o
las tablas de la base de datos que van hacer auditadas a las que se
ha tenido acceso recientemente o en un determinado momento
cuando se requiera esta información.
El sistema genera información de todos los campos de las tablas
(objetos) con todas las informaciones necesarias para conocer los
diferentes eventos o transacciones que han tenido, así como
también, el usuario, la fecha y la hora en que se realizo determinada
transacción, estos tipos de eventos son: INSERT, DELETE,
UPDATE. Ver flujos de las figuras 2.3.2.1.
45
Configura Objetos de Base de
Datos que se quieren Auditar
(Generación de Triggers)
Generan Eventos(Insert, Update y Delete) que se
Registran en la Base de Datos
Informa a que hora y
que usuario generó o
eliminó Información de
la Base de Datos
Base de Datos
Figura 2.3.2.1 Flujo de datos- Flujo del Proceso Auditoria
2.3.3. Flujos de procesos del módulo de cartera
En determinado momento y realizada una VENTA se genera
automáticamente una factura, esta recopila toda la información de la
transacción; datos del cliente, detalle de lo que compro y forma de
pago, teniendo es esta ultima las opciones de contado y crédito, es
precisamente esta opción de pago (crédito) la que da inicio a
nuestros procesos, por lo que se constituye en nuestra principal
46
fuente de ingreso de información, a través de reportes actualizados
diariamente o cuando se lo requiera se envía el listado de los
clientes al cobro, al modulo de TESORERÍA (departamento al cual le
interesa saber a quien y por concepto de que se cobro dicho valor ) y
que es el encargado de realizar la gestión de cobro. Una vez
realizado el cobro este a la vez remite información actualizada de
cobros al departamento de CONTABILIDAD, a quien le interesa
saber sólo cuánto se cobro y acreditarlo a la cuenta por cobrar, en el
registro de sus asientos contables,
Otro flujo a considerar es el relacionado con el departamento de
ROL DE PAGOS, pues al realizar un cobro se genera una comisión
por dicho trámite y esto debe ser información para que rol de pagos
emita los valores a favor del empleado correspondiente.
Ver Figura 2.3.3.1 y 2.3.3.2 Donde se detalle el Flujo de Procesos
del Módulo Cartera (Efectivo-Cheque).
47
Desea pagar toda
La deuda?
Vencido? Tesorería Contabilidad
IngresoConsultar
Clientes-Crédito Ventas
Clientes Pendientes
De pagoSi
Genera descuento a Favor
Del cliente
Nota Crédito/Cliente
Si
Realizar cobros
Pagó?
Generar Intereses
Nota de Débito
del cliente
No
Inhabilitar Cliente
Habilitar Cliente para
Comprar
Si
No
No
No
Si
1
1
Fin de
Procesos
Figura 2.3.3.1 Flujo de datos de cartera (efectivo)
48
Ventas
Tesorería
(Enviar a depositar)
Cheque se hizo
Efectivo
Débito cliente por
concepto Protesto
Cheque
No
Cheques
pendientes
Depósito
Si
Fin Proceso
No
Control de cheques
Post-Protestados
Si
Figura 2.3.3.2 Flujo de datos de cartera (cheque)
2.4. Diagrama caso de usos
Relación existente entre sus actores y los correspondientes casos de uso.
Funcionalidad del sistema en su interacción con el entorno externo. Estos
casos de uso se encuentran en la parte interior de la caja del sistema al
contrario de los actores que están fuera de la misma.
2.4.1 Casos de uso para seguridad de la Aplicación
Descripción de actores definidos y sus procesos correspondientes
en los que intervienen, esto se puede apreciar en el siguiente gráfico
Figura 2.4.1.1.
49
Crear usuario
Cambiar
contraseña
Crear perfil
Asigna
Usuario a
Perfil
Crear opción
Asigna
Opciones
a Perfil
Consultar
Opciones
Consultar
Usuario
2.4.1.1 Diagrama de casos De Uso –Seguridad de la Aplicación
2.4.2 Casos de uso para Auditoria de la Aplicación.
El actor puede ser un administrador o auditor, que tiene la capacidad
de interpretar el manejo auditable en un sistema. Ver Figura 2.4.2.1
50
Auditar
Transacción
Consultar
Transaccion
Auditrada
2.4.2.1 Diagrama Caso de Uso- Auditoria de la Aplicación
2.4.3 Casos de uso para módulo de Cartera
Todos las personas vinculadas al realizar algún tipo de interacción
con el modulo desde el sistema, como en la Web.
51
ACTORES ESCENARIOS
CLIENTE
REPORTES
CREDITO A
CLIENTE
TARJETAS DE
CRÉDITO
CONTROL DE
CHEQUES
SISTEMA
Contabilidad/
Auixiliar
Contable-
contador
Tesoreria /Jefe
de Pagaduria
Rol de Pagos /
Jefe de Roles
PORTAL WEB
Módulos Externos
DEBITO A
CLIENTE
2.4.3.1 Diagrama Caso de Uso- Módulo de Cartera
52
Activar Cliente
Inactivar Cliente
Autorizar Cupo
2.4.3.2 Diagrama Caso de Uso-Autorizador/Cliente- Módulo de
Cartera
Consultas de
Cuentas de Clientes
30-60-90 días
Consultar Pagos
Pendientes
Calificación de
Clientes
Modificar Cliente
Crear Cliente
Consultar Cliente
2.4.3.3 Diagrama Caso de Uso-Oficial de Crédito/Cliente - Módulo de
Cartera
53
Contabilizar
Transacción
Emitir Reportes de
Comisiones
Emision de totales
a cancelar
Contabilidad Tesoreria Rol de
Pagos
Modulos Externos
2.4.3.4 Diagrama Caso de Uso-Oficial/Reporte-Módulo de Cartera
Modificar
Crédito a Cliente
Crear Crédito a
Cliente
Consultar Crédito a
Cliente
2.4.3.5 Diagrama Caso de Uso- Oficial/ Crédito Cliente- Módulo de
Cartera
54
Modificar
Débito a Cliente
Crear Débito a
Cliente
Consultar Débito a
Clente
2.4.3.6 Diagrama Caso de Uso- Oficial/ Debito Cliente- Módulo de
Cartera
Eliminar Tarjeta
Consultar Tarjeta
Modificar Tarjeta
Crear Tarjeta
Consultar Pagos
Tarjeta
2.4.3.7 Diagrama Caso de Uso- Oficial/ Tarjeta - Módulo de Cartera
55
Control de multas por
Cheques Protestados
Control de Cheques
Posfechados
2.4.3.8 Diagrama Caso de Uso- Oficial/ Control Cheques - Módulo de
Cartera
Validar Ingreso al Sistema
Definir Autorizaciones
2.4.3.9 Diagrama Caso de Uso- Oficial – Adm_Sistema/ Sistema de
Módulo de Cartera
56
2.5. Descripción de Casos de Uso
2.5.1. Detalle de Usos de Seguridad de la Aplicación
Caso de uso # 1
CASO DE USO CREAR USUARIO
Descripción: Crea un usuario en el sistema
Actores Administrador
Precondiciones Estar autenticado como administrador del sistema
Flujo Normal 1. Ingresar a la pagina 2. Seleccionar un nuevo usuario 3. Llenar formulario 4. Sistema verifica datos en formulario 5. Sistema guarda la información
Flujo Alternativo 2. Mensaje de error permite al usuario que revise
Poscondiciones Creación de un nuevo usuario en el sistema
Caso de uso # 2
CASO DE USO CONSULTAR USUARIO
Descripción: Muestra todos los usuarios que pertenecen al sistema
Actores Administrador
Precondiciones Estar autenticado como administrador del sistema
Flujo Normal 1. Ingresar a la pagina 2. Escribir el usuario o todos los usuarios 3. Enviar a buscar 4. Sistema realiza la búsqueda
Flujo Alternativo Ninguno
Poscondiciones Creación de un nuevo usuario en el sistema
Caso de uso # 3
CASO DE USO CREAR PERFIL/ROL
Descripción: Crea el rol que precederá luego asignar opciones del modulo
Actores Administrador
Precondiciones Estar autenticado como administrador del sistema.
Flujo Normal 1. Ingresar a la pagina 2. Escribir el Perfil y su descripción 3. Indicar el tipo de perfil 4. Almacenar información en el sistema
Flujo Alternativo Ninguno
Poscondiciones Creación de un perfil del sistema
57
Caso de uso # 4
CASO DE USO ASIGNAR USUARIO AL PERFIL
Descripción: El perfil puede tener varios usuarios disponibles
Actores Administrador
Precondiciones Estar autenticado como administrador del sistema. Debe existir al menos un usuario
Flujo Normal 1. Ingresar a la pagina 2. Seleccionar el perfil 3. Seleccionar usuarios disponibles 4. Almacena información en el sistema
Flujo Alternativo Ninguno
Poscondiciones Se ha asignado uno o varios usuarios a un perfil determinado
Caso de uso # 5
CASO DE USO CREAR OPCION
Descripción: Son las aplicaciones, menú o páginas que se muestran en el árbol de opciones que tendrá cada usuario al momento de ingresar al sistema.
Actores Administrador
Precondiciones Estar autenticado como administrador del sistema
Flujo Normal 1. Ingresar a la pagina 2. Escribe una nueva opción 3. Indica la dirección (URL) de la página. 4. Escoge el tipo de opción (Aplicación, menú u opción) 5. Guarda toda la información en el sistema.
Flujo Alternativo Ninguno
Poscondiciones Crea nueva opción.
Caso de uso # 6
CASO DE USO ASIGNAR OPCIONES AL PERFIL
Descripción: Cada perfil tendrá un determinado estándar de opciones que será usado por los usuarios de ese perfil
Actores Administrador
Precondiciones Estar autenticado como administrador del sistema
Flujo Normal 1. Ingresar a la pagina 2. Escriba un perfil 3. Sistema Buscar perfil 4. Presiono Opciones 5. activo todas las opciones que tendrá el perfil 6. Guardo datos en el sistema
Flujo Alternativo 2. Selecciona todos los perfiles
Poscondiciones Da las opciones a un determinado perfil
58
Caso de uso # 7
CASO DE USO CAMBIAR CONTRASEÑAS
Descripción: Cambiar contraseña caducada
Actores Administrador, empleado, vitado
Precondiciones Deben estar registrados en el sistema y tener los permisos necesarios
Flujo Normal 1. Ingresar a la pagina desde el portal o desde el sistema interno
2. Indicar la contraseña vieja 3. Indicar la nueva contraseña 4. Sistema guarda nueva contraseña.
Flujo Alternativo Para el administrador no le es necesario saber la contraseña anterior, solo escribe una nueva
Poscondiciones Contraseña guardada con éxito
2.5.2 Detalle de Usos de Auditoria de la Aplicación
Caso de uso # 1
CASO DE USO AUDITAR TRANSACCIÓN
Descripción: Audita una transacción para un mayor control de los datos
Actores Administrador
Precondiciones Estar autenticado como administrador del sistema
Flujo Normal 1. Ingresar a la pagina de Auditoria 2. Seleccionar la transacción a auditar 3. Sistema busca la transacción 4. Marcar tipo de transacción(Insert, update, delete) 5. Administrador guarda datos 6. Sistema guarda cambio
Flujo Alternativo Ninguno
Poscondiciones Transacción auditada ha sido creada con éxito
Caso de uso # 2
CASO DE USO: CONSULTAR TRANSACCIÓN AUDITADA
Descripción: Muestra una o todas las transacciones que han sido auditadas
Actores Administrador
Precondiciones Estar autenticado como administrador del sistema
Flujo Normal 7. Ingresar a la pagina de Auditoria 8. Seleccionar la transacción a consultar 9. Sistema realiza la búsqueda
Flujo Alternativo También se puede seleccionar todas las transacciones auditadas a consultar
Poscondiciones Muestra una o varias transacciones auditadas
59
2.5.3 Detalle de Usos Módulo de cartera
Caso de uso # 1
CASO DE USO CREAR CLIENTE
Descripción: Se crea el Cliente para verificar si esta apto para ser cliente
Actores Empleado(Oficial de crédito),clientes
Precondiciones Estar autenticado como Oficial de crédito y reunir los requisitos crediticios previas verificaciones en central de riesgo, referencias bancarias, laborales y comerciales.
Flujo Normal 1. Verificar en Central de riesgo 2. Verificar referencias 3. Guardar en el sistema como nuevo Cliente si
califica.
Flujo Alternativo 3. Si no califica ingresar nuevo cliente
Poscondiciones Cliente ha sido creado satisfactoriamente
Caso de uso # 2
CASO DE USO CONSULTAR DATOS DEL CLIENTE
Descripción: Consulta todos los datos personales del cliente(nombre ,numero de cedula fecha de nacimiento, etc.)
Actores Empleado(Oficial de crédito),clientes
Precondiciones Estar autenticado como Oficial de crédito y ser cliente de al menos un crédito pendiente
Flujo Normal 1. Ingresar al modulo 2. Escoger cliente por nombre
Flujo Alternativo 2. También se puede consultar por fecha
Poscondiciones Se ha realizado una consulta
Caso de uso # 3
CASO DE USO MODIFICAR DATOS DEL CLIENTE
Descripción: Modifica los datos de un cliente
Actores Oficial de Crédito (empleado), Cliente
Precondiciones Estar autenticado como Oficial de crédito y la necesidad de cambiar al menos un atributo.
Flujo Normal 1. Ingresar a la pagina 2. Escoja el o los atributos a cambiar 3. Ingresar el o los nuevos atributos 4. Actualizar en el sistema
Flujo Alternativo Ninguno
Poscondiciones Consulta realizada con éxito
60
Caso de uso # 4
CASO DE USO CONSULTAR CLIENTES 30- 60- 90 DÍAS
Descripción: Consulta de todos los clientes pendiente de pago 30-60-90 días.
Actores Empleado(Oficial de crédito), cliente
Precondiciones Estar autenticado como Oficial de crédito y estar registrado en el sistema, creando sesión en la pagina
Flujo Normal 1. Ingresar al modulo 2. Consultar cuentas pendientes de pago o una en
detalle 3. Sistema realiza búsqueda por nombre. 4. Salir
Flujo Alternativo 2. Sistema también puede realizar búsqueda por fechas
Poscondiciones Consulta todas las cuentas pendientes de cobro 30-60-90 días al cobro o una en particular
Caso de uso # 5
CASO DE USO CONSULTAR PAGOS PENDIENTES
Descripción: Consulta todos los créditos pendientes próximos y futuros vencimientos
Actores Empleado(Oficial de crédito), Cliente
Precondiciones Estar autenticado como Oficial de crédito y constar en la B.D de la empresa como cliente activo o inactivo
Flujo Normal 1. Ingresar al modulo 2. Ingresar código de cliente 3. Consultar valores pendientes 4. Salir
Flujo Alternativo NINGUNO.
Poscondiciones Consulta Satisfactoria
Caso de uso # 6
CASO DE USO CALIFICACIÓN DE CLIENTES
Descripción: Ser cliente nuestro
Actores Empleado(Oficial de crédito),clientes
Precondiciones Estar autenticado como Oficial de crédito y existencia de al menos un crédito
Flujo Normal 4. Ingresar al modulo 5. Ver estado del cliente 6. Si es activo Cliente califica: apto para nuevo crédito.
Flujo Alternativo 3. Si es inactivo cliente no califica para nuevo crédito.
Poscondiciones Cliente ha sido calificado con éxito
61
Caso de uso # 7
CASO DE USO CONTABILIZAR TRANSACCIÓN
Descripción: Contabiliza todas las transacciones realizadas como son debito y/o Crédito Cliente
Actores Empleado(Oficial de crédito), modulo contabilidad(Contador o Auxiliar), cliente
Precondiciones Estar autenticado como Oficial de crédito y existencia de al menos un Crédito y/o Debito a cliente
Flujo Normal 1. Ingresar al modulo 2. Realizar transacción 3. salir
Flujo Alternativo NINGUNO
Poscondiciones Transacción se realizo y ha sido actualizada.
Caso de uso # 8
CASO DE USO EMISIÓN DE TOTALES A CANCELAR
Descripción: Reporte de totales a cancelar
Actores Empleado(Oficial de crédito), modulo tesorería(Jefe de Pagaduría), cliente
Precondiciones Estar autenticado como Oficial de crédito y existencia de al menos un valor pendiente de cobro
Flujo Normal 1. Ingresar al modulo 2. Emitir y enviar reporte al modulo tesorería
Flujo Alternativo NINGUNO.
Poscondiciones Reporte fue creado con éxito
Caso de uso # 9
CASO DE USO EMISIÓN DE REPORTES DE COMISIONES
Descripción: Reporte de comisiones a cancelar
Actores Empleado (Oficial de crédito), modulo rol de pagos (Jefe de roles), cliente.
Precondiciones Estar autenticado como Oficial de crédito y existencia de al menos un valor pendiente de pago por comisión de cartera recuperada.
Flujo Normal 1. Ingresar al modulo 2. Emitir reporte 3. Salir
Flujo Alternativo NINGUNO.
Poscondiciones Reporte fue creado con éxito
62
Caso de uso # 10
CASO DE USO ACTIVAR CLIENTE
Descripción: Permite activar un cliente
Actores Empleado(Autorizador), Cliente
Precondiciones Estar autenticado como Autorizador y cliente debe ponerse al día en sus pagos
Flujo Normal 1. Ingresar al modulo 2. Verificar Estado cliente 3. Verificar ultimo pago 4. Activar cliente 5. Actualizar sistema 6. Salir
Flujo Alternativo NINGUNO
Poscondiciones El cliente ha sido habilitado
Caso de uso # 11
CASO DE USO INACTIVAR CLIENTE
Descripción: Inactivar un cliente por morosidad
Actores Empleado(Autorizador),Cliente
Precondiciones Estar autenticado como Autorizador y cliente con mas de un pago Vencido
Flujo Normal 1. Ingresar al modulo 2. Verificar Estatus 3. Verificar ultimo pago 4. Inactivar cliente 5. Actualizar sistema 6. Salir
Flujo Alternativo NINGUNO
Poscondiciones El cliente ha sido inhabilitado para futuros créditos
Caso de uso # 12
CASO DE USO AUTORIZAR CUPO
Descripción: Autoriza el aumento de un cupo disponible para créditos futuros
Actores Empleado(Autorizador),cliente
Precondiciones Estar autenticado como Autorizador y cliente debe tener calificación A (puntualidad en los pagos) en créditos anteriores
Flujo Normal 1. Ingresar al modulo 2. Verificar calificación 3. Autorizar aumento de cupo 4. sistema almacena el aumento de cupo 5. salir
Flujo Alternativo NINGUNO
Poscondiciones El cupo ha sido Autorizado “SU NUEVO CUPO ES...”
63
Caso de uso # 13
CASO DE USO CREAR CRÉDITO CLIENTE
Descripción: Elabora todos los créditos a clientes
Actores Oficial de crédito (empleado), cliente
Precondiciones Estar autenticado como Oficial de crédito y cuenta fue cancelada con anticipación
Flujo Normal 1. Ingresar a la pagina 2. Consultar cuentas 30-60-90 días 3. Verificar pagos anticipados 4. Elaborar C/C 5. Enviar reporte al modulo interesado (contabilidad)
Flujo Alternativo NINGUNO
Poscondiciones Crédito cliente fue creado exitosamente
Caso de uso # 14
CASO DE USO CONSULTAR CRÉDITO A CLIENTE
Descripción: Consultar todos los créditos a clientes por concepto de pagos anticipados
Actores Empleado(Oficial de crédito), cliente
Precondiciones Estar autenticado como oficial de crédito y existencia de al menos una nota de crédito anterior
Flujo Normal 1. Ingresar al modulo 2. Consultar notas de crédito por nombre del cliente 3. Salir
Flujo Alternativo 2. Consulta también se puede realizar por fecha
Poscondiciones Consulta de crédito a cliente ha sido realizada satisfactoriamente
Caso de uso # 15
CASO DE USO MODIFICAR CRÉDITO A CLIENTE
Descripción: Modifica algún error al crear una nota de crédito
Actores Empleado(Oficial de crédito), cliente
Precondiciones Estar autenticado como Oficial de crédito y la existencia de una nota de crédito con error
Flujo Normal 1. Ver nota de crédito 2. Corregir atributo 3. Actualizar nota de crédito a cliente
Flujo Alternativo NINGUNO.
Poscondiciones Modificación de Nota de Crédito ha sido creada con éxito ¿Desea grabar cambios? SI- NO (por default NO)
64
Caso de uso # 16
CASO DE USO CREAR DEBITO CLIENTE
Descripción: Elabora todos los debitos a clientes
Actores Oficial de crédito (empleado), cliente
Precondiciones Estar autenticado como Oficial de crédito y cuenta fue cancelada con morosidad
Flujo Normal 1. Ingresar a la pagina 2. Consultar cuentas 30-60-90 días 3. Verificar pagos atrasados 4. Elaborar D/C 5. Enviar reporte al modulo interesado
(contabilidad)
Flujo Alternativo NINGUNO
Poscondiciones Debito cliente fue creado exitosamente
Caso de uso # 17 CASO DE USO CONSULTAR DEBITO A CLIENTE
Descripción: Consultar todos los debitos a clientes por concepto de pagos con morosidad
Actores Empleado(Oficial de crédito), cliente
Precondiciones Estar autenticado como oficial de crédito y existencia de al menos una nota de debito anterior
Flujo Normal 1. Ingresar al modulo 2. Consultar notas de debito por nombre de cliente
Flujo Alternativo 2. Consulta también se puede realizar por fecha
Poscondiciones Consulta de debito a cliente ha sido realizada satisfactoriamente
Caso de uso # 18 CASO DE USO MODIFICAR DEBITO A CLIENTE
Descripción: Modifica algún error al crear una nota de debito
Actores Empleado(Oficial de crédito),cliente
Precondiciones Estar autenticado como oficial de crédito y existencia de una nota de debito con error
Flujo Normal 1. Ver nota de debito 2. Corregir atributo 3. Actualizar nota de debito a cliente
Flujo Alternativo NINGUNO.
Poscondiciones Modificación de Nota de Debito ha sido creada con éxito ¿Desea grabar cambios? SI - NO (por default NO)
65
Caso de uso # 19 CASO DE USO CREAR TARJETAS DE CRÉDITO
Descripción: Crea todas las tarjetas de cerdito con las que trabaja la empresa
Actores Oficial de crédito (empleado), cliente
Precondiciones Estar autenticado como Oficial de crédito y que sea una tarjeta de crédito con la que la empresa haya realizado un convenio previo.
Flujo Normal 1. Ingresar a la pagina 2. Ingresar datos de la tarjeta(Tipo de interés, comisión o
porcentaje de utilización, etc) 3. Actualizar datos de nueva tarjeta en el sistema
Flujo Alternativo NINGUNO
Poscondiciones Muestra el detalle de pagos que se hicieron efectivo
Caso de uso # 20 CASO DE USO CONSULTAR TARJETAS DE CRÉDITO
Descripción: Consulta de todas las tarjetas con las que se puede comprar en la empresa
Actores Oficial de crédito (empleado), Cliente
Precondiciones Estar autenticado como Oficial de crédito y que exista al menos una tarjeta creada.
Flujo Normal 1. Ingresar a la pagina 2. Consultar tarjetas habilitadas para hacer compras
Flujo Alternativo NINGUNO
Poscondiciones Muestra el detalle de pagos que se hicieron efectivo
Caso de uso # 21 CASO DE USO MODIFICAR TARJETAS DE CRÉDITO
Descripción: Modificar todos los cambios que se den en determinada tarjeta por tipo de interés, comisión por uso, etc.
Actores Oficial de crédito (empleado), cliente
Precondiciones Estar autenticado como Oficial de crédito y la Necesidad de realizar un cambio en algún atributo
Flujo Normal 1. Ingresar a la pagina 2. Modificar tarjeta (tipo de interés, comisión por uso,
etc.) 3. Almacenar cambios de atributos en el sistema
Flujo Alternativo NINGUNO
Poscondiciones Modificación de tarjeta fue realizada satisfactoriamente ¿Desea grabar los cambios? SI- NO (por default NO)
66
Caso de uso # 22 CASO DE USO ELIMINAR TARJETA DE CRÉDITO
Descripción: Elimina todas las tarjetas con las que ya no se desea trabajar
Actores Oficial de crédito (empleado), Cliente
Precondiciones Estar autenticado como oficial de crédito y que el banco emisor deje de funcionar o la empresa no desee continuar trabajando con ella
Flujo Normal 1. Ingresar a la pagina 2. Escoger Tarjeta a eliminar 3. Eliminar tarjeta 4. Almacenar información en el sistema
Flujo Alternativo NINGUNO
Poscondiciones Se ha eliminado UNA TARJETA DE CRÉDITO desea continuar Si - No (Por default No)
Caso de uso # 23 CASO DE USO CONSULTAR PAGOS CON TARJETA DE CRÉDITO
Descripción: Consulta de todos los pagos que se hayan realizado mediante una transacción con tarjeta de crédito, así como sus vencimientos e intereses correspondientes
Actores Oficial de crédito (empleado), Cliente.
Precondiciones Estar autenticado como Oficial de crédito
Flujo Normal 1. Ingresar a la pagina 2. Consultar pagos con tarjeta 3. Enviar reporte de Cobro al departamento interesado
(TESORERÍA). 4. Almacenar información en el sistema 5. Salir
Flujo Alternativo NINGUNO
Poscondiciones Muestra el detalle de pagos con tarjeta a cobrar
Caso de uso # 24 CASO DE USO CONTROL DE CHEQUES POSFECHADOS
Descripción: Controla todas los pagos que se hayan realizado mediante una transacción con cheque a fecha
Actores Oficial de crédito (empleado), cliente
Precondiciones Estar autenticado como Oficial de crédito y acuerdo de pagos con cheque a fecha
Flujo Normal 1. Ingresar a la pagina 2. Consultar cheque posfechados 3. Emitir reporte de cobros al departamento interesado
(TESORERÍA) 4. Actualizar sistema
Flujo Alternativo NINGUNO
Poscondiciones Muestra el detalle de pagos con cheques posfechados a ser depositados.
67
Caso de uso # 25 CASO DE USO CONTROL DE MULTAS POR CHEQUES PROTESTADOS
Descripción: Controla todas las multas correspondientes por concepto de cheques protestados
Actores Oficial de crédito (empleado), cliente
Precondiciones Estar autenticado como Oficial de crédito y cheque no fue cobrado por lo que genero multa
Flujo Normal 1. Ingresar a la pagina 2. Consultar cheque protestados 3. Reporte de multas 4. Emitir reporte para el cobro 5. Almacenar información en el sistema
Flujo Alternativo NINGUNO
Poscondiciones Muestra el detalle de pagos por multas de cheques protestados
Caso de uso # 26 CASO DE USO DEFINIR RESTRICCIONES
Descripción: Permite restringir los accesos a determinadas opciones del modulo cartera
Actores Administrador, autorizador, oficial de crédito.
Precondiciones Debe contar como servicio activo de la compañía o tener claves de acceso
Flujo Normal 1. Usuario debe ingresar su login y contraseña 2. El Sistema comprueba la validez de los datos.
Flujo Alternativo 2. Si los datos son incorrectos envía un mensaje de corrección Acceso restringido
Poscondiciones Permite el acceso a servicios del modulo según los privilegios
Caso de uso # 27 CASO DE USO VALIDAR INGRESO AL SISTEMA(Modulo Cartera)
Descripción: Permite al usuario(administrador u Oficial de Crédito u otro empleado en particular) por medio de su login y contraseña ingresar al sistema(modulo)
Actores Administrador, Empleado(oficial de crédito), otros empleados
Precondiciones Debe contar como servicio activo de la compañía o tener claves de acceso
Flujo Normal 1. Usuario debe ingresar su login y contraseña 2. El Sistema comprueba la validez de los datos.
Flujo Alternativo 2. Si los datos son incorrectos envía un mensaje de corrección
Poscondiciones Permite el acceso a servicios del sistema según los privilegios
68
2.6 Diagrama de Objeto - Relación
2.6.1. Módulo de cartera
A continuación se muestra el esquema gráfico de cuales son las
tablas utilizadas por nuestro departamento propias y la de los
módulos externo.
La tabla principal es la tabla car_clie_dat pues de esta se
desprenden los datos de creación del cliente.
Algunas otras tablas que se observan ven_vendedor, banco, en la
Figura 2.6.3.1, son respectivamente de los módulos de venta,
tesorería, contabilidad y rol de pagos, de las cuales se van a
seleccionar atributos importantes y necesarios para nuestro módulo
y así fluya correctamente la información., cabe recalcar además que
se manejara una tabla con datos históricos del cliente.
69
CAR_CLI_DAT1
CAR_CIUD_DAT1
BANCO1
CAR_KARDEX_CLIE_LOG1
VEN_VENDEDOR1
CAR_TARJ_DAT1
CAR_CONTA_ASIENTO_DAT1
CAR_CLIE_NATU_DAT1
CAR_CLIE_JURI_DAT1
CAR_TIPO_CLIE_DAT1
CODI_TIPO_PAGO_DAT1
CAR_PROV_DAT1
CAR_PAIS_DAT1
CAR_CANT_DAT1
Figura 2.6.3.1 Diagrama Objeto Relación – Módulo Cartera
70
2.7 . Diagrama de secuencias
Los diagramas de secuencias es la vista de interacción describe
secuencias de intercambios de mensajes entre los roles que implementan
el comportamiento de un sistema. Este es más adecuado para observar la
perspectiva cronológica de las interacciones, muestra la secuencia
explícita de mensajes y son mejores para especificaciones de tiempo real
y para escenarios complejos.
Debe reflejar las siguientes características:
Muestra la secuencia de mensajes entre objetos durante un escenario
concreto
Cada objeto viene dado por una barra vertical
El tiempo transcurre de arriba abajo
Cuando existe demora entre el envío y la atención se puede indicar
usando una línea oblicua
71
2.7.1 Diagramas: Secuencias para Seguridad de la Aplicación
Administrador GUI Usuario
CREAR USUARIO
Datos
Crear usuario
Usuario Creado Almacen
usuario
Figura 2.7.1.1 Seguridad - Crear Usuarios
Administrador GUI Usuario
CONSULTAR USUARIO
Usuario
Buscar Usuario
Usuario
Muestra datos de Usuario
Figura 2.7.1.2 Seguridad – Consultar Usuario
72
Administrador GUI Perfil
CREAR PERFIL / ROL
Datos
Crear Perfil
Grabar perfil
Creación de pérfil con éxito
Figura 2.7.1.3 Seguridad – Crear Rol
GUI Perfil
ASIGNAR OPCIONES A PERFIL
Perfil
Enviar Perfil
Se ha asignado opción al perfil
Verifica Perfil
Guardar opción del Perfil
Administrador
Figura 2.7.1.4 Seguridad – Asignar opciones al perfil
73
Administrador GUI Opción
Opción
Buscar opción
Consulta
opción
Muestra opción
CONSULTAR OPCIONES
Figura 2.7.1.5 Seguridad – Consultar opciones
Administrador GUI Opción
Datos
Crear opción
Grabar
opción
Nueva opción creada
CREAR OPCIONES
Figura 2.7.1.6 Seguridad – Crear Opciones
74
Administrador GUI Evento
Contraseña
Enviar contraseña
Guarda
contraseña
Nueva contraseña creada
exitosamente
CAMBIAR CONTRASEÑA
Figura 2.7.1.7. Seguridad – Cambiar Contraseña
GUI Perfil
Perfil
Enviar Perfil
Perfil guardado con éxito
Administrador
ASIGNAR USUARIO A PERFIL
Figura 2.7.1.8 Seguridad – Asignar Usuario al Perfil
75
2.7.2 Diagramas: Secuencias para Auditoria de la Aplicación.
Administrador GUI Tabla
Datos
Enviar datos
Muestra tablas con
transacciones
auditas
Consultar
transacción
auditada
CONSULTAR TRANSACCIONES AUDITADAS
Figura 2.7.2.1 Auditoria – Consultar Transacciones auditadas
Administrador GUI Tabla
AUDITAR TRANSACCIÓN
Datos
Enviar transaccion
Objeto1
Guardar los campos auditables en la tabla auditada
Buscar transaccion
Guardar
transacción
auditables
Figura 2.7.2.2 Auditoria –Auditar Transacción
76
2.7.3 Diagrama de Secuencias: Módulo Cartera
Autorizador GUI
Ingresar al modulo
ACTIVAR CLIENTE
Oficial de Crédito
Verificar calificación
Cliente Activado
Figura 2.7.3.1 Módulo de Cartera –Activar Cliente
Autorizador GUI
Ingresar al modulo
INACTIVAR CLIENTE
Oficial de Crédito
Verificar estatus
Cliente Inactivo
Figura 2.7.3.2 Módulo de Cartera – Inactivar Cliente
77
Autorizador GUI
Ingresar al modulo
AUTORIZAR CUPO
Cliente
Verificar calificación
Su cupo fue actualizado
Figura 2.7.3.3 Módulo de Cartera – Autorizar Cupo
Oficial de Crédito GUI
Ingresar al modulo
CREAR CLIENTE
Cliente
Ingresa datos del cliente
Cliente Creado con Exito
Figura 2.7.3.4 Módulo de Cartera – Crear Cliente
78
Oficial de Crédito GUI
Ingresar al modulo
CONSULTAR CLIENTE
Cliente
Consulta el Cliente
Consulta realizada con
éxito
Busqueda de
Cliente
Figura 2.7.3.5 Módulo de Cartera – Consultar Cliente
Oficial de Crédito GUI
Ingresar al modulo
MODIFICA CLIENTE
Cliente
Búsqueda del Cliente
Modificación realizada
con éxito
Busqueda y
Modificación
Graba
Figura 2.7.3.6 Módulo de Cartera – Modificar Cliente
79
Usuario del
sistemaGUI Oficial de credito
Ingresar al
moduloConsultar cuentas
pendientes de pago
Acceso
Validar acceso
CONSULTA CLIENTES 30-60- 90 DIAS
Búsqueda por nombre o
fecha Consulta realizada con
exito
Figura 2.7.3.7 Módulo de Cartera – Consultar Clientes 30-60-90 dias
Oficial de Crédito GUI
Ingresar al modulo
Jefe de Pagaduría
Emitir Reportes
Enviar Reportes
CONSULTA DE PAGOS PENDIENTES
Figura 2.7.3.8 Módulo de Cartera – Consultar Pagos Pendientes
80
Oficial de Credito GUI Cliente
Ingresar al
modulo
CALIFICAR CLIENTES
Ver estado del
cliente
Cliente activo
califica
Cliente es calificado
con éxito
Figura 2.7.3.9 Módulo de Cartera – Calificar Clientes
Oficial de Credito GUI Auliar Contable, Contador
Ingresar al modulo y
generar reportes
CONTABILIZAR TRANSACCION
Enviar Repòrta
Transacción realizada
con éxito
Figura 2.7.3.10 Módulo de Cartera – Contabilizar Transacción
81
Oficial de Crédito GUI
Ingresar al modulo
Jefe de Pagaduría
Emitir Reportes
Enviar Reportes
EMISIÓN DE TOTALES A CANCELAR
Figura 2.7.3.11 Módulo de Cartera – Emisión de Totales a Cancelar
Oficial de Crédito GUI
Ingresar al modulo
Jefe de Recursos
Humanos
Emitir Reportes
Enviar Reportes
EMISIÓN DE REPORTES DE COMISIONES
Figura 2.7.3.12 Módulo de Cartera – Emisión de Reporte de Comisiones
82
Oficial de Crédito GUI
Datos
Cliente
Crea Crédito
Crédito Creado con éxito
REALIZAR CRÉDITO A CLIENTE
Almacenar crédito
Figura 2.7.3.13 Módulo de Cartera – Realizar crédito Clientes
Oficial de Crédito GUI
Nota de Crédito
Cliente
Busca Nota de Crédito
Muestra datos
CONSULTA CRÉDITO CLIENTES
Nota de Crédito
Figura 2.7.3.14 Módulo de Cartera – Consulta Crédito Cliente
83
Oficial de Crédito GUI
Nota de Crédito
Cliente
Busca Nota de Crédito
Datos Modificados
MODIFICA CRÉDITO CLIENTE
Graba datos
Busqueda y
Modifica
Figura 2.7.3.15 Módulo de Cartera – Modificación Crédito Cliente
Oficial de Crédito GUI
Datos
Cliente
Crea Débito
Débito Creado con éxito
CREAR DEBITO CLIENTE
Almacenar débito
Figura 2.7.3.16 Módulo de Cartera – Crea Debito Cliente
84
Oficial de Crédito GUI
Nota de Débito
Cliente
Busca Nota de Débito
Muestra datos
CONSULTA DEBITO CLIENTE
Nota de Débito
Figura 2.7.3.17 Módulo de Cartera – Consulta Debito Cliente
Oficial de Crédito GUI
Nota de Débito
Cliente
Busca Nota de Débito
Datos Modificados
MODIFICA DEBITO CLIENTE
Graba datos
Busqueda y
Modifica
Figura 2.7.3.18 Módulo de Cartera – Modifica Debito Cliente
85
Oficial de Crédito GUI
Datos
Cliente
Crear Tarjeta
Tarjeta Creada
CREAR TARJETA DE CRÉDITO
Almacenar
Tarjetas
Figura 2.7.3.19 Módulo de Cartera – Crear tarjeta de Crédito
Oficial de Crédito GUI
Datos
Cliente
Enviar Datos
Muestra Tarjeta
CONSULTAR TARJETAS DE CRÉDITO
Consulta Tarjetas
Figura 2.7.3.20 Módulo de Cartera – Consultar Tarjeta de Crédito
86
Oficial de Crédito GUI
Tarjeta de Crédito
Cliente
Busca Tarjeta de Crédito
Datos Modificados
MODIFICAR TARJETAS DE CRÉDITO
Graba datos
Busqueda y
Modifica
Figura 2.7.3.21 Módulo de Cartera – Modificar Tarjeta de Crédito
Oficial de Crédito GUI
Tarjeta de Crédito
Cliente
Busca Tarjeta de Crédito
Datos Eliminados
ELIMINA TARJETAS DE CRÉDITO
Grabar datos
Busqueda y Elimina
Figura 2.7.3.22 Módulo de Cartera – Eliminar Tarjeta de Crédito
87
Oficial de Crédito GUI
Ingresar al modulo
Cliente
Emitir Reportes
Enviar Reportes
CONTROL DE CHEQUES POSFECHADOS
Figura 2.7.3.23 Módulo de Cartera – Control de Cheques Posfechados
Oficial de Crédito GUI
Ingresar al modulo y
verificar si se hizo efectivo
Cliente
Emitir Reportes
Enviar Reportes
CONTROL DE MULTAS POR CHEQUES PROTESTADOS
Figura 2.7.3.24 Módulo de Cartera – Control de Cheques Protestados
88
Oficial de Crédito GUI
Autorizador orden
Autorizador
Cargar Autorizador
Transacción exitosa
DEFINIR AUTORIZACIÓN
Figura 2.7.3.25 Módulo de Cartera – Definir Autorización
Usuario del
sistemaGUI Oficial de credito
VALIDAR INGRESO AL SISTEMA
Login
_password
Validar datos
Acceso
Crea sesion
Validar acceso
Verifica
Figura 2.7.3.26 Módulo de Cartera – Validar Ingreso al Sistema
89
CAPITULO 3
3. DISEÑO
3.1 Diagrama de clase
Una clase se puede explicar coma la definición teórica del objeto; ya que
es una especificación genérica para objetos que comparten el mismo
comportamiento, una clase contiene las bases para la construcción del
objeto definido cuáles serán las propiedades, métodos y eventos que este
contendrá, cuáles serán públicos y cuáles privados.
Una vez identificados los objetos que componen nuestra solución, el
siguiente paso es identificar los atributos y métodos que nuestros objetos
deben tener, los datos que se almacenan en los atributos definen de
manera individual a cada objeto.
Los métodos representan las acciones, estas acciones permiten a los
objetos interactuar entre sí. Cada diagrama presenta la relación de clases
así como sus métodos más importante, es decir, aquellos que han
utilizado en la descripción de los diagramas de secuencia.
90
A continuación se presentan los diagramas de clases que se han
desarrollado.
3.1.1 Diagrama de Clases para la Seguridad de la Aplicación.
Clase Usuarios
Permite alojar datos de todos los usuarios del sistema. Así como
también el rol que desempeña. Solo los usuarios que estén
almacenados en la base tendrá acceso a la aplicación, ver figura
3.1.1.1.
USUARIOS
idusuario
username
password
nombres
apellidos
rol
Figura 3.1.1.1 Diagrama de clases-Usuarios
3.1.2 Diagramas de clases para la Auditoria de la Aplicación
Clase Acción
Permite tener un registro de todas las transacciones que realiza,
como ingresos, consultas, modificación, eliminación.
CAR_ACCION_DAT(ACCION)
codi_acci
desc_acci
esta_acci
audi_usua_ingr
aud_fech_ingr
insert()
select()
update()
delete()
Figura 3.1.2.1 Diagrama de Clase Acción
91
Clase Auditoria
Establece en detalle la auditoria realizada, indicando el código de la
empresa, modulo que realizo la transacción, la acción y la tabla a la
cual se realizo dicha acción.
CAR_AUDI_LOG(AUDITORIA )
codi_empr
codi_modu
codi_acci
tabl_audi
secu_tabl
audi_usua
insert()
select()
update()
delete()
Figura 3.1.2.2 Diagrama de Clase Auditoria
3.1.3 Diagrama de Clases: Módulo Cartera
Clase Tipo Cliente
Permite guardar los tipos de clientes. Ver figura 3.1.3.1
CAR_TIPO_CLIE_DAT(TIPO CLIENTE)
codi_tipo_clie_pk
desc_tipo_clie
crear()
edita()
eliminar()
enviar_mensaje() consultar todos()
Fig.3.1.3.1. Clase Tipo Cliente
92
Clase Cliente
Esta clase nos permite la creación de cada uno de los datos del
cliente de manera general usando los principios de herencia o
generalización. Ver Figura 3.1.3.2
CAR_CLIE_DAT(CLIENTE )
codi_clie_pk
stat_clie
nume_calle
come_calle
des_cdla
tele-princ
tele_secu
fax
cupo
plaz
sobr_porc
sobr_mont
fech_ingr
mont_ulti_comp
codi_tipo_clie_pk
codi_tipo_pago_pk
codi_cdla_pk
codi_ciud_pk
codi_calle_pk
codi_vendedor
codi_empr_fk
aprobacioncredito
crear()
modificar()
Eliminar()
grabar()
consultar todos()
consultar_individual
limpiar()
enviar-mensaje()
Figura 3.1.3.2 Clase Cliente
93
Clase Cliente Natural
Contiene datos propios de un cliente natural, como son número
cedula, nombre, y heredando los campos de la tabla base cliente. Ver
Figura 3.1.3.3
CAR_CLIE_NATU_DAT(CLIENTE NATURAL)
codi_clie_pk
cedu_pk
nomb_natu
cont
estado
crear()
consultar()
modificar()
eliminar()
consultar individual()
consultar todos()
Fig.3.1.3.3 Clase Cliente Natural
Clase Cliente Jurídico
Contiene datos propios de un cliente jurídico, como son número de
ruc, razón social, representante legal, y heredando los campos
comunes de la tabla base cliente. Ver Figura 3.1.3.4.
CAR_CLIE_JURI_DAT(CLIENTE JURÍDICO)
codi_clie_pk
ruc_pk
repr_lega
razo_soci
estado
crear()
consultar()
modificar()
eliminar()
consultar individual()
consultar todos()
Fig.3.1.3.4 Clase Cliente Jurídico
94
Clase País
Contiene los datos de todos los países. Ver figura 3.1.3.5
CAR_PAIS_DAT(PAIS)
codi_pais_pk
desc_pais
estado
crear()
editar()
eliminar() consultar todos()
Figura 3.1.3.5 Clase País
Clase Provincia
Detalle de cada una de las provincias. Ver figura 3.1.3.6
CAR_PROV_DAT(PROVINCIA)
codi_prov_pk
desc_prov
codi_pais_pk
estado
crear() editar()
eliminar() consultar todos()
Figura 3.1.3.6 Clase Provincia
Clase Cantón
Contiene cada uno de los cantones para determinada provincia. Ver
figura 3.1.3.7
CAR_CANT_DAT(CANTON)
codi_cant_pk
desc_cant
codi_prov_pk
estado
crear()
editar()
eliminar()
consultar todos()
Figura 3.1.3.7 Clase Cantón
95
Clase Parroquia
Guarda en detalle cada una de las parroquias. Ver figura 3.1.3.8
CAR_PARR_DAT(PARROQUIA)
codi_parr_pk
desc_parr
codi_sect_pk
codi_ciud_pk
estado
crear()
editar()
eliminar()
consultar todos()
Figura 3.1.3.8 Clase Parroquia
Clase Ciudad
Esta clase permite hacer uso del criterio de búsqueda ya sea de
manera general o de forma individual. Ver figura 3.1.3.9
CAR_CIUD_DAT(CIUDAD)
codi_ciud_pk
desc_ciud
codi_prov_pk
codi_pais_pk
codi_cant_pk
estado
crear()
consultar()
modificar()
eliminar()
consultar individual()
consultar todos()
Figura 3.1.3.9 Clase Ciudad
96
Clase Modulo
Control de cada uno de los módulos de la aplicación. Ver figura
3.1.3.10
CAR_MODU_DAT(MODULO)
codi_modu_pk
desc_modu
codi_empr_fk
estado
crear()
editar()
eliminar()
consultar todos()
Figura 3.1.3.10. Clase Modulo
Clase Estado Cliente
Guarda el status de cada uno de los clientes, como activo inactivo,
etc., Ver figura 3.1.3.11
CAR_STAT_DAT(ESTADO CLIENTE)
codi_stat_pk
desc_stat
estado
crear()
editar()
eliminar()
consultar todos()
Figura 3.1.3.11. Clase Estado Cliente
97
Clase Kardex
Esta clase contiene cada uno a de las transacciones realizadas a los
clientes con son: créditos a clientes y los debitos a clientes, además
nos permite generar consultas ya sea general o específicas y
también nos permiten realizar un análisis de las cuentas. Ver figura
3.1.3.12
CAR_KARDEX_CLIE_LOG(KARDEX )
codi_kard_clie_pk
secu_trans
fech_regi
fech_vent
plaz
descrip
coment
tota
nume_apli
asentado
bloqueado
abon
codi_stat_pk
codi_ciud_pk
codi_modu_pk
codi_vendedor
codi_clie_pk
codi_empr
codi_tarj_pk
codi_banc_pk
sigl_pk
tipo_apli
contabilizar_total()
crear()
grabar()
consultar todos()
consultar_individual()
modificar()
eliminar()
enviar-mensaje()
Figura 3.1.3.12. Clase Kardex
98
Clase Tipo Documento
Registra cada uno de los documentos. Ver figura 3.1.3.13
CAR_TIPO_DOCU_DAT(TIPO DOCUMENTO)
sigl_pk
desc_docu
estado
codi_stat_pk
codi_modu_pk
crear()
editar()
eliminar()
enviar_mensaje()
consultar_todos()
Figura 3.1.3.13. Clase Tipo Documento
Clase Sucursal Cliente
Muestra un detalle de cada una de las sucursales de nuestros
clientes que tengan más de una agencia. Ver figura 3.1.3.14
CAR_SUCU_CLIE_DAT(SUCURSAL CLIENTE )
codi_sucu_clie_pk
nomb_sucu
estado
tele_prin
tele_secu
fax
nume_calle
come_calle
desc_cdla
codi_clie_pk
codi_cdla_pk
codi_calle_pk
codi_sect_pk
codi_prov_pk
crear()
grabar()
consultar todos()
modificar()
eliminar()
enviar-mensaje()
Figura 3.1.3.14. Clase Sucursal Cliente
99
Clase Tarjetas
Esta clase contiene cada una de las tarjetas de créditos con que la
empresa trabaja, así como también sus respectivos % de
incrementos y permite hacer una búsqueda ya sea de manera
general o individual. Ver figura 3.1.3.15
CAR_TARJ_DAT(TARJETAS)
codi_tarj_pk
nomb_tarj
estado
porc_desc_tarj
porc_incr_tarj
mini_tarj
crear()
consultar()
modificar()
Eliminar()
Grabar
consultar individual()
consultar todos()
Figura 3.1.3.15. Clase Tarjeta
Clases Externas:
Clase Transacción Tarjetas
TRAN_TARJ(TRANSACCION TARJETAS)
codi_tran_pk
codi_tarj_pk
codi_clie_pk
nume_tarj
valor
increm
cobrado
fecha
obtener_dato()
buscar_aplicacion()
carga_dato()
Figura 3.1.3.16. Clase Transacción Tarjetas
100
Clase Transacción Cheque
TRAN_CHEQ(TRANSACCION CHEQUE)
codi_tran_cheq
Idbanco
codi_clie_pk
fech_depo
fech_venc
cuen_ban
valo
nume_che
post_fech
obtener_dato()
buscar_aplicacion()
carga_dato()
Figura 3.1.3.17. Clase Transacción Cheques
Clase (Banco)
Esta clase permite tener un registro de cada una de las instituciones
bancarias para realizar búsquedas y consultas de manera general y
especifica. Ver figura 3.1.3.18
BANCO
idbanco
nombre
idestado
estado
fecharegistro
horaregistro
crear()
consultar()
modificar()
eliminar()
grabar
consultar individual()
consultar todos()
Figura 3.1.3.18 Clase Banco
101
Clase Vendedor
Creación de vendedores que laboran en la empresa, permite realizar
las consultas y reportes de los % de comisión de las ventas de cada
uno de los vendedores. Ver figura 3.1.3.19
VEN_VENDEDOR(VENDEDOR)
codi_vendedor
nomb_vendedor
codi_comision
tipo_vendedor
codi_detalle_comision
estado
fecha_creacion
crear()
grabar()
modificar()
eliminar()
consultar individual()
consultar todos()
Figura 3.1.3.19. Clase Vendedores
Clase Contabilidad Asientos Contables
Esta clase nos permite realizar los asientos contables de las
transacciones efectuadas en el modulo de cartera como: créditos a
clientes y debitos a clientes. Ver figura 3.1.3.20
CONTA_ASIENTOS(ASIENTOS CONTABLES)
tipo_as
nume_doc
fech_doc
codvta
ctaaux
detalle
valor
bloqueado
crear()
grabar()
contabilizar()
Figura 3.1.3.20. Clase Asientos Contables
102
Clases Histórico de Cliente
En esta clase se va a guardar cada uno de los datos de los clientes,
para realizar consultas de datos históricos de los clientes, una copia
del Kardex. Ver figura 3.1.3.21.
CAR_TRANS_TMP(CLIENTE HISTORICO )
codi_kard_clie_pk
secu_trans
fech_regi
fech_vent
plaz
descrip
coment
tota
nume_apli
asentado
bloqueado
abon
codi_stat_pk
codi_ciud_pk
codi_modu_pk
codi_vendedor
codi_clie_pk
codi_empr
codi_tarj_pk
codi_banc_pk
sigl_pk
tipo_apli
contabilizar_total()
crear()
grabar()
consultar todos()
consultar_individual()
modificar()
eliminar()
enviar-mensaje()
Figura 3.1.3.21. Clase Cliente Histórico
103
3.2 Generalización
Es el resultado de la unión de 2 o más conjuntos de entidades (de bajo
nivel) para producir un conjunto de entidades de más alto nivel. La
generalización se usa para resaltar los parecidos entre tipos de entidades
de nivel más bajo y ocultar sus diferencias.
La generalización consiste en identificar todos aquellos atributos iguales
de un conjunto de entidades para formar una entidad(es) global(es) con
dichos atributos semejantes
Dicha entidad(es) global(es) quedara a un nivel más alto al de las
entidades origen.
3.2.1 Esquema de Generalización de Modulo Cartera
La relación de generalización que existe entre una clase cliente, la
cual representa a uno en general, la clase cliente con deuda vencida
y sin deuda representan a una clase específica.
La figura muestra la generalización del cliente mediante un diagrama
de clases UML.
Para una mejor comprensión del texto, se presentan el siguiente
gráfico que muestra un modelo de generalización de la principal
clase con las que trabaja nuestro módulo objeto de estudio. Ver Fig.
3.2.1.1.
104
Figura 3.2.1.1 Esquema Generalización Clase Cliente
3.3 Diagrama Objeto - Relación con sus Atributos
3.3.1. Seguridad de la Aplicación
Par implementar la seguridad del sistema, en nuestro modulo nos
valemos de la tabla usuarios, la cual nos provee las herramientas
necesarias para definir cada uno de los permisos de acceso a
nuestro modulo.
Es decir, se crean los roles de, admin. (administrador), crédito(oficial
de crédito), tesorería, ventas, para que los usuarios respectivos
ingresen al sistema y tengan acceso a las opciones permitidas
según el rol asignado.
CLIENTE
CARTERA
CORRIENTE
NATURAL JURIDICO
CARTERA
VENCIDA
CLIENTE
ACTIVO
CLIENTE
INACTIVO
105
3.3.2 Auditoria de la Aplicación.
La auditoria es un factor importante de toda aplicación, por ende
nuestro proyecto la ha considerado como uno de los factores más
relevantes en el desarrollo de la misma.
Las tablas principales para el proceso de auditoria son las tablas
CAR_ACCI_DAT, que nos facilita tener un registro de todas las
transacciones que realiza, como insert(), select(), update(), delete(),
auditando cada una de estas así como también del usuario que
realizo dicha transacción, como su rol respectivo y la tabla
CAR_AUDI_LOG, que proporciona en detalle el código de la
empresa, el módulo que ingreso y realizó determinada transacción y
la tabla a la cual se le realizo dicha acción.
3.3.3 Diagrama Entidad Relación Modulo Cartera
Las tablas principales en este módulo son las tablas de car_clie_dat,
car_clie_natu_dat, car_clie_juri_dat, car_pais_dat, car_prov_dat,
car_cant_dat, car_ciud_dat, car_parr_dat, car_stat_dat,
car_sucu_clie_dat, car_tipo_clie_dat, car_tipo_pago_dat,
car_tipo_docu, car_tarj_dat, car_kardex_clie_log, car_trans_tmp,
usuarios, entre otras, teniendo cada una de las cuales las siguientes
llaves primarias:
Tabla car_clie_dat, clave primaria codi_clie_pk
106
Tabla car_clie_natu_dat, clave primaria codi_clie_pk
Tabla car_clie_juri_dat, clave primaria codi_clie_pk
Tabla car_pais_dat, clave primaria codi_pais_pk
Tabla car_prov_dat, clave primaria codi_prov_pk
Tabla car_cant_dat, clave primaria codi_cant_pk
Tabla car_ciud_dat, clave primaria codi_ciud_pk
Tabla car_parr_dat, clave primaria codi_parr_pk
Tabla car_stat_dat, clave primaria codi_stat_pk
Tabla car_sucu_clie_dat, clave primaria codi_sucu_clie_pk
Tabla car_tipo_clie_dat, clave primaria codi_tipo_cli_pk
Tabla car_tipo_pago_dat clave primaria codi_tipo_pago_pk
Tabla car_tipo_pago_dat clave primaria codi_tipo_pago_pk
Tabla car_tipo_docu_dat clave primaria sigl_pk
Tabla car_tarj_dat clave primaria codi_tarj_pk
Tabla car_kardex_clie_log clave primaria codi_kard_clie_pk
Tabla car_trans_tmp clave primaria codi_kard_clie_pk
En este módulo, en las tablas existen campos que son usados para
aplicar auditoria tales como: audit_fec_ingr, audit._usua_ingr,
audit._fech_modi, audit._usua_modi.
107
CAR_CLI_DAT
PK CODI_CLIE_PK
SAT_CLIE
NUME_CALLE
COME_CLIE
DESC_CDLA
TELE_PRIN
TELE_SECU
FAX
CUPO
PLAZ
SOBR_PORC
SOBR_MONT
FECH_INGR
FECH_ULTI_COMP
MONT_ULTI_COMP
FK1 CODI_TIPO_CLIE_PK
FK2 CODI_TIPO_PAGO_PK
CODI_CDLA_PK
CODI_CALLE_PK
CODI_EMPR_FK
APROBACIONCREDITO
FK3 codi_vendedor
FK4 codi_ciud_pk
CAR_CIUD_DAT
PK codi_ciud_pk
desc_ciud
FK3 codi_prov_pk
FK1 codi_pais_pk
FK2 codi_cant_pk
estado
BANCO
PK idbanco
nombre
idestado
estado
idusuario
fecharegistro
horaregistro
CAR_KARDEX_CLIE_LOG
PK codi_kard_clie_pk
secu_trans
fech_regi
plaz
descrip
coment
tota
nume_apli
asentado
bloqueado
abon
codi_stat_pk
codi_modu_pk
FK3 codi_vendedor
codi_clie_pk
codi_empr_pk
FK2 codi_tarj_pk
codi_banc_pk
sigl_pk
tipo_apli
VEN_VENDEDOR
PK codi_vendedor
nomb_vendedor
codi_comision
tipo_vendedor
codi_detalle_comision
estado
fecha_creacion
CAR_TARJ_DAT
PK codi_tarj_pk
nomb_tarj
estado
porc_desc_tarj
porc_incr_tarj
mini_tarj
CAR_CONTA_ASIENTO_DAT
PK,FK1 codi_cont_asie_pk
tipo_as
num_doc
fech_doc
codcta
detalle
tipreg
tipregc
bloqueado
estado
CAR_CLIE_NATU_DAT
PK,FK1 codi_clie_pk
cedu_pk
nomb_natu
cont
estado
CAR_CLIE_JURI_DAT
PK,FK1 codi_clie_pk
ruc_pk
repr_lega
razo_soci
estado
CAR_TIPO_CLIE_DAT
PK codi_tipo_clie_pk
desc_tipo_clie
CODI_TIPO_PAGO_DAT
PK codi_tipo_pago_pk
desc_tipo_pago
CAR_PROV_DAT
PK codi_prov_pk
desc_prov
codi_pais_pk
estado
CAR_PAIS_DAT
PK codi_pais_pk
desc_pais
estado
CAR_CANT_DAT
PK codi_cant_pk
desc_cant
codi_prov_pk
estado
Figura 3.3.3.1 Diagrama Objeto Relación-Módulo de Cartera
108
3.4 Detalle de Tablas del Módulo Cartera (Atributos, Tipos de Datos y
P- KEY)
TABLA: CAR_CLIE_DAT
P-KEY
CAMPO TIPO LONG DESCRIPCIÓN
PK codi_clie_pk int 8 Contiene el código único del cliente
stat_clie varchar 2 Contiene el estado del cliente activo, inactivo, bloqueado, suspendido, etc.,
nume_calle int 8 Contiene el numero de la calle de dirección del cliente
come_calle varchar 30 Comentario referencial a la dirección
desc_cdla varchar 30 Descripción de la ciudadela
tele_prin varchar 9 Teléfono principal
tele_secu varchar 9 Teléfono Secundario
fax varchar 9 Fax
email varchar 30 Correo electrónico del cliente
cupo float 8 Cupo o valor de crédito
plaz Int 4 Plazo del crédito (30-60-90 días)
sobr_porc float 8 Sobregiro en porcentajes del crédito
sobr_mont float 8 Monto de sobregiro del crédito
fech_ingr varchar 10 Fecha de inicio del crédito
fech_venc varchar 10 Fecha de finalización del crédito
monto_ulti_comp float 8 Monto de ultima compra
FK codi_tipo_clie_pk int 8 Código del tipo de cliente(natural o jurídico)
FK codi_tipo_pago_pk int 8 Código del tipo de pago(efectivo crédito)
FK codi_cdla_pk int 8 Código de la ciudadela
FK codi_ciud_pk int 8 Código de la ciudad donde reside el cliente
FK codi_calle_pk int 8 Código de calle
FK codi_vendedor int 8 Código del vendedor que fue asignado el cliente
FK codi_empr_fk int 8 Código de la empresa (en caso de ser multiempresa)
aprobacioncredito char 1 A aprobado N negado.
TABLA: CAR_CLIE_NATU_DAT
P-KEY CAMPO TIPO LONG DESCRIPCIÓN PK codi_clie_pk int 8 Contiene el código único del cliente
PK cedu_pk varchar 13 Contiene el numero de cedula único del cliente
nomb_natu varchar 45 Contiene los nombres y apellidos del cliente
cont varchar 45 Contacto o mano derecha del cliente
estado char 1 Estado del cliente natural activo o inactivo.
109
TABLA: CAR_CLIE_JURI_DAT
P-KEY
CAMPO TIPO LONG DESCRIPCIÓN
PK codi_clie_pk int 8 Contiene el código único del cliente
PK ruc_pk varchar 13 Contiene el numero de RUC único del cliente
repr_lega varchar 45 Contiene los nombres y apellidos del Representante Legal
razo_soci varchar 45 Razón Social de la empresa
estado char 1 Estado del cliente Jurídico activo o inactivo.
TABLA: CAR_PAIS_DAT
P-KEY CAMPO TIPO LONG DESCRIPCIÓN
PK codi_pais_pk int 8 Contiene el código único del País
desc_pais varchar 40 Contiene la descripción de País
estado char 1 Estado del País activo o inactivo.
TABLA: CAR_PROV_DAT
P-KEY CAMPO TIPO LONG DESCRIPCIÓN PK codi_prov_pk int 8 Contiene el código único de la Provincia
desc_prov varchar 30 Contiene la descripción de la Provincia
FK codi_pais_pk int 8 Contiene el código del País
estado char 1 Estado de la provincia activa o inactiva.
TABLA: CAR_CANT_DAT
P-KEY
CAMPO TIPO LONG DESCRIPCIÓN
PK codi_cant_pk Int 8 Contiene el código único del cantón
desc_cant varchar 30 Contiene la descripción de cantón
FK codi_prov_pk Int 8 Contiene el código de la provincia a la que pertenece el cantón
Estado char 1 Estado del cantón activo o inactivo.
TABLA: CAR_PARR_DAT
P-KEY
CAMPO TIPO LONG DESCRIPCIÓN
PK codi_parr_pk int 8 Contiene el código único de la Parroquia
Desc_parr varchar 30 Contiene la descripción de la Parroquia
FK codi_sect_pk int 8 Contiene el código del sector al que pertenece la parroquia
FK codi_ciud_pk int 8 Contiene el código único de la ciudad.
Estado char 1 Estado de la parroquia activa o inactiva.
110
TABLA: CAR_CIUD_DAT
P-KEY
CAMPO TIPO LONG DESCRIPCIÓN
PK codi_ciud_pk int 8 Contiene el código único de la ciudad
desc_ciud varchar 30 Contiene la descripción de la Ciudad
FK codi_prov_pk int 8 Contiene el código de la provincia a la que pertenece el cantón
FK codi_pais int 8 Contiene el código único del País
FK codi_cant_pk int 8 Contiene el código único del cantón
Estado char 1 Estado de la ciudad activa o inactiva.
TABLA: CAR_KARDEX_CLIE_LOG
P-KEY
CAMPO TIPO LONG DESCRIPCIÓN
PK codi_kard_clie_pk int 8 Contiene el código único del kardex del cliente
secu_trans int 4 Contiene la secuencia de la transacción
fech_regi varchar 10 Contiene la fecha de inicio de registro
fech_vent date Contiene la fecha de vencimiento
plaz int 4 Contiene el Plazo del crédito acordado
descrip int 4 Contiene la descripción
coment varchar 30 Comentarios
tota float 8 Total
nume_apli int 4 Numero de la aplicación
asentado Char 1 Asentado
bloqueado Int 1 Bloqueado
abon Int 8 Abono
FK codi_stat_pk varchar 3 Código del status del cliente
FK codi_ciud_pk Int 8 Código de ciudad del cliente
FK codi_modu_pk varchar 3 Código de los módulos
FK codi_vendedor Int 8 Código del vendedor
FK codi_clie_pk Int 8 Código único del cliente
FK codi_empr_pk Int 8 Código de la empresa
FK codi_tarj_pk Int 8 Código tarjeta
FK codi_banc_pk Int 8 Código del banco
FK sigl_pk varchar 3 Siglas
FK tipo_aplic varchar 3 Tipo de Aplicación
TABLA: CAR_MODU_DAT
P-KEY CAMPO TIPO LONG DESCRIPCIÓN
PK codi_modu_pk varchar 3 Contiene el código único del modulo
desc_modu varchar 30 Contiene la descripción del modulo
FK codi_empr_fk Int 8 Contiene el código de la empresa
Estado Char 1 Estado del modulo activo o inactivo.
111
TABLA: CAR_STAT_DAT
P-KEY CAMPO TIPO LONG DESCRIPCIÓN PK codi_stat_pk varchar 3 Contiene el código único del modulo
desc_stat varchar 30 Contiene la descripción del modulo
estado char 1 Estado del cliente activo o inactivo.
TABLA: CAR_SECU_CLIE_DAT
P-KEY
CAMPO TIPO LONG DESCRIPCIÓN
PK codi_secu_clie_pk int 8 Contiene el código de la secuencia del cliente
nomb_sucu varchar 30 Contiene el nombre de la sucursal
estado char 1 Contiene el estado del cliente
tele_prin varchar 9 Teléfono principal
tele_secu varchar 9 Teléfono Secundario
fax varchar 9 Fax
nume_calle int 4 Numero de calle del cliente
come_calle varchar 30 Comentario de regencia parta dirección
desc_cdla varchar 30 Descripción de ciudadela
FK codi_clie_pk Int 8 Código del cliente
FK codi_cdla_pk Int 8 Código de la ciudadela
FK codi_calle_pk Int 8 Código de la calle
FK codi_sect_pk Int 8 Código del sector
FK codi_prov_pk Int 8 Código de la provincia
TABLA: CAR_TARJ_DAT
P-KEY
CAMPO TIPO LONG DESCRIPCIÓN
PK codi_tarj_pk int 8 Contiene el código único de la tarjeta
nomb_tarj varchar 30 Contiene el nombre o descripción de la tarjeta
estado char 1 Estado de la tarjeta activa o inactiva(para caso de cierres bancarios)
porc_desc_tarj int 2 Porcentaje de descuento para una tarjeta especifica
porc_incr_tarj int 2 Porcentaje de incremento para una tarjeta especifica
mini_tarj int 4 Mínimo de compras a realizar con la tarjeta
TABLA: CAR_TIPO_CLIE_DAT
P-KEY
CAMPO TIPO LONG DESCRIPCIÓN
PK codi_tipo_clie_pk int 8 Contiene el código del tipo de cliente
desc_tipo_clie varchar 30 Contiene la descripción del tipo de cliente(Natural o Jurídico)
112
TABLA: CAR_TIPO_DOCU_DAT
P-KEY
CAMPO TIPO LONG DESCRIPCIÓN
PK sigl_pk varchar 8 Contiene las siglas iniciales del documento
desc_docu varchar 30 Contiene la descripción del documento (factura, CC, DC, etc.)
estado char 1 Contiene el estado del tipo de documento
FK codi_stat_pk varchar 3 Contiene el código del status
FK codi_modu_pk varchar 3 Contiene le código del modulo
TABLA: CAR_TIPO_PAGO_DAT
P-KEY
CAMPO TIPO LONG DESCRIPCIÓN
PK codi_tipo_pago_pk int 8 Contiene el código del tipo de pago
desc_tipo_pago varchar 30 Contiene la descripción del tipo de pago(efectivo, crédito)
TABLA: CAR_TRAN_CHEQ
P-KEY
CAMPO TIPO LONG DESCRIPCIÓN
PK codi_tran_cheq_pk int 4 Contiene el código de la transacción del cheque
idbanco int 8 Contiene el código del banco
codi_clie_pk int 8 Contiene el código del cliente
fech_depo varchar 10 Contiene la fecha de deposito
fech_venc varchar 10 Contiene la fecha de vencimiento
cuen_banc varchar 15 Contiene el numero de cuenta bancaria
valo float 8 Contiene el valor del cheque
nume_che int 4 Contiene el numero del cheque
post_fech char 1 Estado para saber si el cheque es posfechado
TABLA: CAR_TRAN_TARJ
P-KEY
CAMPO TIPO LONG DESCRIPCIÓN
PK codi_tran_pk int 4 Contiene el código de la transacción de la tarjeta
codi_tarj_pk int 8 Contiene el código de la tarjeta
codi_clie_pk int 8 Contiene el código del cliente
nume_tarj varchar 15 Contiene el numero de la tarjeta
valor float 8 Contiene el valor de la tarjeta
increm int 4 Contiene el incremento de la tarjeta
cobrado char 1 Campo de verificación si la tarjeta fue cancelada(1-0)
113
TABLA: CAR_TRANS_TMP
P-KEY
CAMPO TIPO LONG DESCRIPCIÓN
PK codi_kard_clie_pk int 8 Contiene el código único del kardex del cliente
secu_trans varchar 30 Contiene la secuencia de la transacción
fech_regi date Contiene la fecha de inicio de registro
tota int 8 Total
nume_apli int 4 Numero de la aplicación
tipo_apli int 4 Contiene el tipo de aplicación
asentado char 1 Asentado
bloqueado char 1 Bloqueado
abon int 8 Abono
FK codi_stat_pk varchar 3 Código del status del cliente
FK codi_ciud_pk int 8 Código de la ciudad del cliente
FK codi_modu_pk varchar 3 Código de los módulos
FK codi_vendedor int 8 Código del vendedor
FK codi_clie_pk int 8 Código único del cliente
FK codi_empr_pk int 8 Código de la empresa
FK codi_tarj_pk int 8 Código de tarjeta
FK codi_banc_pk int 8 Código del banco
sigl_pk varchar 3 Siglas
De la misma forma necesitamos de tablas externas (de otros módulos) por ejemplo:
TABLA: PORTAL
P-KEY CAMPO TIPO LONG DESCRIPCIÓN PK idportal int 8 Código de identificación del portal
nombre varchar 30 Descripción del portal
ruta varchar 30 Estado del usuario activo o inactivo.
TABLA: USUARIO
P-KEY
CAMPO TIPO LONG DESCRIPCIÓN
PK idusuario int 8 Código de identificación del usuario
idsucursal int 8 Código de la sucursal a la que pertenece el usuario
estado char 1 Estado del usuario activo o inactivo.
nombre varchar 30 Nombre del usuario
clave varchar 10 Password o contraseña
email varchar 30 Correo electrónico del usuario
114
TABLA: ROL
P-KEY CAMPO TIPO LONG DESCRIPCIÓN
PK idrol. Int 8 Código de identificación del rol
nombre varchar 30 Descripción del Rol(administrador-Usuario)
FK idportal Int 8 Código de identificación del portal
TABLA: USUARIOROL
P-KEY CAMPO TIPO LONG DESCRIPCIÓN PK idusuario int 8 Código de identificación del usuario
FK idrol. Int 8 Código de identificación del rol
TABLA: BANCO
P-KEY CAMPO TIPO LONG DESCRIPCIÓN PK Idbanco int 8 Contiene el código del banco
nombre varchar 30 Contiene la descripción del banco
idestado int 8 Idestado
estado char 1 Estado del banco activo o inactivo.
FK idusuario Int 8 Identificación del usuario
fecharegistro varchar 10 Fecha de registro
horaregistro varchar 8 Hora de registro
TABLA: VEN_VENDEDOR
P-KEY
CAMPO TIPO LONG DESCRIPCIÓN
PK codi_vendedor int 4 Contiene el código del vendedor
nomb_vendedor varchar 30 Contiene el nombre del vendedor
codi_comision int 8 Código del porcentaje de comisión
tipo_vendedor varchar 30 Tipo de vendedor (Fijo/Eventual)
codi_detalle_comision int 8 Detalle de porcentajes de comisión
estado char 1 Estado del vendedor activo, inactivo
fecha_creacion date Fecha de ingreso a la empresa
115
TABLA: CONTA_ASIENTO
P-KEY
NOMBRE TIPO LONG DESCRIPCION
PK tipo_as varchar 2 Tipo de asiento
num_doc int 8 Numero del asiento
fech_doc date 8 Fecha del asiento
cvecta int 4 Clave de la cuenta
codcta int 12 Codificación de la cuenta
ctaaux int 7 Código auxiliar de la cuenta
detalle char 40 La glosa de la cuenta
tipreg num 2 Si es 1 o -1
tipregc char 1 Debe (D) o haber (H)
bloqueado char 1 Es para que ya no se pueda corregir el asiento
116
CAPITULO 4
4. CODIFICACIÓN.-
4.1 Desarrollo del sistema
4.1.1. Creación de la Base de Datos
Para la creación de la base de datos elegimos PostgreSQL, puesto que el
mismo es un servidor de datos relacional libre, liberado bajo la licencia
BSD, recordemos además que estamos realizando un programa con
tecnología Open Source, y esta es una alternativa de código abierto.
Además, dicha base actúa como depósito central de los datos
estructurados. Siendo el administrador de bases de datos (DBA) quien se
encarga de configurar y administrar los datos de manera segura.
4.1.2. Creación de los Componentes (Módulos)
El presente proyecto se lo ha dividido en módulos, lo cual nos da la
facilidad de que en un futuro se puedan ir incorporando al mismo, nuevos
módulos que cubran las expectativas de los usuarios y sobre todo de la
organización.
117
Cabe recalcar que los módulos desarrollados en su totalidad son los
siguientes:
Módulo de Ventas
Módulo de Marketing.
Módulo de RRHH
Módulo de Rol de Pagos
Módulo de Contabilidad
Módulo de Presupuestos
Módulo de Cartera
Módulo de Tesorería
Módulo de Activos Fijos
Módulo de Operaciones
Módulo de Compras
Módulo de Inventario
Y específicamente el Modulo de Cartera el objeto de estudio de nuestro
proyecto.
Además de esto, cabe tomar mención que hemos desarrollado
conjuntamente con nuestro módulo, los procesos de seguridad y auditoria
para el mismo, no como módulos independientes sino como un alcance
adicional de nuestro proyecto.
4.1.2.1.Seguridad.- Permitir el acceso sólo a personal autorizado,
previo ingreso de usurario y contraseña, las mismas que serán
118
asignadas por el administrador a los diferentes usuarios con los
permisos y restricciones respectivas.
4.1.2.2. Auditoria.- El auditar un proceso, transacción o el simple
hecho de ingresar a una determinada tabla se constituye como parte
de vital importancia en nuestro modulo, ya que de esta manera se
podrá tener un registro con detalle de fecha y hora de todos los
accesos que se realizaron en la aplicación en determinado momento,
así como también del usuario que realizó determinado acceso o
transacción.
4.2 Principales Técnicas de Desarrollo
Entre la principal técnica que se uso para la implementación del
proyecto, podemos hacer mención a la siguiente:
4.2.1. Técnicas Estructuradas con Metodología Orientada
Objetos.- Es importante destacar la utilización de las técnicas
estructuradas que se indican en la Metodología Orientada a objetos,
explicada en capítulos anteriores y con una las cuales se ha
desarrollado esta aplicación.
Se utiliza la expresión general "objeto" para indicar todos aquellos
elementos considerados y que son, entre otros:
Diagramas de Flujo de Datos
Procesos
Flujos de Datos
119
Registros.
Elementos.
4.2.2. Codificación utilizando Struts.- Por medio de ésta
herramienta, la cual funciona como un contenedor de servlets se
mejoró la estructura de codificación, dividiendo los bloques de
programación, en paquetes que encierran cada una de los beans, las
acciones, listas, objetos de negocios, y separando la programación del
diseño o formulario, para realizar y llevar a cabo la correcta
funcionalidad del sistema.
Cabe indicar además, que Struts, nos facilita los mecanismos de
control necesarios y útiles al momento de querer reutilizar código
escrito, corroborando de esta manera que nuestro proyecto se ha
utilizado la arquitectura 3 capas, que se indico en capítulos anteriores.
En el transcurso del mismo, siguiendo día a día las innovaciones
tecnológicas e investigación científica, permitiendo optimizar los
procesos, a través de la simplicidad de sus paquetes, sin que esto
deje de tener la valiosa funcionalidad que provee.
Cabe también recalcar que este módulo agilita las operaciones de
finazas a través de los diferentes tipos de procesos, transacciones y
reportes con los que cuenta, actualizando información en el sistema de
manera automática, recordemos que se trata de un ERP, por lo tanto
se toman datos externos (de otros módulos, tablas) pertenecientes a la
120
organización; por ejemplo la tabla oper_calle_dat de operaciones, de
la tabla inv_empresa_dat de inventario, etc., y siguiendo obviamente
las reglas de estandarización, previamente establecidas, para una
mejor utilización y mayor rendimiento de la aplicación.
4.3. Calidad del Sistema.
4.3.1. Cumplimiento de los Requerimientos o Alcances
Como se menciono en el capitulo 1, los alcances propuestos en la
etapa de análisis se han cumplido exitosamente, a la fecha de
finalización del proyecto.
Cada alcance ha sido meticulosamente elaborado de manera tal, que
satisfaga la propuesta elaborada inicialmente, gracias al estudio de
investigación realizado por nuestro grupo, sin restar importancia a las
valiosas opiniones de usuarios de sistemas similares.
4.3.2. Valor Agregado (Otros Alcances)
Es importante indicar que nuestro módulo provee la facilidad de
cambio y reestructuración, es decir que se pueden ir incorporando
alcances de acuerdo a las peticiones de gerencia o de los usuarios
finales.
Así por ejemplo, la posibilidad de creación de una tarjeta propia de la
organización, para el manejo exclusivo de clientes, tal como lo tienen
al momento las casas comerciales De Pratti, Casa Tossi, Créditos
121
Económicos etc., esto seria tan sencillo como crear una nueva tarjeta
en la sección de mantenimiento con información del nombre de la
misma, número, código, porcentajes respectivos y obviamente
siguiendo el debido tramite legal y de papelería.
122
CAPITULO 5
5. IMPLEMENTACIÓN Y PRUEBAS DEL SISTEMA.
Los elementos básicos para la implementación del sistema son:
5.1 Elementos Físicos
Dentro de los elementos físicos que se necesitan para el desarrollo de
la aplicación tenemos:
2 computadoras con características como:
Monitores de 15’’
Memorias de 512 MB de memoria RAM
Procesadores Pentium IV de 2.8 GH
80 GB de Disco Duro
Fax MODEM 56 Kbps
Tarjetas de video 32 Mb.
Flash Memory (Pen Drive)
Unidades de CD WRITER SAMSUNG
Impresora de inyección a tinta
123
5.2 Elementos Lógicos
Así mismo, para el desarrollo de la aplicación debemos contar con la
instalación en nuestro sitio de trabajo (PC) de los siguientes
programas en sus versiones indicadas o superiores para la correcta
funcionalidad a la finalización del proyecto; éstas son:
J2SE Development Kit 5.0 Update 3
J2SE Runtime Environment Kit 5.0 Update 3
Eclipse 3.1
Ireports 1.2.5
Adobe Acrobat 5.0
Servidor de Aplicaciones Apache Tomcat/5.0.28
Macromedía Dreamweaver 8
Macromedia Flash MX
Base de datos: PostgresSQL 8.1
EMS SQL Manager 2005 for PostgresSQL Version
3.6.0.1
Sistema Operativo Windows XP Profesional con Server
Pack 2.
Utilitarios Microsoft Office
Linux Distribución Fedora Core 4.0.
Corel Draw.
124
5.3 Recurso Humano
Las personas que tendrán acceso al sistema son
Usuarios finales, como: Empleados autorizados de la institución,
Gerente, proveedor y cliente visitante desde portal Web.
Administrador con intelecto y capacidad para el correcto manejo de
la Base de datos y manejo de la aplicación, además de administrar
el sitio Web.
Programador con conocimiento de la Herramienta J2SE, utilizando
Struts, y Base de Datos PostgresSQL, en su versión 8.1
5.4 Infraestructuras
Básicamente al referirnos a éste tema lo relacionamos con el ambiente
físico, es decir que el mismo esté acondicionado con lo básico y
necesario para poner en producción la aplicación como a continuación
se propone.
Sala de computación acondicionada con todas las comodidades
del caso (espacios suficientes, aire acondicionado, muebles, etc.)
Incorporar una red de cableado estructurado para mejoras de
estética organizacional.
125
5.5 Capacitación de los usuarios
Cursos constantes para la utilización de la herramienta por futuras
variantes.
Se proveerá de un manual de usuario, el mismo que será diseñado
de manera que se pueda tener una mayor comprensión del mismo,
utilizando un lenguaje nada técnico con una interfaz amigable para
el usuario.
Así mismo, se pondrá a disposición de los programadores,
especialistas o personal con conocimiento en la materia un Manual
técnico, con detalle de cada uno de los paquetes que contienen, la
estructura funcional, la lógica del negocio, la base y cada uno de
sus procesos.
5.6 Pruebas del Sistema.
Dentro de las pruebas que se realizaron al sistema y en vista de que el
mismo esta diseñado originalmente para funcionar como ERP en
conjunto con otros módulos, tenemos las que a continuación se
detallan:
5.6.1 Prueba con Modulo de Operaciones.- Utilizando la tabla de
este modulo y trabajando para caso de prueba con datos ingresados
por nosotros, tenemos que la relación con la misma; es correcta y que
nos provee la facilidad de traer sus datos de determinados campos
como por ejemplo de la tabla oper_calle_dat podemos extraer la
126
descripción y el numero de la calle para asignarle a determinado
cliente, así como también en el caso de la dirección sea una
ciudadela, de la tabla oper_cdla_dat, extraemos la dirección de la
misma escogiendo de la lista a la cual este modulo da mantenimiento,
otra tabla con la que realizamos la prueba es oper_sect_dat, que nos
permite tener sectorizado a nuestros clientes, de manera que esto sea
de gran ayuda en la gestión de cobranzas para las rutas asignadas.
5.6.2 Prueba con modulo de Inventario.- De la misma forma que con
operaciones, con éste modulo obtenemos el nombre de la empresa a
través de la tabla inv_empresa_dat, utilizada más en caso que la
misma tenga subdivisiones empresariales o sea multiempresa, así
como también la sucursal por medio de la tabla inv_sucursal_dat en el
caso de requerirse la misma.
5.6.3 Prueba con Modulo de Tesorería.- La relación con el mismo es
una de las más trascendentales para nuestro modulo, ya que a él se
remiten los reportes para gestión de cobranzas de nuestra cartera de
clientes, así también por la utilización de sus tablas de usuario, rol ,
banco; entre otras siendo esta última de vital importancia, pues en ella
se registran los bancos locales con los cuales se trabaja, dando la
facilidad de dar de baja a determinado banco, en cualquier momento la
situación político-financiero del país lo amerite, específicamente por
los cierres inesperados de instituciones bancarias.
127
Este constituye para nosotros una relación bidireccional, pues a través
de los diferentes reportes de ambos módulos (tesorería y cartera), nos
alimentamos y se alimentan de nuestra información; así por ejemplo,
para proceder a la cancelación en sistema de los pagos a crédito
realizados con tarjetas y cheques posfechados que ya han sido
depositados y hecho efectivo, debemos valernos de un reporte emitido
por tesorería, en el cual nos indique los pagos realizados, con el fin de
realizar nuestros procesos de cancelación o dada de baja a las tarjetas
y a los cheques correspondientes, teniendo diariamente información
actualizada en la base de datos, de forma que podemos también emitir
un reporte de interés a tesorería u otro módulo, en el cual se detalle
todos los cheques y vouchers pagados y pendientes de cobro para
que éste realice la gestión de cobranzas o remita a legal si el caso lo
amerita.
Cumpliendo así con uno de nuestros alcances propuestos. Esta
prueba fue realizada satisfactoriamente y arrojando los resultados
esperados.
5.6.4 Prueba con Modulo de Contabilidad.- Uno de nuestros
alcances fue sin duda optimizar la gestión de cobros, este proceso va
de la mano con el modulo de tesorería caso de prueba explicado
anteriormente, sin embargo contabilidad siendo una pieza clave en el
desarrollo de nuestro modulo, no puede quedarse sin participación en
128
dicho enlace, pues a través de sus asientos contables actualizara la
información de nuestra cartera corriente y vencida a través de una
cuenta única CxC, a través de reportes de pagos emitidos por
tesorería el cual envía valores, pues a contabilidad no le interesan los
detalles del pago; es decir quien realizo el pago, número de cuota,
etc., sino cuanto se cobró y cómo se cobró; ésta información es de
interés propio de nuestro modulo, para actualizar nuestra cartera
detallada por cliente.
En el caso de tratarse de notas de crédito o notas de debito (CC/DC),
solo en este caso se envía la información directamente a contabilidad
y como consecuencia del mismo éste crédito o debito también alterara
sus asientos contables.
5.7 Recomendaciones y Conclusiones
Como un aporte a nuestro proyecto podríamos mencionar las siguientes
recomendaciones y conclusiones
5.7.1. Recomendaciones.- Desde siempre la seguridad ha sido un
componente vital para el éxito de cualquier organización, pese
a esto muchas empresas no cuentan con un sistema que le
brinde la absoluta confianza, debido a que no tomaron las
debidas precauciones o directivas de seguridad al momento de
129
realizar su infraestructura de red, implementación de la
aplicación, etc., por lo cual se recomienda las siguientes:
Aplique regularmente los Service Pack, las revisiones y las
correcciones urgentes de Windows 2000, PostgresSQL,
MacromediaDreamweaber, Linux, etc.
Deben examinar cuidadosamente todos los métodos de
acceso a PostgresSQL, y a los datos, estricto control de
acceso a personas no autorizadas.
Las aplicaciones no deben devolver información importante
a los clientes, por ejemplo, evitar que los clientes vean
nombres de servidores, direcciones IP, código y otros
elementos seguros.
5.7.2.Conclusiones.- Como conclusión podemos mencionar que la
seguridad es un factor de extrema importancia para toda organización
de manera que no debe ser pasada por alto, debe tratar de integrase
completamente en la fase de diseño antes de la implementación, con
la colaboración de los DBA, los administradores de red,
desarrolladores y otros miembros de la infraestructura tecnológica
para asegurar una solución de seguridad corporativa, y de esta forma
se tendrá una aplicación mas fuerte, repelente a los ataques de
espionaje industrial, es importante también conocer de la protección
de los datos durante el almacenamiento (como en bases de datos,
130
copias de seguridad y archivos) o durante la transferencia (como en
consultas), así como también a lo que se conoce como ingeniería
social , reforzando la confidencialidad la integridad y la disponibilidad y
precisión de los datos.
5.8. GLOSARIO TÉCNICO
Sistemas de Información.- conjunto de elementos que interactúan entre
sí con el fin de apoyar las actividades de una empresa o negocio.
Open Source.- Código abierto (del inglés open source) es el término por
el que se conoce al software distribuido y desarrollado en forma libre
Java.- Lenguaje de programación con el que podemos realizar cualquier
tipo de programa.
Apache Tomcat.- Se lo considera un servidor de aplicaciones, funciona
como un contenedor de servlets desarrollado bajo el Proyecto Yakarta en
al Apache Software foundation, implementa las especificaciones de los
servlets y de los java Server pages (JSP)
Macromedia.- Editor de páginas Web, creado por Macromedia
(actualmente Adobe Systems, el cual va por la versión 8.02. Es el
programa de este tipo más utilizado en el sector del diseño y la
programación Web, por sus funcionalidades y su fácil integración con
otras herramientas
131
Flash.- Se refiere tanto al programa de edición multimedia como a
Macromedia Flash Player, utiliza gráficos vectoriales e imágenes ráster,
sonido, código de programa, flujo de vídeo y audio bidireccional
PostgreSQL. Servidor de base de datos relacional libre, liberado bajo la
licencia BSD. Es una alternativa a otros sistemas de bases de datos de
código abierto (como MySQL, Firebird y MaxDB), así como sistemas
propietarios como Oracle o DB2.
Ireports.- Programa para realizar reportes de transacciones, procesos o
consultas generales.
JRE.- Java Runtime Environement, es el kit destinado al cliente para
poder ejecutar un programa java. Esencialmente esta compuesto de una
Maquina Virtual Java (JVM) capaz de ejecutar el byte-code y las
bibliotecas estándares de java.
SDK.- Standar Development Kit, es el kit destinado al programador, esta
compuesto de un JRE, de un compilador y de varios programas útiles,
ejemplos de programas java y el código de todas las clases del API.
JDK.- Java Development Kit, es el antiguo nombre del SDK. El JDK se
renombro a SDK después de la versión 1.2.2.
Application.- Una aplicación Java es un programa hecho en java y que
generalmente se ejecuta en la maquina donde se encuentra el inicio del
código. Tiene el mismo sentido que un programa en lenguaje C u otro
lenguaje.
132
Applet.- El Applet es recuperado a distancia a través de un navegador
Web, y se ejecuta en el lado del cliente. Debido a esta descarga, las
reglas de seguridad referentes a los Applets son muy estrictas. Un
ejemplo de esta seguridad es que un Applet, por ejemplo no permite la
escritura en disco ni la impresión.
Servlet.- Un Servlet se puede considerar como un Applet pero del lado
del servidor. Un Servlet da funcionalidades a un servicio Web.
Datos.- Son los hechos que describen sucesos y entidades.
Información.- Es un conjunto de datos significativos y pertinentes que
describan sucesos o entidades.
Base de datos.- Conjunto de datos que pertenecen al mismo contexto
almacenados sistemáticamente para su posterior uso.
Campo.- Un elemento inconstante de una determinada clase.
Diagrama de Clases.- Sirve para visualizar las relaciones entre las clases
que involucran el sistema.
Métodos.- Los métodos u operaciones de una clase son la forma en
como ésta interactúa con su entorno.
Public.- Indica que el método será visible tanto dentro como fuera de la
clase, es decir, es accesible desde todos lados.
Private.- Indica que el método sólo será accesible desde dentro de la
clase (sólo otros métodos de la clase lo pueden accesar).
133
Casos de Uso.- Representa la forma en como un Cliente (Actor) opera
con el sistema en desarrollo, además de la forma, tipo y orden en como
los elementos interactúan.
Actor.- Rol que un usuario juega con respecto al sistema. Es importante
destacar el uso de la palabra rol, pues con esto se especifica que un
Actor no necesariamente representa a una persona en particular, sino
más bien la labor que realiza frente al sistema.
Asociación.- Es el tipo de relación más básica que indica la invocación
desde un actor o caso de uso a otra operación (caso de uso). Dicha
relación se denota con una flecha simple.
Dependencia o Instanciación.- Es una forma muy particular de relación
entre clases, en la cual una clase depende de otra, es decir, se instancia
(se crea). Dicha relación se denota con una flecha punteada.
Generalización.-Este tipo de relación es uno de los más utilizados,
cumple una doble función dependiendo de su estereotipo, que puede ser
de Uso (uses) o de Herencia (extends).
Uses.- Se recomienda utilizar cuando se tiene un conjunto de
características que son similares en más de un caso de uso y no se
desea mantener copiada la descripción de la característica.
Extends.- Se recomienda utilizar cuando un caso de uso es similar a otro
en sus características.
134
AGRADECIMIENTO
Agradezco a Dios quien es el que ilumina mi camino, a mi mamá Lourdes,
tías, tíos, primos que han estado conmigo en las buenas y en las malas, a mi
querido papá que aunque está fuera del país, me ha apoyado en todo
momento. A mis compañeros de grupo, con los cuales hemos pasado
noches enteras sacrificándolos para poder culminar nuestro proyecto.
GRACIAS A TODOS.
STHEFANIE IZURIETA JARAMILLO
AGRADECIMIENTO
Agradezco en primer lugar a Dios y toda mi familia, en especial a mis padres
y esposo por brindarme el apoyo necesario, y a todas las personas que de
una u otra forma nos han apoyado para la realización y culminación de este
trabajo.
A mis compañeros y amigos STHEFY (Duraznito) y VÍCTOR (Vic-Vic)
YESENIA SUÁREZ JIMÉNEZ
135
AGRADECIMIENTO
Primero que nada a Dios, por darme la vida, y las fuerzas suficientes para
levantarme cuando creí caer, a mi adorados padres por su infinito amor y
abnegación, a mi encantadora y preciosa hija; mi princesa Génesis, por ser
ese ángel que día a día con su sonrisa y cariño me da las ganas suficientes
para seguir adelante y tratar de ser por ella y para ella cada día mejor, a mis
queridos hermanos en especial a Maribel quien en todo momento fue para mi
un gran apoyo, a mis profesores, por los conocimientos impartidos, a mis
grandes amigas y compañeras de grupo, gracias a sus valiosos aportes,
pues sin ellos la culminación del presente proyecto no hubiese sido posible, y
a todas aquellas personas que de una u otra forma hicieron posible la
culminación de mi carrera universitaria. A todas ellas; de corazón. MUCHAS
GRACIAS
VÍCTOR ARCÁNGEL SORIANO CRUZ
136
DEDICATORIA
Dedico todo mi trabajo, esfuerzo y tiempo invertido, a mi querida abuelita
Elva Izurieta Bermúdez, quien me brindó su apoyo incondicional, desde que
inicie la carrera, y sé que desde el cielo me sigue dando fuerzas para seguir
adelante en todo lo que me proponga, todo lo que soy se lo debo a ella.
STHEFANIE IZURIETA JARAMILLO
DEDICATORIA
Dedico este trabajo a mí querido hijo y tesoro de mi vida “MIGUELITO”, por
que él es la persona que más me ha dado fuerzas para la terminación de una
etapa más de mi vida
YESENIA SUÁREZ JIMÉNEZ
137
DEDICATORIA
Sin animo de ser egoísta con el resto de personas importantes de mi vida
dedico por completo este logro, a la persona que más le hubiese alegrado
compartir conmigo este momento, y aunque la vida no nos dio esa
oportunidad, estoy seguro que desde el cielo el ahora está, aun más feliz que
yo. A MI ADORADO PAPÁ…………JOSÉ RICARDO SORIANO PEÑA (+)
VÍCTOR ARCÁNGEL SORIANO CRUZ
138
TRIBUNAL DE GRADUACIÓN
_______________________ _______________________
ING. FERNANDO ABAD M. ING. JUAN SÁNCHEZ H.
DECANO PRESIDENTE TRIBUNAL
_______________________ _______________________
ING. IVÁN ACOSTA G. ING. VÍCTOR PAZMIÑO H.
VOCAL VOCAL
_____________________
ABG. JUAN CHÁVEZ A.
SECRETARIO
139
DECLARACIÓN EXPRESA
La autoría de éste proyecto corresponde exclusivamente al suscrito(s),
perteneciendo a la Universidad de Guayaquil los derechos que genere la
aplicación de la misma.
(Reglamento de graduación de la carrera de Ingeniería en sistemas
Computacionales Art. 26)
_____________________________ ________________________
STHEFANIE IZURIETA JARAMILLO YESENIA SUÁREZ JIMÉNEZ
____________________________
VÍCTOR SORIANO CRUZ
140
RESUMEN.
Esta aplicación fue diseñada con el principal propósito de satisfacer las
necesidades de los usuarios de sistemas similares, pero que no cumplían
con los requerimientos de determinada organización, en la cual los procesos
se volvían tediosos, pues incluso en algunos casos eran manejados
manualmente, ésto demandaba un mayor tiempo de ejecución entre un
proceso y otro.
El modulo de cartera, realizado con altos estándares de calidad nos provee
las herramientas necesarias que permite tener un control de todos nuestros
clientes a crédito, controlando de esta manera nuestra cartera corriente y
vencida, proporcionado una amplia variedad de reportes, y realizando
procesos y transacciones que van de la mano con otros módulos,
actualizando información constantemente (en línea) para utilización propia o
de módulos relacionados.
141
ÍNDICE DE FIGURAS
Figura 1.1.1 Principales problemáticas de cartera 2
Figura 1.1.2 Arquitectura de 3 Capas 5
Figura 1.11.2.1 Diseño Físico de Base de Datos 25
Figura 1.11.2.2 Uso de la Base de Datos 26
Figura 2.1.3.1 Estadístico Información de Cartera 30
Figura 2.1.4.1 Cartera Relacionado Con Otros Módulos 32
Figura 2.2.1 Tabla Usuarios- Estructura de datos 39
Figura 2.2.2 Elementos de Datos- Atributo idusuarios 40
Figura 2.2.3 Elementos de Datos- Atributo username 40
Figura 2.2.4 Elementos de Datos- Atributo password 41
Figura 2.2.5 Elementos de Datos- Atributo nombres 41
Figura 2.2.6 Elementos de Datos- Atributo apellidos 42
Figura 2.2.7 Elementos de Datos- Atributo rol 42
Figura 2.3.1.1 Flujo de datos- Proceso de Seguridad 43
Figura 2.3.2.1 Flujo de datos- Proceso de Auditoria 45
Figura 2.3.3.1 Flujo de datos- Módulo de Cartera (Efectivo) 47
Figura 2.3.3.2 Flujo de datos de cartera (cheque) 48
Figura 2.4.1.1 Diagrama de casos De Uso - Seguridad 49
Figura 2.4.2.1 Diagrama Caso de Uso- Auditoria 50
Figura 2.4.3.1 Diagrama Caso de Uso - Modula de Cartera 51
Figura 2.4.3.2 Caso de Uso-Autorizador/Cliente 52
142
Figura 2.4.3.3 Caso de Uso-Oficial Crédito/ Cliente 52
Figura 2.4.3.4 Caso de Uso-Oficial/Reporte 53
Figura 2.4.3.5 Caso de Uso-Oficial/Crédito Cliente 53
Figura 2.4.3.6 Caso de Uso-Oficial/Debito Cliente 54
Figura 2.4.3.7 Caso de Uso-Oficial/Tarjetas 54
Figura 2.4.3.8 Caso de Uso-Oficial/Control cheques 55
Figura 2.4.3.9 Caso de Uso-Oficial/Adm-Sistema/Sistema 55
Figura 2.6.3.1 Diagrama Objeto Relación – Modulo Cartera 69
Figura 2.7.1.1 Secuencia Seguridad Aplicación Crear Usuarios 71
Figura 2.7.1.2 Secuencias Seguridad - Consultar Usuario 71
Figura 2.7.1.3 Secuencias Seguridad - Crear Perfil / Rol 72
Figura 2.7.1.4 Secuencias Seguridad - Asignar opciones al perfil 72
Figura 2.7.1.5 Secuencias Seguridad - Consultar opciones 73
Figura 2.7.1.6 Secuencias Seguridad - Crear Opciones 73
Figura 2.7.1.7 Secuencias Seguridad - Cambiar Contraseña 74
Figura 2.7.1.8 Secuencias Seguridad - Asignar Usuario al Perfil 74
Figura 2.7.2.1 Secuencias Auditoria - Consultar transacciones 75
Figura 2.7.2.2 Secuencias Auditoria - Auditar Transacción 75
Figura 2.7.3.1 Secuencias Mod. Cartera - Activar Cliente 76
Figura 2.7.3.2 Secuencias Mod. Cartera - Inactivar Cliente 76
Figura 2.7.3.3 Secuencias Mod. Cartera - Autorizar Cupo 77
Figura 2.7.3.4 Secuencias Mod. Cartera - Crear Cliente 77
143
Figura 2.7.3.5 Secuencias Mod. Cartera - Consultar Cliente 78
Figura 2.7.3.6 Secuencias Mod. Cartera - Modificar Cliente 78
Figura 2.7.3.7 Secuencias Mod. Cartera - Consultar Clientes 30-60-90 79
Figura 2.7.3.8 Secuencias Mod. Cartera - Consultar Pagos Pendientes 79
Figura 2.7.3.9 Secuencias Mod. Cartera - Calificar Clientes 80
Figura 2.7.3.10 Secuencias Mod. Cartera - Contabilizar Transacción 80
Figura 2.7.3.11 Secuencias Mod. Cartera - Totales a cancelar 81
Figura 2.7.3.12 Secuencias Mod. Cartera - Reporte de Comisiones 81
Figura 2.7.3.13 Secuencias Mod. Cartera - Realizar Créditos Clientes 82
Figura 2.7.3.14 Secuencias Mod. Cartera - Consultar Créditos Cliente 82
Figura 2.7.3.15 Secuencias Mod. Cartera - Modificar Créditos Cliente 83
Figura 2.7.3.16 Secuencias Mod. Cartera - Crear Débito Clientes 83
Figura 2.7.3.17 Secuencias Mod. Cartera - Consultar Débitos Clientes 84
Figura 2.7.3.18 Secuencias Mod. Cartera - Modificar Débitos Clientes 84
Figura 2.7.3.19 Secuencias Mod. Cartera - Crear tarjetas de Crédito 85
Figura 2.7.3.20 Secuencias Mod. Cartera - Consultar Tarjetas de Crédito 85
Figura 2.7.3.21 Secuencias Mod. Cartera – Modificar Tarjetas de Crédito 86
Figura 2.7.3.22 Secuencias Mod. Cartera - Eliminar Tarjetas de Crédito 86
Figura 2.7.3.23 Secuencias Mod. Cartera - Cheques Posfechados 87
Figura 2.7.3.24 Secuencias Mod. Cartera - Cheques Protestados 87
Figura 2.7.3.25 Secuencias Mod. Cartera – Definir Autorización 88
144
Figura 2.7.3.26 Secuencias Mod. Cartera – Validar Ingreso al Sistema 88
Figura 3.1.1.1 Diagrama de Clase: Usuarios 90
Figura 3.1.2.1 Diagrama de Clase: Acción 90
Figura 3.1.2.2 Diagrama de Clase: Auditoria 91
Figura 3.1.3.1 Diagrama de Clase: Tipo-Cliente 91
Figura 3.1.3.2 Diagrama de Clase: Cliente 92
Figura 3.1.3.3 Diagrama de Clase: Cliente Natural 93
Figura 3.1.3.4 Diagrama de Clase: Cliente Jurídico 93
Figura 3.1.3.5 Diagrama de Clase: País 94
Figura 3.1.3.6 Diagrama de Clase: Provincia 94
Figura 3.1.3.7 Diagrama de Clase: Cantón 94
Figura 3.1.3.8 Diagrama de Clase: Parroquia 95
Figura 3.1.3.9 Diagrama de Clase: Ciudad 95
Figura 3.1.3.10 Diagrama de Clase: Modulo 96
Figura 3.1.3.11 Diagrama de Clase: Estado Cliente 96
Figura 3.1.3.12 Diagrama de Clase: Kardex 97
Figura 3.1.3.13 Diagrama de Clase: Tipo Documento 98
Figura 3.1.3.14 Diagrama de Clase: Sucursal Cliente 98
Figura 3.1.3.15 Diagrama de Clase: Tarjeta 99
Figura 3.1.3.16 Diagrama de Clase: Tran -Tarjeta 99
Figura 3.1.3.17 Diagrama de Clase: Tran -Cheque 100
Figura 3.1.3.18 Diagrama de Clase: Banco 100
145
Figura 3.1.3.19 Diagrama de Clase: Vendedores 101
Figura 3.1.3.20 Diagrama de Clase: Asientos Contables 101
Figura 3.1.3.21 Diagrama de Clase: Cliente Histórico 102
Figura 3.2.1.1 Esquema de Generalización Clase Cliente 104
Figura 3.3.3.1 Diagrama Objeto Relación Modulo Cartera (Atributos). 107
1
CAPÍTULO 1
1. MANUAL TÉCNICO
1.1 Introducción
En Este documento podemos visualizar pasa a paso el patrón de diseño
MVC (Model View Controller). Como ejemplo de implementación y
utilización de el framework Struts, que facilita el desarrollo de
aplicaciones Web en Java basadas en MVC la cuales fueron utilizadas en
este modulo de Cuentas por Cobrar.
Es un patrón de arquitectura de software que separa los datos de una
aplicación, la interfaz de usuario, y la lógica de control en tres
componentes distintos. El patrón MVC se ve frecuentemente en
aplicaciones web, donde la vista es la página HTML, el control es el
código que provee de datos dinámicos a la página, y el modelo contiene
clases representativas de la aplicación (como el mensaje de un foro, un
miembro registrado, etc.).
2
1.2 MVC: Model View Controller
Modelo: Ésta es la representación específica del dominio de la
información sobre la cual funciona la aplicación. El modelo es otra forma
de llamar a la capa de dominio. La lógica de dominio añade significado a
los datos; por ejemplo, calculando si hoy es el cumpleaños del usuario o
los totales, impuestos.
Vista: Éste presenta el modelo en un formato adecuado para interactuar,
usualmente un elemento de interfaz de usuario.
Controlador: Éste responde a eventos, usualmente acciones del usuario
e invoca cambios en el modelo y probablemente en la vista.
Muchas aplicaciones utilizan un mecanismo de almacenamiento
persistente (como puede ser una base de datos) para almacenar los
datos. MVC no menciona específicamente esta capa de acceso a datos.
3
En un modelo convencional llegan (INPUT), se procesan y se muestra el
resultado (OUTPUT).
Aunque se pueden encontrar diferentes implementaciones de MVC, el
flujo que sigue el control generalmente es el siguiente:
El usuario interactúa con la interfaz de usuario de alguna forma (por
ejemplo, el usuario pulsa un botón, enlace)
El controlador recibe (por parte de los objetos de la interfaz-vista) la
notificación de la acción solicitada por el usuario. El controlador gestiona
el evento que llega, frecuentemente a través de un gestor de eventos
(handler) o callback.
El controlador accede al modelo, actualizándolo, posiblemente
modificándolo de forma adecuada a la acción solicitada por el usuario
(por ejemplo, el controlador actualiza el carro de la compra del usuario).
Los controladores complejos están a menudo estructurados usando un
patrón de comando que encapsula las acciones y simplifica su extensión.
Figura 1.1 Modelo convencional
4
El controlador delega a los objetos de la vista la tarea de desplegar la
interfaz de usuario. La vista obtiene sus datos del modelo para generar la
interfaz apropiada para el usuario donde se refleja los cambios en el
modelo (por ejemplo, produce un listado del contenido del carro de la
compra). El modelo no debe tener conocimiento directo sobre la vista. Sin
embargo, el patrón de observador puede ser utilizado para proveer cierta
indirección entre el modelo y la vista, permitiendo al modelo notificar a los
interesados de cualquier cambio. Un objeto vista puede registrarse con el
modelo y esperar a los cambios, pero aun así el modelo en sí mismo
sigue sin saber nada de la vista. El controlador no pasa objetos de
dominio (el modelo) a la vista aunque puede dar la orden a la vista para
que se actualice. Nota: En algunas implementaciones la vista no tiene
acceso directo al modelo, dejando que el controlador envíe los datos del
modelo a la vista.
La interfaz de usuario espera nuevas interacciones del usuario,
comenzando el ciclo nuevamente.
5
1.3 Struts Framework
En el desarrollo de software, un framework es una estructura de soporte
definida en la cual otro proyecto de software puede ser organizado y
desarrollado. Típicamente, un framework puede incluir soporte de
programas, bibliotecas y un lenguaje de scripting entre otros softwares
para ayudar a desarrollar y unir los diferentes componentes de un
proyecto.
Struts permite reducir el tiempo de desarrollo. Su carácter de "software
libre" y su compatibilidad con todas las plataformas en que Java
Entreprise esté disponible, lo convierte en una herramienta altamente
disponible.
Figura 1.2 MVC
6
1.4 Estructura
Cuando se programan aplicaciones Web con el patrón MVC, siempre
surge la duda de usar un solo controlador o usar varios controladores,
pues si consideramos mejor usar un solo controlador para tener toda
nuestra lógica en un mismo lugar, nos encontramos con un grave
problema, ya que nuestro controlador se convierte en lo que se conoce
como "fat controller", es decir un controlador saturado de peticiones,
Struts surge como la solución a este problema ya que implementa un
solo controlador (ActionServlet) que evalúa las peticiones del usuario
mediante un archivo configurable (struts-config.xml).
1.5 Caracteristicas de structs.
Entre las características de Struts se pueden mencionar:
Configuración del control centralizada.
Interrelaciones entre Acciones y página u otras acciones se
especifican por tablas XML en lugar de codificarlas en los
programas o páginas.
7
Componentes de aplicación, que son el mecanismo para compartir
información bidireccionalmente entre el usuario de la aplicación y
las acciones del modelo.
Librerías de entidades para facilitar la mayoría de las operaciones
que generalmente realizan las páginas JSP.
Struts contiene herramientas para validación de campos de
plantillas bajo varios esquemas que van desde validaciones
locales en la página (en javaScript) hasta las validaciones de
fondo hechas a nivel de las acciones.
Struts permite que el desarrollador se concentre en el diseño de
aplicaciones complejas como una serie simple de componentes
del Modelo y de la vista intercomunicados por un control
centralizado. Diseñando de esta manera se debe obtener una
aplicación más consistente y más fácil de mantener.
8
1.6 Diagrama de Clases
Este sería un conjunto de clases utilizadas y sus relaciones.
9
Figura 1.4 Diagrama de clases
10
1.7 Diagrama de Colaboración.
Esta sería la manera de interactuar entre las clases y Struts.
Figura 1.5 Diagrama de colaboración
11
1.8 Diagrama Objeto Relación-Módulo de Cartera
CAR_CLI_DAT
PK CODI_CLIE_PK
SAT_CLIE
NUME_CALLE
COME_CLIE
DESC_CDLA
TELE_PRIN
TELE_SECU
FAX
CUPO
PLAZ
SOBR_PORC
SOBR_MONT
FECH_INGR
FECH_ULTI_COMP
MONT_ULTI_COMP
FK1 CODI_TIPO_CLIE_PK
FK2 CODI_TIPO_PAGO_PK
CODI_CDLA_PK
CODI_CALLE_PK
CODI_EMPR_FK
APROBACIONCREDITO
FK3 codi_vendedor
FK4 codi_ciud_pk
CAR_CIUD_DAT
PK codi_ciud_pk
desc_ciud
FK3 codi_prov_pk
FK1 codi_pais_pk
FK2 codi_cant_pk
estado
BANCO
PK idbanco
nombre
idestado
estado
idusuario
fecharegistro
horaregistro
CAR_KARDEX_CLIE_LOG
PK codi_kard_clie_pk
secu_trans
fech_regi
plaz
descrip
coment
tota
nume_apli
asentado
bloqueado
abon
codi_stat_pk
codi_modu_pk
FK3 codi_vendedor
codi_clie_pk
codi_empr_pk
FK2 codi_tarj_pk
codi_banc_pk
sigl_pk
tipo_apli
VEN_VENDEDOR
PK codi_vendedor
nomb_vendedor
codi_comision
tipo_vendedor
codi_detalle_comision
estado
fecha_creacion
CAR_TARJ_DAT
PK codi_tarj_pk
nomb_tarj
estado
porc_desc_tarj
porc_incr_tarj
mini_tarj
CAR_CONTA_ASIENTO_DAT
PK,FK1 codi_cont_asie_pk
tipo_as
num_doc
fech_doc
codcta
detalle
tipreg
tipregc
bloqueado
estado
CAR_CLIE_NATU_DAT
PK,FK1 codi_clie_pk
cedu_pk
nomb_natu
cont
estado
CAR_CLIE_JURI_DAT
PK,FK1 codi_clie_pk
ruc_pk
repr_lega
razo_soci
estado
CAR_TIPO_CLIE_DAT
PK codi_tipo_clie_pk
desc_tipo_clie
CODI_TIPO_PAGO_DAT
PK codi_tipo_pago_pk
desc_tipo_pago
CAR_PROV_DAT
PK codi_prov_pk
desc_prov
codi_pais_pk
estado
CAR_PAIS_DAT
PK codi_pais_pk
desc_pais
estado
CAR_CANT_DAT
PK codi_cant_pk
desc_cant
codi_prov_pk
estado
12
1.9 SCRIPT PARA CREACION DE LA BASE DE DATOS
CREATE TABLE car_accion_dat ( codi_acci int8 NOT NULL DEFAULT nextval(('car_accion_seq'::text)::regclass), desc_acci varchar(100), esta_acci char(1), audi_usua_ingr varchar(15), audi_fech_ingr date DEFAULT now(), CONSTRAINT accion_pk PRIMARY KEY (codi_acci) ) WITHOUT OIDS; ALTER TABLE car_accion_dat OWNER TO postgres;
CREATE TABLE car_auditoria_log ( codi_audi int8 NOT NULL, codi_empr int8 NOT NULL, codi_modu int8 NOT NULL, codi_acci int8 NOT NULL, tabl_audi varchar(30) NOT NULL, secu_tabl int8 NOT NULL, audi_usua varchar(15), fech_audi date, CONSTRAINT auditoria_pk PRIMARY KEY (codi_audi) ) WITHOUT OIDS; ALTER TABLE car_auditoria_log OWNER TO postgres;
CREATE TABLE usuarios ( idusuario int4 NOT NULL, username varchar(20), "password" varchar(20), nombres varchar(30), apellidos varchar(30), rol varchar(20) ) WITH OIDS; ALTER TABLE usuarios OWNER TO postgres;
13
CREATE TABLE car_stat_dat ( codi_stat_pk varchar(3) NOT NULL, desc_stat varchar(30) NOT NULL, estado char(1), audi_usua_ingr varchar(15), audi_usua_modi varchar(15), codi_stat int4 DEFAULT nextval('car_stat_seq'::regclass), audi_fech_ingr date DEFAULT now(), audi_fech_modi date, CONSTRAINT car_stat_dat_pkey PRIMARY KEY (codi_stat_pk) ) WITH OIDS; ALTER TABLE car_stat_dat OWNER TO postgres; CREATE TABLE car_tipo_docu_dat ( sigl_pk varchar(3) NOT NULL, desc_docu varchar(30), estado char(1), codi_stat_pk varchar(3), codi_modu_pk varchar(3), audi_usua_ingr varchar(15), audi_usua_modi varchar(15), audi_fech_ingr date DEFAULT now(), audi_fech_modi date, codi_tipo_docu int8 DEFAULT nextval('car_tipo_docu_seq'::regclass), CONSTRAINT car_tipo_docu_dat_pkey PRIMARY KEY (sigl_pk), CONSTRAINT car_tipo_docu_dat_codi_modu_pk_fkey FOREIGN KEY (codi_modu_pk) REFERENCES car_modu_dat (codi_modu_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_tipo_docu_dat_codi_stat_pk_fkey FOREIGN KEY (codi_stat_pk) REFERENCES car_stat_dat (codi_stat_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) WITH OIDS; ALTER TABLE car_tipo_docu_dat OWNER TO postgres;
14
CREATE TABLE car_tipo_clie_dat ( codi_tipo_clie_pk int8 NOT NULL, desc_tipo_clie varchar(30), audi_usua_ingr varchar(15), audi_usua_modi varchar(15), audi_fech_ingr date, audi_fech_modi date, CONSTRAINT car_tipo_clie_dat_pkey PRIMARY KEY (codi_tipo_clie_pk) ) WITH OIDS; ALTER TABLE car_tipo_clie_dat OWNER TO postgres;
CREATE TABLE inv_empresa_dat ( codi_empr int8 NOT NULL, desc_empr varchar(100), dire_empr varchar(100), mail_empr varchar(100), acti_empr varchar(100), ruc_empr varchar(13), tele_empr varchar(50), repr_empr varchar(100), codi_pais int8, codi_prov int8, codi_ciud int8, codi_parr int8, codi_sect int8, nsri_empr char(10), esta_empr char(1), audi_usua_ingr varchar(15), audi_fech_ingr date, audi_usua_modi varchar(15), audi_fech_modi date, CONSTRAINT empresa_pk PRIMARY KEY (codi_empr) ) WITH OIDS; ALTER TABLE inv_empresa_dat OWNER TO postgres;
15
CREATE TABLE car_modu_dat ( codi_modu_pk varchar(3) NOT NULL, desc_modu varchar(30) NOT NULL, codi_empr_fk int8, audi_usua_ingr varchar(15), estado char(1), codi_modu int4 DEFAULT nextval('car_modu_seq'::regclass), audi_fech_ingr date DEFAULT now(), audi_fech_modi date, audi_usua_modi varchar(15), CONSTRAINT car_modu_dat_pkey PRIMARY KEY (codi_modu_pk), CONSTRAINT car_modu_dat_codi_empr_fk_fkey FOREIGN KEY (codi_empr_fk) REFERENCES inv_empresa_dat (codi_empr) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE RESTRICT ) WITH OIDS; ALTER TABLE car_modu_dat OWNER TO postgres;
CREATE TABLE inv_sucursal_dat ( codi_sucu int8 NOT NULL, codi_matr int8 NOT NULL, codi_empr int8 NOT NULL, codi_prov int8, codi_ciud int8, codi_cdla int8, codi_call int8, nume_call_sucu int8, desc_sucu varchar(100), dire_sucu varchar(100), tele_sucu varchar(50), repr_sucu varchar(100), nsri_sucu char(10), obse_sucu varchar(100), esta_sucu char(1), audi_usua_ingr varchar(15), audi_fech_ingr date, audi_usua_modi varchar(15), audi_fech_modi date, CONSTRAINT sucursal_pk PRIMARY KEY (codi_sucu, codi_empr) ) WITH OIDS; ALTER TABLE inv_sucursal_dat OWNER TO postgres;
16
CREATE TABLE car_accion_dat ( codi_acci int8 NOT NULL DEFAULT nextval(('car_accion_seq'::text)::regclass), desc_acci varchar(100), esta_acci char(1), audi_usua_ingr varchar(15), audi_fech_ingr date DEFAULT now(), CONSTRAINT accion_pk PRIMARY KEY (codi_acci) ) WITHOUT OIDS; ALTER TABLE car_accion_dat OWNER TO postgres;
CREATE TABLE ven_vendedor ( codi_vendedor int4 NOT NULL DEFAULT nextval('ven_vendedor_codi_vendedor_seq'::regclass), nomb_vendedor varchar(30), codi_comision int8, tipo_vendedor varchar, codi_detalle_comision int8, estado char(1), fecha_creacion date, CONSTRAINT pk_vendedor PRIMARY KEY (codi_vendedor) ) WITH OIDS; ALTER TABLE ven_vendedor OWNER TO postgres;
CREATE TABLE banco ( idbanco int8 NOT NULL, nombre varchar(100) NOT NULL, idestado int8 NOT NULL, estado char(1), fecharegistro varchar(10), horaregistro varchar(8), CONSTRAINT banco_pkey PRIMARY KEY (idbanco) ) WITH OIDS; ALTER TABLE banco OWNER TO postgres;
17
CREATE TABLE car_pais_dat ( codi_pais_pk int8 NOT NULL DEFAULT nextval('car_pais_seq'::regclass), desc_pais varchar(40) NOT NULL, estado char(1), audi_usua_ingr varchar(15), audi_usua_modi varchar(15), audi_fech_modi date, audi_fech_ingr date DEFAULT now(), CONSTRAINT car_pais_dat_pkey PRIMARY KEY (codi_pais_pk) ) WITH OIDS; ALTER TABLE car_pais_dat OWNER TO postgres;
CREATE TABLE car_prov_dat ( codi_prov_pk int8 NOT NULL DEFAULT nextval('car_prov_seq'::regclass), desc_prov varchar(30) NOT NULL, codi_pais_pk int8 NOT NULL, estado char(1), audi_usua_ingr varchar(15), audi_usua_modi varchar(15), audi_fech_ingr date DEFAULT now(), audi_fech_modi date, CONSTRAINT car_prov_dat_pkey PRIMARY KEY (codi_prov_pk), CONSTRAINT car_prov_dat_codi_pais_pk_fkey FOREIGN KEY (codi_pais_pk) REFERENCES car_pais_dat (codi_pais_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) WITH OIDS; ALTER TABLE car_prov_dat OWNER TO postgres;
18
CREATE TABLE car_cant_dat ( codi_cant_pk int8 NOT NULL DEFAULT nextval('car_cant_seq'::regclass), desc_cant varchar(30) NOT NULL, codi_prov_pk int8 NOT NULL, estado char(1), audi_usua_ingr varchar(15), audi_usua_modi varchar(15), audi_fech_ingr date DEFAULT now(), audi_fech_modi date, CONSTRAINT car_cant_dat_pkey PRIMARY KEY (codi_cant_pk), CONSTRAINT car_cant_dat_codi_prov_pk_fkey FOREIGN KEY (codi_prov_pk) REFERENCES car_prov_dat (codi_prov_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) WITH OIDS; ALTER TABLE car_cant_dat OWNER TO postgres; CREATE TABLE car_ciud_dat ( codi_ciud_pk int8 NOT NULL DEFAULT nextval('car_ciud_seq'::regclass), desc_ciud varchar(30) NOT NULL, codi_prov_pk int8 NOT NULL, codi_pais_pk int8 NOT NULL, codi_cant_pk int8 NOT NULL, estado char(1), audi_usua_ingr varchar(15), audi_usua_modi varchar(15), audi_fech_ingr date DEFAULT now(), audi_fech_modi date, CONSTRAINT car_ciud_dat_pkey PRIMARY KEY (codi_ciud_pk), CONSTRAINT car_ciud_dat_codi_cant_pk_fkey FOREIGN KEY (codi_cant_pk) REFERENCES car_cant_dat (codi_cant_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_ciud_dat_codi_pais_pk_fkey FOREIGN KEY (codi_pais_pk) REFERENCES car_pais_dat (codi_pais_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_ciud_dat_codi_prov_pk_fkey FOREIGN KEY (codi_prov_pk) REFERENCES car_prov_dat (codi_prov_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) WITH OIDS; ALTER TABLE car_ciud_dat OWNER TO postgres;
19
CREATE TABLE oper_sect_dat ( codi_sect_pk int8 NOT NULL, codi_ciud_fk int8 NOT NULL, desc_sect varchar(50) NOT NULL, estd_reg_sect varchar(1), CONSTRAINT sect_pk PRIMARY KEY (codi_sect_pk), CONSTRAINT ciud_sect_fk FOREIGN KEY (codi_ciud_fk) REFERENCES car_ciud_dat (codi_ciud_pk) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE RESTRICT ) WITH OIDS; ALTER TABLE oper_sect_dat OWNER TO postgres;
CREATE TABLE car_parr_dat ( codi_parr_pk int8 NOT NULL DEFAULT nextval('car_parr_seq'::regclass), desc_parr varchar(30) NOT NULL, codi_sect_pk int8 NOT NULL, codi_ciud_pk int8 NOT NULL, estado char(1), audi_usua_ingr varchar(15), audi_usua_modi varchar(15), audi_fech_ingr date DEFAULT now(), audi_fech_modi date, CONSTRAINT car_parr_pkey PRIMARY KEY (codi_parr_pk), CONSTRAINT car_parr_dat_codi_ciud_pk_fkey FOREIGN KEY (codi_ciud_pk) REFERENCES car_ciud_dat (codi_ciud_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_parr_dat_codi_sect_pk_fkey FOREIGN KEY (codi_sect_pk) REFERENCES oper_sect_dat (codi_sect_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) WITH OIDS; ALTER TABLE car_parr_dat OWNER TO postgres;
20
CREATE TABLE oper_calle_dat ( codi_calle_pk int8 NOT NULL, desc_calle varchar(30) NOT NULL DEFAULT ''::character varying, codi_ciud_fk int8 NOT NULL, estado char(1), estd_reg_calle char(1) NOT NULL DEFAULT ''::bpchar, CONSTRAINT calle_pk PRIMARY KEY (codi_calle_pk), CONSTRAINT ciud_calle_fk FOREIGN KEY (codi_ciud_fk) REFERENCES car_ciud_dat (codi_ciud_pk) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE RESTRICT ) WITH OIDS; ALTER TABLE oper_calle_dat OWNER TO postgres; CREATE TABLE oper_cdla_dat ( codi_cdla_pk int8 NOT NULL, desc_cdla varchar(50) NOT NULL DEFAULT ''::character varying, codi_ciud_fk int8 NOT NULL, estd_reg_cdla char(1) NOT NULL DEFAULT ''::bpchar, CONSTRAINT cdla_pk PRIMARY KEY (codi_cdla_pk), CONSTRAINT ciud_cdla_fk FOREIGN KEY (codi_ciud_fk) REFERENCES car_ciud_dat (codi_ciud_pk) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE RESTRICT ) WITH OIDS; ALTER TABLE oper_cdla_dat OWNER TO postgres;
21
CREATE TABLE car_clie_dat ( codi_clie_pk int4 NOT NULL DEFAULT nextval('car_clie_dat_codi_clie_pk_seq'::regclass), stat_clie varchar(2), nume_calle int8, come_calle varchar(30), desc_cdla varchar(30), tele_prin varchar(9), tele_secu varchar(9), fax varchar(9), email varchar(30), cupo float8, plaz int4, sobr_porc float8, sobr_mont float8, fech_ingr varchar(10), fech_ulti_comp varchar(8), mont_ulti_comp float8, codi_tipo_clie_pk int8, codi_tipo_pago_pk int8, codi_cdla_pk int8, codi_ciud_pk int8, codi_calle_pk int8, codi_vendedor int8, codi_empr_fk int8, audi_usua_ingr varchar(15), audi_usua_modi varchar(15), aprobacioncredito char(1), -- verific si se le ha aprobado el credito o no es un booleano audi_fech_ingr date, audi_fech_modi date, CONSTRAINT car_clie_dat_pkey PRIMARY KEY (codi_clie_pk), CONSTRAINT car_clie_dat_codi_calle_pk_fkey FOREIGN KEY (codi_calle_pk) REFERENCES oper_calle_dat (codi_calle_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_clie_dat_codi_cdla_pk_fkey FOREIGN KEY (codi_cdla_pk) REFERENCES oper_cdla_dat (codi_cdla_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_clie_dat_codi_ciud_pk_fkey FOREIGN KEY (codi_ciud_pk) REFERENCES car_ciud_dat (codi_ciud_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_clie_dat_codi_empr_fk_fkey FOREIGN KEY (codi_empr_fk) REFERENCES inv_empresa_dat (codi_empr) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE RESTRICT, CONSTRAINT car_clie_dat_codi_tipo_clie_pk_fkey FOREIGN KEY (codi_tipo_clie_pk) REFERENCES car_tipo_clie_dat (codi_tipo_clie_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_clie_dat_codi_tipo_pago_pk_fkey FOREIGN KEY (codi_tipo_pago_pk) REFERENCES car_tipo_pago_dat (codi_tipo_pago_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_clie_dat_codi_vendedor_fkey FOREIGN KEY (codi_vendedor) REFERENCES ven_vendedor (codi_vendedor) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) WITH OIDS; ALTER TABLE car_clie_dat OWNER TO postgres;
22
CREATE TABLE car_clie_juri_dat ( codi_clie_pk int8 NOT NULL, ruc_pk varchar(13) NOT NULL, repr_lega varchar(45), razo_soci varchar(45), estado char(1), CONSTRAINT car_clie_juri_dat_pkey PRIMARY KEY (ruc_pk), CONSTRAINT car_clie_juri_dat_codi_clie_pk_fkey FOREIGN KEY (codi_clie_pk) REFERENCES car_clie_dat (codi_clie_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) WITH OIDS; ALTER TABLE car_clie_juri_dat OWNER TO postgres;
CREATE TABLE car_clie_natu_dat ( codi_clie_pk int8 NOT NULL, cedu_pk varchar(13) NOT NULL, nomb_natu varchar(45), cont varchar(45), estado char(1), CONSTRAINT car_clie_natu_dat_pkey PRIMARY KEY (cedu_pk), CONSTRAINT car_clie_natu_dat_codi_clie_pk_fkey FOREIGN KEY (codi_clie_pk) REFERENCES car_clie_dat (codi_clie_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) WITH OIDS; ALTER TABLE car_clie_natu_dat OWNER TO postgres;
23
CREATE TABLE car_tipo_docu_dat ( sigl_pk varchar(3) NOT NULL, desc_docu varchar(30), estado char(1), codi_stat_pk varchar(3), codi_modu_pk varchar(3), audi_usua_ingr varchar(15), audi_usua_modi varchar(15), audi_fech_ingr date DEFAULT now(), audi_fech_modi date, codi_tipo_docu int8 DEFAULT nextval('car_tipo_docu_seq'::regclass), CONSTRAINT car_tipo_docu_dat_pkey PRIMARY KEY (sigl_pk), CONSTRAINT car_tipo_docu_dat_codi_modu_pk_fkey FOREIGN KEY (codi_modu_pk) REFERENCES car_modu_dat (codi_modu_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_tipo_docu_dat_codi_stat_pk_fkey FOREIGN KEY (codi_stat_pk) REFERENCES car_stat_dat (codi_stat_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) WITH OIDS; ALTER TABLE car_tipo_docu_dat OWNER TO postgres;
CREATE TABLE car_secu_docu_ref ( sigl_pk varchar(3) NOT NULL, secu_fina int4, estado char(1), codi_sucu int8, codi_clie int8, codi_empr int8, audit_fech_ingr varchar(10), audit_usua_ingr varchar(15), audit_fech_modi varchar(10), audit_usua_modi varchar(15), CONSTRAINT car_secu_docu_ref_codi_sucu_fkey FOREIGN KEY (codi_sucu, codi_empr) REFERENCES inv_sucursal_dat (codi_sucu, codi_empr) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE RESTRICT, CONSTRAINT car_secu_docu_ref_sigl_pk_fkey FOREIGN KEY (sigl_pk) REFERENCES car_tipo_docu_dat (sigl_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) WITH OIDS; ALTER TABLE car_secu_docu_ref OWNER TO postgres;
24
CREATE TABLE car_sucu_clie_dat ( codi_sucu_clie_pk int8 NOT NULL DEFAULT nextval('car_sucu_clie_seq'::regclass), nomb_sucu varchar(30), estado char(1), tele_prin varchar(9), tele_secu varchar(9), fax varchar(9), nume_calle int4, come_calle varchar(30), desc_cdla varchar(30), codi_clie_pk int8 NOT NULL, codi_cdla_pk int8, codi_calle_pk int8, codi_sect_pk int8, codi_prov_pk int8, audi_usua_ingr varchar(15), audi_usua_modi varchar(15), audi_fech_ingr date DEFAULT now(), audi_fech_modi date, CONSTRAINT car_sucu_clie_dat_pkey PRIMARY KEY (codi_sucu_clie_pk, codi_clie_pk), CONSTRAINT clie_fk FOREIGN KEY (codi_clie_pk) REFERENCES car_clie_dat (codi_clie_pk) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE RESTRICT ) WITH OIDS; ALTER TABLE car_sucu_clie_dat OWNER TO postgres; CREATE TABLE car_tarj_dat ( codi_tarj_pk int8 NOT NULL DEFAULT nextval('car_tarj_seq'::regclass), nomb_tarj varchar(30) NOT NULL, estado char(1), porc_desc_tarj int2 NOT NULL, porc_incr_tarj int2 NOT NULL, mini_tarj int4, audi_usua_ingr varchar(15), audi_usua_modi varchar(15), audi_fech_ingr date DEFAULT now(), audi_fech_modi date, CONSTRAINT tarj_dat_pkey PRIMARY KEY (codi_tarj_pk) ) WITH OIDS; ALTER TABLE car_tarj_dat OWNER TO postgres;
25
CREATE TABLE car_kardex_clie_log ( codi_kard_clie_pk int8 NOT NULL, secu_trans int4, fech_regi varchar(10), fech_vent date, plaz int4, descrip int4, coment varchar(30), tota int8, nume_apli int4, asentado char(1), bloqueado char(1), abon int8, codi_stat_pk varchar(3), codi_ciud_pk int8, codi_modu_pk varchar(3), codi_vendedor int8, codi_clie_pk int8, codi_empr_pk int8, codi_tarj_pk int8, codi_banc_pk int8, sigl_pk varchar(3), audit_fech_ingr varchar(10), audit_usua_ingr varchar(15), audit_fech_modi varchar(10), audit_usua_modi varchar(15), tipo_apli varchar(3), CONSTRAINT car_kardex_clie_log_pkey PRIMARY KEY (codi_kard_clie_pk), CONSTRAINT car_kardex_clie_log_codi_banc_pk_fkey FOREIGN KEY (codi_banc_pk) REFERENCES banco (idbanco) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_kardex_clie_log_codi_ciud_pk_fkey FOREIGN KEY (codi_ciud_pk) REFERENCES car_ciud_dat (codi_ciud_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_kardex_clie_log_codi_clie_pk_fkey FOREIGN KEY (codi_clie_pk) REFERENCES car_clie_dat (codi_clie_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_kardex_clie_log_codi_empr_pk_fkey FOREIGN KEY (codi_empr_pk) REFERENCES inv_empresa_dat (codi_empr) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_kardex_clie_log_codi_modu_pk_fkey FOREIGN KEY (codi_modu_pk) REFERENCES car_modu_dat (codi_modu_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_kardex_clie_log_codi_stat_pk_fkey FOREIGN KEY (codi_stat_pk) REFERENCES car_stat_dat (codi_stat_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_kardex_clie_log_codi_tarj_pk_fkey FOREIGN KEY (codi_tarj_pk) REFERENCES car_tarj_dat (codi_tarj_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_kardex_clie_log_codi_vendedor_fkey FOREIGN KEY (codi_vendedor) REFERENCES ven_vendedor (codi_vendedor) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_kardex_clie_log_sigl_pk_fkey FOREIGN KEY (sigl_pk) REFERENCES car_tipo_docu_dat (sigl_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) WITH OIDS; ALTER TABLE car_kardex_clie_log OWNER TO postgres;
26
CREATE TABLE car_trans_tmp ( codi_kard_clie_pk int8 NOT NULL, secu_trans varchar(30), fech_regi date, tota int8, nume_apli int4, tipo_apli int4, asentado char(1), bloqueado char(1), abon int8, codi_stat_pk varchar(3), codi_ciud_pk int8, codi_modu_pk varchar(3), codi_vendedor int8, codi_clie_pk int8, codi_empr_pk int8, codi_tarj_pk int8, codi_banc_pk int8, sigl_pk varchar(3), audit_fech_ingr varchar(10), audit_usua_ingr varchar(15), audit_fech_modi varchar(10), audit_usua_modi varchar(15), CONSTRAINT car_trans_tmp_codi_banc_pk_fkey FOREIGN KEY (codi_banc_pk) REFERENCES banco (idbanco) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_trans_tmp_codi_ciud_pk_fkey FOREIGN KEY (codi_ciud_pk) REFERENCES car_ciud_dat (codi_ciud_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_trans_tmp_codi_clie_pk_fkey FOREIGN KEY (codi_clie_pk) REFERENCES car_clie_dat (codi_clie_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_trans_tmp_codi_empr_pk_fkey FOREIGN KEY (codi_empr_pk) REFERENCES inv_empresa_dat (codi_empr) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_trans_tmp_codi_modu_pk_fkey FOREIGN KEY (codi_modu_pk) REFERENCES car_modu_dat (codi_modu_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_trans_tmp_codi_stat_pk_fkey FOREIGN KEY (codi_stat_pk) REFERENCES car_stat_dat (codi_stat_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_trans_tmp_codi_tarj_pk_fkey FOREIGN KEY (codi_tarj_pk) REFERENCES car_tarj_dat (codi_tarj_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_trans_tmp_codi_vendedor_fkey FOREIGN KEY (codi_vendedor) REFERENCES ven_vendedor (codi_vendedor) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_trans_tmp_sigl_pk_fkey FOREIGN KEY (sigl_pk) REFERENCES car_tipo_docu_dat (sigl_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) WITH OIDS; ALTER TABLE car_trans_tmp OWNER TO postgres;
27
CREATE TABLE car_tran_cheq ( codi_tran_cheq_pk int4 NOT NULL, idbanco int8, codi_clie_pk int8, fech_depo varchar(10), fech_venc varchar(10), cuen_banc varchar(15), valo float8, nume_che int4, post_fech char(1), CONSTRAINT car_tran_cheq_pkey PRIMARY KEY (codi_tran_cheq_pk), CONSTRAINT car_tran_cheq_codi_clie_pk_fkey FOREIGN KEY (codi_clie_pk) REFERENCES car_clie_dat (codi_clie_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_tran_cheq_idbanco_fkey FOREIGN KEY (idbanco) REFERENCES banco (idbanco) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) WITH OIDS; ALTER TABLE car_tran_cheq OWNER TO postgres;
CREATE TABLE car_tran_tarj ( codi_tran_pk int4 NOT NULL, codi_tarj_pk int8, codi_clie_pk int8, nume_tarj varchar(15), valor float8, increm int4, cobrado char(1), fecha varchar(10), CONSTRAINT car_tran_tarj_pkey PRIMARY KEY (codi_tran_pk), CONSTRAINT car_tran_tarj_codi_clie_pk_fkey FOREIGN KEY (codi_clie_pk) REFERENCES car_clie_dat (codi_clie_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT car_tran_tarj_codi_tarj_pk_fkey FOREIGN KEY (codi_tarj_pk) REFERENCES car_tarj_dat (codi_tarj_pk) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) WITH OIDS; ALTER TABLE car_tran_tarj OWNER TO postgres;
28
CREATE TABLE car_cont_asiento_dat ( codi_cont_asie_pk int8 NOT NULL DEFAULT nextval('car_cont_asiento_seq'::regclass), tipo_as char(2), num_doc int8, fech_doc date, codcta int4, detalle varchar(40), tipreg char(2), tipregc char(1), bloqueado char(1), estado char(1), audi_usua_ingr varchar(15), audi_usua_modi varchar(15), audi_fech_modi date, audi_fech_ingr date DEFAULT now(), CONSTRAINT car_cont_asiento_dat_pkey PRIMARY KEY (codi_cont_asie_pk) ) WITH OIDS; ALTER TABLE car_cont_asiento_dat OWNER TO postgres;
29
1.10 CODIFICACION DE LOS COMPONENTES CLASE CHEQUE
package com.ug.cisc.erp.cartera.entidades; public class cheque {
private int codi_tran_cheq_pk; private int idbanco; private int codi_clie_pk; private String fech_depo; private String fech_venc; private String cuen_banc; private String nombre; private String nomb_natu; private String cedu_pk; private float valo; private int nume_che; private char post_fech; public cheque(){} public char getpost_fech() { return post_fech; } public void setpost_fech(char post_fech) { this.post_fech = post_fech; } public int getcodi_tran_cheq_pk() { return codi_tran_cheq_pk; } public void setcodi_tran_cheq_pk(int codi_tran_cheq_pk) { this.codi_tran_cheq_pk = codi_tran_cheq_pk; } public int getidbanco() { return idbanco; } public void setidbanco(int idbanco) { this.idbanco = idbanco; } public float getvalo() { return valo; } public void setvalo(float valo) { this.valo = valo; } public int getcodi_clie_pk() { return codi_clie_pk; } public void setcodi_clie_pk(int codi_clie_pk) { this.codi_clie_pk = codi_clie_pk; }
30
CLASE CIUDAD
public int getnume_che() { return nume_che; } public void setnume_che(int nume_che) { this.nume_che = nume_che; } public String getcuen_banc() { return cuen_banc; } public void setcuen_banc(String cuen_banc) { this.cuen_banc = cuen_banc; } public String getfech_venc() { return fech_venc; } public void setfech_venc(String fech_venc) { this.fech_venc = fech_venc; } public String getfech_depo() { return fech_depo; } public void setfech_depo(String fech_depo) { this.fech_depo = fech_depo; } public String getdescnombrebanco() { return nombre; } public void set_nombrebanco(String nombre) { this.nombre = nombre; } public String getdescclie() { return cedu_pk; } public void set_descclie(String cedu_pk) { this.cedu_pk = cedu_pk; } public String getreferencia() { return nomb_natu; } public void set_referencia(String nomb_natu) { this.nomb_natu = nomb_natu; }
}
31
CLASE CLIENTE JURIDICO CLASES CLIENTES NATURAL
package com.ug.cisc.erp.cartera.entidades; public class Clientejuridico{ public Clientejuridico(){} private int codi_clientejuridico_pk;
private String ruc_pk; private String repr_lega; private String razo_soci_clientejuridico; public int getCodi_clientejuridico_pk() {
return codi_clientejuridico_pk; } public void setCodi_clientejuridico_pk(int codi_clientejuridico_pk) {
this.codi_clientejuridico_pk = codi_clientejuridico_pk; } public String getruc_pk() {
return ruc_pk.trim(); } public void setruc_pk(String ruc_pk) {
this.ruc_pk = ruc_pk; } public String getrepr_legal_clientejuridico() {
return repr_lega; } public void setrepr_legal_clientejuridico(String repr_lega) {
this.repr_lega = repr_lega; } public String getrazo_soci_clientejuridico() {
return razo_soci_clientejuridico; } public void setrazo_soci_clientejuridico(String razo_soci_clientejuridico) {
this.razo_soci_clientejuridico = razo_soci_clientejuridico; }
}
32
CLASES CLIENTES
package com.ug.cisc.erp.cartera.entidades; public class Clientenatural extends Clientes {
public Clientenatural() {} private String cedu_pk; private String nomb_natu; private String cont; private int codi_cliente_pk; public int getCodi_cliente() { return codi_cliente_pk; } public void setCodi_cliente(int codi_cliente_pk) { this.codi_cliente_pk = codi_cliente_pk; } public String getCedu_pk() { return cedu_pk; }
public void setCedu_pk(String cedu_pk) { this.cedu_pk = cedu_pk; } public String getCont() { return cont; } public void setCont(String cont) { this.cont = cont; } public String getNomb_natu() { return nomb_natu; } public void setNomb_natu(String nomb_natu) { this.nomb_natu = nomb_natu; }
} public int getCodi_ciud_pk() {
return codi_ciud_pk; } public void setCodi_ciud_pk(int codi_ciud_pk) { this.codi_ciud_pk = codi_ciud_pk; } public int getCodi_clie_pk() { return codi_clie_pk; }
33
public void setCodi_clie_pk(int codi_clie_pk) { //int tipocli=Integer.parseInt(codi_clie_pk.trim()); this.codi_clie_pk =codi_clie_pk; } public int getCodi_tipo_clie_pk() { return codi_tipo_clie_pk; } public void setCodi_tipo_clie_pk(int codi_tipo_clie_pk) { this.codi_tipo_clie_pk = codi_tipo_clie_pk; } public int getCodi_tipo_pago_pk() { return codi_tipo_pago_pk; } public void setCodi_tipo_pago_pk(String codi_tipo_pago_pk) { this.codi_tipo_pago_pk = Integer.parseInt(codi_tipo_pago_pk.trim()); } public int getCodi_vendedor() { return codi_vendedor; } public void setCodi_vendedor(int codi_vendedor) { this.codi_vendedor = codi_vendedor; } public String getCome_calle() { return come_calle; } public void setCome_calle(String come_calle) { this.come_calle = come_calle; } public float getCupo() { return cupo; } public void setCupo(String cupo) { this.cupo = Float.parseFloat(cupo.trim()); } public String getDesc_cdla() { return desc_cdla; } public void setDesc_cdla(String desc_cdla) { this.desc_cdla = desc_cdla; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getFax() { return fax; }
34
public void setFax(String fax) { this.fax = fax; } public Date getFech_ingr() { return fech_ingr; } public void setFech_ingr(Date fech_ingr) { this.fech_ingr = fech_ingr; } public String getFech_ulti_comp() { return fech_ulti_comp; } public void setFech_ulti_comp(String fech_ulti_comp) { this.fech_ulti_comp = fech_ulti_comp; } public float getMont_ulti_comp() { return mont_ulti_comp; } public void setMont_ulti_comp(float mont_ulti_comp) { this.mont_ulti_comp = mont_ulti_comp; } public int getNume_calle() { return nume_calle; } public void setNume_calle(String nume_calle) { this.nume_calle = Integer.parseInt(nume_calle.trim()); } public int getPlaz() { return plaz; } public void setPlaz(int plaz) { this.plaz = plaz; } public float getSobr_mont() { return sobr_mont; } public void setSobr_mont(float sobr_mont) { this.sobr_mont = sobr_mont; } public float getSobr_porc() { return sobr_porc; } public void setSobr_porc(float sobr_porc) { this.sobr_porc = sobr_porc; } public String getStat_clie() { return stat_clie; }
35
public void setStat_clie(String stat_clie) { this.stat_clie = stat_clie; } public String getTele_prin() { return tele_prin; } public void setTele_prin(String tele_prin) { this.tele_prin = tele_prin; } public String getTele_secu() { return tele_secu; } public void setTele_secu(String tele_secu) { this.tele_secu = tele_secu; } public int getCodi_empr_fk() { return codi_empr_fk; } public void setCodi_empr_fk(int codi_empr_fk) { this.codi_empr_fk = codi_empr_fk; } public String getDesc_empre() { return desc_empre; } public void setDesc_empre(String desc_empre) { this.desc_empre = desc_empre; } public String getDesc_vend() { return desc_vend; } public void setDesc_vend(String desc_vend) { this.desc_vend = desc_vend; } public String getnomb_natu() { return nomb_natu; } public void setnomb_natu(String nomb_natu) { this.nomb_natu = nomb_natu; } public String getcedu_pk() { return cedu_pk; }
36
public void setcedu_pk(String cedu_pk) { this.cedu_pk = cedu_pk; } public String getciudad() { return ciudad; } public void setciudad(String ciudad) { this.ciudad = ciudad; } public String getprovincia() { return provincia; } public void setprovincia(String provincia) { this.provincia = provincia; } public String getdesctipoclie() { return tipoclie; } public void setdesctipoclie(String tipoclie) { this.tipoclie = tipoclie; } public String getdesccalle() { return desccalle; } public void setdesccalle(String desccalle) { this.desccalle = desccalle; }
}//fin clase
37
CLASE KARDEX DE CLIENTE
package com.ug.cisc.erp.cartera.entidades; import java.sql.Date; public class Kardex_cliente{
public Kardex_cliente(){} private int codi_kard_clie_pk; private String secu_trans; private Date fech_regi; private Date fech_vent; private int plaz; private String descrip; private String coment; private int tota; private int nume_apli; private int tipo_apli; private char asentado; private char bloqueado; private int abon; private int codi_stat_pk; private int codi_ciud_pk; private int codi_modu_pk; private int codi_vendedor; private int codi_clie_pk; private int codi_empr_pk; private int codi_tarj_pk; private int codi_banc_pk; private String sigl_pk; public int getAbon() { return abon; } public void setAbon(int abon) { this.abon = abon; } public char getAsentado() { return asentado; } public void setAsentado(char asentado) { this.asentado = asentado; } public char getBloqueado() { return bloqueado; } public void setBloqueado(char bloqueado) { this.bloqueado = bloqueado; } public int getCodi_banc_pk() { return codi_banc_pk; } public void setCodi_banc_pk(int codi_banc_pk) { this.codi_banc_pk = codi_banc_pk;
38
public int getCodi_ciud_pk() { return codi_ciud_pk; } public void setCodi_ciud_pk(int codi_ciud_pk) { this.codi_ciud_pk = codi_ciud_pk; } public int getCodi_clie_pk() { return codi_clie_pk; } public void setCodi_clie_pk(int codi_clie_pk) { this.codi_clie_pk = codi_clie_pk; } public int getCodi_empr_pk() { return codi_empr_pk; } public void setCodi_empr_pk(int codi_empr_pk) { this.codi_empr_pk = codi_empr_pk; } public int getCodi_kard_clie_pk() { return codi_kard_clie_pk; } public void setCodi_kard_clie_pk(int codi_kard_clie_pk) { this.codi_kard_clie_pk = codi_kard_clie_pk; } public int getCodi_modu_pk() { return codi_modu_pk; } public void setCodi_modu_pk(int codi_modu_pk) { this.codi_modu_pk = codi_modu_pk; } public int getCodi_stat_pk() { return codi_stat_pk; } public void setCodi_stat_pk(int codi_stat_pk) { this.codi_stat_pk = codi_stat_pk; } public int getCodi_tarj_pk() { return codi_tarj_pk; } public void setCodi_tarj_pk(int codi_tarj_pk) { this.codi_tarj_pk = codi_tarj_pk; } public int getCodi_vendedor() { return codi_vendedor; } public void setCodi_vendedor(int codi_vendedor) { this.codi_vendedor = codi_vendedor; } public String getComent() { return coment; }
39
public void setComent(String coment) {
this.coment = coment; } public String getDescrip() { return descrip; } public void setDescrip(String descrip) { this.descrip = descrip; } public Date getFech_regi() { return fech_regi; } public void setFech_regi(Date fech_regi) { this.fech_regi = fech_regi; } public Date getFech_vent() { return fech_vent; } public void setFech_vent(Date fech_vent) { this.fech_vent = fech_vent; } public int getNume_apli() { return nume_apli; } public void setNume_apli(int nume_apli) { this.nume_apli = nume_apli; } public int getPlaz() { return plaz; } public void setPlaz(int plaz) { this.plaz = plaz; } public String getSecu_trans() { return secu_trans; } public void setSecu_trans(String secu_trans) { this.secu_trans = secu_trans; }
40
public String getSigl_pk() { return sigl_pk; } public void setSigl_pk(String sigl_pk) { this.sigl_pk = sigl_pk; } public int getTipo_apli() { return tipo_apli; } public void setTipo_apli(int tipo_apli) { this.tipo_apli = tipo_apli; } public int getTota() { return tota; } public void setTota(int tota) { this.tota = tota; }
}
41
CLASE PRINCREDITO
Package com.ug.cisc.erp.cartera.entidades; public class Princredito{ public Princredito(){} private int codi_clie_pk; private String fech_regi; private String come_calle;
private double tota; private int codi_kard_clie_pk;
private int nume_apli; private int tipo_apli;
public String getcome_calle() { return come_calle; }
public void setcome_calle(String come_calle) { this.come_calle = come_calle; }
public String getfech_regi() { return fech_regi;
} public void setfech_regi(String fech_regi) {
this.fech_regi = fech_regi; } public int getcodi_clie_pk() {
return codi_clie_pk; } public void setcodi_clie_pk(int codi_clie_pk) {
this.codi_clie_pk = codi_clie_pk; } public double gettota() {
return tota; } public void settota(int tota) {
this.tota = tota; } public int getcodi_kard_clie_pk() {
return codi_kard_clie_pk; } public void setcodi_kard_clie_pk(int codi_kard_clie_pk) {
this.codi_kard_clie_pk = codi_kard_clie_pk; } public int getnume_apli() {
return nume_apli; } public void setnume_apli(int nume_apli) {
this.nume_apli = nume_apli; } public int gettipo_apli() {
return tipo_apli; } public void settipo_apli(int tipo_apli) {
this.tipo_apli = tipo_apli;
}
}
42
TIPO CLIENTE
package com.ug.cisc.erp.cartera.entidades; import java.io.Serializable; public class Tipocliente implements Serializable{
public Tipocliente (){} private int codi_tipo_clie_pk; rivate String desc_tipo_clie; public int getCodi_tipo_clie_pk() { return codi_tipo_clie_pk; } public void setCodi_tipo_clie_pk(int codi_tipo_clie_pk) { this.codi_tipo_clie_pk = codi_tipo_clie_pk; } public String getDesc_tipo_clie() { return desc_tipo_clie; } public void setDesc_tipo_clie(String desc_tipo_clie) { this.desc_tipo_clie = desc_tipo_clie; }
}
43
1.11 CLASE PARA LA CONEXION A LA BASE DE DATOS
package com.ug.cisc.erp.cartera.base; import java.sql.Connection; import java.sql.DriverManager; public class Base { private static Connection unCon= null; public static Connection getConexion(){ if (unCon== null){ try { Class.forName("org.postgresql.Driver"); unCon= DriverManager.getConnection("jdbc:postgresql://localhost:5432/cartera", "postgres", "admin"); unCon.setAutoCommit(false); }catch(Throwable e){ System.out.println(e); } } return unCon; } }
44
CLASE CHEQUEDAO
package com.ug.cisc.erp.cartera.db; import java.util.Vector; import com.ug.cisc.erp.cartera.db.CreateException; import com.ug.cisc.erp.cartera.db.FinderException; import com.ug.cisc.erp.cartera.actions.BuscarchequeForm; import com.ug.cisc.erp.cartera.actions.RegistroStatusForm; import com.ug.cisc.erp.cartera.entidades.cheque; import com.ug.cisc.erp.cartera.util.ConnectionPool; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Collection; import java.util.Calendar; import java.util.ArrayList; import java.util.Date; import java.text.SimpleDateFormat; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.RowSetDynaClass; public class ChequeDAO { String error; Connection con; private ConnectionPool pool; public ChequeDAO() { pool = ConnectionPool.getInstance(); } public Vector findcheque(String fecha) throws SQLException, Exception { Vector valorDevolver = new Vector(); Connection con = null; con = pool.getConnection(); ; try { if (con.isClosed()) { throw new IllegalStateException("error.unexpected"); }
45
String queryString = ("SELECT * FROM car_tran_cheq che,banco ban,car_clie_natu_dat clin where fech_depo=? " + " and che.idbanco = ban.idbanco and clin.codi_clie_pk = che.codi_clie_pk and che.post_fech = '0' " + " union" + " SELECT * FROM car_tran_cheq che,banco ban,car_clie_juri_dat clij where fech_depo=? " + " and che.idbanco = ban.idbanco and (clij.codi_clie_pk = che.codi_clie_pk) and che.post_fech = '0'"); PreparedStatement statement = con.prepareStatement(queryString); statement.setString(1,fecha); statement.setString(2,fecha); ResultSet unRs= statement.executeQuery(); while (unRs.next()){ cheque uncheque = new cheque(); uncheque.setidbanco(unRs.getInt("codi_tran_cheq_pk")); uncheque.set_nombrebanco(unRs.getString("nombre")); uncheque.set_descclie(unRs.getString("nomb_natu")); uncheque.setcodi_clie_pk(unRs.getInt("codi_clie_pk")); uncheque.setnume_che(unRs.getInt("nume_che")); uncheque.setcuen_banc(unRs.getString("cuen_banc")); uncheque.setvalo(unRs.getFloat("valo")); //uncheque.setfech_depo(unRs.getString("fech_depo")); valorDevolver.addElement(uncheque); } //cierro la conexion unRs.close(); statement.close(); } catch (SQLException sqle) { error = "SQLException: No se ha podido ejecutar esta petición. Contacte con el webmaster"; throw new SQLException(error); } catch (Exception e) { error = "Ha ocurrido una excepcion consultando la base de datos. Contactese con el Webmaster"; throw new Exception(error); } return valorDevolver; }//fin de metodo buscar calle
46
public void actualizar(String codigo) throws CreateException, SQLException { Connection con = null; con = pool.getConnection(); PreparedStatement ps = null; int numero=Integer.parseInt(codigo.trim()); String sql = "UPDATE car_tran_cheq SET post_fech='1' WHERE codi_tran_cheq_pk=?"; try { if (con.isClosed()) { throw new IllegalStateException("error.unexpected"); } ps = con.prepareStatement(sql); ps.setInt(1,numero); if (ps.executeUpdate() != 1) { throw new CreateException("error.create.record"); } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (ps != null) ps.close(); if (con != null) con.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("error.unexpected"); } } }//fin actualizar }//FIN DE LA CLASE
47
CLASE CLIENTEDAO
package com.ug.cisc.erp.cartera.db; import java.util.*; import com.ug.cisc.erp.cartera.db.CreateException;//import com.ug.cisc.erp.operaciones.dao.DuplicateKeyException; import com.ug.cisc.erp.cartera.db.FinderException; import com.ug.cisc.erp.cartera.actions.RegistroclienteForm; import com.ug.cisc.erp.cartera.entidades.Clientes; import com.ug.cisc.erp.cartera.entidades.Pais; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.text.SimpleDateFormat; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.RowSetDynaClass; public class ClienteDAO { private Connection con; HttpServletRequest request; String error; // Constructor public ClienteDAO(Connection con) { this.con = con; } // ,int cid,int tp,int cemp,int cven) public void addCliente(Clientes cliente) throws CreateException, SQLException { PreparedStatement ps = null; Date fechaCreacion = new Date(); SimpleDateFormat fechaConFormato = new SimpleDateFormat("dd/MM/yyyy"); String cadenaFecha = fechaConFormato.format(fechaCreacion); //codi_clie_pk,?, String sql = "INSERT INTO car_clie_dat (stat_clie,codi_calle_pk, nume_calle,come_calle,codi_cdla_pk,desc_cdla" + ",tele_prin,tele_secu,fax,email,cupo,codi_vendedor,codi_ciud_pk,plaz,sobr_porc,sobr_mont,fech_ingr,codi_tipo_clie_pk,fech_ulti_comp, mont_ulti_comp,codi_tipo_pago_pk,aprobacioncredito , codi_empr_fk " + ") values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
48
try { if (con.isClosed()) { throw new IllegalStateException("error.unexpected"); } ps = con.prepareStatement(sql); //ps.setInt(1,cliente.getCodi_clie_pk()); ps.setString(1,"A"); //cliente.getStat_clie()); ps.setInt(2,cliente.getCodi_calle_pk()); ps.setInt(3,cliente.getNume_calle()); ps.setString(4,cliente.getCome_calle()); ps.setInt(5,cliente.getCodi_cdla_pk()); ps.setString(6,cliente.getDesc_cdla()); ps.setString(7,cliente.getTele_prin()); ps.setString(8,cliente.getTele_secu()); ps.setString(9,cliente.getFax()); ps.setString(10,cliente.getEmail()); ps.setFloat(11,cliente.getCupo()); ps.setInt(12,cliente.getCodi_vendedor()); ps.setInt(13,cliente.getCodi_ciud_pk()); ps.setInt(14,cliente.getPlaz()); ps.setFloat(15,cliente.getSobr_porc()); ps.setFloat(16,cliente.getSobr_mont()); ps.setDate(17,cliente.getFech_ingr()); ps.setInt(18,cliente.getCodi_tipo_clie_pk()); ps.setString(19,cliente.getFech_ulti_comp()); ps.setFloat(20,cliente.getMont_ulti_comp()); ps.setInt(21,cliente.getCodi_tipo_pago_pk()); ps.setString(22,"0"); ps.setInt(23,cliente.getCodi_empr_fk()); if (ps.executeUpdate() != 1) { throw new CreateException("error.create.record"); }
49
} catch (SQLException e) { e.printStackTrace(); } finally { try { if (ps != null) ps.close();
} catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("error.unexpected"); } } } public Vector findcalle( ) throws SQLException, Exception { Vector valorDevolver = new Vector(); try { if (con.isClosed()) { throw new IllegalStateException("error.unexpected"); } String queryString = ("SELECT codi_calle_pk FROM oper_calle_dat "); PreparedStatement statement = con.prepareStatement(queryString); ResultSet unRs= statement.executeQuery(); while (unRs.next()){ Clientes unCliente = new Clientes(); unCliente.setCodi_calle_pk(unRs.getInt("codi_calle_pk")); unCliente.setsetDesc_stat(unRs.getString("desc_calle")); valorDevolver.addElement(unCliente); } //cierro la conexion unRs.close(); statement.close(); } catch (SQLException sqle) { error = "SQLException: No se ha podido ejecutar esta petición. Contacte con el webmaster"; throw new SQLException(error); } catch (Exception e) { error = "Ha ocurrido una excepcion consultando la base de datos. Contactese con el Webmaster"; throw new Exception(error); } return valorDevolver; } public Vector findvendedor( ) throws SQLException, Exception { Vector valorDevolver = new Vector(); try {
50
if (con.isClosed()) { throw new IllegalStateException("error.unexpected"); } String queryString = ("SELECT codi_vendedor,nomb_vendedor FROM ven_vendedor "); PreparedStatement statement = con.prepareStatement(queryString); ResultSet unRs= statement.executeQuery(); while (unRs.next()){ Clientes unCliente = new Clientes(); unCliente.setCodi_vendedor(unRs.getInt("codi_vendedor"));
unCliente.setDesc_vend(unRs.getString("nomb_vendedor")); valorDevolver.addElement(unCliente); } //cierro la conexion unRs.close(); statement.close(); } catch (SQLException sqle) { error = "SQLException: No se ha podido ejecutar esta petición. Contacte con el webmaster"; throw new SQLException(error); } catch (Exception e) { error = "Ha ocurrido una excepcion consultando la base de datos. Contactese con el Webmaster"; throw new Exception(error); } return valorDevolver; }//fin metodo public Vector findempresa( ) throws SQLException, Exception { Vector valorDevolver = new Vector(); try { if (con.isClosed()) { throw new IllegalStateException("error.unexpected"); } String queryString = ("SELECT codi_empr,desc_empr FROM inv_empresa_dat "); PreparedStatement statement = con.prepareStatement(queryString); ResultSet unRs= statement.executeQuery(); while (unRs.next()){ Clientes unCliente = new Clientes(); unCliente.setCodi_empr_fk(unRs.getInt("codi_empr")); unCliente.setDesc_empre(unRs.getString("desc_empr")); valorDevolver.addElement(unCliente); }
51
//cierro la conexion unRs.close(); statement.close(); } catch (SQLException sqle) { error = "SQLException: No se ha podido ejecutar esta petición. Contacte con el webmaster"; throw new SQLException(error); } catch (Exception e) { error = "Ha ocurrido una excepcion consultando la base de datos. Contactese con el Webmaster"; throw new Exception(error); } return valorDevolver; } public String buscarseccli( ) throws FinderException { PreparedStatement ps = null; ResultSet rs = null; String codigo=null; String sql = "select max(codi_clie_pk) as codi from car_clie_dat"; try { if (con.isClosed()) { throw new IllegalStateException("error.unexpected"); } ps = con.prepareStatement(sql); rs = ps.executeQuery(); if (rs.next()) { codigo=rs.getString("codi"); } return codigo; } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("error.unexpected"); } finally { try { if (ps != null) ps.close(); if (rs != null) rs.close(); //if (con != null) // con.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("error.unexpected"); } } }//fin metodo
52
public Vector findclie(String ced,String ruc) throws SQLException, Exception { Vector valorDevolver = new Vector(); //Connection con = null; //con = pool.getConnection(); //String fecha = "12/12/06"; try { if (con.isClosed()) { throw new IllegalStateException("error.unexpected"); } String queryString = ("select * from car_clie_dat cli,car_clie_natu_dat clin where (cli.codi_clie_pk = clin.codi_clie_pk and clin.cedu_pk =?)" + " union" + " select * from car_clie_dat cli,car_clie_juri_dat clij where (cli.codi_clie_pk = clij.codi_clie_pk and clij.ruc_pk =?)"); PreparedStatement statement = con.prepareStatement(queryString); statement.setString(1,ced); statement.setString(2,ruc); ResultSet unRs= statement.executeQuery(); while (unRs.next()){ Clientes unClientes = new Clientes(); unClientes.setCodi_clie_pk(unRs.getInt("codi_clie_pk")); unClientes.setnomb_natu(unRs.getString("nomb_natu")); unClientes.setcedu_pk(unRs.getString("cedu_pk")); //uncheque.setfech_depo(unRs.getString("fech_depo")); valorDevolver.addElement(unClientes); } //cierro la conexion unRs.close(); statement.close(); } catch (SQLException sqle) { error = "SQLException: No se ha podido ejecutar esta petición. Contacte con el webmaster"; throw new SQLException(error); } catch (Exception e) { error = "Ha ocurrido una excepcion consultando la base de datos. Contactese con el Webmaster"; throw new Exception(error); } return valorDevolver; }//fin de metodo buscar calle }//fin clase
53
CLASE CLIENTE JURIDICODAO
package com.ug.cisc.erp.cartera.db; import java.util.Vector; import com.ug.cisc.erp.cartera.db.CreateException; import com.ug.cisc.erp.cartera.db.FinderException; import com.ug.cisc.erp.cartera.actions.RegistroclientejuridicoForm; import com.ug.cisc.erp.cartera.entidades.Clientejuridico; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.*; import java.text.SimpleDateFormat; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.RowSetDynaClass; public class clientejuridicoDAO { private Connection con; HttpServletRequest request; String error; //HttpSession session = request.getSession(true); // Constructor public clientejuridicoDAO(Connection con) { this.con = con; } public void addclientejuridico(Clientejuridico clientejuridico) throws CreateException { PreparedStatement ps = null; String sql = "insert into car_clie_juri_dat (codi_clie_pk,ruc_pk,repr_lega,razo_soci,estado) values (?,?,?,?,?)"; try {
54
if (con.isClosed()) { throw new IllegalStateException("error.unexpected"); } ps = con.prepareStatement(sql); ps.setInt(1,clientejuridico.getCodi_clientejuridico_pk()); ps.setString(2,clientejuridico.getruc_pk());//clientejuridico.getruc_pk()); ps.setString(3,clientejuridico.getrepr_legal_clientejuridico()); ps.setString(4,clientejuridico.getrazo_soci_clientejuridico()); ps.setString(5,"A"); if (ps.executeUpdate() != 1) { throw new CreateException("error.create.record"); } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (ps != null) ps.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("error.unexpected"); } } } public void actualizarclientejuridico(RegistroclientejuridicoForm clientejuridico) throws CreateException { PreparedStatement ps = null; String sql = "UPDATE car_clie_juri_dat SET repr_legal=?,razo_soci=? WHERE ruc_pk=?"; try { if (con.isClosed()) { throw new IllegalStateException("error.unexpected"); }
55
ps = con.prepareStatement(sql); /* ps.setString(1,clientejuridico.getrepr_legal_clientejuridico()); ps.setString(2,clientejuridico.getrazo_soci_clientejuridico()); ps.setString(3,clientejuridico.getruc_clientejuridico_pk()); */ if (ps.executeUpdate() != 1) { throw new CreateException("error.create.record"); } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (ps != null) ps.close(); if (con != null) con.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("error.unexpected"); } } } public Clientejuridico buscarclientejuridico(String rucclientejuridico) throws FinderException { PreparedStatement ps = null; ResultSet rs = null; String sql = "SELECT codi_clie_pk,ruc_pk,repr_legal,razo_soci" + "FROM car_clie_juri_dat WHERE ruc_pk = ?"; try { if (con.isClosed()) { throw new IllegalStateException("error.unexpected"); } ps = con.prepareStatement(sql); ps.setString(1,rucclientejuridico); rs = ps.executeQuery();
Clientejuridico clientejuridico = new Clientejuridico();
56
if (rs.next()) { clientejuridico.setCodi_clientejuridico_pk(rs.getInt("codi_clientejuridico_pk")); clientejuridico.setruc_pk(rs.getString("ruc_clientejuridico_pk")); clientejuridico.setrepr_legal_clientejuridico(rs.getString("repr_legal_clientejuridico")); clientejuridico.setrepr_legal_clientejuridico(rs.getString("razo_soci_clientejuridico")); } /*else { throw new ObjectNotFoundException( "error.noencontrado"); }*/ return clientejuridico; } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("error.unexpected"); } finally { try { if (ps != null) ps.close(); if (rs != null) rs.close(); if (con != null) con.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("error.unexpected"); } } } //---------------------------------------------------------------- // find clientejuridico
57
public Vector findclientejuridico(RegistroclientejuridicoForm clientejuridico) throws SQLException, Exception { Vector valorDevolver = new Vector(); try { if (con.isClosed()) { throw new IllegalStateException("error.unexpected"); } String queryString = ("SELECT * FROM car_clie_juri_dat WHERE ruc_pk=?;"); //String queryString = "select * from car_clie_juri_dat WHERE ruc_pk =?;"; //(clientejuridico.getruc_pk()); PreparedStatement statement = con.prepareStatement(queryString); statement.setString(1,clientejuridico.getruc_pk()); // ps.setString(2,desc_clientejuridico); ResultSet unRs= statement.executeQuery(); while (unRs.next()){ Clientejuridico unclientejuridico = new Clientejuridico(); unclientejuridico.setCodi_clientejuridico_pk(unRs.getInt("codi_clie_pk")); unclientejuridico.setruc_pk(unRs.getString("ruc_pk")); unclientejuridico.setrepr_legal_clientejuridico(unRs.getString("repr_lega")); unclientejuridico.setruc_pk(unRs.getString("razo_soci")); valorDevolver.addElement(unclientejuridico); } //cierro la conexion unRs.close(); statement.close(); } catch (SQLException sqle) { error = "SQLException: No se ha podido ejecutar esta petición. Contacte con el webmaster"; throw new SQLException(error); } catch (Exception e) { error = "Ha ocurrido una excepcion consultando la base de datos. Contactese con el Webmaster"; throw new Exception(error); } return valorDevolver; } public ResultSet Listarclientejuridico() throws FinderException { ResultSet rs = null; //ArrayList calleList = new ArrayList(); String sql = "SELECT codi_clie_pk,ruc_pk,repr_legal,razo_soci FROM car_clie_juri_dat WHERE estado='A';"; try {
58
throw new Exception(error); } return valorDevolver; } public ResultSet Listarclientejuridico() throws FinderException { ResultSet rs = null; //ArrayList calleList = new ArrayList(); String sql = "SELECT codi_clie_pk,ruc_pk,repr_legal,razo_soci FROM car_clie_juri_dat WHERE estado='A';"; try {
if (con.isClosed()) { throw new IllegalStateException("error.unexpected"); } Statement ps = con.createStatement(); rs = ps.executeQuery(sql); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("error.unexpected"); } /*finally { try { if (rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("error.unexpected"); } }*/ return rs; } }
59
CLASE CLIENTE NATURALDAO
package com.ug.cisc.erp.cartera.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.http.HttpServletRequest; import com.ug.cisc.erp.cartera.entidades.Clientenatural; public class ClientenaturalDAO { private Connection con; HttpServletRequest request; String error; //HttpSession session = request.getSession(true); // Constructor public ClientenaturalDAO(Connection con) { this.con = con; } public void addClientenatural(Clientenatural clientenatural) throws SQLException, Exception { if (con != null) { try { PreparedStatement updateclientenatural; updateclientenatural = con.prepareStatement("INSERT INTO car_clie_natu_dat (codi_clie_pk,cedu_pk, nomb_natu,cont,estado) VALUES(?,?,?,?,?);"); updateclientenatural.setInt(1, clientenatural.getCodi_cliente()); updateclientenatural.setString(2,clientenatural.getCedu_pk()); updateclientenatural.setString(3, clientenatural.getNomb_natu()); updateclientenatural.setString(4,clientenatural.getCont()); updateclientenatural.setString(5,"A"); updateclientenatural.execute(); } catch (SQLException sqle) { error = sqle.toString();//"SQLException: update failed, possible duplicate entry"; throw new SQLException(error); } } else { error = "Exception: Connection to database was lost."; throw new Exception(error); } }//FIN METODO
60
public void Deleteclientenatural(String cedu_pk) throws SQLException, Exception { if (con != null) { try {
PreparedStatement deleteclientenatural; deleteclientenatural = con.prepareStatement("DELETE FROM car_clie_natu_dat WHERE cedu_pk=?;"); deleteclientenatural.execute(); } catch (SQLException sqle) { error = sqle.toString();//"SQLException: update failed, possible duplicate entry"; throw new SQLException(error); } } else { error = "Exception: Connection to database was lost."; throw new Exception(error); } } public ResultSet findclientenatural(String cedu_pk) throws SQLException, Exception { ResultSet rs = null; try { String queryString = ("SELECT * FROM car_clie_natu_dat WHERE cedu_pk=?;"); PreparedStatement ps = con.prepareStatement(queryString); ps.setString(1,cedu_pk); rs = ps.executeQuery(); } catch (SQLException sqle) { error = "SQLException: No se ha podido ejecutar esta petición. Contacte con el webmaster"; throw new SQLException(error); } catch (Exception e) { error = "Ha ocurrido una excepcion consultando la base de datos. Contactese con el Webmaster"; throw new Exception(error); } return rs; }
61
public void Modclientenatural(String cedu_pk,String nomb_natu,String cont ) throws SQLException, Exception { if (con != null) { try { PreparedStatement updateclientenatural; updateclientenatural = con.prepareStatement( "UPDATE car_clie_natu_dat SET nomb_natu,cont WHERE cedu_pk=?;"); updateclientenatural.setString(1, nomb_natu); updateclientenatural.setString (2, cont); updateclientenatural.execute();
} catch (SQLException sqle) { error = sqle.toString();//"SQLException: update failed, possible duplicate entry";
throw new SQLException(error); } } else { error = "Exception: Connection to database was lost."; throw new Exception(error); } } }
62
CLASE PRINCREDITODAO
package com.ug.cisc.erp.cartera.db; import java.util.Vector; import com.ug.cisc.erp.cartera.db.CreateException; import com.ug.cisc.erp.cartera.db.FinderException; import com.ug.cisc.erp.cartera.actions.RegistroprincreditoForm; import com.ug.cisc.erp.cartera.entidades.Princredito; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Collection; import java.util.Calendar; import java.util.ArrayList; import java.util.Date; import java.text.SimpleDateFormat; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.RowSetDynaClass; public class PrincreditoDAO { private Connection con; HttpServletRequest request; String error; //HttpSession session = request.getSession(true); // Constructor public PrincreditoDAO(Connection con) { this.con = con; } public void addPrincredito(RegistroprincreditoForm princredito) throws CreateException { PreparedStatement ps = null; // Date fechaCreacion = new Date(); // SimpleDateFormat fechaConFormato = new SimpleDateFormat("yyyy/MM/dd"); String sql = "insert into car_kardex_clie_log (codi_kard_clie_pk,codi_clie_pk ,nume_apli) values (?,?,?)";
63
try { if (con.isClosed()) { throw new IllegalStateException("error.unexpected"); } ps = con.prepareStatement(sql); ps.setInt(1,princredito.getcodi_kard_clie_pk() ); ps.setInt(2,princredito.getcodi_clie_pk() ); ps.setInt(3,princredito.getnume_apli() ); if (ps.executeUpdate() != 1) { throw new CreateException("error.create.record"); } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (ps != null) ps.close(); // if (con != null) // con.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("error.unexpected"); } } }
64
public Princredito buscarcliente(int idPrincredito) throws FinderException { PreparedStatement ps = null; ResultSet rs = null; String sql = "SELECT codi_pais_pk,desc_pais" + "FROM car_pais_dat WHERE estado <>'E' AND codi_pais_pk = ?"; try { if (con.isClosed()) { throw new IllegalStateException("error.unexpected"); } ps = con.prepareStatement(sql); ps.setInt(1,idPrincredito); rs = ps.executeQuery(); Princredito unprincredito = new Princredito(); if (rs.next()) { unprincredito.setcodi_clie_pk (rs.getInt("codi_clie_pk")); unprincredito.setcodi_kard_clie_pk(rs.getInt("codi_kard_clie_pk")); unprincredito.setnume_apli(rs.getInt("nume_apli")); unprincredito.settipo_apli(rs.getInt("tipo_apli")); unprincredito.settota(rs.getInt("tota")); unprincredito.setfech_regi(rs.getString("fech_regi")); } /*else { throw new ObjectNotFoundException( "error.noencontrado"); }*/
65
return unprincredito; } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("error.unexpected"); } finally { try { if (ps != null) ps.close(); if (rs != null) rs.close(); if (con != null) con.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("error.unexpected"); } } } public Princredito buscarPrincredito(int idPrincredito) throws FinderException { PreparedStatement ps = null; ResultSet rs = null; String sql = "SELECT codi_pais_pk,desc_pais" + "FROM car_pais_dat WHERE estado <>'E' AND codi_pais_pk = ?"; try { if (con.isClosed()) { throw new IllegalStateException("error.unexpected"); }
66
ps = con.prepareStatement(sql); ps.setInt(1,idPrincredito); rs = ps.executeQuery(); Princredito unprincredito = new Princredito(); if (rs.next()) { unprincredito.setcodi_clie_pk (rs.getInt("codi_clie_pk")); unprincredito.setcodi_kard_clie_pk(rs.getInt("codi_kard_clie_pk")); unprincredito.setnume_apli(rs.getInt("nume_apli")); unprincredito.settipo_apli(rs.getInt("tipo_apli")); unprincredito.settota(rs.getInt("tota")); unprincredito.setfech_regi(rs.getString("fech_regi")); } /*else { throw new ObjectNotFoundException( "error.noencontrado"); }*/ return unprincredito; } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("error.unexpected"); } finally { try { if (ps != null) ps.close(); if (rs != null) rs.close(); if (con != null) con.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("error.unexpected"); } } }
67
public String findprincredito(String princredito ) throws SQLException, Exception { String valorDevolver = null; try { if (con.isClosed()) { throw new IllegalStateException("error.unexpected"); } String queryString = ("SELECT come_calle FROM car_clie_dat WHERE codi_pais_pk=?;"); PreparedStatement statement = con.prepareStatement(queryString); statement.setString(1,princredito); ResultSet unRs= statement.executeQuery(); //Status Unstatus = new Status(); while (unRs.next()){ valorDevolver=unRs.getString("come_calle"); } //cierro la conexion unRs.close(); statement.close(); } catch (SQLException sqle) { error = "SQLException: No se ha podido ejecutar esta petición. Contacte con el webmaster"; throw new SQLException(error); } catch (Exception e) { error = "Ha ocurrido una excepcion consultando la base de datos. Contactese con el Webmaster"; throw new Exception(error); } return valorDevolver; } }
68
CLASE SUCURSAL-CLIENTEDAO
package com.ug.cisc.erp.cartera.db; import java.util.Vector; import com.ug.cisc.erp.cartera.db.CreateException; //import com.ug.cisc.erp.operaciones.dao.DuplicateKeyException; import com.ug.cisc.erp.cartera.db.FinderException; //import com.ug.cisc.erp.operaciones.form.ValidarLoginForm; import com.ug.cisc.erp.cartera.actions.RegistrosucursalclienteForm; import com.ug.cisc.erp.cartera.lista.ListaSucursalcliente; import com.ug.cisc.erp.cartera.entity.Sucursalcliente; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Collection; import java.util.Calendar; import java.util.ArrayList; import java.util.Date; import java.text.SimpleDateFormat; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.RowSetDynaClass; public class SucursalclienteDAO { private Connection con; String error; // Constructor public SucursalclienteDAO(Connection con) { this.con = con; } public void addSucursalcliente(RegistrosucursalclienteForm sucursalcliente) throws SQLException, Exception { String Sql=""; //Variable que sirve para armar la cadena a ejecutar if (this.con != null) { try { Sql = "INSERT INTO CAR_SUCU_CLIE_DAT (NOMB_SUCU,ESTADO,TELE_PRIN,TELE_SECU,FAX,NUME_CALLE,COME_CALLE,DESC_CDLA,CODI_CLIE_PK,CODI_CDLA_PK,CODI_CALLE_PK,CODI_SECT_PK,CODI_PROV_PK)"; Sql = Sql + " VALUES(?,'A',?,?,?,?,?,?,?,?,?,?,?);"; PreparedStatement registro; registro = this.con.prepareStatement(Sql); registro.setString(1, sucursalcliente.getNomb_sucu()); registro.setString(2, sucursalcliente.getTele_prin()); registro.setString(3, sucursalcliente.getTele_secu()); registro.setString(4, sucursalcliente.getFax()); registro.setInt(5, sucursalcliente.getNume_calle()); registro.setString(6, sucursalcliente.getCome_calle());
69
registro.setString(7, sucursalcliente.getDesc_cdla()); registro.setInt(8, sucursalcliente.getCodi_clie_pk()); registro.setInt(9, sucursalcliente.getCodi_cdla_pk()); registro.setInt(10, sucursalcliente.getCodi_calle_pk()); registro.setInt(11, sucursalcliente.getCodi_sect_pk()); registro.setInt(12, sucursalcliente.getCodi_prov_pk()); registro.execute(); } catch (SQLException sqle) { error = sqle.toString();//"SQLException: update failed, possible duplicate entry"; throw new SQLException(error); } } else { error = "Exception: Se perdió la conexión a la Base!."; throw new Exception(error); } } public void actualizarSucursalcliente(RegistrosucursalclienteForm sucursalcliente) throws SQLException, Exception { String Sql=""; //Variable que sirve para armar la cadena a ejecutar if (this.con != null) { try { Sql = "UPDATE CAR_SUCU_CLIE_DAT SET NOMB_SECU_CLIE=?,TELE_PRIN=?,TELE_SECU=?,FAX=?,NUME_CALLE=?,COME_CALLE=?,DESC_CDLA=?,CODI_CLIE_PK=?,CODI_CDLA_PK=?,CODI_CALLE_PK=?,CODI_SECT_PK=?,CODI_PROV_PK=?"; Sql = Sql + " WHERE codi_sucu_clie_pk=?"; PreparedStatement registro; registro = this.con.prepareStatement(Sql); registro.setString(1, sucursalcliente.getNomb_sucu()); registro.setString(2, sucursalcliente.getTele_prin()); registro.setString(3, sucursalcliente.getTele_secu()); registro.setString(4, sucursalcliente.getFax()); registro.setInt(5, sucursalcliente.getNume_calle()); registro.setString(6, sucursalcliente.getCome_calle()); registro.setString(7, sucursalcliente.getDesc_cdla()); registro.setInt(8, sucursalcliente.getCodi_clie_pk());
70
registro.setInt(9, sucursalcliente.getCodi_cdla_pk()); registro.setInt(10, sucursalcliente.getCodi_calle_pk()); registro.setInt(11, sucursalcliente.getCodi_sect_pk()); registro.setInt(12, sucursalcliente.getCodi_prov_pk()); registro.execute(); } catch (SQLException sqle) { error = sqle.toString(); throw new SQLException(error); } } else { error = "Exception: Se perdió la conexión a la Base!."; throw new Exception(error); } } public Sucursalcliente buscarsucursalcliente(int idSucursalcliente) throws FinderException { PreparedStatement ps = null; ResultSet rs = null; String sql = "SELECT codi_sucu_clie_pk,nomb_sucu,TELE_PRIN,TELE_SECU,FAX,NUME_CALLE,COME_CALLE,DESC_CDLA,CODI_CLIE_PK,CODI_CDLA_PK,CODI_CALLE_PK,CODI_SECT_PK,CODI_PROV_PK" + "FROM car_sucu_clie_dat WHERE estado <>'E' AND codi_sucu_clie_pk = ?"; try { if (con.isClosed()) { throw new IllegalStateException("error.unexpected"); } ps = con.prepareStatement(sql); ps.setInt(1,idSucursalcliente); rs = ps.executeQuery(); Sucursalcliente sucursalcliente = new Sucursalcliente(); if (rs.next()) {
71
sucursalcliente.setCodi_sucu_clie_pk (rs.getInt("codi_sucu_clie_pk")); sucursalcliente.setNomb_sucu (rs.getString("nomb_sucu")); sucursalcliente.setTele_prin (rs.getString("tele_prin")); sucursalcliente.setTele_secu (rs.getString("tele_secu")); sucursalcliente.setFax (rs.getString("fax")); sucursalcliente.setNume_calle (rs.getInt("nume_calle")); sucursalcliente.setCome_calle (rs.getString("come_calle")); sucursalcliente.setDesc_cdla (rs.getString("desc_calle")); sucursalcliente.setCodi_clie_pk (rs.getInt("codi_clie_pk")); sucursalcliente.setCodi_cdla_pk (rs.getInt("codi_cdla_pk")); sucursalcliente.setCodi_calle_pk(rs.getInt("codi_calle_pk")); sucursalcliente.setCodi_sect_pk (rs.getInt("codi_sect_pk")); sucursalcliente.setCodi_prov_pk (rs.getInt("codi_prov_pk")); } /*else { throw new ObjectNotFoundException( "error.noencontrado"); }*/ return sucursalcliente; } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("error.unexpected"); } finally { try { if (ps != null) ps.close(); if (rs != null) rs.close(); if (con != null) con.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("error.unexpected"); } }
}
72
public RegistrosucursalclienteForm encontrar(int codigo) throws SQLException, Exception { ResultSet rs = null; RegistrosucursalclienteForm sucursalcliente = new RegistrosucursalclienteForm(); try { String queryString = ("select * from CAR_SUCU_CLIE_DAT where codi_SUCU_CLIE_pk=? and estado = 'A';"); PreparedStatement ps = this.con.prepareStatement(queryString); ps.setInt(1,codigo); rs = ps.executeQuery(); if(rs.next()) { sucursalcliente.setCodi_sucu_clie_pk (rs.getInt("codi_sucu_clie_pk")); sucursalcliente.setNomb_sucu (rs.getString("nomb_sucu")); sucursalcliente.setTele_prin (rs.getString("tele_prin")); sucursalcliente.setTele_secu (rs.getString("tele_secu")); sucursalcliente.setFax (rs.getString("fax")); sucursalcliente.setNume_calle (rs.getInt("nume_calle")); sucursalcliente.setCome_calle (rs.getString("come_calle")); sucursalcliente.setDesc_cdla (rs.getString("desc_calle")); sucursalcliente.setCodi_clie_pk (rs.getInt("codi_clie_pk")); sucursalcliente.setCodi_cdla_pk (rs.getInt("codi_cdla_pk")); sucursalcliente.setCodi_calle_pk(rs.getInt("codi_calle_pk")); sucursalcliente.setCodi_sect_pk (rs.getInt("codi_sect_pk")); sucursalcliente.setCodi_prov_pk (rs.getInt("codi_prov_pk")); } } catch (SQLException sqle) { //error = "SQLException: No se ha podido ejecutar esta petición. Contacte con el webmaster"; error=sqle.toString(); throw new SQLException(error); } catch (Exception e) { error = "Ha ocurrido una excepcion consultando la base de datos. Contactese con el Webmaster"; error=e.toString(); throw new Exception(error); } return sucursalcliente; } public ListaSucursalcliente ListarSucursalcliente() throws SQLException, Exception { ResultSet rs = null; ListaSucursalcliente coleccion = new ListaSucursalcliente(); ///ojo sthefanie corrige los demas campos try {
73
String queryString = "SELECT codi_sucu_clie_pk,nomb_sucu,TELE_PRIN,TELE_SECU,FAX,NUME_CALLE,COME_CALLE,DESC_CDLA,CODI_CLIE_PK,CODI_CDLA_PK,CODI_CALLE_PK,CODI_SECT_PK,CODI_PROV_PK FROM car_secu_clie_dat WHERE estado='A';"; PreparedStatement ps = this.con.prepareStatement(queryString); rs = ps.executeQuery(); while(rs.next()) { RegistrosucursalclienteForm sucursalcliente = new RegistrosucursalclienteForm(); sucursalcliente.setCodi_sucu_clie_pk (rs.getInt("codi_sucu_clie_pk")); sucursalcliente.setNomb_sucu (rs.getString("nomb_sucu")); sucursalcliente.setTele_prin (rs.getString("tele_prin")); sucursalcliente.setTele_secu (rs.getString("tele_secu")); sucursalcliente.setFax (rs.getString("fax")); sucursalcliente.setNume_calle (rs.getInt("nume_calle")); sucursalcliente.setCome_calle (rs.getString("come_calle")); sucursalcliente.setDesc_cdla (rs.getString("desc_cdla")); sucursalcliente.setCodi_clie_pk (rs.getInt("codi_clie_pk")); sucursalcliente.setCodi_cdla_pk (rs.getInt("codi_cdla_pk")); sucursalcliente.setCodi_calle_pk(rs.getInt("codi_calle_pk")); sucursalcliente.setCodi_sect_pk (rs.getInt("codi_sect_pk")); sucursalcliente.setCodi_prov_pk (rs.getInt("codi_prov_pk")); coleccion.agregaItem (sucursalcliente); } } catch (SQLException sqle) { error = "SQLException: No se ha podido ejecutar esta petición. Contacte con el webmaster"; throw new SQLException(error); } catch (Exception e) { error = "Ha ocurrido una excepcion consultando la base de datos. Contactese con el Webmaster"; throw new Exception(error); } return coleccion; }
74
public void eliminar (int codigo) throws SQLException, Exception { String Sql=""; //Variable que sirve para armar la cadena a ejecutar if (con != null) { try { PreparedStatement registro; Sql = "UPDATE CAR_sucu_clie_DAT set estado='E' WHERE codi_sucu_clie_pk=?;"; registro = con.prepareStatement(Sql); registro.setInt(1, codigo); registro.execute(); } catch (SQLException sqle) { error = sqle.toString();//"SQLException: update failed, possible duplicate entry"; throw new SQLException(error); } catch (Exception e) { error = "Ocurrió una Excepcion mientras eliminaba el sucursalcliente."; throw new Exception(error); } } else { error = "Exception: Se perdió la conexión a la Base!."; throw new Exception(error); } } }
75
CLASE CHEQUEBO
package com.ug.cisc.erp.cartera.bo; import java.sql.*; import java.util.*; import com.ug.cisc.erp.cartera.db.ChequeDAO; import com.ug.cisc.erp.cartera.db.CreateException; import com.ug.cisc.erp.cartera.db.PaisDAO; import com.ug.cisc.erp.cartera.util.ConnectionPool; import com.ug.cisc.erp.cartera.actions.RegistroPaisForm; import com.ug.cisc.erp.cartera.actions.RegistroclienteForm; import com.ug.cisc.erp.cartera.base.Base; public class ChequeBo { // defino variablees a usar String error; private ConnectionPool pool; public ChequeBo() { pool = ConnectionPool.getInstance(); } // recuperarTodos public Vector recuperarporfecha (String fecha)throws Exception, SQLException { Vector valorRetornar = null; ChequeDAO chequeDAO = new ChequeDAO(); valorRetornar = chequeDAO.findcheque(fecha); return valorRetornar; } public void actualizar(String codigo) throws CreateException, SQLException { ChequeDAO chequeDAO = new ChequeDAO(); chequeDAO.actualizar(codigo); } }//fin de la clase
76
CLASE CLIENTE BO
package com.ug.cisc.erp.cartera.bo; import java.sql.*; import java.util.*; import com.ug.cisc.erp.cartera.db.ChequeDAO; import com.ug.cisc.erp.cartera.db.ClienteDAO; import com.ug.cisc.erp.cartera.entidades.Clientes; import com.ug.cisc.erp.cartera.util.ConnectionPool; import com.ug.cisc.erp.cartera.actions.RegistroclienteForm; //import com.ug.cisc.erp.cartera.bo.clientejuridicoException; public class clienteBo { //defino variablees a usar String error;
private ConnectionPool pool; public clienteBo() { pool = ConnectionPool.getInstance(); } public void addclienteBo(Clientes cliente) throws ClienteException { Connection con = null; try { con = pool.getConnection(); ClienteDAO clienteDAO = new ClienteDAO(con); clienteDAO.addCliente(cliente); con.commit(); } catch (Exception e) { try { if (con != null) { con.rollback(); throw new ClienteException(e.getMessage()); } } catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); } }finally { try { if (con != null) { con.close(); } } catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); } } }//FIN METODO
77
public Vector recuperarTodos ()throws Exception, SQLException
{ Vector valorRetornar = null; Connection con = null; con = pool.getConnection(); ClienteDAO clienteDAO = new ClienteDAO(con); valorRetornar = clienteDAO.findcalle(); con.close(); return valorRetornar; } public Vector findvendedor ()throws Exception, SQLException { Vector valorRetornar = null; Connection con = null; con = pool.getConnection(); ClienteDAO clienteDAO = new ClienteDAO(con); valorRetornar = clienteDAO.findvendedor(); con.close(); return valorRetornar; } public Vector findempresa ()throws Exception, SQLException { Vector valorRetornar = null; Connection con = null; con = pool.getConnection(); ClienteDAO clienteDAO = new ClienteDAO(con); valorRetornar = clienteDAO.findempresa(); con.close(); return valorRetornar; } public String buscarcodigo ()throws Exception, SQLException { String cod = null; Connection con = null; con = pool.getConnection(); ClienteDAO clienteDAO = new ClienteDAO(con); cod = clienteDAO.buscarseccli(); con.close(); return cod; }
78
public Vector recuperarporfecha (String fecha)throws Exception, SQLException { Vector valorRetornar = null; ChequeDAO chequeDAO = new ChequeDAO(); valorRetornar = chequeDAO.findcheque(fecha); return valorRetornar; } public Vector BuscarclienteBo (String cedula,String ruc)throws Exception, SQLException
{ Vector valorRetornar = null; Connection con = null; con = pool.getConnection(); ClienteDAO unclieDAO = new ClienteDAO(con); //(unaConeccion) valorRetornar = unclieDAO.findclie(cedula,ruc); con.close(); return valorRetornar; } }//fin clase
79
CLASE CLIENTEJURIDICOBO
package com.ug.cisc.erp.cartera.bo; import com.ug.cisc.erp.cartera.base.Base; //import java.util.Iterator; //import java.util.Vector; import java.sql.*; import java.util.*; import com.ug.cisc.erp.cartera.db.clientejuridicoDAO; import com.ug.cisc.erp.cartera.util.ConnectionPool; import com.ug.cisc.erp.cartera.actions.RegistroclientejuridicoForm; import com.ug.cisc.erp.cartera.bo.clientejuridicoException; import com.ug.cisc.erp.cartera.entidades.Clientejuridico;; public class clientejuridicoBo { //defino variablees a usar String error; // Connection con; private ConnectionPool pool; public clientejuridicoBo() { pool = ConnectionPool.getInstance(); } public void addclientejuridicoBo(Clientejuridico unclientejuridico) throws clientejuridicoException { Connection con = null; try { con = pool.getConnection(); clientejuridicoDAO clientejuridicoDAO = new clientejuridicoDAO(con); clientejuridicoDAO.addclientejuridico(unclientejuridico); con.commit(); } catch (Exception e) { try { if (con != null) { con.rollback(); throw new clientejuridicoException(e.getMessage()); } } catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); }
80
}finally { try { if (con != null) { con.close(); } } catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); } } } //--------------------------------------------------------------------- // buscar clientejuridico public Vector BuscarclientejuridicoBo (RegistroclientejuridicoForm clientejuridico)throws Exception, SQLException { Vector valorRetornar = null; Connection con = null; //con = Base.getConexion(); con = pool.getConnection(); clientejuridicoDAO unclientejuridicoDAO = new clientejuridicoDAO(con); valorRetornar = unclientejuridicoDAO.findclientejuridico(clientejuridico); return valorRetornar; } //---------------------------------LISTAR public boolean listarclientejuridico() throws clientejuridicoException { boolean valorRetornar = false; Connection unaConeccion = null; try { // para la conexion unaConeccion = Base.getConexion(); clientejuridicoDAO unclientejuridicoDAO = new clientejuridicoDAO(unaConeccion); //(unaConeccion) unclientejuridicoDAO.Listarclientejuridico(); // valorRetornar = unclientejuridicoDAO.buscarclientejuridico(codi_clientejuridico_pk , ruc_clientejuridico_pk, repr_legal_clientejuridico, razo_soci_clientejuridico); unaConeccion.commit(); return valorRetornar;} catch (Exception e) { try { if (unaConeccion != null) { unaConeccion.rollback(); throw new clientejuridicoException(e.getMessage()); }
81
} catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); } }finally { try { if (unaConeccion != null) { unaConeccion.close(); } } catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); } } return valorRetornar; } ////ACTUALIZAR public void actualizarclientejuridico(RegistroclientejuridicoForm clientejuridico) throws clientejuridicoException { Connection unaConeccion = null; try { unaConeccion = Base.getConexion(); clientejuridicoDAO unclientejuridicoDAO = new clientejuridicoDAO(unaConeccion); //(unaConeccion) unclientejuridicoDAO.actualizarclientejuridico(clientejuridico); unaConeccion.commit(); } catch (Exception e) { try { if (unaConeccion != null) { unaConeccion.rollback(); throw new clientejuridicoException(e.getMessage()); } } catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); }
try { if (unaConeccion != null) { unaConeccion.close(); } } catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); } } }*/ }
82
CLASE TARJETABO
package com.ug.cisc.erp.cartera.bo; import java.sql.*; import java.util.*; import com.ug.cisc.erp.cartera.db.CreateException; import com.ug.cisc.erp.cartera.db.ProcesoTarjetaDAO; import com.ug.cisc.erp.cartera.util.ConnectionPool; import com.ug.cisc.erp.cartera.base.Base; public class ProcesoTarjetaBo { // defino variablees a usar String error; private ConnectionPool pool; public ProcesoTarjetaBo() { pool = ConnectionPool.getInstance(); } // recuperarTodos public Vector recuperarporfecha (String fecha)throws Exception, SQLException { Vector valorRetornar = null; ProcesoTarjetaDAO unProcesoTarjetaDAO = new ProcesoTarjetaDAO(); valorRetornar = unProcesoTarjetaDAO.findtarjeta(fecha); return valorRetornar; } public void actualizar(String codigo) throws CreateException, SQLException { //Connection unaConeccion = null; //try { //Connection con = null; //con = pool.getConnection(); ProcesoTarjetaDAO unProcesoTarjetaDAO = new ProcesoTarjetaDAO(); unProcesoTarjetaDAO.actualizar(codigo); // unaConeccion.commit(); /* } catch (Exception e) { try {
83
if (unaConeccion != null) { unaConeccion.rollback(); throw new PaisException(e.getMessage()); } } catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); } }finally { try { if (unaConeccion != null) { unaConeccion.close(); } } catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); }*/ // } } }//fin de la clase
84
CLASE PRINCREDITOBO
package com.ug.cisc.erp.cartera.bo; import com.ug.cisc.erp.cartera.base.Base; import java.util.Iterator; import java.util.Vector; import java.sql.*; import java.util.*; import com.ug.cisc.erp.cartera.db.PrincreditoDAO; import com.ug.cisc.erp.cartera.util.ConnectionPool; import com.ug.cisc.erp.cartera.actions.RegistroprincreditoForm; import com.ug.cisc.erp.cartera.bo.PrincreditoException; public class PrincreditoBo { //defino variablees a usar String error; // Connection con; private ConnectionPool pool; public PrincreditoBo() { pool = ConnectionPool.getInstance(); } public void addPrincreditoBo(RegistroprincreditoForm Princredito) throws PrincreditoException { // Connection unaConeccion = null; Connection con = null; try { con = pool.getConnection(); PrincreditoDAO unprincreditoDAO = new PrincreditoDAO(con); unprincreditoDAO.addPrincredito(Princredito); con.commit(); } catch (Exception e) { try { if (con != null) { con.rollback(); throw new PrincreditoException(e.getMessage()); } } catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); } }finally { try { if (con != null) { con.close(); }
85
} catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); } } } public String BuscarPrincreditoBo (RegistroprincreditoForm princredito)throws Exception, SQLException { String valorRetornar = null; Connection con = null; con = pool.getConnection(); PrincreditoDAO unPrincreditoDAO = new PrincreditoDAO(con); //(unaConeccion) //desc_pais = desc_pais.replace('*','%'); // valorRetornar = unPrincreditoDAO.findprincredito(princredito.getcome_calle()); return valorRetornar; } /* //---------------------------------LISTAR public boolean listarPais() throws PaisException { boolean valorRetornar = false; Connection unaConeccion = null; try { // para la conexion unaConeccion = Base.getConexion(); PaisDAO unPaisDAO = new PaisDAO(unaConeccion); //(unaConeccion) unPaisDAO.ListarPais(); // valorRetornar = unPaisDAO.buscarPais(codi_pais_pk , desc_pais); unaConeccion.commit(); return valorRetornar;} catch (Exception e) { try { if (unaConeccion != null) { unaConeccion.rollback(); throw new PaisException(e.getMessage()); } } catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); } }finally { try { if (unaConeccion != null) { unaConeccion.close(); } } catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); } } return valorRetornar; }*/
86
////ACTUALIZAR /*public void actualizarPais(RegistroPaisForm pais) throws PaisException { Connection unaConeccion = null; try { unaConeccion = Base.getConexion(); PaisDAO unPaisDAO = new PaisDAO(unaConeccion); //(unaConeccion) unPaisDAO.actualizarPais(pais); unaConeccion.commit(); } catch (Exception e) { try { if (unaConeccion != null) { unaConeccion.rollback(); throw new PaisException(e.getMessage()); } } catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); } }finally { try { if (unaConeccion != null) { unaConeccion.close(); } } catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); } } }*/
87
///ELIMINAR /* public void eliminarPais(RegistroPaisForm pais) throws PaisException { Connection unaConeccion = null; try { unaConeccion = Base.getConexion(); PaisDAO unPaisDAO = new PaisDAO(unaConeccion); //(unaConeccion) unPaisDAO.eliminarPais(pais); unaConeccion.commit(); } catch (Exception e) { try { if (unaConeccion != null) { unaConeccion.rollback(); throw new PaisException(e.getMessage()); } } catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); } }finally { try { if (unaConeccion != null) { unaConeccion.close(); } } catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); } }
}*/
88
CLASEPROCESOTARJETABO
package com.ug.cisc.erp.cartera.bo; import java.sql.*; import java.util.*; import com.ug.cisc.erp.cartera.db.CreateException; import com.ug.cisc.erp.cartera.db.ProcesoTarjetaDAO; import com.ug.cisc.erp.cartera.util.ConnectionPool; import com.ug.cisc.erp.cartera.base.Base; public class ProcesoTarjetaBo { // defino variablees a usar String error; private ConnectionPool pool; public ProcesoTarjetaBo() { pool = ConnectionPool.getInstance(); } // recuperarTodos public Vector recuperarporfecha (String fecha)throws Exception, SQLException { Vector valorRetornar = null; ProcesoTarjetaDAO unProcesoTarjetaDAO = new ProcesoTarjetaDAO(); valorRetornar = unProcesoTarjetaDAO.findtarjeta(fecha); return valorRetornar; } public void actualizar(String codigo) throws CreateException, SQLException { ProcesoTarjetaDAO unProcesoTarjetaDAO = new ProcesoTarjetaDAO(); unProcesoTarjetaDAO.actualizar(codigo); } }//fin de la clase
89
CLASE TIPO_CLIENTEBO
package com.ug.cisc.erp.cartera.bo; import java.sql.Connection; import java.sql.SQLException; import java.util.Vector; import com.ug.cisc.erp.cartera.bo.TipoClienteException; import com.ug.cisc.erp.cartera.actions.RegistroTipoclienteForm; import com.ug.cisc.erp.cartera.base.Base; import com.ug.cisc.erp.cartera.db.TipoclienteDAO; import com.ug.cisc.erp.cartera.util.*; public class TipoclienteBo { //defino variablees a usar String error; // Connection con; private ConnectionPool pool; public TipoclienteBo() { pool = ConnectionPool.getInstance(); } public void addTipoclienteBo(RegistroTipoclienteForm tipocliente) throws TipoClienteException { // Connection unaConeccion = null; Connection con = null; try { con = pool.getConnection(); TipoclienteDAO tipoclienteDAO = new TipoclienteDAO(con); tipoclienteDAO.addTipocliente(tipocliente); con.commit(); } catch (Exception e) { try { if (con != null) { con.rollback(); throw new TipoClienteException(e.getMessage()); } } catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException(sqle.getMessage()); } } finally { try { if (con != null) { con.close(); } } catch (SQLException sqle) { sqle.printStackTrace();
throw new RuntimeException(sqle.getMessage()); } } }
90
// buscar pais /*public Vector BuscarStatusBo (RegistroStatusForm status)throws Exception, SQLException { Vector valorRetornar = null; Connection con = null; //OJO AQUI PUSE ESTO //con = Base.getConexion(); con = pool.getConnection(); StatusDAO unStatusDAO = new StatusDAO(con); //(unaConeccion) //desc_stat = desc_stat.replace('*','%'); valorRetornar = unStatusDAO.findstatus(status); return valorRetornar; } //---------------------------------LISTAR public boolean listarStatus() throws StatusException { boolean valorRetornar = false; Connection unaConeccion = null; try { // para la conexion unaConeccion = Base.getConexion(); StatusDAO unStatusDAO = new StatusDAO(unaConeccion); //(unaConeccion) unStatusDAO.ListarStatus(); unaConeccion.commit(); return valorRetornar;} catch (Exception e) { try { if (unaConeccion != null) { unaConeccion.rollback(); throw new StatusException(e.getMessage()); } } catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); } }finally { try { if (unaConeccion != null) { unaConeccion.close(); } } catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); } } return valorRetornar;
}
91
///ELIMINAR public void eliminarStatus(RegistroStatusForm status) throws StatusException { Connection unaConeccion = null; try { unaConeccion = Base.getConexion(); StatusDAO unStatusDAO = new StatusDAO(unaConeccion); //(unaConeccion) unStatusDAO.eliminarStatus(status); unaConeccion.commit(); } catch (Exception e) { try { if (unaConeccion != null) { unaConeccion.rollback(); throw new StatusException(e.getMessage()); } } catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); } }finally { try { if (unaConeccion != null) { unaConeccion.close(); } } catch (SQLException sqle) { sqle.printStackTrace(); throw new RuntimeException("error.unexpected"); } } }*/ }
92
CLASE LISTATARJETA
package com.ug.cisc.erp.cartera.lista; import java.util.ArrayList; import java.util.Iterator; import com.ug.cisc.erp.cartera.actions.RegistroTarjetaForm; public class ListaTarjeta { private ArrayList lista = new ArrayList(); /*------------------*/ /* CONSTRUCTOR */ /*------------------*/ public ListaTarjeta() { super(); // TODO Auto-generated constructor stub } /*------------------*/ /* METODOS */ /*------------------*/ /* Metodo que agrega un Item a la coleccion, recibe como parametro un objeto costeo */ public void agregaItem(RegistroTarjetaForm tarjeta) { boolean encontro = false; Iterator iterLista = lista.iterator(); if (lista.size() == 0) { lista.add(tarjeta); } else { while (iterLista.hasNext()) { RegistroTarjetaForm tar = (RegistroTarjetaForm)iterLista.next(); if (tar.getCodi_tarj_pk() == tarjeta.getCodi_tarj_pk()) { encontro = true; break; } } if (!encontro) { lista.add(tarjeta); } } }
93
public void eliminaItem(RegistroTarjetaForm tarjeta) {
Iterator iterLista = lista.iterator(); while (iterLista.hasNext()) { RegistroTarjetaForm pai = (RegistroTarjetaForm)iterLista.next(); if (pai.getCodi_tarj_pk() == tarjeta.getCodi_tarj_pk()) { iterLista.remove(); } } } /* Funcion que retorna el tamaño de la coleccion */ public int tamanio(){ return lista.size(); } /* Funcion que retorna la coleccion por medio de un iterador */ public Iterator ObtenerContenido() { //System.out.println(lista.size()); return lista.iterator(); } /* Funcion que retorna el un ArrayList */ public ArrayList ObtenerLista() { return lista; } }
94
TAGS CLASE ACCIONTAGS
package com.ug.cisc.erp.cartera.tags; import java.sql.Connection; import java.sql.SQLException; import java.util.Collection; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.TagSupport; import com.ug.cisc.erp.cartera.util.ConnectionPool; import com.ug.cisc.erp.cartera.db.TagsDAO; public class AccionTags extends TagSupport{ private ConnectionPool pool; public AccionTags() { pool = ConnectionPool.getInstance(); } public int doStartTag() throws JspException{ Connection con = null; try { con = pool.getConnection(); TagsDAO tagsDao = new TagsDAO(con); Collection accionLabel = tagsDao.accionLabel(); Collection accionValue = tagsDao.accionValue(); pageContext.setAttribute("accionLabel",accionLabel); pageContext.setAttribute("accionValue",accionValue); return SKIP_BODY; } catch (Exception e) { throw new JspException ("Error: IOException" + e.getMessage()); } finally { try { if (con != null) con.close(); } catch (SQLException e) { throw new RuntimeException(e.getMessage()); } } } public int doEndTag() throws JspException { return EVAL_PAGE; } }
95
ACTUALIZAR TARJETASACTION
package com.ug.cisc.erp.cartera.actions; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.ug.cisc.erp.cartera.actions.RegistroTarjetaForm; import com.ug.cisc.erp.cartera.bo.TarjetaBo; public class ActualizarTarjetaAction extends Action{
public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { if (isCancelled(request)){ return mapping.findForward("welcome"); } RegistroTarjetaForm tarjetaForm = (RegistroTarjetaForm) form; TarjetaBo tarjetaBo = new TarjetaBo(); tarjetaBo.actualizarTarjeta(tarjetaForm); return mapping.findForward("success"); } }
96
BUSCARCHEQUEACTION
package com.ug.cisc.erp.cartera.actions; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.*; import javax.sql.DataSource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.ug.cisc.erp.cartera.actions.RegistroStatusForm; import com.ug.cisc.erp.cartera.bo.ChequeBo; import com.ug.cisc.erp.cartera.db.ChequeDAO; public class BuscarchequeAction extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String codigo = request.getParameter("codigo"); String cliente = request.getParameter("cliente"); String banco = request.getParameter("banco"); ChequeBo unchequeBo = new ChequeBo(); unchequeBo.actualizar(codigo); return mapping.findForward("success"); } }
97
BUSCARCLIENTEACTION
package com.ug.cisc.erp.cartera.actions; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.*; import javax.sql.DataSource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.ug.cisc.erp.cartera.bo.Tipo_documentoBo; import com.ug.cisc.erp.cartera.db.Tipo_documentoDAO; public class BuscarclienteAction extends Action { public ActionForward execute(
ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { RegistrardebitoForm debitoForm = (RegistrardebitoForm) form; String codigo = request.getParameter("numetran"); String tipotran = request.getParameter("tipotran"); String tipodoc = request.getParameter("menu2"); String numapli = request.getParameter("numeapli"); String codcli = request.getParameter("codigo"); String tota = request.getParameter("valor"); String comentario = request.getParameter("comentario"); Tipo_documentoBo unTipo_documentoBo = new Tipo_documentoBo(); unTipo_documentoBo.addtran(codigo,tipotran,tipodoc,numapli,codcli,tota,comentario); // unProcesoTarjetaBo.actualizar(codigo); return mapping.findForward("success"); } }
98
BUSCARCLIENTEJURIDICOACTION
package com.ug.cisc.erp.cartera.actions; import java.util.Vector; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.ug.cisc.erp.cartera.bo.clientejuridicoBo; public class BuscarclientejuridicoAction extends Action { public ActionForward execute(
ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
RegistroclientejuridicoForm clientejuridicoForm = (RegistroclientejuridicoForm) form;
clientejuridicoBo unclientejuridicoBo = new clientejuridicoBo(); Vector Vectorclientejuridico = unclientejuridicoBo.BuscarclientejuridicoBo(clientejuridicoForm);
request.setAttribute("Vectorclientejuridico",Vectorclientejuridico); return mapping.findForward("success"); }
}
99
BUSCARTARJETAACTION
package com.ug.cisc.erp.cartera.actions; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.*; import javax.sql.DataSource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.ug.cisc.erp.cartera.bo.ProcesoTarjetaBo; import com.ug.cisc.erp.cartera.db.ProcesoTarjetaDAO; public class BuscartarjetaAction extends Action {
public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { //RegistroStatusForm statusForm = (RegistroStatusForm) form; String codigo = request.getParameter("codigo"); ProcesoTarjetaBo unProcesoTarjetaBo = new ProcesoTarjetaBo(); unProcesoTarjetaBo.actualizar(codigo); return mapping.findForward("success"); } }
100
EDITARTARJETAACTION
package com.ug.cisc.erp.cartera.actions; import java.sql.Connection; import java.sql.SQLException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.ug.cisc.erp.cartera.db.TarjetaDAO; import com.ug.cisc.erp.cartera.actions.RegistroTarjetaForm; import com.ug.cisc.erp.cartera.util.ConnectionPool; public class EditarTarjetaAction extends Action { private ConnectionPool pool; Connection con = null; public EditarTarjetaAction(){ pool= ConnectionPool.getInstance(); } public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { try{ con = pool.getConnection(); TarjetaDAO tarjetaDao = new TarjetaDAO(con); int id = Integer.parseInt(request.getParameter("codi_tarj_pk")); RegistroTarjetaForm registroTarjetaForm = new RegistroTarjetaForm ();
101
registroTarjetaForm = tarjetaDao.encontrar(id); request.setAttribute("TarjetaForm", registroTarjetaForm); return mapping.findForward("success"); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("Imposible Obtener Una Conexion!"); } catch (Throwable e) { e.printStackTrace(); //throw new RuntimeException("Se ha producido un error Inesperado."); throw new RuntimeException(e.toString()); } finally { try { if (con != null) con.close(); } catch (SQLException e) { throw new RuntimeException(e.getMessage()); } } } }
102
ELIMINARCLIENTEACTION
package com.ug.cisc.erp.cartera.actions; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.ug.cisc.erp.cartera.bo.clienteBo; public class EliminarclienteAction extends Action {
public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { int codigo = Integer.parseInt(request.getParameter("codigo")); clienteBo unclienteBo = new clienteBo(); unclienteBo.deleteclienteBo(codigo); return mapping.findForward("success"); }
}
103
ELIMINARTARJETAACTION
package com.ug.cisc.erp.cartera.actions; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.ug.cisc.erp.cartera.bo.TarjetaBo; public class EliminarTarjetaAction extends Action{ public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { int id = Integer.parseInt(request.getParameter("codi_tarj_pk")); TarjetaBo tarjetaBo = new TarjetaBo(); tarjetaBo.eliminarTarjeta(id); return mapping.findForward("success"); } }
104
MODIFICACLIENTEACTION
package com.ug.cisc.erp.cartera.actions; import java.sql.Connection; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.ug.cisc.erp.cartera.bo.clienteBo; import com.ug.cisc.erp.cartera.entidades.Clientes; public class ModificarclienteAction extends Action{ String error; public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { clienteBo unclienteBo = new clienteBo(); Clientes uncliente = new Clientes(); String cadena=""; String check=null; int contador=0; //verificar los nombrs de los parametros //String tipocliente = request.getParameter("select"); uncliente.setCodi_clie_pk(Integer.parseInt(request.getParameter("codigo")));
105
check = request.getParameter("cktel"); if(check != null) { if (request.getParameter("cktel").equalsIgnoreCase("cktel")) { uncliente.setTele_prin(request.getParameter("tele_prin")); cadena = "tele_prin=" + uncliente.getTele_prin(); contador++; } } if(request.getParameter("cktelsec") != null) { if (request.getParameter("cktelsec").equalsIgnoreCase("cktelsec")) { if (contador==1) { cadena =cadena + ","; } uncliente.setTele_secu(request.getParameter("telsec")); cadena = cadena + "tele_secu=" + uncliente.getTele_secu(); contador++; } } if(request.getParameter("ckfax") != null) { if (request.getParameter("ckfax").equalsIgnoreCase("ckfax")) { if (contador>=1) { cadena =cadena + ","; }
106
uncliente.setFax(request.getParameter("fax")); cadena = cadena + "fax=" + uncliente.getFax(); contador++; } } if(request.getParameter("ckmail") != null) { if (request.getParameter("ckmail").equalsIgnoreCase("ckmail")) { if (contador>=1) { cadena =cadena + ","; } uncliente.setEmail(request.getParameter("mail")); cadena = cadena + "email='" + uncliente.getEmail() + "'"; contador++; } } // // actualiza ciudad if(request.getParameter("ckciudad") != null) { if (request.getParameter("ckciudad").equalsIgnoreCase("ckciudad")) { if (contador>=1) { cadena =cadena + ","; } uncliente.setCodi_ciud_pk(Integer.parseInt(request.getParameter("menu3"))); cadena = cadena + "codi_ciud_pk=" + uncliente.getCodi_ciud_pk();
107
contador++; } } if(request.getParameter("ckubicacion") != null) { if (request.getParameter("ckubicacion").equalsIgnoreCase("ckubicacion")) {//actualizo la direccion String ubicacion = request.getParameter("GrupoOpciones1"); if (ubicacion.equalsIgnoreCase("calle")) { uncliente.setCodi_calle_pk(Integer.parseInt(request.getParameter("menu2"))); uncliente.setCome_calle(request.getParameter("comen")); if (request.getParameter("numcalle").compareToIgnoreCase("")!=0) { uncliente.setNume_calle(request.getParameter("numcalle")); } else { uncliente.setNume_calle("0"); } //aqui debo concatenar if (contador>=1) { cadena =cadena + ","; } cadena = cadena + "codi_calle_pk=" + uncliente.getCodi_calle_pk(); cadena =cadena + ","; cadena = cadena + "nume_calle=" + uncliente.getNume_calle();
108
cadena =cadena + ","; cadena = cadena + "come_calle='" + uncliente.getCome_calle() + "'"; cadena =cadena + ","; cadena = cadena + "codi_cdla_pk=0"; cadena =cadena + ","; cadena = cadena + "desc_cdla=''"; //contador++; } else { uncliente.setCodi_cdla_pk(Integer.parseInt(request.getParameter("menu1"))); uncliente.setDesc_cdla(request.getParameter("desciula")); //concateno para el update if (contador>=1) { cadena =cadena + ","; } cadena = cadena + "codi_cdla_pk=" + uncliente.getCodi_cdla_pk(); cadena =cadena + ","; cadena = cadena + "desc_cdla='" + uncliente.getDesc_cdla()+"'"; cadena =cadena + ","; cadena = cadena + "codi_calle_pk=0"; cadena =cadena + ","; cadena = cadena + "nume_calle=0"; cadena =cadena + ","; cadena = cadena + "come_calle=''"; } contador++; } } /* actualizo la empresa*/ if(request.getParameter("ckempresa") != null) { if (request.getParameter("ckempresa").equalsIgnoreCase("ckempresa")) { if (contador>=1) {
109
cadena =cadena + ","; } uncliente.setCodi_empr_fk(Integer.parseInt(request.getParameter("empresa"))); cadena = cadena + "codi_empr_fk=" + uncliente.getCodi_empr_fk(); contador++; } } /*actualizo el vendedor*/ if(request.getParameter("ckvendedor") != null) { if (request.getParameter("ckvendedor").equalsIgnoreCase("ckvendedor")) { if (contador>=1) { cadena =cadena + ","; } uncliente.setCodi_vendedor(Integer.parseInt(request.getParameter("vendedor"))); cadena = cadena + "codi_vendedor=" + uncliente.getCodi_vendedor(); contador++; } } /*actualizo el plazo*/ if(request.getParameter("ckplazo") != null) { if (request.getParameter("ckplazo").equalsIgnoreCase("ckplazo")) { if (contador>=1) { cadena =cadena + ","; }
110
uncliente.setPlaz(Integer.parseInt(request.getParameter("plazo"))); cadena = cadena + "plaz=" + uncliente.getPlaz(); contador++; } } /*porcentaje*/ if(request.getParameter("ckporcentaj") != null) { if (request.getParameter("ckporcentaj").equalsIgnoreCase("ckporcentaj")) { if (contador>=1) { cadena =cadena + ","; } uncliente.setSobr_porc(Float.parseFloat(request.getParameter("porcentaj"))); cadena = cadena + "sobr_porc=" + uncliente.getSobr_porc(); cadena =cadena + ","; uncliente.setSobr_mont(Float.parseFloat(request.getParameter("monto"))); cadena = cadena + "sobr_mont=" + uncliente.getSobr_mont(); contador++; } } if(request.getParameter("ckcupo") != null) { if (request.getParameter("ckcupo").equalsIgnoreCase("ckcupo")) { if (contador>=1) { cadena =cadena + ","; } uncliente.setCupo(request.getParameter("cupo")); cadena = cadena + "cupo=" + uncliente.getCupo(); cadena =cadena + ",";
111
uncliente.setSobr_mont(Float.parseFloat(request.getParameter("monto"))); cadena = cadena + "sobr_mont=" + uncliente.getSobr_mont(); contador++; } } /*plazo*/ if (contador>=1) { unclienteBo.updateclienteBo(uncliente,cadena); } return mapping.findForward("success"); } }
112
MOSTRARTARJETASACTION
package com.ug.cisc.erp.cartera.actions; import com.ug.cisc.erp.cartera.util.ConnectionPool; import com.ug.cisc.erp.cartera.db.TarjetaDAO; import com.ug.cisc.erp.cartera.lista.ListaTarjeta; import java.sql.Connection; import java.sql.SQLException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; public class MostrarTarjetasAction extends Action { private ConnectionPool pool; Connection con = null; public MostrarTarjetasAction(){ pool= ConnectionPool.getInstance(); } public ActionForward execute(
ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { try{ con = pool.getConnection(); TarjetaDAO dao = new TarjetaDAO(con); ListaTarjeta tarjeta = dao.ListarTarjeta(); request.setAttribute("listaTarjetas", tarjeta.ObtenerLista()); return mapping.findForward("success"); } catch (SQLException e) { e.printStackTrace();
throw new RuntimeException("Imposible Obtener Una Conexion!");
} catch (Throwable e) { e.printStackTrace();
throw new RuntimeException("Se ha producido un error Inesperado.");
} finally { try { if (con != null) con.close(); } catch (SQLException e) { throw new RuntimeException(e.getMessage()); } } } }
113
REGISTRARCLIENTEACTION
package com.ug.cisc.erp.cartera.actions; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.sql.DataSource; import javax.swing.JFormattedTextField; import java.util.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.ug.cisc.erp.cartera.actions.RegistroclienteForm; import com.ug.cisc.erp.cartera.bo.clienteBo; import com.ug.cisc.erp.cartera.entidades.Clientes; //import com.ug.cisc.erp.cartera.db.ClienteDAO; public class RegistrarclienteAction extends Action { String error; public ActionForward execute(
ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
RegistroclienteForm clienteForm = (RegistroclienteForm) form; clienteBo unclienteBo = new clienteBo(); Clientes uncliente = new Clientes(); String tipocliente = request.getParameter("select"); String ubicacion = request.getParameter("GrupoOpciones1");
114
uncliente.setCodi_tipo_clie_pk(Integer.parseInt(request.getParameter("select"))); uncliente.setCodi_ciud_pk(Integer.parseInt(request.getParameter("menu3"))); uncliente.setCodi_tipo_pago_pk(request.getParameter("tipopago")); uncliente.setCodi_empr_fk(Integer.parseInt(request.getParameter("empresa"))); uncliente.setCodi_vendedor(Integer.parseInt(request.getParameter("vendedor"))); uncliente.setTele_prin(request.getParameter("telprin")); uncliente.setTele_secu(request.getParameter("telsec")); uncliente.setEmail(request.getParameter("mail")); uncliente.setFax(request.getParameter("fax")); //seccion de prueba para formato fecha //FormatoFecha crearformato = new FormatoFecha(); //uncliente.setFech_ulti_comp(crearformato.valueToString(crearformato.stringToValue("12/12/06"))); //request.getParameter("fechault") if (request.getParameter("porcentaj").compareToIgnoreCase("")!=0) { String valor=null; valor=request.getParameter("porcentaj"); uncliente.setSobr_porc(Float.parseFloat(request.getParameter("porcentaj"))); } if (request.getParameter("cupo").compareToIgnoreCase("")!=0) { uncliente.setSobr_mont(Float.parseFloat(request.getParameter("monto"))); uncliente.setCupo(request.getParameter("cupo")); } if (request.getParameter("plazo").compareToIgnoreCase("")!=0) { uncliente.setPlaz(Integer.parseInt(request.getParameter("plazo"))); }
115
if (request.getParameter("montoulti").compareToIgnoreCase("")!=0) { uncliente.setMont_ulti_comp(Float.parseFloat(request.getParameter("montoulti"))); } if (ubicacion.equalsIgnoreCase("calle")) { uncliente.setCodi_calle_pk(Integer.parseInt(request.getParameter("menu2"))); uncliente.setCome_calle(request.getParameter("comen")); if (request.getParameter("numcalle").compareToIgnoreCase("")!=0) { uncliente.setNume_calle(request.getParameter("numcalle")); } else { uncliente.setNume_calle("0"); } } else { uncliente.setCodi_cdla_pk(Integer.parseInt(request.getParameter("menu1"))); uncliente.setDesc_cdla(request.getParameter("desciula")); } unclienteBo.addclienteBo(uncliente); if (tipocliente.equalsIgnoreCase("1")) { return mapping.findForward("success"); //return mapping.findForward("Natural"); } else { return mapping.findForward("Juridico"); } } }
116
REGISTRARCLIENTEACTION
package com.ug.cisc.erp.cartera.actions; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.sql.DataSource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.ug.cisc.erp.cartera.actions.RegistroTipoclienteForm; import com.ug.cisc.erp.cartera.bo.TipoclienteBo; import com.ug.cisc.erp.cartera.db.TipoclienteDAO; public class RegistrarTipoclienteAction extends Action { String error; public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { RegistroTipoclienteForm tipoclienteForm = (RegistroTipoclienteForm) form; TipoclienteBo unTipoclienteBo = new TipoclienteBo(); unTipoclienteBo.addTipoclienteBo((RegistroTipoclienteForm)form); return mapping.findForward("success"); } }
117
BUSCARCHEQUEFORM
package com.ug.cisc.erp.cartera.actions; import java.sql.Date; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; public class BuscarchequeForm extends ActionForm{ private String fecha; private Date tifecha; private int codigo; private String banco; private String estado; public void reset(ActionMapping mapping, HttpServletRequest request) { fecha = null; codigo=0; } public String getEstado() { return estado; } public void setEstado(String estado) { this.estado = estado; } public String getfecha() { return fecha; }
public void setfecha(String fecha) { this.fecha = fecha; } public Date gettifecha() { return tifecha; } public void settifecha(Date tifecha) { this.tifecha = tifecha; } public int getcodigo() { return codigo; } public void setcodigo(int codigo) { this.codigo = codigo; } }
118
REGISTRARCLIENTEFORM
package com.ug.cisc.erp.cartera.actions; import java.sql.Date; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; public class RegistrarcreditoForm extends ActionForm{ private String fecha; private Date tifecha; private int codigo; private String banco; private String estado; public void reset(ActionMapping mapping, HttpServletRequest request) { fecha = null; codigo=0; } public String getEstado() { return estado; } public void setEstado(String estado) { this.estado = estado; } public String getfecha() { return fecha; } public void setfecha(String fecha) { this.fecha = fecha; } public Date gettifecha() { return tifecha; } public void settifecha(Date tifecha) { this.tifecha = tifecha; } public int getcodigo() { return codigo; }
public void setcodigo(int codigo) { this.codigo = codigo; } }
119
REGISTRARDEBITOFORM
package com.ug.cisc.erp.cartera.actions; import java.sql.Date; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; public class RegistrarcreditoForm extends ActionForm{
private String fecha; private Date tifecha; private int codigo; private String banco; private String estado; public void reset(ActionMapping mapping, HttpServletRequest request) { fecha = null; codigo=0; } public String getEstado() { return estado; } public void setEstado(String estado) { this.estado = estado; } public String getfecha() { return fecha; } public void setfecha(String fecha) { this.fecha = fecha; } public Date gettifecha() { return tifecha; } public void settifecha(Date tifecha) { this.tifecha = tifecha; } public int getcodigo() { return codigo; }
public void setcodigo(int codigo) { this.codigo = codigo; } }
120
REGISTROACTIONFORM
package com.ug.cisc.erp.cartera.actions; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import java.util.Date; public class RegistroAccionForm extends ActionForm { private int codigo; private String descripcion; private String usuarioIngreso; private String estado; private Date fechaIngreso = new Date(); private String visualizar="Visualizar"; //Metodo para encerar public void reset(ActionMapping mapping, HttpServletRequest request) { codigo=0; descripcion=null; estado="A"; usuarioIngreso="adriana"; fechaIngreso=new Date(); } public int getCodigo() { return codigo; }
public void setCodigo(int codigo) { this.codigo = codigo; } public String getDescripcion() { return descripcion; } public void setDescripcion(String descripcion) { this.descripcion = descripcion; } public String getEstado() { return estado; } public void setEstado(String estado) { this.estado = estado; } public String getUsuarioIngreso() { return usuarioIngreso; }
121
public void setUsuarioIngreso(String usuarioIngreso) { this.usuarioIngreso = usuarioIngreso; } public Date getFechaIngreso() { return fechaIngreso; } public void setFechaIngreso(Date fechaIngreso) { this.fechaIngreso = fechaIngreso; } public String getVisualizar() { return visualizar; } public void setVisualizar(String visualizar) { this.visualizar = visualizar; } public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if (descripcion==null || descripcion.trim().equals("")){ errors.add("descripcion",new ActionError("registro.error.descripcion")); } return errors; } }
122
REGISTROCLIENTEFORM
package com.ug.cisc.erp.cartera.actions; import java.sql.*; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; public class RegistroclienteForm extends ActionForm{
private int codi_clie_pk; private String stat_clie; private int nume_calle; private String come_calle; private String desc_cdla; private String tele_prin; private String tele_secu; private String fax; private int codi_empr_fk; private String email; private int cupo; private int plaz; private int sobr_porc; private int sobr_mont; private Date fech_ingr; private Date fech_ulti_comp; private int mont_ulti_comp; private int codi_tipo_clie_pk; private int codi_tipo_pago_pk; private int codi_cdla_pk; private int codi_ciud_pk; private int codi_calle_pk; private int codi_vendedor; public void reset(ActionMapping mapping, HttpServletRequest request) { codi_clie_pk=0; stat_clie=null; nume_calle=0; come_calle=null; desc_cdla=null; tele_prin=null; tele_secu=null; fax=null; codi_empr_fk=0; email=null; cupo=0; plaz=0; sobr_porc=0; sobr_mont=0; fech_ingr=null; fech_ulti_comp=null; mont_ulti_comp=0; codi_tipo_clie_pk=0; codi_tipo_pago_pk=0; codi_cdla_pk=0; codi_ciud_pk=0; codi_calle_pk=0; codi_vendedor=0; }
123
public int getCodi_calle_pk() {
return codi_calle_pk; } public void setCodi_calle_pk(int codi_calle_pk) { this.codi_calle_pk = codi_calle_pk; } public int getCodi_cdla_pk() { return codi_cdla_pk; } public void setCodi_cdla_pk(int codi_cdla_pk) { this.codi_cdla_pk = codi_cdla_pk; } public int getCodi_ciud_pk() { return codi_ciud_pk; } public void setCodi_ciud_pk(int codi_ciud_pk) { this.codi_ciud_pk = codi_ciud_pk; } public int getCodi_clie_pk() { return codi_clie_pk; } public void setCodi_clie_pk(int codi_clie_pk) { this.codi_clie_pk = codi_clie_pk; } public int getCodi_tipo_clie_pk() { return codi_tipo_clie_pk; } public void setCodi_tipo_clie_pk(int codi_tipo_clie_pk) { this.codi_tipo_clie_pk = codi_tipo_clie_pk; } public int getCodi_tipo_pago_pk() { return codi_tipo_pago_pk; } public void setCodi_tipo_pago_pk(int codi_tipo_pago_pk) { this.codi_tipo_pago_pk = codi_tipo_pago_pk; } public int getCodi_vendedor() { return codi_vendedor; } public void setCodi_vendedor(int codi_vendedor) { this.codi_vendedor = codi_vendedor; } public String getCome_calle() { return come_calle; } public void setCome_calle(String come_calle) { this.come_calle = come_calle; } public int getCupo() { return cupo; }
124
public void setCupo(int cupo) {
this.cupo = cupo; } public String getDesc_cdla() { return desc_cdla; } public void setDesc_cdla(String desc_cdla) { this.desc_cdla = desc_cdla; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getFax() { return fax; } public void setFax(String fax) { this.fax = fax; } public Date getFech_ingr() { return fech_ingr; } public void setFech_ingr(Date fech_ingr) { this.fech_ingr = fech_ingr; } public Date getFech_ulti_comp() { return fech_ulti_comp; } public void setFech_ulti_comp(Date fech_ulti_comp) { this.fech_ulti_comp = fech_ulti_comp; } public int getMont_ulti_comp() { return mont_ulti_comp; } public void setMont_ulti_comp(int mont_ulti_comp) { this.mont_ulti_comp = mont_ulti_comp; } public int getNume_calle() { return nume_calle; } public void setNume_calle(int nume_calle) { this.nume_calle = nume_calle; } public int getPlaz() { return plaz; } public void setPlaz(int plaz) { this.plaz = plaz; }
125
REGISTROCLIENTE JURIDICOFORM
public int getSobr_mont() {
return sobr_mont; } public void setSobr_mont(int sobr_mont) { this.sobr_mont = sobr_mont; } public int getSobr_porc() { return sobr_porc; } public void setSobr_porc(int sobr_porc) { this.sobr_porc = sobr_porc; } public String getStat_clie() { return stat_clie; } public void setStat_clie(String stat_clie) { this.stat_clie = stat_clie; } public String getTele_prin() { return tele_prin; } public void setTele_prin(String tele_prin) { this.tele_prin = tele_prin; } public String getTele_secu() { return tele_secu; } public void setTele_secu(String tele_secu) { this.tele_secu = tele_secu; } public int getCodi_empr_fk() { return codi_empr_fk; } public void setCodi_empr_fk(int codi_empr_fk) { this.codi_empr_fk = codi_empr_fk; } public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); //esto que viene estaba encomentario /* if (codi_clie_pk==0) { errors.add("codi_pais_pk",new ActionError("registroPais.error.codi_pais_pk")); } */ //if (desc_pais==null || desc_pais.trim().equals("")){ //errors.add("desc_pais",new ActionError("registroPais.error.desc_pais")); //} return errors; } }
126
REGISTROCLIENTEJURIDICO
package com.ug.cisc.erp.cartera.actions;
import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; public class RegistroclientejuridicoForm extends ActionForm{ private int codi_clie_pk;
private String ruc_pk; private String repr_lega; private String razo_soci; public void reset(ActionMapping mapping, HttpServletRequest request) { codi_clie_pk=0; ruc_pk= null; repr_lega= null; razo_soci= null; } public int getcodi_clie_pk() { return codi_clie_pk; } public void setcodi_clie_pk(int codi_clie_pk) { this.codi_clie_pk = codi_clie_pk; } public String getruc_pk() { return ruc_pk; } public void setruc_clientejuridico(String ruc_pk) { this.ruc_pk = ruc_pk; } public String getrepr_lega() { return repr_lega; } public void setrepr_lega(String repr_lega) { this.repr_lega = repr_lega; } public String getrazo_soci() { return razo_soci; } public void setrazo_soci(String razo_soci) { this.razo_soci = razo_soci; } public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); return errors; } }
127
REGISTROPRINCREDITOFORM
package com.ug.cisc.erp.cartera.actions;
import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; public class RegistroprincreditoForm extends ActionForm{ private int codi_clie_pk; private String fech_regi; private double tota; private int codi_kard_clie_pk; private int nume_apli; private int tipo_apli; public void reset(ActionMapping mapping, HttpServletRequest request) { codi_clie_pk=0; fech_regi=null; tota=0; codi_kard_clie_pk=0; nume_apli=0; tipo_apli=0; } public String getfech_regi() { return fech_regi; } public void setfech_regi(String fech_regi) { this.fech_regi = fech_regi; } public int getcodi_clie_pk() { return codi_clie_pk; } public void setcodi_clie_pk(int codi_clie_pk) { this.codi_clie_pk = codi_clie_pk; } public double gettota() { return tota; } public void settota(int tota) { this.tota = tota; } public int getcodi_kard_clie_pk() { return codi_kard_clie_pk; }
128
REGISTROPROVINCIAFORM
public void setcodi_kard_clie_pk(int codi_kard_clie_pk) {
this.codi_kard_clie_pk = codi_kard_clie_pk; } public int getnume_apli() { return nume_apli; } public void setnume_apli(int nume_apli) { this.nume_apli = nume_apli; } public int gettipo_apli() { return tipo_apli; } public void settipo_apli(int tipo_apli) { this.tipo_apli = tipo_apli; }
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = new ActionErrors(); //esto que viene estaba encomentario if (codi_kard_clie_pk==0) {
errors.add("codi_kard_clie_pk",new ActionError("registroprincredito.error.codi_kard_clie_pk"));
} return errors; } }
129
package com.ug.cisc.erp.cartera.actions; import java.util.Date; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; public class RegistroProvinciaForm extends ActionForm{
private int codi_prov_pk; private String desc_prov; private int codi_pais_pk; private String desc_pais; private String usuarioIngreso; private String usuarioModifica; private Date fechaIngreso = new Date(); private Date fechaModifica = new Date(); private String editar="Editar"; private String eliminar="Eliminar"; private String estado="A"; public void reset(ActionMapping mapping, HttpServletRequest request) { codi_prov_pk=0; desc_prov = null; codi_pais_pk=0; usuarioIngreso="ADRIANA"; usuarioModifica="ADRI"; fechaIngreso=new Date(); fechaModifica=new Date(); } public String getEditar() { return editar; } public void setEditar(String editar) { this.editar = editar; } public String getEliminar() { return eliminar; } public void setEliminar(String eliminar) { this.eliminar = eliminar; } public Date getFechaIngreso() { return fechaIngreso; }
130
public void setFechaIngreso(Date fechaIngreso) {
this.fechaIngreso = fechaIngreso; } public Date getFechaModifica() { return fechaModifica; } public void setFechaModifica(Date fechaModifica) { this.fechaModifica = fechaModifica; } public String getUsuarioIngreso() { return usuarioIngreso; } public void setUsuarioIngreso(String usuarioIngreso) { this.usuarioIngreso = usuarioIngreso; } public String getUsuarioModifica() { return usuarioModifica; } public void setUsuarioModifica(String usuarioModifica) { this.usuarioModifica = usuarioModifica; } public int getCodi_pais_pk() { return codi_pais_pk; } public void setCodi_pais_pk(int codi_pais_pk) { this.codi_pais_pk = codi_pais_pk; } public int getCodi_prov_pk() { return codi_prov_pk; } public void setCodi_prov_pk(int codi_prov_pk) { this.codi_prov_pk = codi_prov_pk; } public String getDesc_prov() { return desc_prov; }
131
public void setDesc_prov(String desc_prov) { this.desc_prov = desc_prov; } public String getEstado() { return estado; } public void setEstado(String estado) { this.estado = estado; } public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); //esto que viene estaba encomentario if (desc_prov==null || desc_prov.trim().equals("")){ errors.add("desc_prov",new ActionError("registroProvincia.error.desc_prov")); } if (codi_pais_pk==0){ errors.add("codi_pais_pk",new ActionError("registroProvincia.error.codi_pais_pk")); } return errors; } public String getDesc_pais() { return desc_pais; } public void setDesc_pais(String desc_pais) { this.desc_pais = desc_pais; } }
132
REGISTROTARJETAFORM
package com.ug.cisc.erp.cartera.actions; import java.util.Date; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; public class RegistroTarjetaForm extends ActionForm{ private int codi_tarj_pk; private String nomb_tarj; private int porc_desc_tarj; private int porc_incr_tarj; private int mini_tarj; private String usuarioIngreso; private String usuarioModifica; private Date fechaIngreso = new Date(); private Date fechaModifica = new Date(); private String editar="Editar"; private String eliminar="Eliminar"; private String estado="A"; public void reset(ActionMapping mapping, HttpServletRequest request) { codi_tarj_pk=0; nomb_tarj = null; porc_desc_tarj=0; porc_incr_tarj=0; mini_tarj=0; usuarioIngreso="ADRIANA"; usuarioModifica="ADRI"; fechaIngreso=new Date(); fechaModifica=new Date(); } public String getEditar() { return editar; } public void setEditar(String editar) { this.editar = editar; } public String getEliminar() { return eliminar; }
133
public void setEliminar(String eliminar) { this.eliminar = eliminar; } public Date getFechaIngreso() { return fechaIngreso; } public void setFechaIngreso(Date fechaIngreso) { this.fechaIngreso = fechaIngreso; } public Date getFechaModifica() { return fechaModifica; } public void setFechaModifica(Date fechaModifica) { this.fechaModifica = fechaModifica; } public String getUsuarioIngreso() { return usuarioIngreso; } public void setUsuarioIngreso(String usuarioIngreso) { this.usuarioIngreso = usuarioIngreso; } public String getUsuarioModifica() { return usuarioModifica; } public void setUsuarioModifica(String usuarioModifica) { this.usuarioModifica = usuarioModifica; } public int getCodi_tarj_pk() { return codi_tarj_pk; } public void setCodi_tarj_pk(int codi_tarj_pk) { this.codi_tarj_pk = codi_tarj_pk; } public String getEstado() { return estado; }
134
VALIDARLOGINFORM
package com.ug.cisc.erp.cartera.actions; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; public class ValidarLoginForm extends ActionForm{ String userid; String password;
public void reset(ActionMapping mapping, HttpServletRequest request) { userid= null; password = null; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUserid() { return userid; }
public void setUserid(String userid) { this.userid = userid; } public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if (userid==null || userid.trim().equals("")){ errors.add("userid",new ActionError("validateLogin.error.userid")); }else{ if (password==null || password.trim().equals("")){ errors.add("password",new ActionError("validateLogin.error.password")); } } return errors; } }
134
CAPITULO 2
2. MANUAL DE USUARIO
CUENTAS POR COBRAR
2.1. Funcionalidad del Modulo
Seguridad
Este proyecto provee seguridades de acceso, apenas inicia el programa,
empezara como usuario no autorizado, hacemos click en la imagen de
llave y se cargara la siguiente forma, en la que se podrá llenar los datos
de los diferentes usuarios, en este caso se manejara los perfiles de
administrador, oficial de crédito, usuario de ventas y tesorería, lo cuales
135
tendrán registringida sus opciones a los menús según el rol que estos
desempeñen.
Luego se ingresa para iniciar sesión en usuario se digita el nombre de
usuario y se digita la clave. Y se da un click en el botón de enviar.
136
2.2. Ingreso al Sistema
Esta pantalla va aparecer donde se encontrara información resumida
acerca del módulo de cartera.
ARCHIVOS
Al dar click en el archivo se desplegara un submenús en la parte
derecha, con opciones.
137
Si se da clic en cliente, se cargara en la parte derecha de la pantalla, los
datos de cliente, para poder ingresarlo.
138
Tipo de cliente.-Al dar click en tipo de cliente se va a desplegar una lista
con la opción de jurídico o natural, se debe seleccionar uno de los dos
pues es muy importante y obligatoria esa información.
Teléfono.-Ingresar solo números ingresados, hay campos para teléfono
principal, secundario y fax.
E-mail.-Se debe ingresar el e-mail de la persona ya sea natural o jurídica.
Dirección.-La dirección se divide en dos bloques calles y ciudadela; si se
escoge calle automáticamente se bloqueara ciudadela.
Calle.-Los datos de calle, dar click para escoger la calle e ingresar el
número de calle y el comentario si lo hubiere.
Ciudadela.-Los datos de la ciudadela, dar click para escoger la ciudadela,
y la descripción adicional de la ciudadela.
Empresa.- Al dar click se despliega el nombre de empresa, escoger uno
con la que se trabaja.
Tipo de pago.- Al dar click se despliega por default crédito.
Sobregiro porcentaje.-Se deberá el ingresar el porcentaje que no exceda
el 50 %.
Sobregiro en monto.-Automáticamente se genera según el cupo y el
sobregiro en porcentaje
Cupo.- Aquí se va digitar el cupo con el que cuenta el cliente, solo
números se va a ingresar.
139
Vendedor.- En esta opción se debe escoger el nombre del vendedor al
que se le va a asignar al cliente.
Plazo.-Al hacer click en este menú, se deberá escoger los días plazos en
este caso solo se podrá escoger 30,60 o 90 días
Fecha de la última compra.- Se escogerá la fecha de la última compra.
Monto de crédito.- Aquí se va a digitar en números el monto del crédito
que el cliente va a solicitar.
Al dar click en el botón grabar de pendiendo del tipo de cliente que se
escogió va aparece la siguiente pantalla.
Si se escogió Cliente natural.- Hay que ingresar los siguientes datos.
# de Cédula.- Aquí se va a digitar el numero del cedula del cliente
natural.
Nombre.- Se deberá de digitar el nombre del cliente.
Contacto.- Se deberá de digitar el contacto del cliente.
140
Al dar click en el botón grabar aparecerá la siguiente pantalla.
Cliente Jurídico.- Hay que ingresar los siguientes datos.
Si se escoge la opción cliente jurídico, se tendrá que llenar los siguientes
datos que son obligatorios.
# de RUC.-Se deberá ingresar el número del ruc del cliente jurídico.
Representante legal.- Se deberá digitar el nombre del representante legal
de la empresa.
Razón social.- Se deberá digitar el nombre de la empresa.
141
Al dar click en el botón grabar aparecerá la siguiente pantalla.
Consulta de cliente.-
142
Criterios de búsqueda, se tiene que escoger los tipos de búsqueda
haciendo un click en una de las siguientes opciones, tales como Todos,
Nombre o Identificación.
Si se escoge nombre o identificación, se tiene que digitar ya se el nombre
o el numero de cedula y luego se selecciona el botón consultar.
Para Editar la información de algún cliente, primero se lo tiene que
seleccionar haciendo un click, en el cliente que se quiere actualizar
alguna información, y luego se presiona Editar.
Luego se carga la información, relacionada con el cliente, para que pueda
actualizarse.
143
El código, sale inactivo para que no se puede cambiar, por ninguna
intervención.
Tipo de cliente.-Al dar click en tipo de cliente se va a desplegar una lista
con la opción de jurídico o natural, en el caso que se quiera actualizar el
tipo.
Teléfono.-Si se quiere actualizar los números ingresados, hay campos
para teléfono principal, secundario y fax.
E-mail.-Si se desea actualizar el e-mail de la persona ya sea natural o
jurídico.
Dirección.-Si se desea actualizar la dirección se divide en dos bloques
calles y ciudadela; si se escoge calle automáticamente se bloqueara
ciudadela.
Calle.-Los datos de calle, dar click para escoger la calle e ingresar el
número de calle y el comentario si lo hubiere.
Ciudadela.-Si se desea actualizar, los datos de la ciudadela, dar click para
escoger la ciudadela, y la descripción adicional de la ciudadela.
Empresa.- Si se desea actualizar, el nombre de empresa, escoger uno
con la que se trabaja.
Tipo de pago.- Si se desea actualizar, al dar click se despliega por default
crédito.
144
Sobregiro porcentaje.-Si se desea actualizar, se deberá el ingresar el
porcentaje que no exceda el 50 %.
Sobregiro en monto.-Automáticamente se genera según el cupo y el
sobregiro en porcentaje, según la información actualizada.
Cupo.- Se debe actualizar, si se quiere el cupo con el que cuenta el
cliente, solo números se va a ingresar.
Vendedor.- Si se quiere actualizar, en esta opción se debe escoger el
nombre del vendedor al que se le va a asignar al cliente.
Plazo.-Si se desea actualizar, se hace click en este menú, se deberá
escoger los días plazos en este caso solo se podrá escoger 30,60 o 90
días
Fecha de la última compra.- Si se desea actualizar escoger la fecha de la
última compra.
Monto de crédito.- Si se quiere actualizar, aquí se va a digitar en números
el monto del crédito que el cliente va a solicitar.
Solicitudes
Ingreso de solicitudes.- Al dar clic en ingreso de solicitud aparece la
siguiente pantalla.
145
Doy clic en buscar y se despliega una lista con todos los clientes en
general.
146
Se selecciona uno de los clientes haciendo clic en la identificación, para
que se cargue automáticamente en la página anterior el nombre del
cliente y la cedula.
También se cargara automáticamente la fecha de solicitud.
En estado de solicitud.-Se deberá escoger una opción entre las siguientes
el aprobada, rechazada, tramite o cancelada.
Estado de cobro.- Estará seteado normal, por que es un crédito normal.
Luego se selecciona el botón grabar, para que se almacene la
información.
Consultas de solicitudes.- Al dar clic en solicitudes se desplegara la
siguiente ventana.
147
En esta pantalla se selecciona el criterio de búsqueda, se tiene que
escoger los tipos de búsqueda haciendo un click en una de las siguientes
opciones, tales como Todos, Nombre o Identificación.
Si se escoge nombre o identificación, se tiene que digitar ya sea el
nombre o el numero de cedula y luego se selecciona el botón consultar.
También se puede hacer la búsqueda por medio de la fecha de inicio y
término.- Se debe seleccionar la fecha de inicio y final haciendo clic en el
icono pequeño para que se cargue el calendario y se pueda escoger una
fecha.
Estado.-Se deberá escoger una opción entre las siguientes: aprobada, o
rechazada, trámite o cancelada.
Servicio.- Al hacer clic se desplegara una lista con los siguientes datos:
Todos los servicios y créditos.
Para Editar la información de algún cliente, se tiene que seleccionar la
palabra Editar y en ese momento se podrá actualizar la información.
148
En esta pantalla solo se podrá editar la información de estado de solicitud
y cobro, dando clic en una de ellas.
Luego se selecciona con el Mouse el botón grabar.
Cabe recalcar que si se escoge un cliente que tenga una deuda, luego
que se presento la información para editar, en la parte inferior se podrá
apreciar, las siguientes opciones: facturas, nota de debito y nota de
crédito, se debe escoger una de ellas.
149
Si se escogió facturas se van a desplegar las facturas emitidas, con
sus valores correspondientes y sus fechas de emisión.
Si se selecciona el botón Debitar se presenta la siguiente pantalla:
Valor de la nota.- Se debe digitar el valor en números de la nota de
debito.
Estado de la nota.- que despliega emitida por default.
Comentario.- Que es obligatorio ingresarlo, en letras algún comentario
adjunto a la nota de debito.
Se da clic en grabar y automáticamente se almacena la información.
En el caso que se haya seleccionado el botón acreditar, saldrá la
siguiente pantalla.
150
Solo se podrá ingresar los siguientes datos:
Valor de la nota: Se debe digitar el valor en números de la nota de debito.
Estado de la nota: que despliega emitida por default.
Comentario: que es obligatorio ingresarlo, es solo texto.
Se da clic en grabar y automáticamente se almacena la información.
Si se escoge la opción Nota de Débito.-Se permitirá visualizar todas
las notas de debitos que posea dicho cliente, también se podrá añadir
una nota de crédito y añadir nota de debito.
Nota de Crédito.-Si se quiere visualizar una nota de crédito se da clic en
botón acreditar.
151
Directorio de Tarjetas de Crédito
Aquí se presentaran dos opciones, creación de tarjeta y lista de tarjetas.
Al dar clic en Creación de tarjetas se cargara una pantalla donde se
ingresara los siguientes datos:
Nombre: Aquí se va a digitar los nombres de las tarjetas con las que va a
trabajar la empresa.
Porcentaje descuento: Se digitara el porcentaje de descuentos en
números, se manejar un rango que se aplicara de acuerdo a la tarjeta de
crédito, y dependiendo de la política de la empresa.
152
Porcentaje de incremento: Es el porcentaje en números que se cobra por
la utilización de la tarjeta, también se definirá un rango, según las políticas
de la empresa.
Mínimo: Es el valor mínimo por el cual se puede realizar la compra, se
pondrá un rango según las políticas de la empresa.
Lista de tarjeta
Permita visualizar los todos los datos de la tarjetas existentes.
Si se da clic en editar se permitirá, cambiar la información de las tarjetas.
153
Nombre: Aquí se va a actualizar el nombre de las tarjetas con las que va
a trabajar la empresa
Porcentaje descuento: Se digitara si se desea actualizar, el porcentaje de
descuentos en números, se manejar un rango que se aplicara de
acuerdo a la tarjeta de crédito, y dependiendo de la política de la
empresa.
Porcentaje de incremento: Se digitara si se desea actualizar, el
porcentaje en números que se cobra por la utilización de la tarjeta,
también se definirá un rango, según las políticas de la empresa.
Mínimo: Si se desea actualizar, el valor mínimo por el cual se puede
realizar la compra, se pondrá un rango según las políticas de la empresa.
154
Se da clic en el botón grabar, para actualizar la información.
Si se da clic en eliminar automáticamente se eliminara el registro de esa
tarjeta
TRANSACCIONES.-
Aquí se presentara una opción de cartera vencida, al dar en clic aquí, se
mostrara una pantalla donde se podrá apreciar los interés que ha
generado mi cartera vencida, solo se podrá visualizar información no se la
podrá manipular.
155
PROCESOS.-
Cancelación de Tarjetas de Créditos.- Al hacer click en la opción de
menú cancelación de tarjetas, se cargara la siguiente ventana
Se presentara una ventana, en la que se encontrara un botón buscar al
presionar en dicho botón se desplayará una pantalla
Aquí la búsqueda de las tarjetas de crédito se la realiza por medio de la
fecha con el formato DD/MM/YY y automáticamente se cargara en la
156
pantalla de tarjetas, el código de la transacción, la tarjeta y el cliente a
quien le pertenece la tarjeta.
Depósitos de Cheques Postfechados.- Esta opción permite seleccionar
los cheques que son postfechados y que posteriormente van a ser
depositados.
Al dar click en el menú en la opción procesos y luego en cancelación de
cheques se presentara un pantalla en la cual se debe escoger la opción
buscar para que se presenten en otra ventana los datos de los cheques
que estas post fechado y darles de baja.
157
En dicha búsqueda se la tiene que realizar por medio de la fecha en el
formato DD/MM/AA al ingresarla se le da click en buscar y aparecerán la
lista de los cheques post fechados, al seleccionar estos automáticamente
se llenaran los datos y se procederá a dar de bajas a dichos cheques, en
el momento que se seleccione el botón grabar, aparecerá una nueva
ventana que mostrara el mensaje de Registro Exitoso.
158
REPORTES.-Al dar clic en reportes se presentara las siguientes
opciones.
Directorio de cliente.-
Reporte Cliente natural.- Al dar clic en cliente natural aparecerá la
siguiente pantalla.
Desde: Se da clic en el botón y aparecerá un calendario y se escoge la
fecha inicial.
Hasta: Se da clic en el botón y aparecerá un calendario y se escoge la
fecha final.
Estado: Se selecciona el estado del cliente natural.
Se da clic en el botón buscar.
159
Y automáticamente se presenta la información del cliente natural.
Reporte de cliente jurídico.
Se selecciona por medio de un clic el estado del cliente y luego se
procede a dar clic en el botón buscar.
160
Se presentara el siguiente reporte.
Reporte General de Clientes
161
Desde: Se da clic en el botón y aparecerá un calendario y se escoge la
fecha inicial.
Hasta: Se da clic en el botón y aparecerá un calendario y se escoge la
fecha final.
Estado: Se selecciona el estado del cliente natural.
Se da clic en el botón buscar, y se presenta el siguiente reporte.
162
Reporte de Cheques Postfechados
Clientes Naturales
Desde: Se da clic en el botón y aparecerá un calendario y se escoge la
fecha inicial.
Hasta: Se da clic en el botón y aparecerá un calendario y se escoge la
fecha final.
Estado: Se selecciona el estado del cliente natural.
Se da clic en el botón buscar, presenta el siguiente reporte.
163
Cliente Jurídico
Desde: Se da clic en el botón y aparecerá un calendario y se escoge la
fecha inicial.
164
Hasta: Se da clic en el botón y aparecerá un calendario y se escoge la
fecha final.
Estado: Se selecciona el estado del cliente.
Se da clic en el botón buscar, presenta el reporte.
Reporte de cheques en general
Desde: Se da clic en el botón y aparecerá un calendario y se escoge la
fecha inicial.
Hasta: Se da clic en el botón y aparecerá un calendario y se escoge la
fecha final.
Estado: Se selecciona el estado del cliente.
Se da clic en el botón buscar, presenta el siguiente reporte.
165
REPORTE DE TARJETA
Cliente natural
166
Desde: Se da clic en el botón y aparecerá un calendario y se escoge la
fecha inicial.
Hasta: Se da clic en el botón y aparecerá un calendario y se escoge la
fecha final.
Estado: Se selecciona el estado del cliente.
Se da clic en el botón buscar, presenta el siguiente reporte.
Cliente Jurídico
167
Desde: Se da clic en el botón y aparecerá un calendario y se escoge la
fecha inicial.
Hasta: Se da clic en el botón y aparecerá un calendario y se escoge la
fecha final.
Estado: Se selecciona el estado del cliente.
Se da clic en el botón buscar, presenta el siguiente reporte.
Cliente General
168
Desde: Se da clic en el botón y aparecerá un calendario y se escoge la
fecha inicial.
Hasta: Se da clic en el botón y aparecerá un calendario y se escoge la
fecha final.
Estado: Se selecciona el estado del cliente.
Se da clic en el botón buscar, presenta el siguiente reporte.
Reporte de intereses por mora Clientes Jurídicos Cliente Juridico Al hacer click en este reporte, tenemos que digitar un rango.
169
Desde al dar clic se desplegara un calendario y se escogerá la fecha y
luego se dará click en hasta y desplegara un calendario, se escogerá la
fecha final.
También se puede observar que se encuentra un botón estado en este
se desplegara dos opciones cobrado o pendiente. Cuando tenga llenado
todos los datos que e nombrado anteriormente, se presionara el botón
buscar.
Al presionar este botón buscar emitirá el reporte correspondiente.
170
Clientes Naturales Al hacer click en este reporte, tenemos que digitar un rango.
Desde al dar clic se desplegara un calendario y se escogerá la fecha y
luego se dará click en hasta y desplegara un calendario y se escogerá la
fecha final.
También se puede observar que se encuentra un botón estado en este
se desplegara dos opciones cobrado o pendiente. Cuando tenga llenado
todos los datos que e nombrado anteriormente, se presionara el botón
buscar.
171
Al presionar este botón buscar emitirá el reporte correspondiente.
Porcentaje de Comisión por Vendedor Cliente Jurídico Al hacer click en este reporte, tenemos que digitar un rango.
172
Desde al dar clic se desplegara un calendario y se escogerá la fecha y
luego se dará click en hasta y desplegara un calendario y se escogerá la
fecha final.
También se puede observar que se encuentra un botón estado en este
se desplegara dos opciones cobrado o pendiente. Cuando tenga llenado
todos los datos que e nombrado anteriormente, se presionara el botón
buscar.
Al presionar este botón buscar emitirá el reporte correspondiente.
173
Porcentajes de Comisión por vendedor Cliente Natural Al hacer click en este reporte, tenemos que digitar un rango.
Desde al dar clic se desplegara un calendario y se escogerá la fecha y
luego se dará click en hasta y desplegara un calendario y se escogerá la
fecha final.
También se puede observar que se encuentra un botón estado en este
se desplegara dos opciones cobrado o pendiente. Cuando tenga llenado
todos los datos que e nombrado anteriormente, se presionara el botón
buscar.
174
Al presionar este botón buscar emitirá el reporte correspondiente.
175
UTILERIAS.
Status
Cada uno de los estatus que va a tener todos los módulos.
Al seleccionar del menú la opción status, se cargara una nueva ventana
donde se van a digitar los siguientes datos:
Código: Se pone solo tres caracteres iniciales del estado.
Descripción: Aquí se va a describir el nombre del estado.
Si se da click en limpiar automáticamente se borra toda la información
que se ha digitado.
Al hacer clic en grabar automáticamente se presentara un mensaje de
registro exitoso.
176
Lista Status
Al hacer clic en esta opción, se prestara en la pantalla una lista de todos
los estatus que tiene mi sistema.
Se puede apreciar en dicha pantalla que hay unos links subrayados como
los son Editar y Eliminar
177
Si se realiza una acción sobre el link eliminar automáticamente va a
borrar el dato seleccionado.
Si se realiza una acción sobre el link Editar se mostrara la siguiente
pantalla
178
La cual me permitirá hacer cambios ya sea en el código o descripción
respectivamente. Al realizar los cambios se presionara el botón grabar
para que se realicen los cambios que se han hecho.
Módulo.- Aquí se detallara los diferentes módulos que conforman el ERP.
En utilitarios se hacen clic e la opción en módulos se presentara la
siguiente ventana.
179
Los datos a ingresar en la ventana son:
Código: Se ingresan solo tres caracteres.
Descripción: Se detalla el nombre del modulo
Empresa: Al hacer click en empresa se mostrara una lista de las
empresas, se puede escoger cualquiera, seleccionando con el Mouse.
Si se da click en limpiar automáticamente se borra toda la información
que se ha digitado.
Al hacer clic en grabar automáticamente se presentara un mensaje de
registro exitoso.
Lista Módulos
Al hacer clic en esta opción, se prestara en la pantalla una lista de todos
los módulos que tiene mi sistema.
180
Se puede apreciar en dicha pantalla que hay unos links subrayados como
los son Editar y Eliminar
Si se realiza una acción sobre el link eliminar automáticamente va a
borrar el dato seleccionado.
Si se realiza una acción sobre el link Editar se mostrara la siguiente
pantalla
181
Editar Módulos
La cual me permitirá hacer cambios ya sea en el código, descripción y/o
empresa respectivamente. Al realizar los cambios se presionara el botón
grabar para que se realicen los cambios que se ha hecho.
Ciudad
Al seleccionar la opción del menú ciudad se desplegara una ventana del
lado derecho que me permitirá ingresar todos los datos relacionados con
ciudad.
182
Descripción.- Se escribe el nombre de la ciudad.
Provincia.- Al hacer clic en provincia se desplegara una lista con todas las
provincias, se debe escoge una de ellas.
Cantón.- Al hacer clic en cantón se desplegara una lista con todos los
cantones, se debe escoger uno de ellas.
País.- Al hacer clic en país se desplegara una lista con todos los países,
se debe escoger una de ellos.
Si se da click en limpiar automáticamente se borra toda la información
que se ha digitado.
Al hacer clic en grabar automáticamente se presentara un mensaje de
registro exitoso.
183
Lista Ciudades
Al hacer clic en esta opción, se prestara en la pantalla una lista de todas
las ciudades que tiene mi sistema.
184
Se puede apreciar en dicha pantalla que hay unos links subrayados como
los son Editar y Eliminar
Si se realiza una acción sobre el link eliminar automáticamente va a
borrar el dato seleccionado.
Si se realiza una acción sobre el link Editar se mostrara la siguiente
pantalla
La cual me permitirá hacer cambios ya sea en el código, descripción,
provincia, cantón, y/o país respectivamente. Al realizar los cambios se
presionara el botón grabar para que se realicen los cambios que se ha
hecho.
185
País
Al seleccionar la opción del menú país se desplegara una ventana del
lado derecho que me permitirá ingresar todos los datos relacionados al
país.
Descripción: Se escribirá el nombre del país.
Si se da click en limpiar automáticamente se borra toda la información
que se ha digitado.
186
Al hacer clic en grabar automáticamente se presentara un mensaje de
registro exitoso.
Lista Países
Al hacer clic en esta opción, se prestara en la pantalla una lista de todos
los países que tiene mi sistema.
187
Se puede apreciar en dicha pantalla que hay unos links subrayados como
los son Editar y Eliminar
Si se realiza una acción sobre el link eliminar automáticamente va a
borrar el dato seleccionado.
Si se realiza una acción sobre el link Editar se mostrara la siguiente
pantalla
188
La cual me permitirá hacer cambios ya sea en el código o descripción
respectivamente. Al realizar los cambios se presionara el botón grabar
para que se realicen los cambios que se ha hecho.
Provincia
Al seleccionar la opción del menú país se desplegara una ventana del
lado derecho que me permitirá ingresar todos los datos relacionados con
la provincia.
189
Descripción.- Aquí se digitara el nombre de la provincia
País.- Al hacer clic en país se desplegara una lista con todos los países,
se debe escoger una de ellos.
Si se da click en limpiar automáticamente se borra toda la información
que se ha digitado.
Al hacer clic en grabar automáticamente se presentara un mensaje de
registro exitoso.
Lista Provincias
Al hacer clic en esta opción, se prestara en la pantalla una lista de todas
las provincias que tiene mi sistema.
190
Se puede apreciar en dicha pantalla que hay unos links subrayados como
los son Editar y Eliminar
Si se realiza una acción sobre el link eliminar automáticamente va a
borrar el dato seleccionado.
191
Si se realiza una acción sobre el link Editar se mostrara la siguiente
pantalla
La cual me permitirá hacer cambios ya sea en el código, descripción y/o
países respectivamente. Al realizar los cambios se presionara el botón
grabar para que se realicen los cambios que se ha hecho.
Parroquia
Al seleccionar la opción del menú parroquia se desplegara una ventana
del lado derecho que me permitirá ingresar todos los datos relacionados
con la parroquia.
192
Descripción.- Se digitara la parroquia
Sector.- Al hacer clic en sector se desplegara una lista con todos los
sectores, se debe escoger uno de ellos.
Ciudad.- Al hacer clic en ciudad se desplegara una lista con todas las
ciudades, se debe escoger una de ellos.
Si se da click en limpiar automáticamente se borra toda la información
que se ha digitado.
Al hacer clic en grabar automáticamente se presentara un mensaje de
registro exitoso.
193
Lista Parroquia
Al hacer clic en esta opción, se prestara en la pantalla una lista de todas
las parroquias que tiene mi sistema.
194
Se puede apreciar en dicha pantalla que hay unos links subrayados como
los son Editar y Eliminar
Si se realiza una acción sobre el link eliminar automáticamente va a
borrar el dato seleccionado.
Si se realiza una acción sobre el link Editar se mostrara la siguiente
pantalla
La cual me permitirá hacer cambios ya sea en el código, descripción,
sector y/o ciudad respectivamente. Al realizar los cambios se presionara
el botón grabar para que se realicen los cambios que se ha hecho.
Cantón
Al seleccionar la opción del menú cantón se desplegara una ventana del
lado derecho que me permitirá ingresar todos los datos relacionados con
el cantón.
195
Descripción.- Se escribe el nombre del cantón
Provincia.- Al hacer clic en ciudad se desplegara una lista con todas las
ciudades, se debe escoger una de ellos.
Si se da click en limpiar automáticamente se borra toda la información
que se ha digitado.
Al hacer clic en grabar automáticamente se presentara un mensaje de
registro exitoso.
196
Lista Cantones
Al hacer clic en esta opción, se prestara en la pantalla una lista de todos
los cantones que tiene mi sistema.
197
Se puede apreciar en dicha pantalla que hay unos links subrayados como
los son Editar y Eliminar
Si se realiza una acción sobre el link eliminar automáticamente va a
borrar el dato seleccionado.
Si se realiza una acción sobre el link Editar se mostrara la siguiente
pantalla
La cual me permitirá hacer cambios ya sea en el código, descripción , y/o
provincia respectivamente. Al realizar los cambios se presionara el botón
grabar para que se realicen los cambios que se ha hecho.
198
Tipo de Pago
Al seleccionar la opción del tipo pago parroquia se desplegara una
ventana del lado derecho que me permitirá ingresar todos los datos
relacionados con la tipo de pago.
Descripción.- Aquí se va a digitar en letras el tipo de pago a utilizar
Si se da click en limpiar automáticamente se borra toda la información
que se ha digitado.
Al hacer clic en grabar automáticamente se presentara un mensaje de
registro exitoso.
199
Lista de Tipos de Pagos
Al hacer clic en esta opción, se prestara en la pantalla una lista de todos
los tipos de pagos que tiene mi sistema.
Se puede apreciar en dicha pantalla que hay unos links subrayados como
los son Editar y Eliminar
200
Si se realiza una acción sobre el link eliminar automáticamente va a
borrar el dato seleccionado.
Si se realiza una acción sobre el link Editar se mostrara la siguiente
pantalla
La cual me permitirá hacer cambios ya sea en el código o descripción
respectivamente. Al realizar los cambios se presionara el botón grabar
para que se realicen los cambios que se ha hecho.
SALIR
Al hace click en el menú en salir, se desplegara otra opción de cerrar
sesión.
201