Punto de Venta

80
Jesús Farfán Luna 08/12/2012 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 documentación incluye el código fuente utilizado el cual sirve para darle mantenimiento a nuestro sistema.

Transcript of Punto de Venta

Page 1: Punto de Venta
Page 2: Punto de Venta

ÍNDICE

Fase De Inicio 1Documento visión 2Identificación de los procesos de negocio. 2Breve descripción de los procesos de negocio identificados: 2Introducción: 3Sentencia que define el problema 4Perspectiva del producto: 4REQUERIMIENTOS 6Funcionales 6No Funcionales (Calidad) 6Modelo de Casos de Uso 7Lista Actor-Semántica 7Lista Actor-Objetivo 8Lista de casos de uso: 9Descripción breve de cada caso de uso: 9Especificación Complementaria. 10Facilidad de uso: 10Fiabilidad 11Rendimiento 11Interfaces 11Interfaces y hardware destacables 11Interfaces de software 11Glosario 11Casos de uso completos: 13Caso de uso UC03: Registrar Venta 13Caso de uso UC10: Controlar el stock 16DIAGRAMAS DE CASO DE USO 17Fase De Elaboración 18Modelo de Dominio 19Diagramas de Secuencia del Sistema 19CU3: Registrar Ventas 19CU10: Controlar el Stock 20Contratos: 21Contratos del caso de uso Registrar Ventas 21Contratos del caso de uso Controlar el Stock 22Clases conceptuales: 23Diagramas de Clases del Dominio 23MODELO DE DISEÑO 24DIAGRAMAS DE COLABORACION 24CU3 Registrar Ventas: 24

1

Page 3: Punto de Venta

CU10: Monitorear el Stock 28Diagrama de clases de diseño 32MODELO DE IMPLEMENTACION 33CODIGO FUENTE 33Loggin 33Principal 35Nueva Ventana 37Almacén 51Articulo 54Catalogo Artículos 54Cliente 55Descripción Articulo 57Línea Venta 59Pago 60Pedidos 61Registro 61Stock 63Sucursal 64Ticket 66Vendedor 67Venta 68

-------------------------------------------------

2

Page 4: Punto de Venta

Fase De Inicio

Documento visiónIdentificación de los procesos de negocio.

  * Vender artículos de línea blanca.  * Comprar artículos a proveedores.  * Distribuir artículos por sucursales  * Obtener informes de venta de artículo de línea blanca.  * Realizar abonos de crédito  * Almacenar los artículos comprados a proveedores  * Surtir a sucursales con artículos  * Transportar los artículos del centro de distribución a los almacenes.  * Gestionar los descuentos de los artículos  * Obtener

Reportes de artículos por almacén de cada sucursal.

  * Informe de artículo no surtido del centro de distribución

Breve descripción de los procesos de negocio identificados:

Vender artículos de línea blanca.

Se realizara la venta de artículos solicitados por el cliente esta podría realizarse

a crédito o de contado, se tomaran en cuenta las políticas del negocio.

Comprar artículos a proveedores.

Se compraran artículos a los proveedores para venderlos después.

Distribuir de artículo por sucursales. 

Los centros de distribución surtirán a las sucursales que requieran artículos.

Obtener informes de venta de artículo de línea blanca. 

Este será un informe detallado de la venta realizada por algún artículo de línea

blanca, solo que este informe se realizara por sucursal y no en general.

Realizar abonos de crédito

3

Page 5: Punto de Venta

Cuando haya una transacción a crédito el pago se administrara de forma

diferente, la cual queda pendiente de definir.

Almacenar los artículos comprados a proveedores.

Se almacenaran en centros de distribución los artículos obtenidos de los

proveedores.

Surtir a sucursales con artículos.

Los almacenistas surtirán con artículos a sus sucursales cuando   esto sea

necesario.

Transportar los artículos del centro de distribución a los almacenes.

Los centros de distribución mantendrán el stock mismo de los almacenes de las

sucursales.

Gestionar los descuentos de los artículos

Algunos artículos puede tener porcentajes de descuentos o importe de

descuento.

Obtener reportes   de artículos por almacén de cada sucursal 

Se mostrara un reporte de los artículos que posea de momento cada sucursal

en su almacén.

Informe de artículo no surtido del centro de distribución 

Se realizara un informe de los artículos que no fueron surtidos en alguna de las

sucursales por los centros de distribución.

Introducción:

Este sistema permitirá   controlar   las actividades de venta e inventario de la

empresa. Lo cual supondrá un acceso rápido y sencillo a los datos, gracias a

interfaces gráficas sencillas y amigables. Además, los datos accedidos estarán

4

Page 6: Punto de Venta

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 crédito realizadas por los

clientes. Gestionar los pedidos realizados a los proveedores. Gestionar los

pedidos realizados a los centros de distribución. Gestionar los pedidos

realizados a los almacenes. |

afecta a | Propietario de la empresa. Gerente general. Jefe de Sucursal,

Vendedor, Almacenista, Jefe del centro de distribución, Proveedores, Clientes. |

Perspectiva del producto:

Sist. Centro de distribución.

Vendedor

Sist. Centro de Almacén.

  Sistema

“Llévatelo”

Jefe de sucursal

Invoca servicios de.

Invoca servicios de.

Sist. De impuestos.

5

Page 7: Punto de Venta

Gerente

Sist. De recursos humanos.

Almacenista

Objetivos de alto nivel y problemas claves del personal involucrado: después

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 rápido, robusto e integrado | Alta |

Pérdida 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 artículos existentes

permiten el procesamiento básico de ventas pero no abordan estos problemas |

Mantener el Stock mínimo de cada almacén de las sucursales. Haciéndolo de

manera consistente e integra. | Alta | Perdida de información de la existencia de

los artículos. En algún momento dado la sucursal se quede sin artículos. | Pedir

en el momento los artículos al centro de distribución. |

Consultar reportes | Alta | Proceso lento de toma de decisiones basadas en

datos erróneos, desactualizados o con información no consistente ni integra. |

Reportes manuales tediosos y confusos. |

REQUERIMIENTOS

Funcionales

  1. Realizar ventas al contado

  2. Realizar ventas a crédito realizando porcentaje de interés al precio de venta

(enganche

6

Page 8: Punto de Venta

10% del valor del artículo y el resto en mensualidades).

  3. Realizar ventas con tarjeta, utilizando el sistema autorización de pagos. 

  4. El artículo 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 distribución deberán mantener el stock mínimos de artículos

en cada almacén de las sucursales. 

  7. Una sucursal podrá solicitar directamente artículos al centro de distribución

que le pertenece.

  8. El sistema podrá generar consultas, para que el gerente pueda consultar la

existencia de artículos en un almacén de sucursal o centro de distribución,

detallado cuando se requiera el número de serie del artículo.

  9. El sistema podrá generar consultas al gerente de los informes de los

artículos vendidos por sucursal en un periodo de, detallando cuando se

requiera el número de serie del artículo.

  10. El sistema podrá generar consultas al gerente para saber el informe de los

artículos que no fueron surtidos por los centros de distribución a las diferentes

sucursales.

  11. El sistema podrá generar consultas para el gerente de las ventas que

realizaron los vendedores detallando los artículos 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 revisión.

  14. El sistema tendrá la capacidad de adaptarse a las reglas únicas de cada

sucursal y almacén 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 algún error y deberá manejar las operaciones a modo de

transacciones para que se efectúen de manera atómica.

7

Page 9: Punto de Venta

  17. El sistema deberá tener que procesar de manera rápida las ventas, así

como manejar un tiempo veloz de impresión 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-Semántica

Actor | Descripción |

Propietario de la empresa | Persona que está a cargo de la organización, es

aquel que toma las decisiones de importancia para la empresa. |

Gerente | Persona encargada de tener informes del desempeño de la empresa.

|

Almacenista | Persona encargada de llevar un control de los artículos 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 interactúa en las funciones de venta y captura de

datos en el sistema e interactúa con el cliente. |

Cliente directo | Cualquier persona que adquiera un artículo de la empresa. |

  Cliente leal |   Cualquier persona que porte una tarjeta de “cliente leal”. |

  Encargado del centro de           distribución |   Persona encargada de

administrar el centro de distribución y complacer las demandas del

almacenista. |

Lista Actor-Objetivo

Actor | Objetivo |

8

Page 10: Punto de Venta

Propietario de la empresa. |     1. Analizar la estadística de los procesos

administrativos   de la empresa.   2. Gestionar los descuentos a clientes.   3.

Gestionar los descuentos a artículos. |

Gerente. |     1. Generar   informes de existencia de artículos   en almacenes

y/o centros de distribución, detallado por número de serie.   2. Generar

informes de artículos vendidos por sucursal en un periodo, detallado por

número de seria cuando sea necesario.   3. Generar informes de artículos que

no fueron surtidos por los centros de distribución a las diferentes sucursales.  

4. Generar informes de las ventas que se realizaron los vendedores detallando

los artículos que vendió. |

Jefe de sucursal. |     1. Generar informe de los artículos existentes en el

almacén.   2. Solicitar artículos al centro de distribución.     3. Solicitar artículos

al almacén.     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 crédito.   3. Registrar ventas.   4. Cancelar ventas.   5. Eliminar

artículos

De la lista de venta.   6. Realizar abonos a las ventas de crédito. |

Almacenista. |     1. Registrar los artículos recibidos por el centro de

distribución.   2. Registrar los artículos salientes del almacén. |

Encargado del centro de           distribución. |     1. Generar informe de los

artículos existentes en los almacenes de cada sucursal.   2. Registrar los

artículos salientes del centro de distribución. |

Lista de casos de uso:

  * CU1: Generar informes.

  * CU2: Gestionar los descuentos.

  * CU3: Registrar ventas.

  * CU4: Realizar cobros.

  * CU5: Cancelar ventas.

9

Page 11: Punto de Venta

  * CU6: Realizar abonos.

  * CU7: Solicitar artículos.

  * CU8: Registrar artículos.

  * CU9: Consultar inventarios.

  * CU10: Controlar el stock.

Descripción breve de cada caso de uso:

CU1: Generar informes

El usuario con permisos necesarios, solicitara al sistema reportes relacionados

con los artículos y ventas del negocio, se ocupa más examinación aquí.

CU2: Gestionar los descuentos

El propietario de la empresa será capaz de gestionar tanto como los

descuentos sobre los artículos como los descuentos a los clientes, este

proceso tiene que ver con las políticas 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

artículos 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 crédito.

CU7: Solicitar artículos

El usuario con los permisos necesarios será capaz de solicitar artículos al

almacén o centro de distribución según el caso.

CU8: Registrar artículos

El usuario ya sea al almacenista o el centro de distribución, serán capaces de

registrar los artículos salientes y entrantes de su stock.

CU9: Consultar inventarios

10

Page 12: Punto de Venta

El usuario con permisos necesarios, será capaz de consultar el inventario para

obtener información de los artículos de este.

CU10: Controlar el stock

El sistema mismo será capaz de

Monitorear el stock de los almacenes de las sucursales asegurándose de que

siempre tengan el stock mínimo y actuando de manera automática ante ello,

estas son políticas del negocio y pueden cambiar o ser configurables.

Especificación Complementaria.

Facilidad de uso:

El cliente será capaz de ver la información en un gran monitor, por tanto:

  * Se debe ver el texto fácilmente a una distancia de 1 metro.

  * Evitar colores asociados con formas comunes de daltonismo.

El vendedor está mirando a menudo al cliente o los artículos, no a la pantalla

de la computadora, por tanto, se deben comunicar las señales y avisos con

sonidos, en lugar de sólo mediante gráficos.

El almacenista manejara una pantalla táctil y un Numpad para facilitar el control

de los artículos en el sistema, por lo tanto los botones deberán ser grandes y la

interfaz sencilla.

El encargado del centro de distribución   y jefe de sucursal no ocuparan algún

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 algún fallo cuando el sistema está haciendo alguna transacción,

ya sea de ventas o de inventario, se buscara solucionar de manera local el

problema. Se ocupa más análisis para este requisito.

Rendimiento

11

Page 13: Punto de Venta

Los gerentes, propietario de la empresa, encargado del centro de distribución,

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 táctil.

  * Escáner láser de código de barras.

  * Impresora de recibos.

  * Lector de tarjetas de crédito.

  * Numpad.

Interfaces de software

Se elaborara una interfaz de colaboración interna para comunicar los diversos

módulos del sistema.

Glosario

Interfaz.- Hace referencia al conjunto de métodos para lograr interactividad

entre un usuario y una computadora. Una interfaz puede ser del tipo GUI,

o línea de comandos, etc.   También 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 lógico o soporte lógico de

una computadora digital; comprende el conjunto de los componentes lógicos

necesarios que hacen posible la realización de tareas específicas.

Hardware.-Hardware   corresponde a todas las partes físicas y tangibles de una

computadora: sus componentes eléctricos, electrónicos, electromecánicos y

mecánicos; sus cables, gabinetes o cajas, periféricos de todo tipo y cualquier

otro elemento físico involucrado.

Stock.-Término de origen inglés que puede traducirse como existencias y que

designa principalmente las materias primas, productos semielaborados y

12

Page 14: Punto de Venta

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 almacén.

Gerente.-El termino gerente denomina a quien está a cargo de la dirección de

alguna organización, institución 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 táctil.-Una pantalla táctil 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 artículo.

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

precisión y satisfacer los intereses de los clientes.

Gerente: Quiere actualización automática y rápida del inventario.

Jefe de Sucursal: Quiere ser informado de las transacciones de las ventas de la

sucursal.

Vendedor: Quiere registrar la venta de los artículos de manera rápida y segura.

Cliente: Quiere adquirir un artículo.

Precondiciones:

13

Page 15: Punto de Venta

El vendedor se autentifico en el sistema.

Garantía 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 básico):

  1. El vendedor inicia una venta.

  2. El vendedor introduce el código del artículo.

  3. El sistema registra el artículo en la lista de venta presentando su

descripción, precio y suma parcial de la venta. El precio se calcula cumpliendo

las políticas de negocio.

El cajero repite los pasos 3 y 4 hasta que se indique.

  4. El sistema presenta el total respetando las políticas 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 mercancías.

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.   Código no valido:

  1. El sistema indica el error y rechaza la entrada.

3b.   Hay muchos artículos de la misma categoría y si estos no tienen número

de serie no es importante tenerlos en cuenta como una única identidad:

  1. El Vendedor introduce el código de la categoría del artículo y la cantidad

deseada.

3-6a.   El cliente pide al vendedor que elimine un artículo de la venta:

14

Page 16: Punto de Venta

  1. El vendedor introduce el código del artículo 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 opción de “CLEINTE LEAL”.

  2. El vendedor introduce el código del cliente

  3. El sistema el total, con los descuentos basado en las políticas del negocio.

5b. El cliente

Informa al vendedor que tiene crédito en su cuenta, para aplicar a la venta:

  1. El vendedor solicita la opción de crédito.

  2. En vendedor introduce el código del cliente.

  3. El sistema aplica el crédito hasta que el precio = 0, y reduce el crédito que

queda.

3a.   El cliente no cuenta con suficiente crédito:

  1. El vendedor le informa al cliente que no tiene suficiente crédito:

1a.   El cliente utiliza un método 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 método 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

Page 17: Punto de Venta

  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 añadir en tiempo de ejecución en los

pasos 3 y 7.

Lista de tecnología y variaciones de datos:

3a.   El identificador del artículo se introduce mediante un escáner laser de

código de barras o atreves del teclado.

Frecuencia: continúo.

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 artículos.

Gerente: Quiere que ninguna sucursal se quede sin artículos.

Jefe de Sucursal: Quiere que su sucursal no se quede sin artículos.

Cliente: Quiere encontrar el artículo que necesita en la sucursal.

Jefe de almacén: Mantener su Stock mínimo.

Precondiciones:

16

Page 18: Punto de Venta

Que se haiga registrado una venta.

Garantía de éxito (Postcondiciones). El sistema verifica el stock de cada

artículo, si se encuentra bajo manda un mensaje al centro de distribución para

que lleven los artículos faltantes.

Escenario Principal de éxito (Flujo básico):

  1. El sistema obtiene la venta recién registrada.

  2. El sistema obtiene la línea de venta con el artículo y la cantidad.

  3. El sistema actualiza la cantidad del artículo en el almacén.

  4. El sistema verifica que la nueva cantidad sea mayor a la mínima aceptable.

Repetir pasos del 2 al 4 hasta que se indique.

Extensiones (flujo alternativo).

3. La cantidad del artículo actual es 0.

3.a)- El sistema indica al vendedor del error y prosigue con la siguiente línea de

venta.

4. La cantidad del artículo es igual o menor a la mínima.

4.a)-El sistema envía un mensaje de notificación al jefe de la sucursal, al

gerente y al centro de distribución.

Requisitos especiales:

  * La actualización debe ser en tiempo real.

Frecuencia: continúo.

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 Llévatelo.

17

Page 19: Punto de Venta

Fase De Elaboración

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 límites del

sistema desde los actores a los sistemas.

CU3: Registrar Ventas

Figura 2. DSS del CU3: Registrar Ventas

A continuación 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 continuación 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

Mínimo.

Figura 3. DSS Monitorear el Stock

Contratos:

Contratos del caso de uso Registrar Ventas

Contrato C01: Crear Nueva Venta

18

Page 20: Punto de Venta

Operación: 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

Operación: introducir Articulo()

Referencias Cruzadas: Caso de uso registrar venta

Precondiciones: Exista una venta en curso

Post condiciones:

  1) Se creó la instancia Línea De Venta ldv

  2) Ldv se asocia con la venta actual

  3) Ldv se asocia con una Descripción Del Articulo

Contrato C03: Finalizar Venta

Operación: 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ó

Operación: realizar Pagó (cantidad)

Referencias Cruzadas: Caso de uso registrar venta

Precondiciones: Venta finalizada.

Post Condiciones: 

  1) Venta. Liquidada pasó a ser verdadero

19

Page 21: Punto de Venta

Contrato C05: verificar Stock

Operación: verificar Stock (artículos)

Referencias Cruzadas: Caso de uso Verificar el Stock

Precondiciones: Venta finalizada.

Post Condiciones: 

  1) Si la cantidad de artículos 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

Operación: Actualizar Inventario ()

Referencias cruzadas: Controlar el stock.

Precondiciones: Se registró una venta.

Post condiciones: 

  1) Instancia de Venta se asoció con el stock momentáneamente.

Contrato C07: Actualizar el stock del articulo

Operación: 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 artículo.

Contrato C08: Monitorear mínimo de stock del articulo

Operación: Monitorear Stock ()

Referencias cruzadas: Controlar el stock.

Precondiciones: Se actualizo la cantidad de un artículo.

20

Page 22: Punto de Venta

Post condiciones: 

  1) Se manda una notificación.

Clases conceptuales:

1.- Cliente

2.- Articulo

3.- Vendedor

4.- Registro

5.- Sucursal

6.- Venta

7.- Línea de venta

8.- Descripción del artículo

9.- Pago

10.- Almacén

11.- Centro de distribución

Diagramas de Clases del Dominio

Figura 4. Diagrama de clases del dominio

MODELO DE DISEÑO

DIAGRAMAS DE COLABORACION

Los diagramas de colaboración 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 colaboración crear nueva venta.

La Figura 5 muestra el diagrama de colaboración que se lee como sigue:

1.- Se envía un mensaje a Crea Nueva Venta al creador registro, no se

21

Page 23: Punto de Venta

identifica el emisor.

2.- El creador Registro mediante un créate realiza una instancia de Venta.

Justificación 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 Colaboración   Ingresar Articulo

Figura 9: Diagrama de Colaboración   Ingresar Articulo

Figura 9: Diagrama de Colaboración   Ingresar Articulo

introducir Articulo ():

Figura 6. Diagrama de colaboración introducir artículo.

La Figura 6 muestra el diagrama de colaboración que se lee como sigue:

1.- Se envía 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 Artículos para obtener y guardar una

descripción en su variable des, mediante el mensaje “getDescripcion”.

4.- Catalogo manda un mensaje para buscar en su colección de Descripción

Articulo, para satisfacer el mensaje recibido.

5.- Venta mediante un créate realiza una instancia de Línea Venta.

6.- Venta envía un mensaje a su colección de Línea Venta para añadir una

Nueva Línea Venta mediante el mensaje addLineaVenta.

Justificación 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 Línea Venta se le asigna la

responsabilidad de crear instancias de esta.

22

Page 24: Punto de Venta

Singleton: Al ser Catalogo Artículos una fuente de solo consulta, y será

consultada desde varias partes, se optó por hacer una instancia global.

Experto en información: Al tener Catalogo toda la información para responder a

la petición de descripción Articulo a ella se le delega la responsabilidad.

Finalizar venta ():

Figura 7. Diagrama de colaboración Finalizar Venta.

La Figura 7 muestra el diagrama de colaboración que se lee como sigue:

1.- Se envía 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 colección de Línea Venta mediante el mensaje getSubTotal

para satisfacer su responsabilidad.

4.- Línea Venta obtiene el precio de su descripción mediante el mensaje

getPrecio.

5.-LineaVenta obtiene el descuento de su descripción mediante el mensaje

getDescuento.

Justificación 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 información: Al tener Venta y LineaVenta toda la información para

responder a la petición de sus mensajes a ellas se les delega la

responsabilidad.

Realizar pagó ():

Figura 8. Diagrama de colaboración Realizar Pago.

La Figura 8 muestra el diagrama de colaboración que se lee como sigue:

1.- Se envía 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

Page 25: Punto de Venta

mensaje realizar Pagó.

3.- Venta crea una instancia de Pago mediante el mensaje créate.

Justificación 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 colaboración Eliminar Articulo.

La Figura 10 muestra el diagrama de colaboración que se lee como sigue:

1.- Se envía 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 colección de Línea Venta el artículo.

4.- La misma colección Línea Venta remueve el artículo.

Justificación 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 información: Venta es la única con la información para poder

eliminar un la línea de venta.

CU10: Monitorear el Stock

Actualizar Inventario ():

Figura 9. Diagrama de colaboración Actualizar Inventario.

La Figura 9 muestra el diagrama de colaboración que se lee como sigue:

24

Page 26: Punto de Venta

1.- Se envía 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 Línea Venta mediante getListLineaVenta.

3.- Venta utiliza Buscar para recorrer su colección de LineaVenta.

4.- Por cada línea Venta en la lista se manda a actualizar Inventario al

Almacén.

5.- Almacén busca mediante la línea de venta el stock de ese artículo en su

colección de Stock.

6.- Almacén manda actualizara Stock mediante ese mensaje con la línea de

venta.

7.- después de los cambios Almacén se Actualiza así mismo.

Justificación de patrones:

Controlador: Sucursal y Almacén delegan responsabilidades.

Singleton: Al ser Almacén una fuente de consulta, y el controlador de

persistencia que será usado en varias partes se optó por hacer una instancia

global.

Experto en información: Al tener venta la lista de Línea Venta se le delega la

responsabilidad de obtenerla.

Actualizar Stock ():

Figura 10. Diagrama de colaboración Actualizar el Stock.

La Figura 10 muestra el diagrama de colaboración que se lee como sigue:

1.- Se envía el mensaje actualizar Stock a una

Instancia de Stock desde Almacén. 

2.- Stock obtiene a que artículo se refiere recorriendo la lista mediante el

getArticulosIterator.

3.- Stock remueve o quita el Artículo.

Justificación de patrones:

Controlador: Al ser Almacén la clase que controla los eventos de este caso de

25

Page 27: Punto de Venta

uso, es este el que delega las responsabilidades.

Experto en información: Al tener Stock la lista de artículos se le delega la

responsabilidad de actualizarla.

Monitorear Stock ():

Figura 11. Diagrama de colaboración Monitorear el Stock.

La Figura 11 muestra el diagrama de colaboración que se lee como sigue:

1.- Se envía el mensaje Monitorear Stock a una instancia de Stock desde

Almacén. 

2.- Stock obtiene su mínimo y su actual, de pendiendo del resultado de la

condición lanza un aviso.

Justificación de patrones:

Experto en información: Stock es el único capaz de saber el Stock mínimo que

permiten los artículos.

PATRONES:

Es una descripción de problema y la solución 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 continuación 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 más 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 inicialización que se pasarán a un objeto de A cuando

26

Page 28: Punto de Venta

sea creado (por tanto, B es un Experto con respecto a la creación de A)

B es un creador de los objetos de la clase A.

Experto en Información:

Asignar una responsabilidad a la clase que tiene la información 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 organización 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 diseño

MODELO DE IMPLEMENTACION

CODIGO FUENTE

Loggin

import clases.Vendedor;

27

Page 29: Punto de Venta

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_CLOS

E);

        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);

28

Page 30: Punto de Venta

        lblPassword.setBounds(20, 60, 80, 14);

        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());

29

Page 31: Punto de Venta

            princ.setVisible(true);

        }

        else

{

            db.close();

            JOptionPane.showMessageDialog(null, "El Usuario o la contraseña 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;

}

30

Page 32: Punto de Venta

Principal

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_Articulos()

.size());

}

    @SuppressWarnings("unchecked")

    // 

    private void initComponents() {

        jMenuBar1 = new javax.swing.JMenuBar();

31

Page 33: Punto de Venta

        jMenu1 = new javax.swing.JMenu();

        mniSalir = new javax.swing.JMenuItem();

        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_CLOSE);

        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...");

32

Page 34: Punto de Venta

        jMenuBar1.add(jMenu3);

        setJMenuBar(jMenuBar1);

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;

33

Page 35: Punto de Venta

    private javax.swing.JMenu jMenu4;

    private javax.swing.JMenuBar jMenuBar1;

    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;

    }

34

Page 36: Punto de Venta

    public void setRegistro(Registro registro)

    {

        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();

35

Page 37: Punto de Venta

        txtCliente = new javax.swing.JTextField();

        jLabel4 = new javax.swing.JLabel();

        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_CLOS

E);

        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);

36

Page 38: Punto de Venta

        btnAgregar.setText("Agregar");

        btnAgregar.addActionListener(new java.awt.event.ActionListener()

{

            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);

37

Page 39: Punto de Venta

        getContentPane().add(jScrollPane1);

        jScrollPane1.setBounds(20, 90, 740, 200);

        lblImporte.setText("Importe:");

        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);

            }

38

Page 40: Punto de Venta

        });

        getContentPane().add(btnPagar);

        btnPagar.setBounds(670, 350, 90, 23);

        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);

39

Page 41: Punto de Venta

        panelCliente.setLayout(null);

        jLabel3.setText("Cliente:");

        panelCliente.add(jLabel3);

        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);

40

Page 42: Punto de Venta

        panelQuitar.setLayout(null);

        btnEliminar.setText("Eliminar");

        btnEliminar.addActionListener(new java.awt.event.ActionListener() {

            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

41

Page 43: Punto de Venta

        if(registro.VerificarID(Integer.parseInt(txtArticulo.getText())))

        {

          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);

42

Page 44: Punto de Venta

                        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

                {

                    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)

                {

43

Page 45: Punto de Venta

                    registro.introducirArticulo(Integer.parseInt(txtCantidad.getText()),

Integer.parseInt(txtArticulo.getText()),Integer.parseInt(txtNserie.getText()));

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);

                    }         

                    txtArticulo.setText("");

44

Page 46: Punto de Venta

                    txtCantidad.setText("");

                    txtNserie.setText("");

}else

                {

                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())

            {

45

Page 47: Punto de Venta

                banc = (Banco)obj.next();

                if(banc.getTarjeta().equals(this.txtPagoTarjeta.getText()))

{

                    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()),Double.par

seDouble(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();

            }

46

Page 48: Punto de Venta

            else

                JOptionPane.showMessageDialog(null, "Lo sentimos, el pago es

menor al importe", "no se puede realizar el pago",

JOptionPane.INFORMATION_MESSAGE);

}

    }                                         

    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();

47

Page 49: Punto de Venta

Cliente c = null;

        boolean cliente = false;

        ObjectSet obj = al.db.get(Cliente.class);       

        for(int i = 0; obj.hasNext();)

        {

            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) {              

48

Page 50: Punto de Venta

        if(finalizo == false)

        {

            int row = tableLV.getSelectedRow();

            txtNserie.setText(tableLV.getValueAt(row, 1)+"");

            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

49

Page 51: Punto de Venta

[]encabezado = {"IdArticulo", "N.Serie", "Articulo", "Precio U.", "Cantidad",

"Descuento", "Subtotal"};       

        tableLV.setModel(new javax.swing.table.DefaultTableModel(

        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);

50

Page 52: Punto de Venta

        txtArticulo.setText("");

        txtCantidad.setText("");

        txtNserie.setText("");

    }                                           

    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;

51

Page 53: Punto de Venta

    private javax.swing.JLabel jLabel3;

    private javax.swing.JLabel jLabel4;

    private javax.swing.JScrollPane jScrollPane1;

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;

52

Page 54: Punto de Venta

import java.util.*;

import com.db4o.Db4o;

import com.db4o.ObjectContainer;

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"); 

53

Page 55: Punto de Venta

        }

        public void updateAlmacen(Stock nuevo)

        {

            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())

54

Page 56: Punto de Venta

            {

                obj = (Stock)i.next();

                if(obj.getId_stock() == id_articulo)

                {

                    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())

        {

55

Page 57: Punto de Venta

            art = (Articulo)i.next();

            if(art.getNumeroSerie() == numeroSerie)

                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 {

56

Page 58: Punto de Venta

private long numeroSerie;

public Articulo(){

            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;

        }

57

Page 59: Punto de Venta

        public static void SetInstancia(CatalogoArticulos s)

        {

            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;

}

}

58

Page 60: Punto de Venta

Cliente

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) {

59

Page 61: Punto de Venta

        this.id_cliente = id_cliente;

    }

    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;

60

Page 62: Punto de Venta

import java.util.LinkedList;

import java.util.List;

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() {

61

Page 63: Punto de Venta

return nombre;

}

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(){

}

62

Page 64: Punto de Venta

public void finalize() throws Throwable {

}

}

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;

    }

63

Page 65: Punto de Venta

    public DescripcionArticulo getDesc() {

        return desc;

    }

    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;

}

}

64

Page 66: Punto de Venta

Pago

package clases;

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;

65

Page 67: Punto de Venta

    }

public Pago(double importe)

{

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;

66

Page 68: Punto de Venta

private String fecha;

private Venta m_Venta;

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;

67

Page 69: Punto de Venta

            almacen = Almacen.crearInstancia();

            return almacen.VerificarID(idArticulo);

        }

        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) {

68

Page 70: Punto de Venta

        this.id_stock = id_stock;

this.actual = actual;

        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);

69

Page 71: Punto de Venta

        return this;

    }

    public boolean monitorearMinimo()

    {

70