Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Telecomunicaciones
Presentado por:
Lima - Perú
Mayo - 2016
“Tesis presentada a la Universidad Inca
Garcilaso de la Vega Lima – Perú, para obtener
el Título de Ingeniero de Sistemas y Cómputo”
Orientador: Orientador
ii
DEDICATORIA
3
AGRADECIMIENTOS
A mis padres y hermano que hicieron todo el esfuerzo posible para que termine mis
estudios, apoyándome siempre en las buenas y en las malas.
A todos mis tíos, en especial a mi tío Carlos y Alberto que siempre estuvieron presente
orientándome y tratando de solucionar los problemas que se me presentaban en la
universidad.
Al profesor Mg. Raúl Díaz Rojas, por su orientación y dedicación para que este trabajo
cumpla con los objetivos trazados.
A todas aquellas personas que indirectamente me ayudaron para culminar este trabajo
y que muchas veces constituyen un invalorable apoyo.
LISTA DE CUADROS...................................................................................... IX
CAPÍTULO 1: INTRODUCCIÓN.................................................................... 1
1.2 Objetivos.............................................................................................. 2
1.2.1 Objetivo principal.....................................................................................2
1.2.2 Objetivos secundarios ..............................................................................3
vii
6.2 Trabajos futuros .............................................................................. 103
ANEXO I ......................................................................................................... A
ANEXO II ........................................................................................................ C
ANEXO IV ....................................................................................................... F
88
Lista de cuadros
Tabla 4.15 Relación de requisitos funcionales y casos de uso [Fuente: Propia] .......... 52
9
Lista de figuras
Figura 4.2 Caso de uso controlar préstamo autopartes [Fuente: Propia]. .................. 47
Figura 4.4 Caso de uso generar orden devolución [Fuente: Propia]. ......................... 48
Figura 4.6 Caso de uso mantener información de responsables [Fuente: Propia]. ...... 48
Figura 4.8 Diagrama de Casos de Uso de la Aplicación web para registrar y dar
seguimiento a productos prestados entre almacenes [Fuente Propia]. ......................
55
Figura 5.5 Diagrama de Secuencia Generar Orden de Devolución [Fuente Propia]. .... 76
Figura 5.31 Reporte de préstamo de autopartes por fecha [Fuente Propia]. ............ 101
xii
RESUMEN
RAMLE CAR S.A.C. es una empresa cuya actividad principal es la venta de partes,
piezas y accesorios eléctricos para vehículos, la empresa RAMLE CAR S.A.C maneja una
gran cantidad de autopartes en stock en sus diferentes almacenes, es por ello que la
empresa se ve en la necesidad de desarrollar y agilizar los procesos que se realizan en
dicho sector empresarial. El principal problema es el registro y seguimiento de los
productos que se trasladan a manera de préstamo hacia el almacén de otra empresa
que se dedica al mismo rubro de venta de autopartes, por estas razones la aplicación
web desarrollada permite efectuar el registro y seguimiento de préstamos de modo
sistematizado agilizando el proceso, reduciendo los tiempos de registro y manteniendo
un control estricto de los productos pertenecientes a un determinado almacén. Para el
desarrollo de la Aplicación Web se empleó el lenguaje de programación Java a través
del IDE Eclipse, Oracle SQL Developer como base de datos, Framework SPRING MVC y
como metodología RUP. La aplicación web incluye los módulos de registro de
autopartes, registro de préstamos de autopartes, mantenimiento de autopartes, y un
módulo que permite ver reportes de autopartes prestadas.
Palabras Claves
131
313
ABSTRACT
RAMLE CAR S.A.C. is a company whose main activity is the sale of parts and electrical
accessories for vehicles, the company Ramle CAR SAC handles a lot of auto parts in
stock at different stores, which is why the company is the need to develop and
streamline processes performed in that business sector. The main problem is the
recording and tracking of products moving by way of loan to store another company
dedicated to the same category of selling auto parts, for these reasons the Web
Application developed can make the recording and tracking loans so systematic
streamlining the process, reducing registration times and maintaining strict control of
products belonging to a determined store. For the development of the Web Application
Java programming language is used through the Eclipse IDE, Oracle SQL Developer as
a database, MVC and Spring framework as RUP. The web application modules will
record auto parts, auto loan registration, maintenance parts, and a module that allows
you to view reports borrowed parts.
Keywods
web application, store , auto parts, auto parts loan.
141
4
CAPÍTULO 1: INTRODUCCIÓN
Primero: el empleado del almacén destino (almacén de donde se solicita las autopartes
a prestar) se acerca al almacén origen (de donde se prestan las autopartes), con una
solicitud sobre la cantidad de autopartes que se requieren.
Segundo: el empleado del almacén origen, evalúa si las autopartes solicitadas están en
stock disponible (las autopartes tanto en almacén origen como almacén destino deben
existir y tener el mismo código) y la prioridad de las autopartes, si es así se efectúa el
préstamo.
1
Tercero: el empleado del almacén origen tiene la facultad previa coordinación con
gerencia general de brindar o no ciertas autopartes como préstamo, ya sea por su
carácter de urgente o porque su stock es limitado en número.
Cuarto: se genera una orden sobre el préstamo de las autopartes, con lo cual se
acepta la solicitud indicada.
Quinto: el tramite sobre el envió por préstamo del almacén de origen al almacén
destino es inmediato, no pudiendo demorarse más de 8 horas.
Todo este proceso produce pérdida de tiempo y costo, empleando muchas veces
técnicas que son inadecuadas para el manejo de los productos por ejemplo: anotar los
préstamos en un cuaderno, anotarlos en una pizarra, etc. Este método de trabajo es
lento e ineficiente y genera inconvenientes y problemas en el seguimiento de las
autopartes prestadas, es por ello que para implementar esta aplicación web se ha
recopilado información sobre todas las actividades que se llevan a cabo durante la fase
de préstamo de autopartes, todo esto facilitara el seguimiento de préstamos de modo
que se harán más rápidos y los empleados encargados del almacén podrán controlar
de forma estricta las entradas y salidas de las autopartes de un almacén a otro,
manteniendo un inventario actualizado constantemente.
1.2 Objetivos
Desarrollar una aplicación web, que permita el registro y seguimiento del estado de las
autopartes prestados entre almacenes, para la empresa RAMLE CAR S.A.C.
1.2.2 Objetivos secundarios
1.3 Justificación
Los empleados del almacén de RAMLE CAR S.A.C reducen el impacto de los
tiempos de atención en la solicitud de préstamos de autopartes hacia el
almacén destino ubicado en la empresa RC S.A.C.
Debido a que toda la información es digital los archivos físicos que antes se
generaban en cuadernos o Excel desaparecen, siendo el tiempo de registro más
rápido.
Debido a que es una aplicación web, la gerencia de RAMLE CAR podrá conocer
en todo momento y en cualquier lugar la información actualizada sobre el
registro y seguimiento de los productos préstamos.
1.4 Alcances
La aplicación web es utilizada por los usuarios que son los empleados del almacén
de la empresa RAMLE CAR SAC.
Respecto al aplicativo:
Como contenedor web se emplea APACHE TOMCAT 7.0 para el soporte de Servlet
y JSP.
Se identifican a los usuarios tanto principales como secundarios, que son la fuente
de conocimiento sobre los procesos que se llevan a cabo dentro del almacén de
autopartes.
Se realiza el estudio de cuál es el flujo del proceso de préstamo, desde que inicia el
préstamo de la autoparte hasta donde culmina con su devolución.
Se llevan a cabo reuniones con los usuarios con la finalidad de validar la solución
propuesta, ya que se debe satisfacer las necesidades directamente de los usuarios
de la aplicación web, así como verificar que propuesta brinde los resultados
necesarios a la empresa RAMLE CAR.
Se establece todos los diagramas de secuencia para los casos de uso priorizados.
Finalmente en la última parte del trabajo nos referimos a las Conclusiones y Trabajos
Futuros, nos muestra las conclusiones a las que he arribado producto del trabajo
realizado y aquellos futuros trabajos que podrían ayudar a mejorar la solución
implementada y finalmente se encontraran todas las Referencias Bibliográficas
utilizadas para el desarrollo de esta tesis.
CAPÍTULO 2: MARCO CONCEPTUAL
2.1 Almacén
Función de la logística que permite mantener cercanos los productos a los distintos
mercados, al tiempo que puede ajustar la producción a los niveles de la demanda y
facilita el servicio al cliente. (Iglesias, 2012, pág. 3).
Los almacenes aunque son un mal necesario (se inmovilizan recursos) brindan algunas
ventajas, ya que:
La empresa tiene que analizar y valorar el tipo de almacén que necesita en función de
diferentes criterios, no solo teniendo en cuenta aspectos relacionados con la cadena
logística, esta es una decisión estratégica y en ella se deben ver involucrados todos los
departamentos de la empresa, entre los tipos de almacén se tienen:
a. Almacén de materias primas.- Los que suministran los productos que un proceso
productivo ha de transformar. Normalmente se encuentran próximos a los talleres o
centros de producción.
Verificar que se cumplan con las marcas gráficas: Tanto antes de almacenarse,
como en el almacén.
Selección del método para el despacho: Este puede ser por clientes, por
productos o mixto.
Aplicando el primer vocablo sobre el segundo, obtenemos el título del tema que nos
ocupa: " Control de Inventarios ", que en su forma más simple lo podemos definir
como:
Control de Inventarios: Es el dominio que se tiene sobre los haberes o existencias
pertenecientes a una organización.
En la práctica el control de inventarios (CI) no resulta tan fácil como su definición. Por
sí mismo el CI es un sistema que está subordinado a otros sistemas mayores que
tienen como fin último operar para el logro de los objetivos generales de toda la
organización, el sistema CI se puede representar gráficamente como sigue. (Sierra y
Acosta, 2008, pág. 8).
Las organizaciones tienen stocks por diferentes motivos, que pueden ser clasificados
en cinco funciones:
Antes del registro del préstamo se evalúa si los productos solicitados están en
estado óptimo para su despacho.
Esta distribucion se conoce como modelo o arquitectura de tres niveles, en todos los
sistemas de este tipo y ortogonalmente a cada uno de lo niveles comentados, podemos
dividir la aplicacion en tres areas o niveles:
b. Nivel de Negocio.- contiene toda la lógica que modela los procesos del negocio y es
donde se realiza todo el procesamiento necesario para atender a las peticiones del
usuario. Este nivel se comunica con el nivel de presentación, para recibir las
solicitudes y presentar los resultados, y con el nivel de datos, para solicitar al gestor
de base de datos para almacenar o recuperar datos de él.
Una ventaja clave del uso de aplicaciones web es que el problema de gestionar el
códigoen el cliente se reduce drásticamente. Suponiendo que existe un navegador o
explorador estándar en cada cliente, todos los cambios, tanto de interfaz como de
funcionalidad,que se deseen realizar a la aplicación se realizan cambiando el código
que resida en el servidor web. Compárese esto con el coste de tener que actualizar
uno por uno el código en cada uno de los clientes (imaginemos que tenemos 2.000
ordenadores clientes).No sólo se ahorra tiempo porque reducimos la actualización a
una sólo máquina,sino que no hay que desplazarse de un puesto de trabajo a otro (la
empresa puede tener una distribución geográfica amplia). Una segunda ventaja,
relacionada con la anterior, es que se evita la gestión de versiones. Se evitan
problemas de inconsistencia en las actualizaciones, ya que no existen clientes con
distintas versiones de la aplicación. Una tercera ventaja es que si la empresa ya está
usando Internet,no se necesita comprar ni instalar herramientas adicionales para los
clientes. Otra ventaja,es que de cara al usuario,los servidores externos(Internet) e
internos (intranet) aparecen integrados,lo que facilita el aprendizaje y uso. Una última
ventaja,pero no menos importante,es la independencia de plataforma. Para que una
aplicación web se pueda ejecutar en distintas plataformas (hardware y sistema
operativo), sólo se necesita disponer de un navegador para cada una de las
plataformas, y no es necesario adaptar el código de la aplicación a cada una de ellas.
Además,las aplicaciones web ofrecen una interfaz gráfica de usuario independiente de
la plataforma (ya que la plataforma de ejecución es el propio navegador). Una
desventaja,que sin embargo está desapareciendo rápidamente,es que la programación
en la web no es tan versátil o potente como la tradicional. El lenguaje HTML presenta
varias limitaciones, como es el escaso repertorio de controles disponibles para crear
formularios. Por otro lado,al principio las aplicaciones web eran básicamente de solo
lectura:permitían una interacción con el usuario prácticamente nula. Sin embargo, con
la aparición de nuevas tecnologías de desarrollo como Java, JavaScriptyASP,esta
limitación tiende a desaparecer. (Lujan Mora, 2012, págs. 53-54).
En inglés framework se puede traducir como estructura; en el sentido que nos ocupa
un framework sería un marco de trabajo. MVC son las siglas de Modelo-Vista-
Controlador un paradigma de programación de aplicaciones que separa en tres niveles
el trabajo: por un lado el modelo que hace referencia a las aplicaciones empresariales
conocido como la lógica de negocio (por ejemplo el Sistema Gestor de la Base de
Datos); la vista hace referencia al aspecto visual de la aplicación con el usuario; el
controlador finalmente es la parte que controla las acciones del usuario y las comunica
a los dos apartados anteriores. Es, en definitiva, un modelo de trabajo que facilita la
creación de aplicaciones web complejas. Se les conoce también con el nombre de
plantillas. (Sanchez Asenjo, 2011).
2.8.1 El Framework Spring MVC
Una capa de vista, formada de jsp, html, css, etiquetas personalizadas, etc.
Una capa de modelo, que cuenta con las subcapas de servicios, persistencia
(daos, etc.) y dominio (beans). Se forma mediante clases e interfaz Java.
Lo que devuelve cada controlador es un objeto del tipo ModelAndView. Este objeto se
compone de lo siguiente:
Una referencia a la vista destino
El modelo: un conjunto de objetos se utilizan para componer (render) la vista
destino; por ejemplo, un bean Cliente o una lista de beans (clientes) que se ha
obtenido de un DAO. (Cibertec, 2010).
CAPÍTULO 3: MÉTODOS PARA LA CONSTRUCCIÓN DE LA SOLUCIÓN
TECNOLÓGICA
Esta metodología engloba una serie de entregables o artifacts del ciclo de desarrollo
del producto, constituyéndose así como el activo más importante después del producto
final, pues en éstos se documentan los alcances técnicos y funcionales definitivos del
producto desarrollado en el presente proyecto de fin de carrera. (Rueda Chacon,
2006).
Los Casos de Uso son una técnica de captura de requisitos que fuerza a pensar en
términos de importancia para el usuario y no sólo en términos de funciones que sería
bueno contemplar. Se define un Caso de Uso como un fragmento de funcionalidad del
sistema que proporciona al usuario un valor añadido. Los Casos de Uso representan los
requisitos funcionales del sistema.
En RUP los Casos de Uso no son sólo una herramienta para especificar los requisitos
del sistema. También guían su diseño, implementación y prueba. Los Casos de Uso
constituyen un elemento integrador y una guía del trabajo. (Jacobson, Boosch, &
Rambaugh, 2000).
El equilibrio correcto entre los Casos de Uso y la arquitectura es algo muy parecido al
equilibrio de la forma y la función en el desarrollo del producto, lo cual se consigue con
el tiempo. Para esto, la estrategia que se propone en RUP es tener un proceso
iterativo e incremental en donde el trabajo se divide en partes más pequeñas o mini
proyectos. Permitiendo que el equilibrio entre Casos de Uso y arquitectura se vaya
logrando durante cada mini proyecto, así durante todo el proceso de desarrollo. Cada
mini proyecto se puede ver como una iteración (un recorrido más o menos completo a
lo largo de todos los flujos de trabajo fundamentales) del cual se obtiene un
incremento que produce un crecimiento en el producto. (Jacobson, Boosch, &
Rambaugh, 2000).
Figura 3.2 Una iteración RUP [Fuente:
http://cybertesis.urp.edu.pe/urp/2010/chavez_vh/pdf/chavez_vh-TH.3.pdf].
3.1.1.5 Requisitos
Este es uno de los flujos de trabajo más importantes, porque en él se establece qué
tiene que hacer exactamente el sistema que construyamos. En esta línea los requisitos
son el contrato que se debe cumplir, de modo que los usuarios finales tienen que
comprender y aceptar los requisitos que especifiquemos.
El objetivo de este flujo de trabajo es traducir los requisitos a una especificación que
describe cómo implementar el sistema.
El resultado final más importante de este flujo de trabajo será el modelo de diseño.
Consiste en colaboraciones de clases, que pueden ser agregadas en paquetes y
subsistemas, otro producto importante de este flujo es la documentación de la
arquitectura de software, que captura varias vistas arquitectónicas del sistema.
(Jacobson, Boosch, & Rambaugh, 2000).
3.1.1.7 Implementación
a. Planificar qué subsistemas deben ser implementados y en qué orden deben ser
integrados, formando el Plan de Integración.
b. Cada implementador decide en qué orden implementa los elementos del
subsistema.
c. Si encuentra errores de diseño, los notifica.
d. Se prueban los subsistemas individualmente.
e. Se integra el sistema siguiendo el plan. (Rueda Chacon, 2006).
3.1.1.8 Pruebas
Este flujo de trabajo es el encargado de evaluar la calidad del producto que estamos
desarrollando, pero no para aceptar o rechazar el producto al final del proceso de
desarrollo, sino que debe ir integrado en todo el ciclo de vida.
Esta disciplina brinda soporte a las otras disciplinas. Sus objetivos son:
3.1.1.9 Despliegue
El objetivo de este flujo de trabajo es producir con éxito distribuciones del producto y
distribuirlo a los usuarios. Las actividades implicadas incluyen:
a. Probar el producto en su entorno de ejecución final.
b. Empaquetar el software para su distribución.
c. Distribuir el software.
d. Instalar el software.
e. Proveer asistencia y ayuda a los usuarios.
f. Formar a los usuarios y al cuerpo de ventas.
g. Migrar el software existente o convertir bases de datos.
Por último podemos considerar las relaciones de trazabilidad entre artefactos del
proyecto. (Rueda Chacon, 2006).
a. Análisis de Requisitos
La ficha está formada por un nombre, que suele ser el del caso de uso, posee una
breve descripción (generalmente en vista usuario, es decir, que hace de forma
intuitiva, no como), una precondición que debe cumplir antes de iniciarse, una
postcondición que debe cumplir al terminar si termina correctamente, un flujo
normal que sigue el sistema en caso de que todo vaya correctamente y un flujo
alternativo en caso de que haya cualquier problema. El resto de campos son
opcionales. Después será necesario realizar lo que se conoce como Diagrama de
Robustez, el cual pertenece al proceso Iconix y tampoco forma parte del UML. Así
pues se establece el siguiente flujo: (Yaccherima Espin, 2011).
En esta fase se proceden a realizar los diagramas de secuencia, los cuales derivan
directamente de las fichas de caso de uso. Obsérvese como, los diagramas de
secuencia se relacionan con fichas de caso de uso que se relacionan con casos de
uso que se relacionan con requisitos. Esto implica que una vez finalizado el diseño,
tras refinar nuevamente el diagrama de clases, podremos verificarlo directamente
gracias a este factor de trazabilidad, y prepararnos para la siguiente fase.
(Yaccherima Espin, 2011).
d. Implementación
a. Las Reuniones
Se obtendrá además en esta reunión un Sprint Backlog, que es una lista de tareas
y que es el objeto más importante del Sprint.
Seguimiento del Sprint, en esta fase se hacen reuniones diarias en las que tres
preguntas principales para evaluar el avance de las tareas serán: ¿Qué trabajo se
realizó desde la reunión anterior?, ¿Qué trabajo se hará hasta una nueva reunión?
y inconvenientes que han surgido y que hay que solucionar.
Revisión del Sprint, cuando finaliza el Sprint se realiza una revisión del incremento
que se ha generado, se presentaran los resultados finales y una demo o versión.
(Scrum Body, 2016).
b. Los Roles
El Product Owner o dueño del producto, es el responsable desde el punto de vista
del negocio.
a. El Product Backlog, Es el lugar que contiene los requisitos del cliente priorizados y
estimados. El Product Backlog está gestionado por el Product Owner y usa
lenguaje de negocio.
b. El Sprint Backlog, Es la selección de requisitos del Product Backlog negociados
para el Sprint y que se ha descompuesto en tareas por el equipo para expresar los
requisitos del cliente en un lenguaje técnico.
c. Incremento, Parte añadida o desarrollada en un Sprint, es una parte terminada y
totalmente operativa. (Trigas Gallego).
Documentación de la metodología
Conocimiento de la metodología
Quien desarrolla la aplicación web deberá tener un buen entendimiento y
conocimiento de la metodología utilizada para la solución al problema, este
criterio es muy importante para la valoración ya que muchas veces la
metodología de desarrollo es importante para seguir todas las etapas del
desarrollo del software; desde el inicio hasta su entrega final.
Cada metodología tiene sus propias fases algunas pueden ser simples o
complejas, la metodología que se adapte más a las etapas de requerimientos
análisis diseño e implementación, será la que mayor valoración tenga para
nuestro trabajo.
Documentación de la metodología 3 2 2
Conocimiento de la metodología 3 1 1
Puntuación total 21 14 16
Distribuidor, es la persona que traslada los productos hacia las agencias para
envíos a provincias, o para entrega de productos prestados.
2- Actor: Distribuidor.
2- Actor: Almacenero.
2- Actor: Vendedor.
a. Requisitos funcionales
Las diversas autopartes que salen del almacén en calidad de préstamo deben estar
almacenados en la base de datos para establecer su control al momento de efectuar el
préstamo, el Usuario directo del sistema en este caso Encargado debe de realizar el
seguimiento de las autopartes prestadas, esto incluye saber el almacén de origen
(donde sale un producto), el almacén de destino (donde se recibe un producto) la
fecha, los responsables del préstamo; para luego agregar las autopartes prestadas con
la cantidad solicitada y de esta manera se pueda grabar en el sistema.
Cada vez que un determinado almacenero en este caso Empleado envié los productos
del almacén de origen donde realiza el préstamo hacia el almacén de destino donde se
recibe el préstamo, este deberá mostrar el producto que se lleva al otro almacén así el
Usuario del sistema podrá registrar el préstamo, de esta forma los que intervienen
directamente con el manejo de las autopartes deben estar registrados en el sistema de
tal manera que se pueda saber quién se llevó una determinada autoparte y en qué
fecha, y del mismo modo al Usuario directo del sistema, de este manera tendremos
noción de los Responsables directos en el movimiento de las autopartes prestadas.
b. Requisitos no funcionales
Requisitos de rendimiento
Req1: Recursos
Los Recursos de rendimiento de consumo del sistema, deben ser mínimos debido a
que no se necesita software extra. El sistema en el equipo cliente debe ser soportado
por un equipo Pentium IV, de 1 Gb de memoria RAM, como mínimo para que agilicen
los procesos.
Requisitos de desarrollo
Req1: Plataforma
El sistema en el entorno del usuario debe ser soportado por cualquier equipo que
tenga instalado Microsoft Windows XP o Versiones siguientes.
Otros requisitos
Req1: Seguridad
El acceso al sistema debe ser seguro, por tanto se requiere la identificación del
usuario y el ingreso de un password.
Req2: Mantenibilidad
El sistema debe ser modular y orientado a objetos para facilitar el mantenimiento y las
futuras ampliaciones de acuerdo a las necesidades cambiantes.
Req3: Fiabilidad
El Sistema debe comportarse consistentemente, sin perder información y respondiendo
de la misma forma ante pedidos iguales.
Req4: Impresiones
Las impresiones deben ser realizadas en formato estándares pdf.
a. Actores
b. Casos de uso
A continuación se detalla una relación de casos de uso que tienen como punto de
partida los requerimientos que se listaron anteriormente.
1. Registrar Usuario.
2. Controlar Préstamo Autoparte.
3. Mantener Información de Responsables.
4. Generar Orden de Devolución.
5. Emitir Reportes.
6. Ingreso al Sistema.
b. Ingreso al sistema
d. Registrar Usuario
f. Emitir reporte
2- Actor: Usuario.
3- Descripción: El caso de uso es iniciado por el usuario, quien es responsable de
realizar el Control de Préstamo de Autopartes a otro almacén, el control de
préstamo debe realizarse teniendo en cuenta el código de producto, la
cantidad, usuario, responsable, etc.
2- Actor: Usuario.
2- Actor: Usuario.
2- Actor: Usuario.
2- Actor: Usuario.
2- Actor: Encargado.
2- Actor: Supervisor.
2- Actor: Supervisor.
2- Actor: Supervisor.
1 Registrar Usuario.
Controlar Préstamo de
Realizar seguimiento de 2 Autoparte.
productos prestados.
Generar Orden de
4 devolución.
1 Registrar Usuario.
Registrar información de los
Mantener Información de
responsables del préstamo.
3 Responsables.
Controlar Préstamo de
2 Autoparte.
Generar orden de devolución de
los productos. Generar Orden de
4 devolución.
Después de detallar la relación de los requerimientos con sus respectivos casos de uso
procederemos a establecer la prioridad de los casos de uso de acuerdo a su
importancia dentro del sistema. Considere la máxima prioridad con el mayor valor
asociado.
5 Ingreso al Sistema
3 Registrar Usuario.
1 Emitir Reportes.
Mantener Usuario.
Registrar Usuario.
Modificar Registro de Usuario.
Registrar Responsables.
Modificar Información de
Mantener Información de Responsables.
Responsables.
4.1.5 Prototipos
Descripción: El caso de uso es iniciado por el jefe de almacén, quien es responsable de realizar el
pedido de productos al proveedor de autopartes, para realizar el pedido de autopartes se debe tener en
cuenta el código de producto, la cantidad, fecha de ejecución, fecha de entrega.
Activación: El caso de uso se activa cuando el jefe de almacén elige la opción Realizar Pedido de
Autopartes en el menú del sistema.
1.
Se carga la ventana realizar pedido.
2.
El jefe de almacén ingresa la solicitud de 2.1 El sistema muestra un mensaje solicitando el
pedido de nuevas autopartes. llenado correcto de los datos.
3.
El sistema envía los datos ingresados del 3.1 Si hay alguna falla en el tipo de datos el
pedido de autopartes a la base de datos del sistema muestra un mensaje de error.
sistema.
4.
El sistema almacena la información en la
base de datos.
5.
El sistema envía un mensaje al jefe de 5.1 El jefe de almacén cancela la operación
almacén con respecto al almacenamiento Controlar Préstamo de Producto.
satisfactorio de la información.
Precondiciones: El jefe almacén debe estar conectado al sistema con su nombre de usuario y password.
Postcondiciones: Los datos del pedido han sido almacenados en la base de datos del sistema.
Puntos de extensión:
Observaciones y datos:
Caso de uso: Controlar producto.
Descripción: El caso de uso es iniciado por el jefe de almacén, supervisor o encargado quienes se
encargan de registrar y dar seguimiento a las autopartes prestadas del almacén origen al almacén destino.
Activación: El caso de uso se activa cuando el jefe de almacén, el supervisor o encargado elige la opción
Controlar autopartes en el menú del sistema.
1.
Se carga la ventana realizar pedido.
2.
El jefe de almacén, encargado o supervisor 2.1 El sistema muestra un mensaje solicitando el
registra mantiene y actualiza información llenado correcto de los datos.
sobre los préstamos de autopartes.
3.
El sistema envía los datos ingresados del 3.1 Si hay alguna falla en el tipo de datos el
registro mantenimiento de autopartes a la sistema muestra un mensaje de error.
base de datos del sistema.
4.
El sistema almacena la información en la
base de datos.
5.
El sistema envía un mensaje al jefe de 5.1 El jefe de almacén, supervisor o encargado
almacén encargado o supervisor con cancela la operación Controlar Producto.
respecto al almacenamiento satisfactorio de
la información.
Precondiciones: El jefe almacén, encargado o supervisor deben estar conectados al sistema con su
nombre de usuario y password.
Postcondiciones: Los datos del pedido han sido almacenados en la base de datos del sistema.
Puntos de extensión:
Observaciones y datos:
60
Caso de uso: Distribuir producto.
Actor: Distribuidor.
Descripción: El caso de uso es iniciado por distribuidor, quien se encarga conducir y llevar las autopartes
hacia los clientes que han comprado autopartes.
Activación: El caso de uso se activa cuando el distribuidor elige la opción distribuir producto en el menú
del sistema.
1.
Se carga la ventana distribuir producto.
2.
El distribuidor ingresa la solicitud de 2.1 El sistema muestra un mensaje solicitando el
autopartes requeridas por el cliente llenado correcto de los datos.
3.
El sistema envía los datos ingresados sobre 3.1 Si hay alguna falla en el tipo de datos el
la distribución y envio de autopartes al sistema muestra un mensaje de error.
cliente, a la base de datos del sistema.
4.
El sistema almacena la información en la
base de datos.
5.
El sistema envía un mensaje al distribuidor 5.1 El jefe distribuidor cancela la operación
con respecto al almacenamiento Controlar Producto.
satisfactorio de la información.
Precondiciones: El distribuidor debe estar conectado al sistema con su nombre de usuario y password.
Postcondiciones: Los datos de las autopartes distribuidas a los clientes han sido almacenados en la base
de datos del sistema.
Puntos de extensión:
Observaciones y datos:
61
Caso de uso: Solicitar producto.
Actor: Almacenero.
Descripción: El caso de uso es iniciado por almacenero, quien se encarga solicitar las autopartes
del almacén de origen para que sean llevadas y conducidas al área de ventas.
Activación: El caso de uso se activa cuando el almacenero elige la opción solicitar producto en el menú
del sistema.
1.
Se carga la ventana solicitar producto.
2.
El almacenero ingresa en el sistema la 2.1 El sistema muestra un mensaje solicitando el
autoparte solicitada por el área de ventas. llenado correcto de los datos.
3.
El sistema envía los datos ingresados sobre 3.1 Si hay alguna falla en el tipo de datos el
búsqueda de autopartes, a la base de datos sistema muestra un mensaje de error.
del sistema.
4.
El sistema confirma la existencia de las
autopartes solicitadas
5.
El sistema envía un mensaje al almacenero 5.1 El jefe almacenero cancela la operación
con respecto al almacenamiento solicitar prestamo
satisfactorio de la información.
Precondiciones: El almacenero debe estar conectado al sistema con su nombre de usuario y password.
Postcondiciones: Los datos de las autopartes solicitadas han sido almacenados en la base de datos del
sistema.
Puntos de extensión:
Observaciones y datos:
62
Caso de uso: Realizar venta.
Actor: Vendedor.
Descripción: El caso de uso es iniciado por el vendedor, quien se encarga de vender las autopartes a
loso clientes.
Activación: El caso de uso se activa cuando el vendedor elige la opción realizar ventas en el menú del
sistema.
1.
Se carga la ventana realizar venta de
producto.
2.
El vendedor ingresa en el sistema las 2.1 El sistema muestra un mensaje solicitando el
autopartes y las cantidades a vender, asi llenado correcto de los datos.
como el nombre del cliente.
3.
El sistema envía los datos ingresados el 3.1 Si hay alguna falla en el tipo de datos el
registro de ventas de autopartes, a la base sistema muestra un mensaje de error.
de datos del sistema.
4.
El sistema almacena la información en la
base datos y emite una boleta o factura
5.
El sistema envía un mensaje al almacenero 5.1 El vendedor cancela la operación realizar
con respecto al almacenamiento venta.
satisfactorio de la información.
Precondiciones: El vendedor debe estar conectado al sistema con su nombre de usuario y password.
Postcondiciones: Los datos de las autopartes vendidas han sido almacenados en la base de datos del
sistema.
Puntos de extensión:
Observaciones y datos:
63
5.1.2 Casos de uso del sistema
Descripción: El caso de uso es iniciado por el supervisor o encargado, quien es responsable de realizar
el Control de Préstamo de Autopartes a otro almacén, el control de préstamo debe realizarse teniendo en
cuenta el código de producto, la cantidad, usuario, responsable, etc.
Activación: El caso de uso se activa cuando el Encargado elije la opción Controlar Préstamo de
Autopartes en el menú del sistema.
1.
Se carga la ventana Control de Préstamo.
2.
El supervisor o encargado ingresa la 2.1 El sistema muestra un mensaje solicitando el
información del registro del préstamo o llenado correcto de los datos.
mantenimiento, esta incluye el producto,
cantidad, responsables, fecha, almacén de
origen, almacén de destino.
3.
El sistema envía los datos ingresados del 3.1 Si hay alguna falla en el tipo de datos el
préstamo o modificación del producto a la sistema muestra un mensaje de error.
base de datos del sistema.
4.
El sistema almacena la información en la
base de datos.
5.
El sistema envía un mensaje al supervisor o 5.1 El supervisor o encargado cancela la
encargado con respecto al almacenamiento operación Controlar Préstamo de Producto.
satisfactorio de la información.
Precondiciones: El supervisor o encargado debe estar conectado al sistema con su nombre de usuario y
password.
Postcondiciones: Los datos del control de préstamo de Autopartes han sido almacenados en la base de
datos del sistema.
Puntos de extensión:
Observaciones y datos:
64
Caso de uso: Registrar Préstamo de Autopartes.
Descripción: El caso de uso es iniciado por el Supervisor o Encargado, quien es responsable de realizar
el registro de préstamo de Autopartes a otro almacén, se debe tener en cuenta el código de producto,
descripción, para proceder al registro.
Activación: El caso de uso se activa cuando el Supervisor o Encargado elije la opción Registrar Préstamo
de autopartes en el menú del sistema.
1.
Se carga la ventana Registrar Préstamo de
Autoparte.
2.
El supervisor o encargado ingresa la 2.1 El sistema muestra un mensaje solicitando el
información del registro del préstamo la llenado correcto de los datos.
cual incluye el producto, cantidad,
responsable, fecha, almacén de origen
almacén de destino.
3.
El sistema envía los datos ingresados del
préstamo de las autopartes a la base de
datos del sistema.
4.
El sistema almacena la información en la
base de datos.
5.
El sistema muestra la interface para un 5.1 El Usuario cancela la operación Registrar
nuevo préstamo y genera el código de Préstamo de Autopartes.
préstamo de manera automática.
Precondiciones: El Supervisor o Encargado, debe estar conectado al sistema con su nombre de usuario
y password.
Postcondiciones: Los datos del registro del préstamo de las autopartes han sido almacenados en la base
de datos del sistema.
Puntos de extensión:
Observaciones y datos:
65
Caso de uso: Mantener Préstamo de Autopartes.
Activación: El caso de uso se activa cuando el Supervisor o Encargado elije la opción Mantener Préstamo
de Autopartes en el menú del sistema.
1.
Se carga la ventana Mantener Préstamo de
Autopartes.
2.
El supervisor o encargado ingresa la 2.1 El sistema muestra un mensaje solicitando el
información concerniente a la modificación llenado correcto de los datos.
o eliminación del préstamo, esta es por
código de préstamo o por fecha de
préstamo.
3.
El sistema envía los datos sobre la
modificación o eliminación del préstamo de
las autopartes a la base de datos del
sistema.
4.
El sistema almacena la información de
mantenimiento en la base de datos.
5.
El sistema muestra la interface para un 5.1 El supervisor o encargado cancela la
nuevo préstamo y genera el código de operación Mantener Préstamo de
préstamo de manera automática. Autopartes.
Precondiciones: El supervisor o encargado debe estar conectado al sistema con su nombre de usuario y
password.
Postcondiciones: Los datos del mantenimiento de préstamo de producto han sido almacenados en la
base de datos del sistema.
Puntos de extensión:
Observaciones y datos:
66
Caso de uso: Controlar Stock de Préstamo de Autopartes.
Descripción: El caso de uso es iniciado por el supervisor o encargado, quien es responsable de realizar
el control de stock de préstamo de autopartes, deberá manejar el stock de las autopartes prestados de
manera actualizada, indicando el inventario de los mismos.
Activación: El caso de uso se activa cuando el supervisor o Encargado elije la opción Mantener
Autopartes en el menú del sistema.
1.
Se carga la ventana Mantenimiento de
Autoparte.
2.
El Supervisor o Encargado ingresa el código 2.1 El sistema muestra un mensaje solicitando el
de autoparte o descripción de la autoparte, llenado correcto de los datos.
indicando el almacén al que pertenece.
3.
El sistema envía los datos ingresados sobre
el control de stock de autopartes a la base
de datos del sistema.
4.
El sistema muestra al Supervisor o 4.1 El Supervisor o encargado cancela la
Encargado el stock de las autopartes operación controlar stock de préstamo de
prestados. producto.
Precondiciones: El supervisor o encargado debe estar conectado al sistema con su nombre de usuario y
password.
Postcondiciones: Los datos sobre el control de stock de préstamo de autopartes han sido emitidos en un
formulario simple dentro del sistema.
Puntos de extensión:
Observaciones y datos:
67
Caso de uso: Ingreso al Sistema.
Descripción: El caso de uso es iniciado por el Encargado o Supervisor, quien para poder acceder a
la aplicación web deberá de ingresar su nombre de usuario y su contraseña.
Activación: El caso de uso se activa cuando el Encargado o Supervisor ingresa el URL de la página e
inician su autenticación.
1.
Se carga la ventana de logeo de Usuario.
2.
El sistema pide al usuario que introduzca su 2.1 El sistema muestra un mensaje solicitando
nombre de usuario y su password. que el campo nombre de Usuario y su
password sean rellenados.
3.
El sistema valida los datos ingresados por el 3.1 Si los datos son incorrectos el Sistema le
usuario y si son correctos el Usuario ingresa mostrara un mensaje de error en el acceso.
a la Aplicación Web.
4.
El Usuario cancela la operación Ingreso al
Sistema
Postcondiciones: El Usuario tendrá acceso restringido de acuerdo a su tipo de usuario esto es user o
admin.
Puntos de extensión:
Observaciones y datos:
68
Caso de uso: 2. Generar Orden de devolución.
Actor: Encargado.
Descripción: El caso de uso es iniciado por el Encargado, quien es responsable de generar la orden de
devolución de las autopartes prestados. La orden de devolución debe mostrar las autopartes que se
requieran con suma urgencia para su posterior venta, se debe considerar las fechas en las que se
realizaron los préstamos ya que la devolución se debe realizar cada cierto periodo.
Activación: El caso de uso se activa cuando el Encargado elije la opción Generar Orden de devolución en
el menú del sistema.
1.
Se carga la ventana Generar Orden de
Devolución.
2.
El Encargado selecciona las autopartes para 2.1 El sistema debe mostrar por periodo (día,
ser devueltos ya sea porque tienen alta mes, ano) los productos registrados por
demanda en el área de ventas o por periodo préstamo.
de devolución.
2.2 El sistema muestra un mensaje solicitando el
llenado correcto de los datos.
3.
El sistema envía los datos ingresados de la 3.1 Si hay alguna falla en el tipo de datos el
orden de devolución a la base de datos del sistema muestra un mensaje de error.
sistema.
4.
El sistema almacena la información en la
base de datos.
5.
El sistema envía un mensaje al Encargado 5.1 El Encargado cancela la operación generar
con respecto al almacenamiento orden de devolución.
satisfactorio de la información.
Precondiciones: El Encargado debe estar conectado al sistema con su nombre de usuario y password.
Postcondiciones: Los datos de la Orden de devolución de las autopartes han sido almacenados en la
base de datos del sistema.
Puntos de extensión:
Observaciones y datos:
69
Caso de uso: 3. Registrar Usuario.
Actor: Supervisor.
Activación: El caso de uso se activa cuando el Supervisor elije la opción Registrar Usuario en el menú del
sistema.
1.
Se carga la ventana Registrar Usuario.
2.
El Supervisor ingresa los datos personales 2.1 Si el Supervisor no valido correctamente los
de los usuarios del sistema en este caso de datos personales del usuario, el sistema
los encargados. envía un mensaje de error.
3.
El Supervisor genera el login y password del
usuario. El sistema envía los datos del
usuario que han sido registrados por el
Supervisor.
4.
El sistema almacena la información en la
base de datos.
5.
El sistema muestra una lista con los 5.1 El Supervisor cancela la operación registrar
Usuarios registrados por el Supervisor. usuario.
Precondiciones: El Supervisor debe estar conectado al sistema con su nombre de usuario y password.
Puntos de extensión:
Observaciones y datos:
70
Caso de uso: 4. Mantener Información de Responsables.
Actor: Supervisor.
Descripción: El caso de uso es iniciado por el Supervisor quien se ocupara de registrar, modificar, y
eliminar los datos de los responsables directos en el préstamo de las autopartes en este caso del
Almacenero.
Activación: El caso de uso se activa cuando el Supervisor elije la opción Mantener Información de
Responsables en el menú del sistema.
1.
Se carga la ventana Mantener Información
de Responsables.
2.
El Supervisor ingresa los datos personales 2.1 Si el Supervisor no valido correctamente los
del responsable en este caso del datos personales del empleado, el sistema
Almacenero, así como también podrá envía un mensaje de error.
modificarla actualizarla e incluso eliminarla.
3.
El Supervisor genera un código para el
Almacenero el cual lo diferenciara de los
demás individuos.
4.
El sistema almacena la información en la
base de datos.
5.
El sistema muestra una lista con los 5.1 El Supervisor cancela la operación mantener
responsables registrados por el Usuario. información de responsables.
Precondiciones: El Supervisor debe estar conectado al sistema con su nombre de usuario y password.
Postcondiciones: los datos del responsable quedan almacenados en la base de datos del sistema.
Puntos de extensión:
Observaciones y datos:
71
Caso de uso: 5. Emitir Reportes.
Actor: Supervisor.
Descripción: El caso de uso es iniciado por el Supervisor quien se ocupara de Emitir Reportes, podrá
generar reportes sobre los préstamos de las autopartes por fechas, así como también sobre devolución y
las autopartes pertenecientes a un determinado almacén.
Activación: El caso de uso se activa cuando el Supervisor elije la opción Emitir Reportes en el menú del
sistema.
1.
Se carga la ventana Emitir Reportes.
2.
El Supervisor elige de un conjunto de
opciones los reportes que desea emitir ya
sea reporte de préstamo por fechas, reporte
de devolución, autopartes y reporte de
autopartes por un determinado almacén.
3.
El Supervisor podrá detallar en el sistema 3.1 Si hay alguna falla en el tipo de datos el
los distintos reportes por fecha, es decir en sistema muestra un mensaje de error.
que periodo se llevo a cabo el préstamo de
una determinada autoparte.
4.
El sistema muestra el reporte solicitado por 4.1 El Supervisor cancela la operación Emitir
el Usuario. Reporte.
Precondiciones: El Supervisor debe estar conectado al sistema con su nombre de usuario y password,
del mismo modo los préstamos deben estar debidamente registrados en el sistema.
Postcondiciones: Se obtiene la información sobre los diversos préstamos detallados en los reportes.
Puntos de extensión:
Observaciones y datos:
72
5.1.2.2 Diagrama de secuencia de casos de uso del sistema
73
Figura 5.2 Diagrama de Secuencia Mantener Préstamo de Autopartes [Fuente Propia].
74
Figura 5.3 Diagrama de Secuencia Controlar Stock de Préstamo de Autopartes [Fuente
Propia].
75
Figura 5.5 Diagrama de Secuencia Generar Orden de Devolución [Fuente Propia].
Modelo de datos:
Tabla Empleado
Tabla Usuario
Tabla Empleado
( "codigo_empleado" varchar2(5),
"nombres_empleado" char(20),
"apellidos_empleado" char(20),
);
Tabla Usuario
Tabla Préstamo
Tabla Almacén
94
Figura 5.24 Registrar préstamo de autopartes [Fuente Propia].
95
Figura 5 25 Búsqueda y selección de autoparte para préstamo [Fuente Propia].
96
Figura 5.26 Autopartes agregados a lista de préstamo [Fuente Propia].
97
Figura 5.27 Mantenimiento de préstamo de autopartes [Fuente Propia].
98
Figura 5.28 Búsqueda de préstamo de autopartes [Fuente Propia].
99
Figura 5.29 Reporte de préstamo de autopartes [Fuente Propia].
100
Figura 5.31 Reporte de préstamo de autopartes por fecha [Fuente Propia].
101
Figura 5.32 Búsqueda autopartes por almacén [Fuente Propia].
102
CAPÍTULO 6: CONCLUSIONES Y TRABAJOS FUTUROS
6.1 Conclusiones
103
seguimiento de los préstamos, y para que puedan ser utilizados en los módulos
de ventas entre el vendedor y el cliente.
Ceballos Sierra, J. (2012). Interfaces graficas y aplicaciones para internet. España: RA-
MA.
Fernandez Peña, J. (2007). Iconix Notas del metodo con ampliaciones y mejoras.
Jacobson, I., Boosch, G., & Rambaugh, J. (2000). El Proceso Unificado de Desarrollo
de Software. Madrid: Addison Wesley.
Indicaciones: por favor responda de forma objetiva, pues de ello dependen los
resultados del trabajo.
Lugar: Fecha:
Entrevistado: Área:
a
4. ¿Qué programas utiliza actualmente para la realización de sus tareas laborales?
b
Anexo II
Indicaciones: por favor responda de forma objetiva, pues de ello dependen los
resultados del trabajo.
Lugar: Fecha:
Entrevistado: Área:
c
4. ¿Qué mecanismos utiliza para registrar los préstamos de autopartes?
d
Anexo III
e
Anexo IV
f
Sentencia para listar autopartes prestadas
g
prestamo.setAlmacenDestino(prestamoForm.getAlmacenDestino());
prestamo.setUsuarioSistema(prestamoForm.getUsuarioSistema());
prestamo.setResponsablePrestamo(prestamoForm.getResponsablePrestamo());
prestamo.setFechaPrestamo(prestamoForm.getFechaPrestamo());
try {
logger.info("Parametro: " + parametro);
logger.info("Codigo: " + prestamoForm.getCodigoPrestamo());
logger.info("Almacen Origen: " + prestamoForm.getAlmacenOrigen());
logger.info("Almacen Destino: " + prestamoForm.getAlmacenDestino());
logger.info("Usuario: " + prestamoForm.getUsuarioSistema());
logger.info("Responsable: " + prestamoForm.getResponsablePrestamo());
logger.info("Fecha: " + prestamoForm.getFechaPrestamo());
for (int i = 0; i < datos.length; i++) {
producto = new Producto(); String[] prods =
datos[i].split(","); producto.setCodigoProducto(prods[0]);
producto.setCantidadProducto(Integer.parseInt(prods[1]));
producto.setCantidadProductoD(Integer.parseInt(prods[2]));
logger.debug("Producto: " + datos[i]);
logger.debug("Codigo..: " + prods[0]);
logger.debug("Stock..: " + prods[1]);
logger.debug("CantidadPrestamo..: " + prods[2]);
lstProducto.add(producto);
logger.debug("Cantidad de Productos en detalle: " + lstProducto.size());
}
logger.debug("Productos a guardar: " + lstProducto.size());
prestamo.setLstProducto(lstProducto);
List<Producto> array = (List<Producto>) userSessionBean.get("ProductosEliminados");
///////////////metodo para elimnar producto en detalle ubicado en
saveprestamo//////////////////////
prestamoService.updatePrestamo(prestamo, parametro, array);
} catch (Exception e) {
// TODO: handle exception
logger.error(e.getMessage(),e);
}
return movimientoProducto(request, response);
}
h
// para traer las cantidades a las cajas de texto al momento de editar String cadena = "";
prestamo.setLstProducto(prestamoService.getDetallePrestamo(codigoPrestamo,prestamo.getAl
macenOrigen()));
logger.debug("productos: "+prestamo.getLstProducto().size() );
if (prestamo!=null){
prestamoForm.setCodigoPrestamo(prestamo.getCodigoPrestamo());
prestamoForm.setAlmacenOrigen(prestamo.getAlmacenOrigen());
prestamoForm.setAlmacenDestino(prestamo.getAlmacenDestino());
prestamoForm.setUsuarioSistema(prestamo.getUsuarioSistema());
prestamoForm.setResponsablePrestamo(prestamo.getResponsablePrestamo());
prestamoForm.setFechaPrestamo(prestamo.getFechaPrestamo());
for (Iterator iterator = prestamo.getLstProducto().iterator(); iterator
.hasNext();) {
Producto producto = (Producto) iterator.next();
cadena = cadena + producto.getCantidadProductoD() + ",";
}
logger.info("Cadena: " + cadena);
userSessionBean.put("ListaProductoDetalle", prestamo.getLstProducto());
model.addObject("lstProducto1", prestamo.getLstProducto());
model.addObject("CONT", prestamo.getLstProducto().size());
model.addObject("update_producto", Constantes.PARAMETER_EDIT);
model.addObject(Constantes.TITULO, "EDITAR PRESTAMO");
model.addObject("Cadena", cadena);
}
List<Almacen> lstAlmacen = prestamoService.getAlmacen(null);
logger.info("Almacen: " + lstAlmacen.size());
List<Empleado> lstEmpleado = prestamoService.getEmpleado(null);;
logger.info("empleados: " + lstEmpleado.size());
model.addObject("lstAlmacen", lstAlmacen);
model.addObject("lstEmpleado", lstEmpleado);
model.addObject("update_prestamo", parametro);
model.addObject("prestamoForm", prestamoForm);
return model;
}
if (StringUtils.equals(parametro, Constantes.PARAMETER_SEARCH)){
logger.debug("parametro: "+ parametro );
prestamo = new Prestamo();
if (StringUtils.equals(prestamoForm.getTipoBusqueda(),
Constantes.BUSQUEDA_X_CODIGO))
{
prestamo.setCodigoPrestamo(prestamoForm.getCodigoPrestamo().trim().toUpperCase());
}else
{
prestamo.setFechaPrestamo(prestamoForm.getFechaPrestamo().trim().toLowerCase());
}
logger.debug("Codigo Prestamo "+prestamoForm.getCodigoPrestamo());
request.setAttribute("prestamoBean", prestamo);
request.setAttribute("tipoBusqueda", prestamoForm.getTipoBusqueda());
//return listarPrestamo(request, response);
}
return listarPrestamo(request, response);
}
i
Sentencia para obtener lista de autopartes en popup
j
if (CollectionUtils.isEmpty(lstProducto1))
lstProducto1 = new ArrayList<Producto>();
String[] codigos = prestamoForm.getCodigos();
//if(lstProducto1.size()<10){
for (int i = 0; i < codigos.length; i++) {
String[] valores = codigos[i].split(",");
if (!validaCodigoProducto(lstProducto1, valores[0])){
Producto producto= new Producto();
producto.setCodigoProducto(valores[0]);
producto.setDescripcionProducto(valores[1]);
producto.setCantidadProducto(Integer.parseInt(valores[2]));
lstProducto1.add(producto);
//cadena = cadena + producto.getCantidadProductoD() + ",";
}
logger.debug("I: " + codigos[i]);
// restringiendo la cantidad de registros por prestamo a 9 items
if (!CollectionUtils.isEmpty(lstProducto1)){
if (lstProducto1.size()>9){
lstProducto1 = lstProducto1.subList(0, 9);
}
}
}
//}
/////////////////////////////////////////////////////////////////////////////////////////////
userSessionBean.put("ListaProductoDetalle", lstProducto1);
model.addObject("lstProducto1", lstProducto1);
model.addObject("COUNT", lstProducto1.size());
logger.debug("lista de producto en lstProducto1: " + lstProducto1.size());
/////////////////////////////////////////////////////////////////////////////////////////////
//model.addObject("Cadena", cadena);
model.addObject(Constantes.SHOW_DIV, Constantes.SHOW_DIV_NONE);
}
if (StringUtils.equals(parametro, Constantes.PARAMETER_CANCEL)){
List<Producto> lstProducto1 = (List<Producto>) userSessionBean.get("ListaProductoDetalle") ;
if (CollectionUtils.isEmpty(lstProducto1)) lstProducto1 =
new ArrayList<Producto>();
userSessionBean.put("ListaProductoDetalle", lstProducto1);
model.addObject("lstProducto1", lstProducto1);
model.addObject("COUNT", lstProducto1.size());
logger.debug("cantidad de productos en la lista de prestamo a devolver: " +
lstProducto1.size());
model.addObject(Constantes.SHOW_DIV, Constantes.SHOW_DIV_NONE);
}
//codigo para elimnar el producto en la lista de prestamo
if (StringUtils.equals(parametro, Constantes.PARAMETER_DELETE)){
Prestamo prestamo = new Prestamo();
//Producto producto = new Producto();
//prestamo = prestamoService.getPrestamo(prestamo.getCodigoPrestamo());
//prestamo.setLstProducto(prestamoService.getDetallePrestamo(prestamo.getCodigoPrestamo()
,prestamo.getAlmacenOrigen()));
prestamo.setLstProducto(lstProducto);
//para select del popup
List<Producto> lstProducto1 = (List<Producto>) userSessionBean.get("ListaProductoDetalle") ;
//List<Producto> array1 = (List<Producto>) userSessionBean.get("ProductosEliminados");
logger.debug("lstProducto1: " + lstProducto1.size());
String idProd = request.getParameter("id");
logger.debug("idProd: " + idProd);
k
//guardando productos a eliminar cuando el parametro1 sea edit
List<Producto> array = new ArrayList<Producto>();
///////////////NUEVAMENTE DEVUELVO LAS CANTIDADES A LA CAJA DE
TEXTO////////////// String cadena = "";
int i= 0;
for (Iterator iterator = lstProducto1.iterator(); iterator
.hasNext();) {
Producto producto = (Producto) iterator.next(); logger.debug("producto: " +
producto.getCodigoProducto()); logger.debug("cantidad de producto: " +
producto.getCantidadProductoD());
//para eliminar producto de la lista de prestamo
if (StringUtils.equals(producto.getCodigoProducto(), idProd)){
lstProducto1.remove(i);
//prestamoService.updatePrestamo(prestamo, parametro, array1);
//prestamoService.actualizarStockAlmacen(prestamo.getAlmacenOrigen(),prestamo.getAlmacen
Destino(),producto.getCodigoProducto(),producto.getCantidadProductoD());
//prestamoService.actualizarPrestamo(prestamo.getCodigoPrestamo(), parametro);
if(StringUtils.equals(parametro1, Constantes.PARAMETER_EDIT)){
//array.add(producto);
//prestamoService.updatePrestamo(prestamo, parametro1, array);
//prestamoService.actualizarStockAlmacen(prestamo.getAlmacenOrigen(),prestamo.getAlmacen
Destino(),producto.getCodigoProducto(),producto.getCantidadProductoD());
//prestamoService.actualizarPrestamo(prestamo.getCodigoPrestamo(), parametro1);
prestamoService.actualizarStockAlmacen(prestamoForm.getAlmacenOrigen(),
prestamoForm.getAlmacenDestino(), producto.getCodigoProducto(),
producto.getCantidadProductoD());
prestamoService.eliminarProductoDetalle(prestamoForm.getCodigoPrestamo(),"",
producto.getCodigoProducto());
}
break;
}
///////////ENTREGANDO CANTIDADES///////////
cadena = cadena + producto.getCantidadProductoD() + ",";
logger.debug("getCodigoProducto: " + producto.getCodigoProducto());
logger.info("Cadena: " + cadena);
i++;
}
userSessionBean.put("ListaProductoDetalle", lstProducto1);
//userSessionBean.put("ProductosEliminados", array);
//List<Producto> array = (List<Producto>) userSessionBean.get("ProductosEliminados");
logger.debug("lstProducto2: " + lstProducto1.size());
logger.info("prestamo: " + prestamo);
logger.info("paremetro: " + parametro);
logger.info("paremetro1: " + parametro1);
logger.info("array: " + array.size());
////////CADENA--------------------cadena//////////////////
model.addObject("Cadena", cadena); model.addObject("lstProducto1",
lstProducto1); model.addObject("COUNT", lstProducto1.size());
model.addObject(Constantes.SHOW_DIV, Constantes.SHOW_DIV_NONE);
}
List<Almacen> lstAlmacen = prestamoService.getAlmacen(null);
List<Empleado> lstEmpleado = prestamoService.getEmpleado(null);
model.addObject("lstEmpleado", lstEmpleado);
model.addObject("lstAlmacen", lstAlmacen);
model.addObject("lstProducto", lstProducto);
if(StringUtils.equals(parametro1, Constantes.PARAMETER_NEW)){
model.addObject("update_prestamo", Constantes.PARAMETER_NEW);
l
model.addObject(Constantes.TITULO, "REGISTRAR PRESTAMO");
}
if(StringUtils.equals(parametro1, Constantes.PARAMETER_EDIT)){
model.addObject("update_prestamo", Constantes.PARAMETER_EDIT);
model.addObject(Constantes.TITULO, "EDITAR PRESTAMO");
}
prestamoForm.setCodigoPrestamo(codigo);
prestamoForm.setCantidadPrestamo(null);
logger.debug("Codigo Prestamo: "+ codigo);
} catch (Exception e) {
// TODO: handle exception
logger.error(e.getMessage(), e);
}
model.addObject("prestamoForm", prestamoForm);
return model;
}
public boolean validaCodigoProducto(List<Producto> lista, String codigo){