Sie sind auf Seite 1von 71

PUNTO DE VENTA

Ventas-Hoy

Punto de veta orientado a sistema ERP el cual aplica todas las reas de la empresa el cual con el tiempo tendr un sistema CRM con l se controlara el margen de los clientes y aumentara sus ventas en un 30 o 50% esta documentacin incluye el cdigo fuente utilizado el cual sirve para darle mantenimiento a nuestro sistema.

Jess Farfn Luna 08/12/2012

8-12-2012

NDICE
Fase De Inicio 1 Documento visin 2 Identificacin de los procesos de negocio. 2 Breve descripcin de los procesos de negocio identificados: 2 Introduccin: 3 Sentencia que define el problema 4 Perspectiva del producto: 4 REQUERIMIENTOS 6 Funcionales 6 No Funcionales (Calidad) 6 Modelo de Casos de Uso 7 Lista Actor-Semntica 7 Lista Actor-Objetivo 8 Lista de casos de uso: 9 Descripcin breve de cada caso de uso: 9 Especificacin Complementaria. 10 Facilidad de uso: 10 Fiabilidad 11 Rendimiento 11 Interfaces 11 Interfaces y hardware destacables 11 Interfaces de software 11 Glosario 11 Casos de uso completos: 13 Caso de uso UC03: Registrar Venta 13 Caso de uso UC10: Controlar el stock 16 DIAGRAMAS DE CASO DE USO 17 Fase De Elaboracin 18 Modelo de Dominio 19 Diagramas de Secuencia del Sistema 19 CU3: Registrar Ventas 19 CU10: Controlar el Stock 20 Contratos: 21 Contratos del caso de uso Registrar Ventas 21 Contratos del caso de uso Controlar el Stock 22 Clases conceptuales: 23 Diagramas de Clases del Dominio 23 MODELO DE DISEO 24 DIAGRAMAS DE COLABORACION 24 CU3 Registrar Ventas: 24

8-12-2012

CU10: Monitorear el Stock 28 Diagrama de clases de diseo 32 MODELO DE IMPLEMENTACION 33 CODIGO FUENTE 33 Loggin 33 Principal 35 Nueva Ventana 37 Almacn 51 Articulo 54 Catalogo Artculos 54 Cliente 55 Descripcin Articulo 57 Lnea Venta 59 Pago 60 Pedidos 61 Registro 61 Stock 63 Sucursal 64 Ticket 66 Vendedor 67 Venta 68

------------------------------------------------2

8-12-2012

Fase De Inicio Documento visin Identificacin de los procesos de negocio. * * * * * * * * * * Vender artculos de lnea blanca. Comprar artculos a proveedores. Distribuir artculos por sucursales Obtener informes de venta de artculo de lnea blanca. Realizar abonos de crdito Almacenar los artculos comprados a proveedores Surtir a sucursales con artculos Transportar los artculos del centro de distribucin a los almacenes. Gestionar los descuentos de los artculos Obtener

Reportes de artculos por almacn de cada sucursal. * Informe de artculo no surtido del centro de distribucin

Breve descripcin de los procesos de negocio identificados:

Vender artculos de lnea blanca. Se realizara la venta de artculos solicitados por el cliente esta podra realizarse a crdito o de contado, se tomaran en cuenta las polticas del negocio.

Comprar artculos a proveedores. Se compraran artculos a los proveedores para venderlos despus.

Distribuir de artculo por sucursales. Los centros de distribucin surtirn a las sucursales que requieran artculos.

Obtener informes de venta de artculo de lnea blanca. Este ser un informe detallado de la venta realizada por algn artculo de lnea blanca, solo que este informe se realizara por sucursal y no en general.

Realizar abonos de crdito


3

8-12-2012

Cuando haya una transaccin a crdito el pago se administrara de forma diferente, la cual queda pendiente de definir.

Almacenar los artculos comprados a proveedores. Se almacenaran en centros de distribucin los artculos obtenidos de los proveedores.

Surtir a sucursales con artculos. Los almacenistas surtirn con artculos a sus sucursales cuando esto sea necesario.

Transportar los artculos del centro de distribucin a los almacenes. Los centros de distribucin mantendrn el stock mismo de los almacenes de las sucursales.

Gestionar los descuentos de los artculos Algunos artculos puede tener porcentajes de descuentos o importe de descuento.

Obtener reportes de artculos por almacn de cada sucursal Se mostrara un reporte de los artculos que posea de momento cada sucursal en su almacn.

Informe de artculo no surtido del centro de distribucin Se realizara un informe de los artculos que no fueron surtidos en alguna de las sucursales por los centros de distribucin.

Introduccin: Este sistema permitir controlar las actividades de venta e inventario de la empresa. Lo cual supondr un acceso rpido y sencillo a los datos, gracias a interfaces grficas sencillas y amigables. Adems, los datos accedidos estarn
4

8-12-2012

siempre actualizados, lo cual es un factor muy importante para poder llevar un control Centralizado de las distintas sucursales.

Sentencia que define el problema

El problema de | Controlar el stock existente en los distintos almacenes, de forma que se puedan servir los pedidos que reciben dichos almacenes. Gestionar las rdenes de venta de contado y/o a crdito realizadas por los clientes. Gestionar los pedidos realizados a los proveedores. Gestionar los pedidos realizados a los centros de distribucin. Gestionar los pedidos realizados a los almacenes. | afecta a | Propietario de la empresa. Gerente general. Jefe de Sucursal, Vendedor, Almacenista, Jefe del centro de distribucin, Proveedores, Clientes. |

Perspectiva del producto: Sist. Centro de distribucin.

Vendedor

Sist. Centro de Almacn.

Sistema Llvatelo Jefe de sucursal

Invoca servicios de. Invoca servicios de. Sist. De impuestos.

8-12-2012

Gerente

Sist. De recursos humanos. Almacenista

Objetivos de alto nivel y problemas claves del personal involucrado: despus de llevar acabo un taller de requisitos se identificaron los siguientes objetivos y problemas claves:

Objetivo de alto nivel | Prioridad | Problemas e inquietudes | Soluciones actuales | Realizar un procesamiento de ventas rpido, robusto e integrado | Alta | Prdida de la capacidad de procesamiento de las ventas si los componentes fallan Imposibilidad de adaptar las reglas de negocio a requisitos nicos. Se reduce la velocidad cuando se aumenta la carga. | Los artculos existentes permiten el procesamiento bsico de ventas pero no abordan estos problemas | Mantener el Stock mnimo de cada almacn de las sucursales. Hacindolo de manera consistente e integra. | Alta | Perdida de informacin de la existencia de los artculos. En algn momento dado la sucursal se quede sin artculos. | Pedir en el momento los artculos al centro de distribucin. | Consultar reportes | Alta | Proceso lento de toma de decisiones basadas en datos errneos, desactualizados o con informacin no consistente ni integra. | Reportes manuales tediosos y confusos. |

REQUERIMIENTOS Funcionales 1. Realizar ventas al contado 2. Realizar ventas a crdito realizando porcentaje de inters al precio de venta (enganche

8-12-2012

10% del valor del artculo y el resto en mensualidades). 3. Realizar ventas con tarjeta, utilizando el sistema autorizacin de pagos. 4. El artculo deber tener porcentaje de descuento o importe de descuento. 5. Los clientes leales reciben bonos de descuento por compras de contado. 6. Los centros de distribucin debern mantener el stock mnimos de artculos en cada almacn de las sucursales. 7. Una sucursal podr solicitar directamente artculos al centro de distribucin que le pertenece. 8. El sistema podr generar consultas, para que el gerente pueda consultar la existencia de artculos en un almacn de sucursal o centro de distribucin, detallado cuando se requiera el nmero de serie del artculo. 9. El sistema podr generar consultas al gerente de los informes de los artculos vendidos por sucursal en un periodo de, detallando cuando se requiera el nmero de serie del artculo. 10. El sistema podr generar consultas al gerente para saber el informe de los artculos que no fueron surtidos por los centros de distribucin a las diferentes sucursales. 11. El sistema podr generar consultas para el gerente de las ventas que realizaron los vendedores detallando los artculos que vendi.

No Funcionales (Calidad) 12. El sistema deber de satisfacer de manera eficiente los intereses y necesidades de los involucrados. 13. El sistema debe tener la capacidad de detectar y manejar errores y almacenarlos para su posterior revisin. 14. El sistema tendr la capacidad de adaptarse a las reglas nicas de cada sucursal y almacn en el que se encuentre, basando su funcionalidad en ello. 15. Para usar el sistema se requerir de una clave de acceso y un usuario. 16. El sistema deber ser capaz de completar ventas u otras operaciones sin importar si ocurre algn error y deber manejar las operaciones a modo de transacciones para que se efecten de manera atmica.
7

8-12-2012

17. El sistema deber tener que procesar de manera rpida las ventas, as como manejar un tiempo veloz de impresin de sus tickets. 18. El sistema deber contar con interfaces que le permitan comunicarse y colaborar con sistemas externos.

Modelo De Casos de Uso

Lista Actor-Semntica Actor | Descripcin | Propietario de la empresa | Persona que est a cargo de la organizacin, es aquel que toma las decisiones de importancia para la empresa. | Gerente | Persona encargada de tener informes del desempeo de la empresa. | Almacenista | Persona encargada de llevar un control de los artculos que tiene en venta la empresa. | Proveedor | Cualquier empresa o persona que proporciona bienes materiales hacia la empresa. | Jefe de sucursal | Persona encargada de tomar las decisiones en una sucursal de la empresa. | Vendedor | Persona que interacta en las funciones de venta y captura de datos en el sistema e interacta con el cliente. | Cliente directo | Cualquier persona que adquiera un artculo de la empresa. | Cliente leal | Cualquier persona que porte una tarjeta de cliente leal. | Encargado del centro de distribucin | Persona encargada de

administrar el centro de distribucin y complacer las demandas del almacenista. |

Lista Actor-Objetivo Actor | Objetivo |

8-12-2012

Propietario de la empresa. |

1. Analizar la estadstica de los procesos

administrativos de la empresa. 2. Gestionar los descuentos a clientes. 3. Gestionar los descuentos a artculos. | Gerente. | 1. Generar informes de existencia de artculos en almacenes

y/o centros de distribucin, detallado por nmero de serie. 2. Generar informes de artculos vendidos por sucursal en un periodo, detallado por nmero de seria cuando sea necesario. 3. Generar informes de artculos que no fueron surtidos por los centros de distribucin a las diferentes sucursales. 4. Generar informes de las ventas que se realizaron los vendedores detallando los artculos que vendi. | Jefe de sucursal. | 1. Generar informe de los artculos existentes en el 3. Solicitar artculos

almacn. 2. Solicitar artculos al centro de distribucin. al almacn.

4. Generar informe de productividad de sus trabajadores. 5.

Registrar clientes leales. | Vendedor. | 1. Realizar el cobro de ventas ha contado. 2. Realizar el cobro

de ventas a crdito. 3. Registrar ventas. 4. Cancelar ventas. 5. Eliminar artculos De la lista de venta. 6. Realizar abonos a las ventas de crdito. | Almacenista. | 1. Registrar los artculos recibidos por el centro de

distribucin. 2. Registrar los artculos salientes del almacn. | Encargado del centro de distribucin. | 1. Generar informe de los

artculos existentes en los almacenes de cada sucursal. 2. Registrar los artculos salientes del centro de distribucin. |

Lista de casos de uso: * CU1: Generar informes. * CU2: Gestionar los descuentos. * CU3: Registrar ventas. * CU4: Realizar cobros. * CU5: Cancelar ventas.

8-12-2012

* CU6: Realizar abonos. * CU7: Solicitar artculos. * CU8: Registrar artculos. * CU9: Consultar inventarios. * CU10: Controlar el stock.

Descripcin breve de cada caso de uso: CU1: Generar informes El usuario con permisos necesarios, solicitara al sistema reportes relacionados con los artculos y ventas del negocio, se ocupa ms examinacin aqu. CU2: Gestionar los descuentos El propietario de la empresa ser capaz de gestionar tanto como los descuentos sobre los artculos como los descuentos a los clientes, este proceso tiene que ver con las polticas del negocio y puede ser cambiante. CU3: Registrar ventas El vendedor ser capaz de registrar sus ventas realizadas individualmente. CU4: Realizar cobros El vendedor ser capaz de realizar cobros a los clientes dependiendo de los artculos registrados en el carrito. CU5: Cancelar ventas El vendedor ser capaz de cancelar ventas, pero no borrarlas. CU6: Realizar abonos El vendedor ser capaz de registrar los abonos de los clientes para las ventas realizadas a crdito. CU7: Solicitar artculos El usuario con los permisos necesarios ser capaz de solicitar artculos al almacn o centro de distribucin segn el caso. CU8: Registrar artculos El usuario ya sea al almacenista o el centro de distribucin, sern capaces de registrar los artculos salientes y entrantes de su stock. CU9: Consultar inventarios
10

8-12-2012

El usuario con permisos necesarios, ser capaz de consultar el inventario para obtener informacin de los artculos de este. CU10: Controlar el stock El sistema mismo ser capaz de Monitorear el stock de los almacenes de las sucursales asegurndose de que siempre tengan el stock mnimo y actuando de manera automtica ante ello, estas son polticas del negocio y pueden cambiar o ser configurables.

Especificacin Complementaria. Facilidad de uso: El cliente ser capaz de ver la informacin en un gran monitor, por tanto: * Se debe ver el texto fcilmente a una distancia de 1 metro. * Evitar colores asociados con formas comunes de daltonismo. El vendedor est mirando a menudo al cliente o los artculos, no a la pantalla de la computadora, por tanto, se deben comunicar las seales y avisos con sonidos, en lugar de slo mediante grficos. El almacenista manejara una pantalla tctil y un Numpad para facilitar el control de los artculos en el sistema, por lo tanto los botones debern ser grandes y la interfaz sencilla. El encargado del centro de distribucin y jefe de sucursal no ocuparan algn hardware especial, solo ocupa una computadora y que la interfaz del sistema sea amigable e intuitiva para evitar errores humanos. El gerente y el propietario utilizaran un gran monitor, ya que as se apreciaran mejor los reportes, por lo cual se evitara utilizar colores llamativos o cansados para la vista. Fiabilidad Si se produce algn fallo cuando el sistema est haciendo alguna transaccin, ya sea de ventas o de inventario, se buscara solucionar de manera local el problema. Se ocupa ms anlisis para este requisito. Rendimiento

11

8-12-2012

Los gerentes, propietario de la empresa, encargado del centro de distribucin, el almacenista y el jefe de departamento quieren que el informe este en tiempo real y que sea consistente. Interfaces Interfaces y hardware destacables * Monitor con pantalla tctil. * Escner lser de cdigo de barras. * Impresora de recibos. * Lector de tarjetas de crdito. * Numpad.

Interfaces de software Se elaborara una interfaz de colaboracin interna para comunicar los diversos mdulos del sistema.

Glosario Interfaz.- Hace referencia al conjunto de mtodos para lograr interactividad entre un usuario y una computadora. Una interfaz puede ser del tipo GUI, o lnea de comandos, etc. Tambin puede Ser a partir de un hardware, por ejemplo, el monitor, el teclado y el mouse, son interfaces entre el usuario y la computadora. Software.-Se conoce como software al equipamiento lgico o soporte lgico de una computadora digital; comprende el conjunto de los componentes lgicos necesarios que hacen posible la realizacin de tareas especficas. Hardware.-Hardware corresponde a todas las partes fsicas y tangibles de una computadora: sus componentes elctricos, electrnicos, electromecnicos y mecnicos; sus cables, gabinetes o cajas, perifricos de todo tipo y cualquier otro elemento fsico involucrado. Stock.-Trmino de origen ingls que puede traducirse como existencias y que designa principalmente las materias primas, productos semielaborados y

12

8-12-2012

terminados que las empresas tienen en sus almacenes. Proveedor.-Persona o sociedad que suministra la materia prima utilizada para producir los bienes o servicios necesarios para una actividad. Almacenista.- Es aquella persona que est encargada de llevar el control de entradas y salidas de productos de un almacn. Gerente.-El termino gerente denomina a quien est a cargo de la direccin de alguna organizacin, institucin o empresa o parte de ella. Venta.-El proceso personal o impersonal por el que el vendedor comprueba, activa y satisface las necesidades del comprador para el mutuo y continuo beneficio de ambos (del vendedor y el comprador). Pantalla tctil.-Una pantalla tctil es una pantalla que mediante un toque directo sobre su superficie permite la entrada de datos y rdenes al dispositivo. Cliente.- persona que acude a la empresa a solicitar la venta de un artculo.

Casos de uso completos: Caso de uso UC03: Registrar Venta

Actor Principal: Vendedor

Personas involucradas e intereses: Propietario de la empresa: Quiere que se registren las transacciones con precisin y satisfacer los intereses de los clientes. Gerente: Quiere actualizacin automtica y rpida del inventario. Jefe de Sucursal: Quiere ser informado de las transacciones de las ventas de la sucursal. Vendedor: Quiere registrar la venta de los artculos de manera rpida y segura. Cliente: Quiere adquirir un artculo.

Precondiciones:

13

8-12-2012

El vendedor se autentifico en el sistema.

Garanta de xito (Postcondiciones). Se registra la venta, se actualiza el inventario, se genera el recibo y se le entrega al cliente. Escenario Principal de xito (Flujo bsico): 1. El vendedor inicia una venta. 2. El vendedor introduce el cdigo del artculo. 3. El sistema registra el artculo en la lista de venta presentando su descripcin, precio y suma parcial de la venta. El precio se calcula cumpliendo las polticas de negocio. El cajero repite los pasos 3 y 4 hasta que se indique. 4. El sistema presenta el total respetando las polticas del negocio. 5. El vendedor le informa al cliente el total de la venta y pide el pago. 6. El cliente paga y el sistema gestiona el pago. 7. El sistema registra la venta y actualiza el inventario. 8. El sistema imprime el recibo. 9. El cliente se va con el recibo y las mercancas.

Extensiones (flujo alternativo). a) En cualquier momento el Sistema falla. 1. El vendedor reinicia el sistema y se autentifica. 2. El Sistema indica el error al vendedor. 1. El vendedor reinicia el sistema y se autentifica. 2. El vendedor inicia una nueva venta. 3a. Cdigo no valido: 1. El sistema indica el error y rechaza la entrada. 3b. Hay muchos artculos de la misma categora y si estos no tienen nmero de serie no es importante tenerlos en cuenta como una nica identidad: 1. El Vendedor introduce el cdigo de la categora del artculo y la cantidad deseada. 3-6a. El cliente pide al vendedor que elimine un artculo de la venta:
14

8-12-2012

1. El vendedor introduce el cdigo del artculo para eliminarlo de la venta: 1. En caso de ser necesario introduce la cantidad que desea eliminar. 2. El sistema muestra la suma parcial actualizada. 3-6b. El cliente pide al vendedor cancelar la venta: 1. El vendedor cancela la venta en el sistema. 5a. El cliente dice que le son aplicables descuentos adicionales: 1. El vendedor solicita la opcin de CLEINTE LEAL. 2. El vendedor introduce el cdigo del cliente 3. El sistema el total, con los descuentos basado en las polticas del negocio. 5b. El cliente Informa al vendedor que tiene crdito en su cuenta, para aplicar a la venta: 1. El vendedor solicita la opcin de crdito. 2. En vendedor introduce el cdigo del cliente. 3. El sistema aplica el crdito hasta que el precio = 0, y reduce el crdito que queda. 3a. El cliente no cuenta con suficiente crdito: 1. El vendedor le informa al cliente que no tiene suficiente crdito: 1a. El cliente utiliza un mtodo de pago alternativo. 1b. El cliente solicita al vendedor que cancele la venta. El vendedor cancela la venta en el sistema. 1c. El cliente solicita al vendedor que suspenda la venta. El vendedor suspende la venta en el sistema.

6. El cliente solicita pagar en efectivo pero no tiene el suficiente: 1a. El cliente solicita un mtodo alternativo para pagar. 2b. El cliente le dice al vendedor que cancele la venta. El vendedor cancela la venta en el sistema. 3c. El cliente solicita al vendedor que suspenda la venta. El vendedor suspende la venta en el sistema.

15

8-12-2012

7. Pago en efectivo: 1. El vendedor introduce la cantidad de dinero en efectivo recibido. 2. El sistema muestra la cantidad de dinero a devolver. 3. El vendedor guarda el dinero recibido y devuelve el cambio al cliente. 4. El sistema registra el pago en efectivo.

Requisitos especiales: * Interface de usuario amigable, intuitiva y evitar colores llamativos o cansados para la vista. El texto debe ser visible a un metro de distancia. * Reglas de negocio que se pueden aadir en tiempo de ejecucin en los pasos 3 y 7.

Lista de tecnologa y variaciones de datos: 3a. El identificador del artculo se introduce mediante un escner laser de cdigo de barras o atreves del teclado.

Frecuencia: contino.

Caso de uso UC10: Controlar el stock

Actor Principal: El Sistema

Personas involucradas e intereses: Propietario de la empresa: Quiere que ninguna sucursal se quede sin artculos. Gerente: Quiere que ninguna sucursal se quede sin artculos. Jefe de Sucursal: Quiere que su sucursal no se quede sin artculos. Cliente: Quiere encontrar el artculo que necesita en la sucursal. Jefe de almacn: Mantener su Stock mnimo.

Precondiciones:

16

8-12-2012

Que se haiga registrado una venta.

Garanta de xito (Postcondiciones). El sistema verifica el stock de cada artculo, si se encuentra bajo manda un mensaje al centro de distribucin para que lleven los artculos faltantes. Escenario Principal de xito (Flujo bsico): 1. El sistema obtiene la venta recin registrada. 2. El sistema obtiene la lnea de venta con el artculo y la cantidad. 3. El sistema actualiza la cantidad del artculo en el almacn. 4. El sistema verifica que la nueva cantidad sea mayor a la mnima aceptable. Repetir pasos del 2 al 4 hasta que se indique. Extensiones (flujo alternativo). 3. La cantidad del artculo actual es 0. 3.a)- El sistema indica al vendedor del error y prosigue con la siguiente lnea de venta. 4. La cantidad del artculo es igual o menor a la mnima. 4.a)-El sistema enva un mensaje de notificacin al jefe de la sucursal, al gerente y al centro de distribucin.

Requisitos especiales: * La actualizacin debe ser en tiempo real.

Frecuencia: contino.

DIAGRAMAS DE CASO DE USO En la Figura 1se muestra el diagrama de casos de uso con las relaciones secundarias existentes entre los actores, los casos de uso y los sistemas externos del punto de venta.

Figura 1: Diagrama Caso de Uso PDV Llvatelo.

17

8-12-2012

Fase De Elaboracin

Modelo de Dominio Diagramas de Secuencia del Sistema Un diagrama de secuencia es un dibujo que muestra, para un escenario especifico de un caso de uno, los eventos que generan los actores externos, el orden y los eventos entre los sistemas. Todos los sistemas se tratan como cajas negras, los diagramas destacan los eventos que cruzan los lmites del sistema desde los actores a los sistemas.

CU3: Registrar Ventas Figura 2. DSS del CU3: Registrar Ventas A continuacin se muestra en la figura 2, la secuencia Registrar Ventas, donde se ilustra el escenario principal de xito del caso de uso procesar venta, se indica que el Vendedor acciona los eventos del sistema Inicia Nueva Venta, Ingresar Articulo, Finalizar Venta y Realizar Pago. CU10: Controlar el Stock A continuacin se muestra en la figura 3, la secuencia Controlar el Stock, donde se ilustra el escenario principal De xito del caso de uso controlar el stock, se indica que el mismo sistema acciona los eventos Actualizar Inventario, Actualizar Stock, y Monitorear Mnimo.

Figura 3. DSS Monitorear el Stock

Contratos:

Contratos del caso de uso Registrar Ventas

Contrato C01: Crear Nueva Venta

18

8-12-2012

Operacin: Crear Nueva Venta() Referencias cruzadas: Caso de uso registrar venta Precondiciones: Ninguna Post condiciones: 1) Se cre instancia de Venta 2) Instancia de Venta se asoci con la Terminal PDV 3) Instancia de Venta se asoci con el Vendedor 4) Se inicializaron los atributos de la instancia de Venta

Contrato C02: Introducir Articulo Operacin: introducir Articulo() Referencias Cruzadas: Caso de uso registrar venta Precondiciones: Exista una venta en curso Post condiciones: 1) Se cre la instancia Lnea De Venta ldv 2) Ldv se asocia con la venta actual 3) Ldv se asocia con una Descripcin Del Articulo

Contrato C03: Finalizar Venta Operacin: finalizar Venta() Referencias cruzadas: Caso de uso registrar venta Precondiciones: Que exista una venta en curso. Post condiciones: 1) El atributo Venta. Finalizada paso a ser verdadero.

Contrato C04: Realizar Pag Operacin: realizar Pag (cantidad) Referencias Cruzadas: Caso de uso registrar venta Precondiciones: Venta finalizada. Post Condiciones: 1) Venta. Liquidada pas a ser verdadero
19

8-12-2012

Contrato C05: verificar Stock Operacin: verificar Stock (artculos) Referencias Cruzadas: Caso de uso Verificar el Stock Precondiciones: Venta finalizada. Post Condiciones: 1) Si la cantidad de artculos es menor que el Stock estipulado, Stock. Nivel toma el valor de bajo

Contratos del caso de uso Controlar el Stock

Contrato C06: Obtener venta registrada Operacin: Actualizar Inventario () Referencias cruzadas: Controlar el stock. Precondiciones: Se registr una venta. Post condiciones: 1) Instancia de Venta se asoci con el stock momentneamente.

Contrato C07: Actualizar el stock del articulo Operacin: Actualizar Stock Articulo () Referencias cruzadas: Controlar el stock. Precondiciones: Se est actualizando el inventario. Post condiciones: 1) Se actualizo el atributo de Cantidad en el artculo.

Contrato C08: Monitorear mnimo de stock del articulo Operacin: Monitorear Stock () Referencias cruzadas: Controlar el stock. Precondiciones: Se actualizo la cantidad de un artculo.

20

8-12-2012

Post condiciones: 1) Se manda una notificacin.

Clases conceptuales: 1.- Cliente 2.- Articulo 3.- Vendedor 4.- Registro 5.- Sucursal 6.- Venta 7.- Lnea de venta 8.- Descripcin del artculo 9.- Pago 10.- Almacn 11.- Centro de distribucin

Diagramas de Clases del Dominio Figura 4. Diagrama de clases del dominio

MODELO DE DISEO

DIAGRAMAS DE COLABORACION Los diagramas de colaboracin ilustran las interacciones entre objetos en un formato de grafo o red, en el cual los objetos se pueden colocar en cualquier lugar del diagrama. CU3 Registrar Ventas:

Crear Nueva Venta (): Figura 5. Diagrama de colaboracin crear nueva venta. La Figura 5 muestra el diagrama de colaboracin que se lee como sigue: 1.- Se enva un mensaje a Crea Nueva Venta al creador registro, no se
21

8-12-2012

identifica el emisor. 2.- El creador Registro mediante un crate realiza una instancia de Venta. Justificacin de patrones: Creador: al ser Registro un objeto contenedor de Ventas se le asigna la responsabilidad de crear instancias de esta.

Figura 9: Diagrama de Colaboracin Ingresar Articulo Figura 9: Diagrama de Colaboracin Ingresar Articulo Figura 9: Diagrama de Colaboracin Ingresar Articulo

introducir Articulo ():

Figura 6. Diagrama de colaboracin introducir artculo. La Figura 6 muestra el diagrama de colaboracin que se lee como sigue: 1.- Se enva el mensaje introducir Articulo a una instancia de Registro No se identifica el emisor. 2.- La instancia de Registro delega la responsabilidad a Venta mediante el mensaje introducir Articulo. 3.- Venta utiliza el objeto global Catalogo Artculos para obtener y guardar una descripcin en su variable des, mediante el mensaje getDescripcion. 4.- Catalogo manda un mensaje para buscar en su coleccin de Descripcin Articulo, para satisfacer el mensaje recibido. 5.- Venta mediante un crate realiza una instancia de Lnea Venta. 6.- Venta enva un mensaje a su coleccin de Lnea Venta para aadir una Nueva Lnea Venta mediante el mensaje addLineaVenta. Justificacin de patrones: Controlador: Al ser Registro la clase que controla los eventos de este caso de uso, es este el que delega las responsabilidades. Creador: Al ser Venta un objeto contenedor de Lnea Venta se le asigna la responsabilidad de crear instancias de esta.

22

8-12-2012

Singleton: Al ser Catalogo Artculos una fuente de solo consulta, y ser consultada desde varias partes, se opt por hacer una instancia global. Experto en informacin: Al tener Catalogo toda la informacin para responder a la peticin de descripcin Articulo a ella se le delega la responsabilidad.

Finalizar venta (): Figura 7. Diagrama de colaboracin Finalizar Venta. La Figura 7 muestra el diagrama de colaboracin que se lee como sigue: 1.- Se enva el mensaje finalizar Venta a una instancia de Registro No se identifica el emisor. 2.- La instancia de Registro delega la responsabilidad de calcular el resultado a Venta mediante el mensaje getTotal. 3.- Venta utiliza su coleccin de Lnea Venta mediante el mensaje getSubTotal para satisfacer su responsabilidad. 4.- Lnea Venta obtiene el precio de su descripcin mediante el mensaje getPrecio. 5.-LineaVenta obtiene el descuento de su descripcin mediante el mensaje getDescuento. Justificacin de patrones: Controlador: Al ser Registro la clase que controla los eventos de este caso de uso, es este el que delega las responsabilidades. Experto en informacin: Al tener Venta y LineaVenta toda la informacin para responder a la peticin de sus mensajes a ellas se les delega la responsabilidad.

Realizar pag (): Figura 8. Diagrama de colaboracin Realizar Pago. La Figura 8 muestra el diagrama de colaboracin que se lee como sigue: 1.- Se enva el mensaje realizar Pag a una instancia de Registro No se identifica el emisor. 2.- La instancia de Registro delega la responsabilidad Venta mediante el
23

8-12-2012

mensaje realizar Pag. 3.- Venta crea una instancia de Pago mediante el mensaje crate. Justificacin de patrones: Controlador: Al ser Registro la clase que controla los eventos de este caso de uso, es este el que delega las responsabilidades. Creador: Al ser Venta la clase contenedora de pago, A ella se le da la responsabilidad de crear instancias de esta. DIAGRAMAS DE COLABORACION PARA FLUJOS ALTERNATIVOS Eliminar Articulo () Figura 10. Diagrama de colaboracin Eliminar Articulo.

La Figura 10 muestra el diagrama de colaboracin que se lee como sigue: 1.- Se enva el mensaje Eliminar Articulo a una instancia de Registro No se identifica el emisor. 2.- La instancia de Registro delega la responsabilidad Venta mediante el mensaje Eliminar Articulo. 3.- Venta busca en su coleccin de Lnea Venta el artculo. 4.- La misma coleccin Lnea Venta remueve el artculo. Justificacin de patrones: Controlador: Al ser Registro la clase que controla los eventos de este caso de uso, es este el que delega las responsabilidades. Experto en informacin: Venta es la nica con la informacin para poder eliminar un la lnea de venta.

CU10: Monitorear el Stock

Actualizar Inventario ():

Figura 9. Diagrama de colaboracin Actualizar Inventario. La Figura 9 muestra el diagrama de colaboracin que se lee como sigue:

24

8-12-2012

1.- Se enva el mensaje actualizar Inventario a una instancia de Sucursal No se identifica el emisor. 2.- La instancia de Sucursal delega la responsabilidad a Venta de obtener la lista de Lnea Venta mediante getListLineaVenta. 3.- Venta utiliza Buscar para recorrer su coleccin de LineaVenta. 4.- Por cada lnea Venta en la lista se manda a actualizar Inventario al Almacn. 5.- Almacn busca mediante la lnea de venta el stock de ese artculo en su coleccin de Stock. 6.- Almacn manda actualizara Stock mediante ese mensaje con la lnea de venta. 7.- despus de los cambios Almacn se Actualiza as mismo. Justificacin de patrones: Controlador: Sucursal y Almacn delegan responsabilidades. Singleton: Al ser Almacn una fuente de consulta, y el controlador de persistencia que ser usado en varias partes se opt por hacer una instancia global. Experto en informacin: Al tener venta la lista de Lnea Venta se le delega la responsabilidad de obtenerla.

Actualizar Stock (): Figura 10. Diagrama de colaboracin Actualizar el Stock. La Figura 10 muestra el diagrama de colaboracin que se lee como sigue: 1.- Se enva el mensaje actualizar Stock a una Instancia de Stock desde Almacn. 2.- Stock obtiene a que artculo se refiere recorriendo la lista mediante el getArticulosIterator. 3.- Stock remueve o quita el Artculo. Justificacin de patrones: Controlador: Al ser Almacn la clase que controla los eventos de este caso de

25

8-12-2012

uso, es este el que delega las responsabilidades. Experto en informacin: Al tener Stock la lista de artculos se le delega la responsabilidad de actualizarla.

Monitorear Stock ():

Figura 11. Diagrama de colaboracin Monitorear el Stock. La Figura 11 muestra el diagrama de colaboracin que se lee como sigue: 1.- Se enva el mensaje Monitorear Stock a una instancia de Stock desde Almacn. 2.- Stock obtiene su mnimo y su actual, de pendiendo del resultado de la condicin lanza un aviso. Justificacin de patrones: Experto en informacin: Stock es el nico capaz de saber el Stock mnimo que permiten los artculos.

PATRONES: Es una descripcin de problema y la solucin que se le puede aplicar a nuevos contextos; idealmente, proporciona consejos sobre el modo de aplicarlo en varias circunstancias y considerarlos puntos fuertes y compromisos. A continuacin se describe cada uno de los patrones que fueron utilizados.

Creador: Asignar a la clase B la responsabilidad de crear una instancia de la clase A si se cumple uno o ms de los casos siguientes: * B agrega objetos de A * B contiene objetos de A * B registra instancias de objetos de A * B tiene los datos de inicializacin que se pasarn a un objeto de A cuando
26

8-12-2012

sea creado (por tanto, B es un Experto con respecto a la creacin de A) B es un creador de los objetos de la clase A.

Experto en Informacin: Asignar una responsabilidad a la clase que tiene la informacin necesaria para realizar la responsabilidad

Controlador: Asignar la responsabilidad de recibir o manejar un evento del sistema a una clase que representa una de las siguientes opciones: * Representa el sistema global (controlador de fachada). * Representa la empresa u organizacin global (controlador de fachada). * Algo en el mundo real que es activo (ejemplo el rol de una persona) y que pueda participar en la tarea (Controlador de tareas). * Un manejador artificial de todos los eventos del sistema de un caso de uso (controlador de caso de uso). Utilice la misma clase controlador con todos los eventos del sistema en el mismo caso de uso.

Singleton: Consiste en crear una instancia de visibilidad global, es muy poco usado.

Diagrama de clases de diseo MODELO DE IMPLEMENTACION

CODIGO FUENTE

Loggin import clases.Vendedor;

27

8-12-2012

import java.awt.Frame; import java.util.*; import java.io.File; import com.db4o.Db4o; import com.db4o.ObjectContainer; import com.db4o.ObjectSet; import javax.swing.JOptionPane; public class logging extends javax.swing.JDialog { public logging(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); } @SuppressWarnings("unchecked") private void initComponents() { lblUsuario = new javax.swing.JLabel(); password = new javax.swing.JPasswordField(); lblPassword = new javax.swing.JLabel(); txtUsuario = new javax.swing.JTextField(); btnAceptar = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_ CLOSE); setTitle("Llevatelo"); getContentPane().setLayout(null); lblUsuario.setText("Usuario:"); getContentPane().add(lblUsuario); lblUsuario.setBounds(20, 20, 70, 14); getContentPane().add(password); password.setBounds(110, 50, 170, 30); lblPassword.setText("Password:"); getContentPane().add(lblPassword); lblPassword.setBounds(20, 60, 80, 14);
28

8-12-2012

getContentPane().add(txtUsuario); txtUsuario.setBounds(110, 10, 170, 30); btnAceptar.setText("Aceptar"); btnAceptar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnAceptarActionPerformed(evt); } }); getContentPane().add(btnAceptar); btnAceptar.setBounds(210, 90, 71, 23); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); setBounds((screenSize.width-315)/2, (screenSize.height-156)/2, 315, 156); }//

private void btnAceptarActionPerformed(java.awt.event.ActionEvent evt) { ObjectContainer db = Db4o.openFile("Llevatelo.yap"); Vendedor vend; ObjectSet obj = db.get(new Vendedor(0, this.txtUsuario.getText().trim(), this.password.getText().trim())); if(obj.hasNext()) { vend = (Vendedor)obj.next(); db.close(); this.setVisible(false); principal princ = new principal(); princ.setTitle("Llevatelo: "+ vend.getNombre()); princ.setVisible(true);

29

8-12-2012

} else { db.close(); JOptionPane.showMessageDialog(null, "El Usuario o la contrasea son incorrectos", "Error", JOptionPane.ERROR_MESSAGE); password.setText(""); } } public static void main(String args[]) { UI.setNimbusLookAndFeel(); java.awt.EventQueue.invokeLater(new Runnable() { public void run() { logging dialog = new logging(new javax.swing.JFrame(), true); dialog.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { System.exit(0); } }); dialog.setVisible(true); } }); } private javax.swing.JButton btnAceptar; private javax.swing.JLabel lblPassword; private javax.swing.JLabel lblUsuario; private javax.swing.JPasswordField password; private javax.swing.JTextField txtUsuario; }

Principal
30

8-12-2012

import clases.*; import clases.Sucursal; import java.awt.Frame; import java.util.*; import java.io.File; import com.db4o.Db4o; import com.db4o.ObjectContainer; import com.db4o.ObjectSet; public class principal extends javax.swing.JFrame { Sucursal sucursal; public principal() { initComponents(); sucursal = new Sucursal(); CatalogoArticulos.CreaInstancia(); ObjectSet obj = sucursal.getM_Almacen().db.get(CatalogoArticulos.class); //ObjectSet obj = db.get(CatalogoArticulos.class); CatalogoArticulos catalogo = (CatalogoArticulos)obj.next(); CatalogoArticulos.SetInstancia(catalogo); System.out.println(CatalogoArticulos.getDescripcionArticulo(1).getNombre( )); System.out.println(CatalogoArticulos.getDescripcionArticulo(1).getM_Artic ulos().size()); } @SuppressWarnings("unchecked") // private void initComponents() { jMenuBar1 = new javax.swing.JMenuBar(); jMenu1 = new javax.swing.JMenu(); mniSalir = new javax.swing.JMenuItem();

31

8-12-2012

jMenu2 = new javax.swing.JMenu(); jMenu4 = new javax.swing.JMenu(); mniNuevaVenta = new javax.swing.JMenuItem(); jMenu3 = new javax.swing.JMenu(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOS E); setTitle("Llevatelo"); getContentPane().setLayout(null); jMenu1.setText("Archivo"); mniSalir.setText("Salir"); mniSalir.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { mniSalirActionPerformed(evt); } }); jMenu1.add(mniSalir); jMenuBar1.add(jMenu1); jMenu2.setText("Edicion"); jMenuBar1.add(jMenu2); jMenu4.setText("Operacion"); mniNuevaVenta.setText("Nueva Venta"); mniNuevaVenta.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { mniNuevaVentaActionPerformed(evt); } }); jMenu4.add(mniNuevaVenta); jMenuBar1.add(jMenu4); jMenu3.setText("Acerca de..."); jMenuBar1.add(jMenu3); setJMenuBar(jMenuBar1);
32

8-12-2012

java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); setBounds((screenSize.width-789)/2, (screenSize.height-478)/2, 789, 478); }// private void mniNuevaVentaActionPerformed(java.awt.event.ActionEvent evt) { sucursal.iniciarTurno(); nuevaVenta obj = new nuevaVenta(new Frame(), true); obj.setSucursal(sucursal); obj.setRegistro(sucursal.getRegistro()); obj.setVisible(true);

} private void mniSalirActionPerformed(java.awt.event.ActionEvent evt) { System.exit(0); } public static void main(String args[]) { UI.setNimbusLookAndFeel(); java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new principal().setVisible(true); } }); } private javax.swing.JMenu jMenu1; private javax.swing.JMenu jMenu2; private javax.swing.JMenu jMenu3; private javax.swing.JMenu jMenu4; private javax.swing.JMenuBar jMenuBar1;

33

8-12-2012

private javax.swing.JMenuItem mniNuevaVenta; private javax.swing.JMenuItem mniSalir; }

nuevaVentana mport clases.*; import java.util.*; import java.io.File; import com.db4o.Db4o; import com.db4o.ObjectContainer; import com.db4o.ObjectSet; import java.awt.Frame; import javax.swing.JOptionPane; public class nuevaVenta extends javax.swing.JDialog { private Registro registro; private Sucursal sucursal; public nuevaVenta(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); lblTarjeta.setVisible(false); pago = "Efectivo"; panelCliente.setVisible(false); panelQuitar.setVisible(false);

} public void setSucursal(Sucursal sucursal) { this.sucursal = sucursal; } public void setRegistro(Registro registro) {
34

8-12-2012

this.registro = registro; registro.createNuevaVenta(); } @SuppressWarnings("unchecked") private void initComponents() { lblArticulo = new javax.swing.JLabel(); lblCantidad = new javax.swing.JLabel(); lblFolio = new javax.swing.JLabel(); txtPago = new javax.swing.JTextField(); btnAgregar = new javax.swing.JButton(); jScrollPane1 = new javax.swing.JScrollPane(); tableLV = new javax.swing.JTable(); lblImporte = new javax.swing.JLabel(); lblPago = new javax.swing.JLabel(); txtArticulo = new javax.swing.JTextField(); txtCantidad = new javax.swing.JTextField(); txtNserie = new javax.swing.JTextField(); txtImporte = new javax.swing.JTextField(); btnFinalizar = new javax.swing.JButton(); btnPagar = new javax.swing.JButton(); jLabel1 = new javax.swing.JLabel(); txtPagoTarjeta = new javax.swing.JTextField(); cmboPago = new javax.swing.JComboBox(); jLabel2 = new javax.swing.JLabel(); lblTarjeta = new javax.swing.JLabel(); btnClienteLeal = new javax.swing.JButton(); panelCliente = new javax.swing.JPanel(); jLabel3 = new javax.swing.JLabel(); txtCliente = new javax.swing.JTextField(); jLabel4 = new javax.swing.JLabel();

35

8-12-2012

txtMembrecia = new javax.swing.JPasswordField(); btnAceptar = new javax.swing.JButton(); btnCancelar = new javax.swing.JButton(); panelQuitar = new javax.swing.JPanel(); btnEliminar = new javax.swing.JButton(); btnCancelarQuitar = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_ CLOSE); setTitle("Llevatelo"); getContentPane().setLayout(null); lblArticulo.setText("Articulo:"); getContentPane().add(lblArticulo); lblArticulo.setBounds(190, 20, 70, 14); lblCantidad.setText("Cantidad:"); getContentPane().add(lblCantidad); lblCantidad.setBounds(370, 20, 80, 14); lblFolio.setText("N.Serie:"); getContentPane().add(lblFolio); lblFolio.setBounds(10, 20, 60, 14); txtPago.setEditable(false); txtPago.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { txtPagoActionPerformed(evt); } }); getContentPane().add(txtPago); txtPago.setBounds(640, 40, 110, 30); btnAgregar.setText("Agregar"); btnAgregar.addActionListener(new java.awt.event.ActionListener()

36

8-12-2012

{ public void actionPerformed(java.awt.event.ActionEvent evt) { btnAgregarActionPerformed(evt); } }); getContentPane().add(btnAgregar); btnAgregar.setBounds(570, 10, 90, 23); tableLV.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "idArticulo", "N. Serie", "Articulo", "Precio U.", "Cantidad", "Descuento", "Subtotal" } ){ boolean[] canEdit = new boolean [] { false, false, false, false, false, false, false }; public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); tableLV.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { tableLVMouseClicked(evt); } }); jScrollPane1.setViewportView(tableLV); getContentPane().add(jScrollPane1); jScrollPane1.setBounds(20, 90, 740, 200); lblImporte.setText("Importe:");
37

8-12-2012

getContentPane().add(lblImporte); lblImporte.setBounds(250, 320, 90, 14); lblPago.setText("Pago:"); getContentPane().add(lblPago); lblPago.setBounds(610, 320, 50, 14); getContentPane().add(txtArticulo); txtArticulo.setBounds(240, 10, 110, 30); getContentPane().add(txtCantidad); txtCantidad.setBounds(420, 10, 110, 30); getContentPane().add(txtNserie); txtNserie.setBounds(60, 10, 110, 30); txtImporte.setEditable(false); getContentPane().add(txtImporte); txtImporte.setBounds(300, 310, 110, 30); btnFinalizar.setText("Finalizar"); btnFinalizar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnFinalizarActionPerformed(evt); } }); getContentPane().add(btnFinalizar); btnFinalizar.setBounds(670, 10, 90, 23); btnPagar.setText("Pagar"); btnPagar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnPagarActionPerformed(evt); } }); getContentPane().add(btnPagar); btnPagar.setBounds(670, 350, 90, 23);

38

8-12-2012

jLabel1.setText("Descuento:"); getContentPane().add(jLabel1); jLabel1.setBounds(580, 50, 70, 14); getContentPane().add(txtPagoTarjeta); txtPagoTarjeta.setBounds(650, 310, 110, 30); cmboPago.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Efectivo", "Tarjeta" })); cmboPago.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cmboPagoActionPerformed(evt); } }); getContentPane().add(cmboPago); cmboPago.setBounds(470, 310, 110, 30); jLabel2.setText("Pago:"); getContentPane().add(jLabel2); jLabel2.setBounds(420, 320, 60, 14); lblTarjeta.setText("N. Tarjeta:"); getContentPane().add(lblTarjeta); lblTarjeta.setBounds(590, 320, 80, 14); btnClienteLeal.setText("Cliente Leal"); btnClienteLeal.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnClienteLealActionPerformed(evt); } }); getContentPane().add(btnClienteLeal); btnClienteLeal.setBounds(130, 310, 100, 23); panelCliente.setLayout(null); jLabel3.setText("Cliente:"); panelCliente.add(jLabel3);
39

8-12-2012

jLabel3.setBounds(10, 10, 70, 14); panelCliente.add(txtCliente); txtCliente.setBounds(70, 0, 90, 30); jLabel4.setText("Membrecia:"); panelCliente.add(jLabel4); jLabel4.setBounds(180, 10, 70, 14); panelCliente.add(txtMembrecia); txtMembrecia.setBounds(260, 0, 120, 30); btnAceptar.setText("Aceptar"); btnAceptar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnAceptarActionPerformed(evt); } }); panelCliente.add(btnAceptar); btnAceptar.setBounds(403, 10, 100, 23); getContentPane().add(panelCliente); panelCliente.setBounds(20, 340, 520, 40); btnCancelar.setText("Cancelar"); btnCancelar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnCancelarActionPerformed(evt); } }); getContentPane().add(btnCancelar); btnCancelar.setBounds(553, 350, 110, 23); panelQuitar.setLayout(null); btnEliminar.setText("Eliminar"); btnEliminar.addActionListener(new java.awt.event.ActionListener() {

40

8-12-2012

public void actionPerformed(java.awt.event.ActionEvent evt) { btnEliminarActionPerformed(evt); } }); panelQuitar.add(btnEliminar); btnEliminar.setBounds(140, 0, 100, 23); btnCancelarQuitar.setText("Cancelar"); btnCancelarQuitar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnCancelarQuitarActionPerformed(evt); } }); panelQuitar.add(btnCancelarQuitar); btnCancelarQuitar.setBounds(10, 0, 100, 23); getContentPane().add(panelQuitar); panelQuitar.setBounds(10, 50, 260, 30); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); setBounds((screenSize.width-789)/2, (screenSize.height-434)/2, 789, 434); }//

private void btnAgregarActionPerformed(java.awt.event.ActionEvent evt) { int filas = tableLV.getRowCount(); if(txtArticulo.getText().equals("") || txtCantidad.getText().equals("")) JOptionPane.showMessageDialog(null, "Los campos Articulo y Cantidad son obligatorios, Gracias", "Error", JOptionPane.ERROR_MESSAGE); else if(registro.VerificarID(Integer.parseInt(txtArticulo.getText()))) {

41

8-12-2012

if(registro.VerificarStock(Integer.parseInt(txtArticulo.getText()), Integer.parseInt(txtCantidad.getText()))) { if(txtNserie.getText().equals("")) { registro.introducirArticulo(Integer.parseInt(txtCantidad.getText()), Integer.parseInt(txtArticulo.getText()),0); String []encabezado = {"IdArticulo", "N.Serie", "Articulo", "Precio U.", "Cantidad", "Descuento", "Subtotal"}; tableLV.setModel(new javax.swing.table.DefaultTableModel( new Object [filas+1][encabezado.length] , encabezado )); Listlv = registro.getM_Venta().getM_LineaVenta(); String precio = lv.get(lv.size()-1).getDesc().getPrecio()+""; int descuento = lv.get(lv.size()-1).getDesc().getDescuento(); String subtotal = lv.get(lv.size()-1).getSubTotal()+""; System.out.println(); tick = new Ticket(this.txtArticulo.getText().trim(), this.txtNserie.getText().trim(), lv.get(lv.size()-1).getDesc().getNombre(), precio, this.txtCantidad.getText().trim(), descuento, subtotal); vec.add(tick); Iterator it = vec.iterator(); for(int i = 0; it.hasNext(); i++) { tick = (Ticket)it.next(); this.tableLV.setValueAt(tick.getIdArticulo(), i, 0); this.tableLV.setValueAt(tick.getNserie(), i, 1); this.tableLV.setValueAt(tick.getArticulo(), i, 2); this.tableLV.setValueAt(tick.getPrecioU(), i, 3); this.tableLV.setValueAt(tick.getCantidad(), i, 4); this.tableLV.setValueAt(tick.getDescuento(), i, 5); this.tableLV.setValueAt(tick.getSubTotal(), i, 6);
42

8-12-2012

} txtArticulo.setText(""); txtCantidad.setText(""); txtNserie.setText(""); }else { JOptionPane.showMessageDialog(null, "Este articulo no necesita Numero de serie", "Error", JOptionPane.ERROR_MESSAGE); } }else { JOptionPane.showMessageDialog(null, "La cantidad pedida es mayor al Stock actual", "Error", JOptionPane.ERROR_MESSAGE); } }else { if(txtNserie.getText().equals("")) JOptionPane.showMessageDialog(null, "Este articulo necesita numero de serie", "Error", JOptionPane.ERROR_MESSAGE); else if(registro.VerificarExistencia(Integer.parseInt(txtArticulo.getText()), Long.parseLong(txtNserie.getText()))) { if(Integer.parseInt(txtCantidad.getText()) == 1) { registro.introducirArticulo(Integer.parseInt(txtCantidad.getText()), Integer.parseInt(txtArticulo.getText()),Integer.parseInt(txtNserie.getText())); String []encabezado = {"IdArticulo", "N.Serie", "Articulo", "Precio U.", "Cantidad",

43

8-12-2012

"Descuento", "Subtotal"}; tableLV.setModel(new javax.swing.table.DefaultTableModel( new Object [filas+1][encabezado.length] , encabezado )); Listlv = registro.getM_Venta().getM_LineaVenta(); String precio = lv.get(lv.size()-1).getDesc().getPrecio()+""; int descuento = lv.get(lv.size()-1).getDesc().getDescuento(); String subtotal = lv.get(lv.size()-1).getSubTotal()+""; System.out.println(); tick = new Ticket(this.txtArticulo.getText().trim(), this.txtNserie.getText().trim(), lv.get(lv.size()-1).getDesc().getNombre(), precio, this.txtCantidad.getText().trim(), descuento, subtotal); vec.add(tick); Iterator it = vec.iterator(); for(int i = 0; it.hasNext(); i++) { tick = (Ticket)it.next(); this.tableLV.setValueAt(tick.getIdArticulo(), i, 0); this.tableLV.setValueAt(tick.getNserie(), i, 1); this.tableLV.setValueAt(tick.getArticulo(), i, 2); this.tableLV.setValueAt(tick.getPrecioU(), i, 3); this.tableLV.setValueAt(tick.getCantidad(), i, 4); this.tableLV.setValueAt(tick.getDescuento(), i, 5); this.tableLV.setValueAt(tick.getSubTotal(), i, 6);

} txtArticulo.setText(""); txtCantidad.setText(""); txtNserie.setText(""); }else

44

8-12-2012

{ JOptionPane.showMessageDialog(null, "Con Numero de serie la cantidad debe ser de : 1", "Error", JOptionPane.ERROR_MESSAGE); } }else { JOptionPane.showMessageDialog(null, "Ese numero de serie no existe", "Error", JOptionPane.ERROR_MESSAGE); } } }

private void btnFinalizarActionPerformed(java.awt.event.ActionEvent evt) { finalizo = true; btnAgregar.setVisible(false); txtImporte.setText(registro.finalizarVenta()+""); } private void btnPagarActionPerformed(java.awt.event.ActionEvent evt) { Almacen al; al = Almacen.crearInstancia(); if(pago.equals("Tarjeta")) { Banco banc; ObjectSet obj = al.db.get(Banco.class); while(obj.hasNext()) { banc = (Banco)obj.next(); if(banc.getTarjeta().equals(this.txtPagoTarjeta.getText())) {
45

8-12-2012

String nombre = banc.getCliente(); String tarjeta = banc.getTarjeta(); double saldo = banc.getSaldo(); if(Double.parseDouble(this.txtImporte.getText()) = 0) { JOptionPane.showMessageDialog(null, "Su cambio es de "+dif," Pesos", JOptionPane.INFORMATION_MESSAGE); registro.realizarPago(Double.parseDouble(this.txtImporte.getText()),D ouble.parseDouble(this.txtPagoTarjeta.getText()),"Efectivo"); List pedir = sucursal.actualizarInventario(registro.getM_Venta()); if(pedir.size() != 0) { LineaVenta lv; Iterator i = pedir.iterator(); while(i.hasNext()) { lv = (LineaVenta)i.next(); JOptionPane.showMessageDialog(null, "El articulo: "+ lv.getDesc().getNombre()+" se encuentra al minimo de inventario, pedirmas.", "Aviso", JOptionPane.INFORMATION_MESSAGE); } pedir.clear(); sucursal.setPedir(pedir); } dispose(); } else JOptionPane.showMessageDialog(null, "Lo sentimos, el pago es menor al importe", "no se puede realizar el pago", JOptionPane.INFORMATION_MESSAGE);

46

8-12-2012

} } private void cmboPagoActionPerformed(java.awt.event.ActionEvent evt) { pago = this.cmboPago.getSelectedItem()+""; if(pago.equals("Efectivo")) { lblTarjeta.setVisible(false); lblPago.setVisible(true); } else { lblTarjeta.setVisible(true); lblPago.setVisible(false); } } private void txtPagoActionPerformed(java.awt.event.ActionEvent evt) { } private void btnClienteLealActionPerformed(java.awt.event.ActionEvent evt) { panelCliente.setVisible(true); } private void btnAceptarActionPerformed(java.awt.event.ActionEvent evt) { Almacen al; al = Almacen.crearInstancia(); Cliente c = null; boolean cliente = false; ObjectSet obj = al.db.get(Cliente.class); for(int i = 0; obj.hasNext();)
47

8-12-2012

{ c = (Cliente)obj.next(); if(c.getNombre().equals(this.txtCliente.getText().trim())) if(c.getId_cliente() == Integer.parseInt(this.txtMembrecia.getText().trim())) cliente = true; } if(cliente == false) JOptionPane.showMessageDialog(null, "Cliente no registrado", "Error", JOptionPane.ERROR_MESSAGE); else { JOptionPane.showMessageDialog(null, "Cliente Correcto", "Gracias por su preferencia", JOptionPane.INFORMATION_MESSAGE); this.txtPago.setText("10%"); double nuevoImporte = Double.parseDouble(txtImporte.getText()) (Double.parseDouble(txtImporte.getText())*.1); txtImporte.setText(nuevoImporte+""); } } private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) { dispose(); } private void tableLVMouseClicked(java.awt.event.MouseEvent evt) { if(finalizo == false) { int row = tableLV.getSelectedRow(); txtNserie.setText(tableLV.getValueAt(row, 1)+"");

48

8-12-2012

txtArticulo.setText(tableLV.getValueAt(row, 0)+""); txtCantidad.setText(tableLV.getValueAt(row, 4)+""); btnAgregar.setVisible(false); btnFinalizar.setVisible(false); panelQuitar.setVisible(true); txtNserie.setEditable(false); txtArticulo.setEditable(false); txtCantidad.setEditable(false); } } private void btnCancelarQuitarActionPerformed(java.awt.event.ActionEvent evt) { txtNserie.setText(""); txtArticulo.setText(""); txtCantidad.setText(""); txtNserie.setEditable(true); txtArticulo.setEditable(true); txtCantidad.setEditable(true); panelQuitar.setVisible(false); btnAgregar.setVisible(true); btnFinalizar.setVisible(true); }

private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) { int filas = tableLV.getRowCount(); String []encabezado = {"IdArticulo", "N.Serie", "Articulo", "Precio U.", "Cantidad", "Descuento", "Subtotal"}; tableLV.setModel(new javax.swing.table.DefaultTableModel(

49

8-12-2012

new Object [filas-1][encabezado.length] , encabezado )); Iterator it = vec.iterator(); int tem=0; for(int i = 0; it.hasNext(); i++) { tick = (Ticket)it.next(); if(tick.getIdArticulo().equals(txtArticulo.getText().trim())) { tem = i; } } vec.remove(tem); registro.EliminarArticulo(tem); it = vec.iterator(); for(int i = 0; it.hasNext(); i++) { tick = (Ticket)it.next(); this.tableLV.setValueAt(tick.getIdArticulo(), i, 0); this.tableLV.setValueAt(tick.getNserie(), i, 1); this.tableLV.setValueAt(tick.getArticulo(), i, 2); this.tableLV.setValueAt(tick.getPrecioU(), i, 3); this.tableLV.setValueAt(tick.getCantidad(), i, 4); this.tableLV.setValueAt(tick.getDescuento(), i, 5); this.tableLV.setValueAt(tick.getSubTotal(), i, 6); } btnAgregar.setVisible(true); btnFinalizar.setVisible(true); panelQuitar.setVisible(false); txtArticulo.setText(""); txtCantidad.setText(""); txtNserie.setText("");
50

8-12-2012

} public static void main(String args[]) { UI.setNimbusLookAndFeel(); java.awt.EventQueue.invokeLater(new Runnable() { public void run() { nuevaVenta dialog = new nuevaVenta(new javax.swing.JFrame(), true); dialog.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { System.exit(0); } }); dialog.setVisible(true); } }); } private javax.swing.JButton btnAceptar; private javax.swing.JButton btnAgregar; private javax.swing.JButton btnCancelar; private javax.swing.JButton btnCancelarQuitar; private javax.swing.JButton btnClienteLeal; private javax.swing.JButton btnEliminar; private javax.swing.JButton btnFinalizar; private javax.swing.JButton btnPagar; private javax.swing.JComboBox cmboPago; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JScrollPane jScrollPane1;

51

8-12-2012

private javax.swing.JLabel lblArticulo; private javax.swing.JLabel lblCantidad; private javax.swing.JLabel lblFolio; private javax.swing.JLabel lblImporte; private javax.swing.JLabel lblPago; private javax.swing.JLabel lblTarjeta; private javax.swing.JPanel panelCliente; private javax.swing.JPanel panelQuitar; private javax.swing.JTable tableLV; private javax.swing.JTextField txtArticulo; private javax.swing.JTextField txtCantidad; private javax.swing.JTextField txtCliente; private javax.swing.JTextField txtImporte; private javax.swing.JPasswordField txtMembrecia; private javax.swing.JTextField txtNserie; private javax.swing.JTextField txtPago; private javax.swing.JTextField txtPagoTarjeta; private Registro reg; private Sucursal suc; private String pago; Vector vec = new Vector(); Ticket tick; DescripcionArticulo desc; boolean finalizo = false; }

Almacen package clases; import java.util.*; import com.db4o.Db4o; import com.db4o.ObjectContainer;


52

8-12-2012

import com.db4o.ObjectSet; import com.db4o.config.Configuration; import com.db4o.internal.Config4Impl; public class Almacen { private List m_Stock; private Pedidos m_Pedidos; private Stock nuevo; public ObjectContainer db; private static Almacen almacen; private Almacen() { m_Stock = new LinkedList(); ConnectDB(); }

public static Almacen crearInstancia() { if(almacen == null) almacen = new Almacen(); return almacen; } public void ConnectDB() { Configuration ci = Db4o.newConfiguration(); ci.activationDepth(20); ci.updateDepth(20); db = Db4o.openFile(ci,"Llevatelo.yap"); } public void updateAlmacen(Stock nuevo) {

53

8-12-2012

db.set(nuevo); CatalogoArticulos a = CatalogoArticulos.CreaInstancia(); db.set(a); db.commit(); } public void llenarAlmacen() { ObjectSet obj = db.get(Stock.class); while(obj.hasNext()) { m_Stock.add((Stock)obj.next()); } } public boolean actualizarInventario(LineaVenta lineaVenta) { Stock obj = buscarStock(lineaVenta); nuevo = obj.actualizarStock(lineaVenta); updateAlmacen(nuevo); if(obj.monitorearMinimo()) return true; return false; } private Stock buscarStock(LineaVenta lineaVenta) { Stock obj; int id_articulo = lineaVenta.getDesc().getId_articulo(); Iterator i = m_Stock.iterator(); while(i.hasNext()) { obj = (Stock)i.next(); if(obj.getId_stock() == id_articulo)
54

8-12-2012

{ return obj; } } return null; }

public boolean VerificarID(int idArticulo) { Articulo art; CatalogoArticulos cat; cat = CatalogoArticulos.CreaInstancia(); DescripcionArticulo desc = new DescripcionArticulo(); desc = cat.getDescripcionArticulo(idArticulo); if(desc.getM_Articulos() == null) return true; return false; } public boolean VerificarExistencia(int idArticulo,long numeroSerie) { CatalogoArticulos cat; cat = CatalogoArticulos.CreaInstancia(); DescripcionArticulo desc = new DescripcionArticulo(); desc = cat.getDescripcionArticulo(idArticulo); Iterator i = desc.getM_Articulos().iterator(); Articulo art; while(i.hasNext()) { art = (Articulo)i.next(); if(art.getNumeroSerie() == numeroSerie)

55

8-12-2012

return true; } return false; } public boolean VerificarStock(int idArticulo,int cantidad) { Stock obj; Iterator i = m_Stock.iterator(); while(i.hasNext()) { obj = (Stock)i.next(); if(obj.getId_stock() == idArticulo) { if(obj.getActual() >= cantidad) return true; }else return false; } return false; } public void setM_Stock(List m_Stock) { this.m_Stock = m_Stock; } }

Articulo package clases; public class Articulo { private long numeroSerie; public Articulo(){

56

8-12-2012

this.numeroSerie = 0; } public Articulo(long numeroSerie){ this.numeroSerie = numeroSerie; } public long getNumeroSerie() { return numeroSerie; } public void setNumeroSerie(long numeroSerie) { this.numeroSerie = numeroSerie; }

CatalogoArticulos package clases; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Vector; public class CatalogoArticulos { public Vector m_DescripcionArticulo; static CatalogoArticulos cat; public static CatalogoArticulos CreaInstancia() { if(cat == null) cat = new CatalogoArticulos(); return cat; } public static void SetInstancia(CatalogoArticulos s) {
57

8-12-2012

cat = s; } private CatalogoArticulos(){ m_DescripcionArticulo = new Vector(); } public int getSizeVector() { return m_DescripcionArticulo.size(); } public void addDescripcionArticulo(DescripcionArticulo desc) { m_DescripcionArticulo.add(desc); } public static DescripcionArticulo getDescripcionArticulo(int id_articulo){ // TODO: static CreaInstancia(); Iterator it = cat.m_DescripcionArticulo.iterator(); DescripcionArticulo desc; while(it.hasNext()) { desc = (DescripcionArticulo)it.next(); if(desc.getId_articulo() == id_articulo) return desc; } return null; } }

Cliente

58

8-12-2012

package clases; public class Cliente {

private int id_cliente; private String nombre; private String apellidos; private String telefono; private String direccion; @Override public String toString() { return "Cliente{" + "id_cliente=" + id_cliente + ", nombre=" + nombre + ", apellidos=" + apellidos + ", telefono=" + telefono + ", direccion=" + direccion+ '}'; } public String getApellidos() { return apellidos; } public void setApellidos(String apellidos) { this.apellidos = apellidos; } public String getDireccion() { return direccion; } public void setDireccion(String direccion) { this.direccion = direccion; } public int getId_cliente() { return id_cliente; } public void setId_cliente(int id_cliente) { this.id_cliente = id_cliente; }
59

8-12-2012

public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public String getTelefono() { return telefono; } public void setTelefono(String telefono) { this.telefono = telefono; } public Cliente(int id_cliente, String nombre, String apellidos, String telefono, String direccion) { this.id_cliente = id_cliente; this.nombre = nombre; this.apellidos = apellidos; this.telefono = telefono; this.direccion = direccion; } public Cliente(){ } public void finalize() throws Throwable {

} }

DescripcionArticulo package clases; import java.util.LinkedList; import java.util.List;


60

8-12-2012

public class DescripcionArticulo { @Override public String toString() { return "DescripcionArticulo{" + "id_articulo=" + id_articulo + ", nombre=" + nombre + ", descripcion=" + descripcion + ", descuento=" + descuento + ", precio=" + precio + '}'; } private int id_articulo; private String nombre; private String descripcion; private int descuento; private double precio; private List m_Articulos; public DescripcionArticulo(int id_articulo, String nombre, String descripcion, int descuento, double precio) { this.id_articulo = id_articulo; this.nombre = nombre; this.descripcion = descripcion; this.descuento = descuento; this.precio = precio; this.m_Articulos = new LinkedList(); } public int getId_articulo() { return id_articulo; }

public String getNombre() { return nombre; }

61

8-12-2012

public void setNombre(String nombre) { this.nombre = nombre; } public String getDescripcion() { return descripcion; } public int getDescuento() { return descuento; } public void setDescuento(int descuento) { this.descuento = descuento; } public void setDescripcion(String descripcion) { this.descripcion = descripcion; } public double getPrecio() { return precio; } public void setPrecio(double precio) { this.precio = precio; } public List getM_Articulos() { return m_Articulos; } public void setM_Articulos(List m_Articulos) { this.m_Articulos = m_Articulos; } public DescripcionArticulo(){ } public void finalize() throws Throwable {

62

8-12-2012

} }

LineaVenta package clases; public class LineaVenta { private int id_lineaVenta; private String fecha; private String hora; private int cantidad; private DescripcionArticulo desc; private int numeroSerie; public LineaVenta(DescripcionArticulo desc, int cantidad, int numeroSerie) { this.desc = desc; this.cantidad = cantidad; this.numeroSerie = numeroSerie; } public double getSubTotal() { return (desc.getPrecio()*cantidad)-( (desc.getPrecio()*cantidad) * (desc.getDescuento()/100.0)); } public int getCantidad() { return cantidad; } public void setCantidad(int cantidad) { this.cantidad = cantidad; } public DescripcionArticulo getDesc() { return desc;
63

8-12-2012

} public void setDesc(DescripcionArticulo desc) { this.desc = desc; } public String getFecha() { return fecha; } public void setFecha(String fecha) { this.fecha = fecha; } public String getHora() { return hora; } public void setHora(String hora) { this.hora = hora; } public int getId_lineaVenta() { return id_lineaVenta; } public void setId_lineaVenta(int id_lineaVenta) { this.id_lineaVenta = id_lineaVenta; } public int getNumeroSerie() { return numeroSerie; } }

Pago package clases;

64

8-12-2012

public class Pago { private int id_pago; private double pago; private double importe; private String tipo; public int getId_pago() { return id_pago; } public void setId_pago(int id_pago) { this.id_pago = id_pago; } public double getImporte() { return importe; } public void setImporte(double importe) { this.importe = importe; } public double getPago() { return pago; } public void setPago(double pago) { this.pago = pago; }

public String getTipo() { return tipo; } public void setTipo(String tipo) { this.tipo = tipo; } public Pago(double importe)
65

8-12-2012

{ this.importe = importe; } public double darCambio(double pago) { return pago - importe; } public void finalize() throws Throwable {

} }

Pedidos package clases; public class Pedidos { private int id_pedido; private String fecha; private String CentroDeDistribucion; private Stock[] stock; public Pedidos(){ } public void finalize() throws Throwable { } }

Registro package clases; public class Registro { private int id_registro; private String fecha; private Venta m_Venta;
66

8-12-2012

public Registro(){ } public void createNuevaVenta() { m_Venta = new Venta(); } public void introducirArticulo(int cantidad, int idArticulo, int numeroSerie) { m_Venta.introducirArticulo(cantidad, idArticulo, numeroSerie); } public void EliminarArticulo(int idArticulo) { m_Venta.EliminarArticulo(idArticulo); } public double finalizarVenta() { double total = m_Venta.getTotal(); return total; } public void realizarPago(double importe,double pago,String tipo) { m_Venta.realizarPago(importe,pago,tipo); } public boolean VerificarID(int idArticulo) { Almacen almacen; almacen = Almacen.crearInstancia(); return almacen.VerificarID(idArticulo);

67

8-12-2012

} public boolean VerificarExistencia(int idArticulo, long numeroSerie) { Almacen almacen; almacen = Almacen.crearInstancia(); return almacen.VerificarExistencia(idArticulo,numeroSerie); } public boolean VerificarStock(int idArticulo, int cantidad) { Almacen almacen; almacen = Almacen.crearInstancia(); return almacen.VerificarStock(idArticulo,cantidad); } public Venta getM_Venta() { return m_Venta; } public void setM_Venta(Venta m_Venta) { this.m_Venta = m_Venta; } }

Stock package clases; import java.util.Iterator; public class Stock { private int id_stock; private int actual; private int minimo; public Stock(int id_stock, int actual, int minimo) { this.id_stock = id_stock; this.actual = actual;
68

8-12-2012

this.minimo = minimo; } public int getId_stock() { return id_stock; } public Stock(){} public Stock actualizarStock(LineaVenta lv) { System.out.println(actual); if(lv.getNumeroSerie() != 0) { Articulo obj; Iterator i = lv.getDesc().getM_Articulos().iterator(); while(i.hasNext()) { obj = (Articulo)i.next(); System.out.println(obj.getNumeroSerie()); if(obj.getNumeroSerie() == lv.getNumeroSerie()) { lv.getDesc().getM_Articulos().remove(obj); this.actual = lv.getDesc().getM_Articulos().size(); break; } } }else { this.actual -= lv.getCantidad(); } System.out.println(actual); return this; }
69

8-12-2012

public boolean monitorearMinimo() {

70

Das könnte Ihnen auch gefallen