Tutorial vídeo club
#1
Posted 14 February 2015 - 03:06 AM
Lo haré introduciendo partes 1 ó 2 veces a la semana, cuando me sea posible incluso más. La herramientas que usare son:
La biblioteca de iconos: Cristal clear
Para crear las tablas y la base de datos: Ibexpert P.E. (Edición personal)
El motor de base de datos: Firebird 2.5
El Delphi 2010 y sus componentes estándar
Para los informes: El Report manager
Y para los diagramas que presento el Diagram desing
Salvo el delphi el resto o son gratuitos o son para uso personal
Intentaré que sea sencillo de entender, corregidme si no es así y para todos los niveles, pero no explicaré como hacer la base de datos, ya que hay un muy buen tutorial en el club que lo explica.
¿Por qué sobre un vídeo club? Sencillo, es un tipo de negocio en decadencia, además fue mi primer gran proyecto en clipper y tiene conceptos que podremos extrapolar a otros programas.
¿Qué no encontraremos? por ejemplo tablas maestro detalle como tales
¿Qué si encontraremos? El uso de varios sistemas y el aprovechamiento por lo menos en parte de nuevas tecnologías
Algo de historia
El vídeo club nació con las primeras películas en vídeo beta, sistema 2000 y Vhs, siendo el franco ganador este último sistema a pesar de no ser el más eficiente ni el de mejor calidad, ya que el beta tenía mejor revolución y el sistema 2000 era el más avanzado de todos ellos.
Los tiempos fueron avanzando y vino el dvd y el Blue-Ray, pero también los juegos de múltiples consolas que también se fueron añadiendo a productos alquilables y por lo tanto pertenecientes a los vídeo clubs.
En los últimos años estos han decaído como muchas otras cosas, en parte por los canales satélites y derivados y en parte por la crisis. Pero aun subsisten algunos teniendo que adaptarse a los tiempos, por lo que tienen salas para llamadas, fotocopiadoras, fax, golosinas, vaporizadores y un largo etc. de productos y servicios
Nosotros nos vamos a quedar en la parte media, no dedicándonos a otra cosa que el alquiler y la venta de nuestras películas y juegos, para este tutorial.
Programare como si se tratase de un sistema moderno tipo TPV, pero sin entrar en visores, impresoras de tickets y cajoneras, aunque dejándolo apunto para que os sea fácil añadírselo, si intentando implementar otros sistemas a nuestro programa.
Por último quiero pedir disculpas por algunas de mis faltas de ortografía que seguro las habrá, pero con 46 años me han detectado que tengo una epilepsia cada año descubro partes más jodidas de mi Las he descubierto por que al escribir mis libros repetía una y mil veces los mismos fallos y tras hacerme un analisis y la doctora comprobar que sabía esas normas ortográficas y que también sabía como se escribían esas palabras casi el 90% de las veces lo hacía mal.
#2
Posted 14 February 2015 - 03:16 AM
Es la tabla que mantendrá los datos de nuestro Vídeo Club, como podéis ver llevara una serie de numeradores para nuestro sistema, usando en este caso numeradores simples, sin otro tipo de caracteres, por lo que he optado por tipo integer, ya que usaremos sistemas de búsqueda por SQL.
Además he añadido en esta tabla el poder poner un día en el que hagamos ofertas tipo integer también siendo mi idea que el 1 sea lunes al 7 que sea domingo.
También usaremos un sistema de colores para saber si la unidad esta disponible, alquilada o bloqueada por otro motivo.
Cómo el tema del impuesto es otro añadido que cambia según la zona o el país, no uso uno especifico pidiendo el nombre y el porcentaje a aplicar. Por cierto nuestros precios finales ya tienen el impuesto incluido, dato a tener en cuenta, ya que no aparecerá como tal.
Por último como trabajamos con datos tendremos nivel de acceso y por lo tanto la Ley de protección de datos, poniendo un campo memo con el texto que aparecerá en nuestros documento y emails.
#3
Posted 14 February 2015 - 03:31 AM
Como ya hemos comentado en los vídeo clubs ya no se se alquila sólo películas, por lo que nuestra base que contenga los datos se llamará UNIDADES, en esta tabla me extenderé en algunos campos explicándolos un poco más.
ALQUILADA_VECES: nos indicará el número de veces que la unidad ha sido alquilada, podríamos sacarlo mediante SQL, pero hay ciertos datos que prefiero tratar así directamente
VALOR_ALQUILER: Es el código de una tabla con el mismo titulo, en ella estableceremos varios datos que estimaran su precio y demás, ya lo veremos más adelante
FORMATO: Se refiere al formato físico, pero también al formato de soporte Ejemplos: DVD, BLue-Ray, JUEGO PS3, etc.
GENERO: al genero de película o juego del que trata esta unidad
FECHA_ALTA y FECHA_BAJA: Día en que damos de alta a la unidad y en la que le damos de baja, pero esta última se puede cambiar, ya veremos por qué un poco más abajo
COSTE y REDIMIENTO: El primero es cuanto nos ha costado la unidad, el segundo es un campo que incrementará cada vez que la unidad se alquile o cuando se venda
DISPONIBLE: La unidad esta disponible para su alquiler o venta haremos que admita S o N simplemente
VENDIDA: LA unidad ha sido vendida, por lo que no aparecerá en nuestras búsquedas para alquilar y cambiara el disponible a N y la fecha de la baja será la de la venta, no dejándola cambiar
PERDIDA: La unidad no se encuentra, este es nuestro campo, al igual que vendida nos rellena los campos disponible y fecha de baja, pero al recuperarla, podremos seguir usándola nuevamente, por esto la fecha de baja no es fija, salvo que este vendida
NOTAS: este es un campo de incidencia sobre la unidad, por si un cliente se queja de un problema y seguimos adelante con el alquiler y otros expresasen el mismo problema, poder tener un registro del mismo
#5
Posted 14 February 2015 - 03:40 AM
Será la tabla que controle a nuestros empleados, como podéis ver la he reducido bastante, para que sea más manejable el tutorial, pudiendo añadir muchos más campos
NIVEL:Será el nivel de nuestro usuario, según este podrá obtener más datos en ciertas pantallas (Por ejemplo el coste y el rendimiento en la unidades) o acceder a ciertos apartados del programa estándole vetados el resto
CLAVE:Será la clave que elija nuestro usuario, apareciendo codificado en el programa, para lo que usaremos una función que se encargara de administrar el sistema
#6
Posted 14 February 2015 - 03:44 AM
Esta es la tabla a la que hacíamos referencia en la tabla UNIDADES, comentaré algunos campos
DIAS: El número de días de alquiler, contando siempre desde la fecha del alquiler
PRECIO y PRECIO_OFERTA: es el precio del alquiler en días normales y los días de oferta según la tabla CONFIGURACION
PENALIZACION_DIA: Es la recarga que aplicaremos por cada día de retraso en devolver la unidad
#7
Posted 14 February 2015 - 03:48 AM
Son varias tablas auxiliares sin mucho que comentar sobre ellas, salvo de la última, ya que al tratarse de un sistema TPV podríamos pagar con tarjeta, por lo que lo lógico es que tengamos la imagen de estas para seleccionar, junto a otros muchos sistemas, desde efectivo, bonos, mixto, etc., haciéndolo más rápido de esta manera.
#9
Posted 14 February 2015 - 03:54 AM
Como podéis ver esta es una tabla idéntica a la de caja o casi, pero la necesitamos independiente para el tema de recibos, facturas o tickets, teniendo en cuenta que el campo cantidad puede ir en positivo o negativo, según sea un cobro (la penalización de un cliente o el a cuenta del mismo, etc.) o pagos (Una remesa nueva de unidades, material auxiliar, etc.)
#10
Posted 14 February 2015 - 04:06 AM
La parte central del programa, es el alquiler y esta es nuestra tabla por lo que detallare sus campos principales
REGISTRO: es el registro de nuestro numerador, debemos tener en cuenta que si hay varios alquileres a la vez tendrán el mismo número de registro. Importante es especificar que digo a la vez y no al día ya que por una parte puede venir el marido y por el otro la mujer o hijos, dándole a cada uno un registro diferente
UNIDAD, CLIENTE, USUARIO: El el código de cada uno
DIA_ALQUILER:Es la fecha en que alquilamos
DIA_DEVOLUCION_PREVISTO: es para cuando estimamos la devolución, se que podríamos tomarlo del VALOR Alquiler usando SQL con esta tabla y la de unidades de la que ya conocemos el código, pero que pasa si hemos cambiado ese campo en VALOR_ALQUILER mientras la unidad estaba alquilada, no nos cuadraría por eso lo registramos
DIA_DEVOLUCION: El verdadero día en que se nos devuelve la unidad, fundamental para calcular la penalización
PAGADA: Nos dirá si este alquiler ya ha sido pagado
RECARGO: Si este alquiler ha generado recargo
VALOR_RECARGO_DIA: Lo registramos por el mismo motivo que DIA_DEVOLUCION_PREVISTO
Como podéis ver no hay un campo que ponga el valor del alquiler, se lo podríamos añadir, pero no lo veo imprescindible, ya que como veremos más adelante, el cliente tiene una serie de opciones y en caso de no pagarla se registra en su pendiente.
#11
Posted 14 February 2015 - 04:09 AM
Por cierto la Base de datos había pensado en llamarla VIDEOCLUB.
Lo próximo es unos diagramas de algunos de los apartados del programa, para ir haciendo boca
#12
Posted 14 February 2015 - 04:18 AM
Intento expresar según el siguiente diagrama el como veo que debería ir el funcionamiento del programa, como es lógico aunque esta puesto linealmente, esto no es real, ya que podemos saltar de un campo a otro.
Aspectos importantes son el genero y el formato, donde creo que no se deberían omitir el dato.
Al introducir la caratula podríamos optar por cargar una imagen, bajarla de internet o omitirla, alguien me dijo de escanearla, pero no se como hacerlo sin usar códigos de terceros, que es lo que quiero evitar en el tutorial, esquivando incluso los míos. Si se animan adelante .
Por último pedimos una cantidad de entrada, ya que podemos haber comprado varios DVD con el mismo título, al poner esta cantidad, el genera con los mismos datos el resto ahorrándonos el trabajo y asignándole a cada uno un código. Importante es que los grabará con los mismos datos a todos, por lo que si hemos comprado 3 Dvd y 3 Blue-Ray, tendremos que hacerlo por separado o más fácilmente editar 3 de las que se hayan generado.
#13
Posted 14 February 2015 - 04:24 AM
Como veis aquí expreso mi idea de como sería el alquiler, no lo comentaré ya que lo haremos cuando estemos en dicho módulo. Si hay dudas sobre alguna de las partes comentarlo en este tema e intentaré responder a ello
Por último añado el esquema de entradas, lo mismo que en el anterior, no lo comentaré de momento.
[img width=424 height=600]http://nsae02.casimages.net/img/2015/02/14/150214112321429522.jpg[/img]
Seguramente ya no publique más sobre el tutorial hasta la semana que viene, pero intentaré responder a vuestras dudas y atento a las sugerencias y aportes, por cierto por si alguien se lo pregunta, de momento todo es teoría, por lo que podría cambiar cuando comience a elaborar el programa.
#14
Posted 21 February 2015 - 06:20 AM
Primero especifico que la estoy montando en firebird 2.5, e usado el collate ES_ES_CI_AI y el Charset o juego de caracteres ISO8859_1 desde la creación de la base de datos para no tener problemas con el unicode luego.
En las tablas solo usaremos los indices primarios (Primary Keys) ya que el resto lo haremos por SQL y sólo he marcado como campos no nulos los que llevan estos indices.
Hay una tabla que no tiene indice, el motivo es que esta tabla sólo tendrá un registro y ni siquiera tendrá el botón para insertar nuevos registros, ni para navegar por ella, ya veremos como solucionamos esto más adelante, está es la tabla CONFIGURACION.
Solo he usado un dominio para los campos Char que aceptaran S o N únicamente
CREATE DOMAIN DOMSN AS CHAR(1) CHARACTER SET ISO8859_1 CHECK (VALUE IN ('S','N')) COLLATE ES_ES_CI_AI;
El motivo es que quiero que manejemos las tablas lo más a pelo posible, esto no es útil para los que ya saben trabajar bien con ellas pero si para los que estan empezando.
Buscar en el club que hay tutoriales de como crear la base de datos y las tablas con Ibexpert, de todas maneras si alguno tiene aun dudas puedo explicar alguna cuestión a lo largo del tutorial al igual que otros muchos compañeros. :rolleyes:
Pondré los resultados de la DDL de cada tabla del Ibexpert, por lo que podéis copiar y pegar para crearlas en el editor SQL de la aplicación ya mencionada, pero recordar que si estáis iniciándoos es mejor hacer el trabajo campo por campo para que lo aprendáis bien.
En caso de usar el editor SQL recordar que tenéis que hacer por una parte la tabla, por otra el indice primario y luego aparte crear los campos de auto incremento para los campos ID.
Por último decir que he creado una nueva tabla llamada etiquetas, ya explicare como funciona más adelante y he añadido algún campo a las tablas USUARIO, CONFIGURACION y UNIDADES.
Comienzo a mostrar las diferentes tablas de manera separada.
#15
Posted 21 February 2015 - 06:23 AM
CREATE TABLE UNIDADES (
ID INTEGER,
ALQUILADA_VECES INTEGER,
CODIGO VARCHAR(20) NOT NULL,
TITULO VARCHAR(100),
GENERO VARCHAR(20),
VALOR_ALQUILER VARCHAR(20),
FORMATO VARCHAR(20),
LIBRE VARCHAR(80),
FECHA_ALTA DATE,
FECHA_BAJA DATE,
COSTE NUMERIC(15,4),
RENDIMIENTO NUMERIC(15,4),
DISPONIBLE DOMSN /* DOMSN = CHAR(1) CHECK (VALUE IN ('S','N')) */,
VENDIDA DOMSN /* DOMSN = CHAR(1) CHECK (VALUE IN ('S','N')) */,
PERDIDA DOMSN /* DOMSN = CHAR(1) CHECK (VALUE IN ('S','N')) */,
NOTAS BLOB SUB_TYPE 1 SEGMENT SIZE 80,
PORTADA BLOB SUB_TYPE 0 SEGMENT SIZE 80,
CODIGO_BARRAS VARCHAR(20)
);
Y su PK
ALTER TABLE UNIDADES ADD CONSTRAINT PK_UNIDADES PRIMARY KEY (CODIGO);
Comentar que no usaremos códigos de barras comerciales como el Ean 8 o 13, usando para este caso una fuente con formato de códigos de barra probablemente al codebar39, me falta comprobar una cosa y lo confirmare
#16
Posted 21 February 2015 - 06:26 AM
Creamos la tabla configuración a la que añadimos los campos SEGUNDOS_RETENIDOS y SALTO_REGISTROS)
CREATE TABLE CONFIGURACION (
ID INTEGER,
NUMERADOR_CLIENTE INTEGER,
NUMERADOR_UNIDAD INTEGER,
NUMERADOR_VALOR_ALQUILER INTEGER,
NUMERADOR_ALQUILER INTEGER,
NUMERADOR_CAJA INTEGER,
NUMERADOR_MOVIMIENTOS INTEGER,
NUMERADOR_FORMATO INTEGER,
NUMERADOR_FORMA_PAGO INTEGER,
NUMERADOR_CARGOS INTEGER,
NUMERADOR_GENERO INTEGER,
DIA_OFERTA INTEGER,
SEGUNDOS_RETENIDOS INTEGER,
SALTO_REGISTROS INTEGER,
CODIGO_POSTAL VARCHAR(6),
NOMBRE VARCHAR(80),
DIRECCION VARCHAR(100),
POBLACION VARCHAR(60),
PROVINCIA VARCHAR(60),
DOCUMENTO VARCHAR(20),
TELEFONO VARCHAR(20),
MOVIL VARCHAR(20),
FAX VARCHAR(20),
WEB VARCHAR(120),
EMAIL VARCHAR(120),
COLOR_DISPONIBLE VARCHAR(20),
COLOR_NO_DISPONIBLE VARCHAR(20),
COLOR_BLOQUEADA VARCHAR(20),
NOMBRE_IMPUESTO VARCHAR(10),
LIBRE VARCHAR(80),
PORCENTAJE_IMPUESTO NUMERIC(15,4),
LEY_PROTECCION_DATOS BLOB SUB_TYPE 1 SEGMENT SIZE 80,
LOGO BLOB SUB_TYPE 0 SEGMENT SIZE 80
);
OJO no lleva indice primario ya que estará compuesta de un único registro
Los campos SEGUNDOS_RETENIDOS es para saber los tiempos de espera en un Splash, algunos mensajes y pre visualización de caratulas en el menú principal
y SALTO_REGISTROS nos servirá para ver la cantidad de registros que saltaremos de una vez
#17
Posted 21 February 2015 - 06:28 AM
CREATE TABLE CLIENTES (
ID INTEGER,
CODIGO VARCHAR(20) NOT NULL,
NOMBRE VARCHAR(80),
DIRECCION VARCHAR(100),
POBLACION VARCHAR(60),
PROVINCIA VARCHAR(60),
DOCUMENTO VARCHAR(20),
TELEFONO VARCHAR(20),
MOVIL VARCHAR(20),
EMAIL VARCHAR(120),
CODIGO_POSTAL VARCHAR(6),
LIBRE VARCHAR(80),
A_CUENTA NUMERIC(15,4),
PENDIENTE NUMERIC(15,4),
NOTAS BLOB SUB_TYPE 1 SEGMENT SIZE 80,
FOTO BLOB SUB_TYPE 0 SEGMENT SIZE 80
);
ALTER TABLE CLIENTES ADD CONSTRAINT PK_CLIENTES PRIMARY KEY (CODIGO);
#18
Posted 21 February 2015 - 06:31 AM
CREATE TABLE GENEROS (
ID INTEGER,
CODIGO VARCHAR(20) NOT NULL,
GENERO VARCHAR(60)
);
ALTER TABLE GENEROS ADD CONSTRAINT PK_GENEROS PRIMARY KEY (CODIGO);
----------------------------------------
CREATE TABLE FORMATOS (
ID INTEGER,
CODIGO VARCHAR(20) NOT NULL,
FORMATO VARCHAR(60)
);
ALTER TABLE FORMATOS ADD CONSTRAINT PK_FORMATOS PRIMARY KEY (CODIGO);
----------------------------------------
CREATE TABLE CARGOS (
ID INTEGER,
CODIGO VARCHAR(20) NOT NULL,
CARGO VARCHAR(100)
);
ALTER TABLE CARGOS ADD CONSTRAINT PK_CARGOS PRIMARY KEY (CODIGO);
----------------------------------------
CREATE TABLE FORMA_PAGO (
ID INTEGER,
CODIGO VARCHAR(20) NOT NULL,
CONCEPTO VARCHAR(60),
IMAGEN BLOB SUB_TYPE 0 SEGMENT SIZE 80
);
ALTER TABLE FORMA_PAGO ADD CONSTRAINT PK_FORMA_PAGO PRIMARY KEY (CODIGO);
#19
Posted 21 February 2015 - 06:33 AM
CREATE TABLE VALOR_ALQUILER (
ID INTEGER,
DIAS INTEGER,
CODIGO VARCHAR(20) NOT NULL,
CONCEPTO VARCHAR(60),
LIBRE VARCHAR(80),
PRECIO NUMERIC(15,4),
PRECIO_OFERTA NUMERIC(15,4),
PENALIZACION_DIA NUMERIC(15,4)
);
ALTER TABLE VALOR_ALQUILER ADD CONSTRAINT PK_VALOR_ALQUILER PRIMARY KEY (CODIGO);
#20
Posted 21 February 2015 - 06:37 AM
CREATE TABLE ALQUILER (
ID INTEGER NOT NULL,
REGISTRO VARCHAR(20),
UNIDAD VARCHAR(20),
CLIENTE VARCHAR(20),
USUARIO VARCHAR(20),
LIBRE VARCHAR(80),
DIA_ALQUILER DATE,
DIA_DEVOLUCION_PREVISTO DATE,
DIA_DEVOLUCION DATE,
PAGADA DOMSN /* DOMSN = CHAR(1) CHECK (VALUE IN ('S','N')) */,
RACARGO NUMERIC(15,4),
VALOR_RECARGO_DIA NUMERIC(15,4)
);
ALTER TABLE ALQUILER ADD CONSTRAINT PK_ALQUILER PRIMARY KEY (ID);