Informe Final

36
Universidad Nacional Pedro Ruiz Gallo SISTEMA DE VENTAS ON LINE I. DATOS DE EMPRESA 1.1. DESCRIPCIÓN Femeninas On Line es una empresa que ofrece a sus clientes la más selecta gama de productos para damas a precios realmente competitivos. Dispone de una amplia selección para damas con considerables rebajas y descuentos en sus precios. Femeninas On Line es la web de belleza que mejor conoce lo que significa ser mujer. 1.2. VISIÓN Alcanzar el mayor número de ventas en línea de con un equipo técnicamente sustentado, capaz de orientar y mantener un desarrollo perpetuo, que satisfaga las necesidades sentidas del cliente. 1.3.MISIÓN Brindar un servicio excelente con innovación de diseño y presentación, con precios convenientes, a través de una red de puntos de venta geográficamente distribuidos en el país, con modelos de temporada y acorde con las necesidades del cliente. II. DESARROLLO DEL SISTEMA DE VENTAS ON LINE 2.1. ESTÁNDARES DE BASE DE DATOS A continuación describimos los estándares de base de datos utilizados por nuestro equipo de desarrollo, con la finalidad de alcanzar un código estructurado y legible para el desarrollo del Sistema de Ventas On Line. A) TABLAS Sistema de Ventas On Line Página 1

description

aasdads

Transcript of Informe Final

Universidad Nacional Pedro Ruiz Gallo

Sistema de ventas on line

i. datos de empresa1.1. DESCRIPCIN

Femeninas On Line es una empresa que ofrece a sus clientes la ms selecta gama de productos para damas a precios realmente competitivos. Dispone de una amplia seleccin para damas con considerables rebajas y descuentos en sus precios. Femeninas On Line es la web de belleza que mejor conoce lo que significa ser mujer.

1.2. VISIN

Alcanzar el mayor nmero de ventas en lnea de con un equipo tcnicamente sustentado, capaz de orientar y mantener un desarrollo perpetuo, que satisfaga las necesidades sentidas del cliente.

1.3.MISIN

Brindar un servicio excelente con innovacin de diseo y presentacin, con precios convenientes, a travs de una red de puntos de venta geogrficamente distribuidos en el pas, con modelos de temporada y acorde con las necesidades del cliente.

II. Desarrollo del Sistema de Ventas On Line

2.1. Estndares de Base de Datos

A continuacin describimos los estndares de base de datos utilizados por nuestro equipo de desarrollo, con la finalidad de alcanzar un cdigo estructurado y legible para el desarrollo del Sistema de Ventas On Line.

A) TABLAS El nombre de las tablas es descriptivo para identificar cada uno de los datos que stas contienen y debe ser referido en singular. El nombre de las tablas incluye slo letras de la A-Z.Ejemplo: Venta Producto Cada una de las palabras que forman parte del nombre de las tablas empiezan con MAYSCULA..

Ejemplo: DatosCuenta TipoProducto

Si el nombre de las tablas est formado por ms de una palabra, stas deben ir juntas sin ningn carcter especial de separacin.Ejemplo: VentaDetalle TipoProducto.

B) COLUMNAS No usar palabras reservadas de Oracle Los nombres de las columnas deben ser lo suficientemente descriptivos, e incluir caracteres de la A-Z. El nombre de cada una de las columnas debe empezar con mayscula.Ejemplo: CodigoCli (Tabla Cliente) NombrePro (Tabla Producto) Si el nombre est compuesto de ms de una palabra debe considerarse el primer nombre de forma completa, agregando seguidamente los primeros tres caracteres de las siguientes palabras, donde el primer carcter se escribe en mayscula a partir de la segunda palabra.Ejemplo: CodigoCli (Tabla Cliente).

C) RESTRICCIONES Para los nombres de las claves primarias la estructura es la siguiente:PK_Ejemplo: PK_Producto (de la tabla Producto) PK_Venta (de la tabla Venta)

Para nombrar las claves forneas se utiliza la siguiente forma:FK__Ejemplo: FK_Venta_Cliente

Para nombrar las restricciones Check se utiliza la siguiente forma:CK__Ejemplo: CK_Venta_EstadoVenta

Para nombrar una clave nica (UNIQUE) se utiliza el siguiente formato:UQ__Ejemplo: UQ_TipoProducto_CodigoTipoPro2.2. DIAGRAMA DE BASE DE DATOS

2.3. DICCIONARIO DE DATOS

Table NameCliente

DescripcinSon las personas que van adquirir los productos.

ColumnsNroColumn NamePKFKMData Type

1 DniCli PYCHAR(8)

2 NombresCli YVARCHAR2(75)

3 ApellidosCli YVARCHAR2(75)

4 TipoCli YCHAR(1)

5 TelefonoCli Y VARCHAR2(15)

6 EmailCli YVARCHAR2(50)

7 CodigoDepFY NUMBER(1)

Columns commentsNroColumn NameDescription

1 CodigoCli Cdigo que identifica al cliente

2 NombresCli Nombres del cliente

3 ApellidosCli Apellidos del cliente

4 TipoCli Tipo del cliente: puede ser Habitual (H), Espordico (E). Por defecto es Habitual

5 TelefonoCli Telfono del cliente

6 EmailCli Email del cliente

7 CodigoDepCdigo del departamento al que pertenece el Cliente.

IndexIndex NameStateFunctionalSpatialExpressionColumn NameSort Order

PK_ClientePKCodigoCliAsc

Foreign Keys (referred to)

NameReferred FromMandatoryTransferableInc ArcColumn Name

FK_Cliente_DepartamentoDepartamentoyCodigoDep

Table NameProducto

Descripcion Son los productos que van a ofrecer.

ColumnsNroColumn NamePKFKMData Type

1 CodigoPro PYNUMBER

2 NombrePro YVARCHAR2(75)

3 DescripcionPro YVARCHAR2(100)

4 CodigoTipoPro FYNUMBER

5 PrecioPro YNUMBER

6 StockPro YNUMBER

Columns commentsNroColumn NameDescription

1 CodigoPro Cdigo que identifica al producto, los valores que se guardan en esta columna se generan utilizando una secuencia.

2 NombrePro Nombres del producto.

3 DescripcionPro Descripcin del producto.

4 CodigoTipoPro Es el cdigo del tipo de Producto al que pertenece un producto.

6 PrecioPro Precio del producto.

8 StockPro Stock del producto.

IndexIndex NameStateFunctionalSpatialColumn NameSort Order

PK_Producto PKCodigoProAsc

Foreign Keys (referred to)

NameReferred toMandatoryTransferableColumn Name

FK_Producto_TipoProductoTipoProductoYCodigoTipoPro

Table NameVenta

Descripcion Es una operacin que registras las compras que realiza un cliente.

ColumnsNroColumn NamePKFKMData Type

1 CodigoVen PYNUMBER

2 PrecioTotalVenYNUMBER

3 EstadoVen YCHAR(2)

4 DniCli FYCHAR(8)

5 FechaVen YDATE

Columns commentsNroColumn NameDescription

1CodigoVen Cdigo de venta.

2 PrecioTotalVenPrecio total de la venta.

3 EstadoVen Estado de la venta: puede ser Transferida (T) o No Transferida (NT) y por defecto esta en No Transferida.

4 DniCli DNI del cliente.

5 FechaVen Fecha en que se realizo la venta.

Index NameStateFunctionalSpatialExpressionColumn NameSort Order

PK_VentaPKCodigoVenAsc

Index

Foreign Keys (referred to)NameReferred toMandatoryTransferableInc ArcColumn Name

FK_Venta_ClienteClienteyDniCli

Table Name Pago

Descripcion Es el pago de los productos adquiridos.

ColumnsNroColumn NamePKFKMData Type

1 CodigoPag PYNUMBER

2 CodigoVen FYNUMBER

Columns commentsNroColumn NameDescription

1 CodigoPag Cdigo de pago

2 CodigoVen Cdigo de la venta

Index

Foreign Keys (referred to)

Columns

Columns comments

IndexForeign Keys (referred to)

Columns

Columns comments

Index

Foreign Keys (referred to)

Columns

Columns comments

Index

Foreign Keys (referred to)

Columns

Columns comments

Index

Columns

Columns comments

Index

2.4. CREACIN DE BASE DE DATOSCREATE TABLE TipoProducto ( CodigoTipoPro NUMBER NOT NULL CONSTRAINT PK_TipoProducto PRIMARY KEY, NombreTip VARCHAR2(50) NOT NULL, VigenciaTip CHAR(1) DEFAULT 'A' NULL ); ALTER TABLE TipoProducto ADD CONSTRAINT CK_TipProd_VigenciaTip CHECK (VigenciaTip IN('A','I')); CREATE TABLE Producto ( CodigoPro NUMBER NOT NULL CONSTRAINT PK_Producto PRIMARY KEY, NombrePro VARCHAR2(50)NOT NULL, DescripcionPro VARCHAR2(1000) NULL, CodigoTipoPro NUMBER NULL, PrecioPro NUMBER NOT NULL, StockPro NUMBER NOT NULL ); ALTER TABLE Producto ADD CONSTRAINT FK_Producto_TipoProducto FOREIGN KEY ( CodigoTipoPro) REFERENCES TipoProducto (CodigoTipoPro); CREATE TABLE Cliente ( DNICli CHAR(8) NOT NULL CONSTRAINT PK_Cliente PRIMARY KEY, NombresCli VARCHAR2(75) NOT NULL, ApellidosCli VARCHAR2(75)NOT NULL, TipoCli CHAR(1)NOT NULL, TelefonoCli VARCHAR2(15) NULL, EmailCli VARCHAR2(50) NULL, CodigoDep NUMBER NOT NULL ); ALTER TABLE Cliente ADD CONSTRAINT FK_Cliente_Departamento FOREIGN KEY ( CodigoDep) REFERENCES Departamento (CodigoDep); CREATE TABLE Departamento ( CodigoDep NUMBER NOT NULL CONSTRAINT PK_Departamento PRIMARY KEY, NombreDep VARCHAR2(50) NOT NULL, EstadoDep CHAR(2)DEFAULT 'A' NOT NULL ); ALTER TABLE Departamento ADD CONSTRAINT CK_DEP_EstadoDep CHECK (EstadoDep IN('A','I')); --DROP TABLE VENTA CREATE TABLE Venta ( CodigoVen NUMBER NOT NULL CONSTRAINT PK_Venta PRIMARY KEY, PrecioTotalVen NUMBER NOT NULL, EstadoVen CHAR(2) DEFAULT 'NT' NOT NULL, DNICli CHAR(8) NOT NULL, FechaVen DATE NOT NULL ) ; -- ALTER TABLE Venta ADD CONSTRAINT CK_Ven_EstadoVen CHECK (EstadoVen IN('TR','NT')); ALTER TABLE Venta ADD CONSTRAINT FK_Venta_Cliente FOREIGN KEY ( DNICli) REFERENCES Cliente (DNICli);

CREATE TABLE Envio ( CodigoEnv NUMBER NOT NULL CONSTRAINT PK_Envio PRIMARY KEY, DireccionEnv VARCHAR2(50) NOT NULL, CodigoDep NUMBER NULL, EstadoEnv CHAR(1) DEFAULT 'P' NOT NULL, CodigoVen NUMBER NULL, FechaEnv date NOT null ) ; ALTER TABLE Envio ADD CONSTRAINT CK_Envio_EstadoEnv CHECK (EstadoEnv IN('P','E')); ALTER TABLE Envio ADD CONSTRAINT FK_Envio_Venta FOREIGN KEY ( CodigoVen) REFERENCES Venta (CodigoVen); ALTER TABLE Envio ADD CONSTRAINT FK_Envio_Departamento FOREIGN KEY (CodigoDep) REFERENCES Departamento (CodigoDep);

CREATE TABLE Pago ( CodigoPag NUMBER NOT NULL CONSTRAINT PK_Pago PRIMARY KEY , CodigoVen NUMBER NOT NULL ); ALTER TABLE Pago ADD CONSTRAINT FK_Pago_Venta FOREIGN KEY ( CodigoVen) REFERENCES Venta (CodigoVen); CREATE TABLE DatosCuenta ( CodigoDatosC NUMBER NOT NULL CONSTRAINT PK_DatosCuenta PRIMARY KEY, CodigoPag NUMBER NULL, NumeroCuenta number not null, CvsDatosC char(3)not null ); ALTER TABLE DatosCuenta ADD CONSTRAINT FK_DatosCuenta_Pago FOREIGN KEY ( CodigoPag) REFERENCES Pago (CodigoPag); CREATE TABLE VentaDetalle ( CodigoVen NUMBER NOT NULL, CodigoPro NUMBER NOT NULL, CantidadProVD NUMBER NOT NULL, MontoVenD NUMBER NOT NULL, CONSTRAINT PK_VentaDetalle PRIMARY KEY (CodigoVen,CodigoPro) ) ; ALTER TABLE VentaDetalle ADD CONSTRAINT FK_VentaDetalle_Producto FOREIGN KEY ( CodigoPro) REFERENCES Producto (CodigoPro); ALTER TABLE VentaDetalle ADD CONSTRAINT FK_VentaDetalle_Venta FOREIGN KEY ( CodigoVen) REFERENCES Venta (CodigoVen);

2.5. INSERCIN EN BASE DE DATOS

INSERT INTO Departamento(CodigoDep,NombreDep)VALUES(1,'Lambayeque');INSERT INTO Departamento (CodigoDep,NombreDep)VALUES(2,'Piura');INSERT INTO Departamento (CodigoDep,NombreDep)VALUES(3,'Tumbes');INSERT INTO Departamento (CodigoDep,NombreDep)VALUES(4,'Trujillo');INSERT INTO Departamento (CodigoDep,NombreDep)VALUES(5,'Lima');

create or replace package paq_ClienteasProcedure pa_InsertaCliente( DNI Cliente.DNICli%type,Nombres Cliente.NombresCli%type,Apellidos Cliente.ApellidosCli%type,Tipo Cliente.TipoCli%Type,Telefono Cliente.TelefonoCli%type,Email Cliente.EmailCli%type, CodigoDep Cliente.CodigoDep%type);Procedure pa_EliminarCliente( DNI Cliente.DNICli%type);Procedure pa_ModificarCliente( DNI Cliente.DNICli%type,Nombres Cliente.NombresCli%type,Apellidos Cliente.ApellidosCli%type,Tipo Cliente.TipoCli%Type,Telefono Cliente.TelefonoCli%type,Email Cliente.EmailCli%type, CodigoDep Cliente.CodigoDep%type);end paq_Cliente;

create or replace package Body paq_Clienteas

Procedure pa_InsertaCliente( DNI Cliente.DNICli%type,Nombres Cliente.NombresCli%type,Apellidos Cliente.ApellidosCli%type,Tipo Cliente.TipoCli%Type,Telefono Cliente.TelefonoCli%type,Email Cliente.EmailCli%type, CodigoDep Cliente.CodigoDep%type)isbegininsert into Cliente(DNICli,NombresCli,ApellidosCli,TipoCli,TelefonoCli,EmailCli,CodigoDep)values(DNI,Nombres,Apellidos,Tipo,Telefono,Email,CodigoDep);end pa_InsertaCliente;

Procedure pa_EliminarCliente(DNI Cliente.DNICli%type)is Begindelete from Cliente where DNICli=DNI;end pa_EliminarCliente;

Procedure pa_ModificarCliente(DNI Cliente.DNICli%Type,Nombres Cliente.NombresCli%type,Apellidos Cliente.ApellidosCli%type,Tipo Cliente.TipoCli%Type,Telefono Cliente.TelefonoCli%type,Email Cliente.EmailCli%type, CodigoDep Cliente.CodigoDep%type)isbeginupdate Cliente set NombresCli=Nombres,ApellidosCli=Apellidos,TipoCli=Tipo,TelefonoCli=Telefono, EmailCli=Email,CodigoDep=CodigoDep where DNICli=DNI;end pa_ModificarCliente;

end paq_Cliente; execute paq_Cliente.pa_InsertaCliente ('49637812','Rosa Maria','Chafloque Barragan','H','976548623','[email protected]',5); execute paq_Cliente.pa_InsertaCliente ('49337818','Katia Lucia','Seminario Zarango','H','953762570','[email protected]',1);select * from Cliente

create sequence CodigoTipoPro increment by 1 start with 1; create or replace Procedure pa_InsertarTipoPro(Nombre TipoProducto.NombreTip%type,Vigencia TipoProducto.VigenciaTip%type)isbegininsert into TipoProducto(CodigoTipoPro,NombreTip,VigenciaTip)values(CodigoTipoPro.nextval,Nombre,Vigencia);end pa_InsertarTipoPro;

execute pa_InsertarTipoPro('Fragancia','A');execute pa_InsertarTipoPro('Maquillaje','A');execute pa_InsertarTipoPro('Accesorios','A');execute pa_InsertarTipoPro('Calzado','A');execute pa_InsertarTipoPro('Prendas de Vestir','A');

create sequence CodigoPro increment by 1 start with 100; create or replace package paq_ProductoasProcedure pa_InsertarProducto(Nombre Producto.NombrePro%type,Descripcion Producto.DescripcionPro%type,CodigoTipo Producto.CodigoTipoPro%Type,Precio Producto.PrecioPro%type,Stock Producto.StockPro%type);

Procedure pa_EliminarProducto(Codigo Producto.CodigoPro%type);Procedure pa_ModificarProducto(Codigo Producto.CodigoPro%Type,Nombre Producto.NombrePro%type,Descripcion Producto.DescripcionPro%type,CodigoTipo Producto.CodigoTipoPro%Type,Precio Producto.PrecioPro%type,Stock Producto.StockPro%Type);

end paq_Producto;

create or replace package Body Paq_Productoas

Procedure pa_InsertarProducto(Nombre Producto.NombrePro%type,Descripcion Producto.DescripcionPro%type,CodigoTipo Producto.CodigoTipoPro%Type,Precio Producto.PrecioPro%type,Stock Producto.StockPro%type)isbegininsert into Producto(CodigoPro,NombrePro,DescripcionPro,CodigoTipoPro,PrecioPro,StockPro)values(CodigoPro.nextval,Nombre,Descripcion,CodigoTipo,Precio,Stock);end pa_InsertarProducto ;

Procedure pa_EliminarProducto(Codigo Producto.CodigoPro%type)is Begindelete from Producto where CodigoPro=Codigo;end pa_EliminarProducto;

procedure pa_ModificarProducto(Codigo Producto.CodigoPro%Type,Nombre Producto.NombrePro%type,Descripcion Producto.DescripcionPro%type,CodigoTipo Producto.CodigoTipoPro%Type,Precio Producto.PrecioPro%type,Stock Producto.StockPro%type) isbeginupdate Producto set NombrePro=Nombre,DescripcionPro=Descripcion,CodigoTipoPro=CodigoTipo, PrecioPro=Precio,StockPro=Stock where CodigoPro=Codigo;end pa_ModificarProducto;

end paq_Producto;

execute paq_Producto.pa_InsertarProducto ('Cielo','Fragancia para mujer',1,100,15);execute paq_Producto.pa_InsertarProducto ('Ohm','Fragancia para hombre',1,120,10);execute paq_Producto.pa_InsertarProducto ('Osadia','Fragancia para hombre',1,110,21);execute paq_Producto.pa_InsertarProducto ('Pasion','Fragancia para mujer',1,90,14);execute paq_Producto.pa_InsertarProducto ('Cori','Fragancia para mujer',1,90,15);--Son Maquillajesexecute paq_Producto.pa_InsertarProducto ('Labial Rose','Permanentes y cremosos',2,25,12);execute paq_Producto.pa_InsertarProducto ('Sombras Permanentes','Para dia y noche',2,45,10);execute paq_Producto.pa_InsertarProducto ('Polvo Compacto','Para piel normal',2,50,16);execute paq_Producto.pa_InsertarProducto ('Rimer','A prueba de agua',2,25,10);execute paq_Producto.pa_InsertarProducto ('Corrector Liquido','Para piel clara',2,25,23);--Son Accesoriosexecute paq_Producto.pa_InsertarProducto ('Collar','Baado en oro',3,160,12);execute paq_Producto.pa_InsertarProducto ('Aretes','Con brillantes incrustados',300,80,14);execute paq_Producto.pa_InsertarProducto ('Pulcera','De plata quemada',3,45,30);execute paq_Producto.pa_InsertarProducto ('Anillo','Con brillantes',3,100,25);execute paq_Producto.pa_InsertarProducto ('Gargantilla','Baada en oro viejo',3,170,14);--- Son Prendas de vestirexecute paq_Producto.pa_InsertarProducto ('Vestido de noche','De gaza corte pricesa',5,167,10);execute paq_Producto.pa_InsertarProducto ('Chompa de Hilo','Cuello en V',5,50,20);execute paq_Producto.pa_InsertarProducto ('Blusa manga corta ','De algodon',5,45,50);execute paq_Producto.pa_InsertarProducto ('Pantalon Drill','Para Dama',5,100,25);execute paq_Producto.pa_InsertarProducto ('Falda Cota','De encaje',5,70,15);

--Son Calzadoexecute paq_Producto.pa_InsertarProducto ('Zapatos de cuero','Para Caballero',4,200,5);execute paq_Producto.pa_InsertarProducto ('Zapatos de Gamuza','Para caballero',4,180,10);execute paq_Producto.pa_InsertarProducto ('Zapatillas Deportivas ','Para caballero',4,185,47);execute paq_Producto.pa_InsertarProducto ('Sandalias ','Para Dama',4,50,25);execute paq_Producto.pa_InsertarProducto ('Botines de cuero','Para Dama',4,140,15);

2.5. PROCEDIMIENTOS ALMACENADOS

A. Procedimiento Almacenado Venta

create sequence CodigoVen increment by 1 start with 100;

--tabla pa guardar el xmlcreate global temporary table temp_Detalle_xml_Venta(detalles xmltype)on commit delete rows;

--DROP TABLE temp_DetalleVentaXML

--para almacenar los datos del xmlcreate global temporary table temp_DetalleVentaXML( idVD NUMBER, CodigoPro NUMBER, CantidadProVD NUMBER, MontoVenD NUMBER) on commit delete rows;

PAQUETE QUE REGISTRA VENTA create or replace package paq_VentaasProcedure pa_RegistraVenta(DNI Cliente.DNICli%type,detalleXml varchar2);end paq_Venta;

--CUERPOcreate or replace package Body paq_VentaasProcedure pa_RegistraVenta(DNI Cliente.DNICli%type,detalleXml varchar2)is i number:=1; producto number:=0; cantidad number:=0; precio number:=0; subtotal number:=0; total number:=0; stockPro number:=0; sw number:=0; MAXD number:=0; MAXV number:=0;begin DELETE FROM temp_DetalleVentaXML; if detalleXml IS NOT NULL then -- inerta el XML en la tabla detalle insert into temp_Detalle_xml_Venta(detalles)values(detalleXml); --insertar los datos en una tabla temporal insert into temp_DetalleVentaXML(idVD,CodigoPro,CantidadProVD,MontoVenD) select t.* from temp_Detalle_xml_Venta,XMLTABLE('detventas/detventa' passing detalles columns idVD number path 'idVD', "CodigoPro" number path 'CodigoPro', "CantidadProVD" number path 'CantidadProVD', "MontoVenD" number path 'MontoVenD' )t; --captura la cantidad de detalles del xml en la tabla temporal select count(*) into MAXD from temp_DetalleVentaXML; ---para saber si hay stock disponible while i0 then i:=1; --Para actualizar el stock while i