Está en la página 1de 5

create table PRODUCTOS (

PRD_CODIGO INTEGER not null,


PRD_NOMBRE VARCHAR(120) NOT NULL,
PRD_PRECIO FLOAT NOT NULL CHECK (PRD_PRECIO>0),
PRD_IVA FLOAT CHECK (PRD_IVA>0),
PRD_EXISTENCIA FLOAT NOT NULL CHECK (PRD_EXISTENCIA>0),
constraint PK_PRODUCTOS primary key (PRD_CODIGO)
);
create table EMPRESAS (
EMP_RUC CHAR(10) not null,
EMP_RAZONSOCIAL VARCHAR(120) NOT NULL,
EMP_CIUDAD VARCHAR(100) NOT NULL,
EMP_TOTAL_VENTAS FLOAT NOT NULL CHECK (EMP_TOTAL_VENTAS>0),
EMP_TOTAL_COMPRAS FLOAT NOT NULL CHECK (EMP_TOTAL_COMPRAS>0),
constraint PK_EMPRESAS primary key (EMP_RUC)
);
create table FACTURAS (
FCT_CODIGO INTEGER not null,
EMP_RUC CHAR(10) NOT NULL,
FCT_FECHA DATE NOT NULL CHECK( FCT_FECHA<=CURRENT_DATE);
FCT_BASE_0 FLOAT NOT NULL CHECK (FCT_BASE_0>0),
FCT_BASE_IVA FLOAT CHECK (FCT_BASE_IVA>0),
FCT_IVA FLOAT CHECK (FCT_IVA>0),
FCT_TOTAL FLOAT NOT NULL CHECK (FCT_TOTAL>0),
constraint PK_FACTURAS primary key (FCT_CODIGO)
);
create table VENTAS (
FCT_CODIGO INTEGER not null,
PRD_CODIGO INTEGER not null,
CANTIDAD FLOAT NOT NULL CHECK (CANTIDAD>0),
PV FLOAT NOT NULL CHECK (PV>0),
SUBTOTAL FLOAT NOT NULL CHECK (SUBTOTAL>0),
constraint PK_VENTAS primary key (FCT_CODIGO, PRD_CODIGO)
);
create table COMPRAS (
CMP_CODIGO INTEGER not null,
EMP_RUC CHAR(10) NOT NULL,
CMP_FECHA DATE NOT NULL CHECK( CMP_FECHA<=CURRENT_DATE);
CMP_BASE0 FLOAT NOT NULL CHECK (CMP_BASE0>0),
CMP_BASEIVA FLOAT CHECK (CMP_BASEIVA>0),
CMP_IVA FLOAT CHECK (CMP_IVA>0),
CMP_TOTAL FLOAT NOT NULL CHECK (CMP_TOTAL>0),
constraint PK_COMPRAS primary key (CMP_CODIGO)
);
create table ADQUIRIR (
PRD_CODIGO INTEGER not null,
CMP_CODIGO INTEGER not null,
CANTIDAD FLOAT NOT NULL CHECK (CANTIDAD>0),
PV FLOAT NOT NULL CHECK (PV>0),
SUBTOTAL FLOAT NOT NULL CHECK (SUBTOTAL>0),
constraint PK_ADQUIRIR primary key (PRD_CODIGO, CMP_CODIGO)
);
alter table ADQUIRIR
add constraint FK_ADQUIRIR_RELATIONS_PRODUCTO foreign key (PRD_CODIGO)
references PRODUCTOS (PRD_CODIGO) ON DELETE CASCADE ON UPDATE CASCADE;
alter table ADQUIRIR
add constraint FK_ADQUIRIR_RELATIONS_COMPRAS foreign key (CMP_CODIGO)
references COMPRAS (CMP_CODIGO) ON DELETE CASCADE ON UPDATE CASCADE;
alter table COMPRAS
add constraint FK_COMPRAS_RELATIONS_EMPRESAS foreign key (EMP_RUC)
references EMPRESAS (EMP_RUC) ON DELETE CASCADE ON UPDATE CASCADE;
alter table FACTURAS
add constraint FK_FACTURAS_RELATIONS_EMPRESAS foreign key (EMP_RUC)
references EMPRESAS (EMP_RUC) ON DELETE CASCADE ON UPDATE CASCADE;
alter table VENTAS
add constraint FK_VENDE_RELATIONS_FACTURAS foreign key (FCT_CODIGO)
references FACTURAS (FCT_CODIGO) ON DELETE CASCADE ON UPDATE CASCADE;
alter table VENTAS
add constraint FK_VENDE_RELATIONS_PRODUCTO foreign key (PRD_CODIGO)
references PRODUCTOS (PRD_CODIGO) ON DELETE CASCADE ON UPDATE CASCADE;


/*CREACION DE PROCEDIMIENTO PARA ACTUALIZAR EL STOCK CONOCIDO EL CODI
GO DE PRODUCTO*/
CREATE OR REPLACE FUNCTION CAL_STOCK(CODPROD IN integer) RETURNS text AS $$
DECLARE
CUENTA INTEGER;
STOCK_VENTAS FLOAT;
STOCK_COMPRAS FLOAT;
NUEVO_STOCK FLOAT;
resultado_txt TEXT DEFAULT ' ';
BEGIN
SELECT COUNT(*)
INTO CUENTA
FROM PRODUCTOS
WHERE
PRD_CODIGO = CODPROD;
IF (CUENTA=0) THEN
resultado_txt := 'NO existe el codigo de producto';
END IF;
IF (CUENTA>0 ) THEN
BEGIN
SELECT CANTIDAD
INTO STOCK_COMPRAS
FROM ADQUIRIR
WHERE
PRD_CODIGO = CODPROD;

SELECT CANTIDAD
INTO STOCK_VENTAS
FROM VENTAS
WHERE
PRD_CODIGO = CODPROD;

SELECT ((PRD_EXISTENCIA)+STOCK_COMPRAS-STOCK_VENTAS)
INTO NUEVO_STOCK
FROM PRODUCTOS
WHERE
PRD_CODIGO = CODPROD;

UPDATE PRODUCTOS SET PRD_EXISTENCIA=NUEVO_STOCK;
END;
END IF;
RETURN resultado_txt;
END;
$$ LANGUAGE plpgsql;

/*PROCEDIMIENTO PARA CALCULAR EL VALOR TOTAL DE LA FACTURA DE VENTAS*/
CREATE OR REPLACE FUNCTION CAL_VALORFACTURA(CODFACT IN INTEGER) RETURNS text AS
$$
DECLARE
SUBTOTAL_VENTAS FLOAT;
CUENTA INTEGER;
TOTAL_FACT FLOAT;
resultado_txt TEXT DEFAULT ' ';
BEGIN
SELECT COUNT(*)
INTO CUENTA
FROM FACTURAS
WHERE
FCT_CODIGO= CODFACT;

IF (CUENTA=0) THEN
resultado_txt := 'NO existe el codigo de FACTURA';
END IF;
IF (CUENTA>0 ) THEN
BEGIN
SELECT SUM(CANTIDAD*PV)
INTO SUBTOTAL_VENTAS
FROM VENTAS
WHERE
FCT_CODIGO = CODFACT;

SELECT ((FCT_BASE_0+FCT_BASE_IVA+FCT_IVA)+SUBTOTAL_VENTAS)
INTO TOTAL_FACT
FROM FACTURAS
WHERE
FCT_CODIGO = CODFACT;

UPDATE FACTURAS SET FCT_TOTAL=TOTAL_FACT;
END;
END IF;
RETURN resultado_txt;
END;
$$ LANGUAGE plpgsql;


/*PROCEDIMIENTO PARA CALCULAR EL VALOR DE LA COMPRA*/
CREATE OR REPLACE FUNCTION CAL_VALORCOMPRA(CODCMP IN INTEGER) RETURNS text AS $$
DECLARE
SUBTOTAL_COMPRAS FLOAT;
CUENTA INTEGER;
TOTAL_CMP FLOAT;
resultado_txt TEXT DEFAULT ' ';
BEGIN
SELECT COUNT(*)
INTO CUENTA
FROM COMPRAS
WHERE
CMP_CODIGO= CODCMP;
IF (CUENTA=0) THEN
resultado_txt := 'NO existe el codigo de compra';
END IF;
IF (CUENTA>0 ) THEN
BEGIN
SELECT SUM(CANTIDAD*PV)
INTO SUBTOTAL_COMPRAS
FROM ADQUIRIR
WHERE
CMP_CODIGO = CODCMP;

SELECT ((CMP_BASE0+CMP_BASEIVA+CMP_BASEIVA)+SUBTOTAL_COMPRAS)
INTO TOTAL_CMP
FROM ADQUIRIR
WHERE
CMP_CODIGO = CODCMP;

UPDATE COMPRAS SET CMP_TOTAL=TOTAL_CMP;
END;
END IF;
RETURN resultado_txt;
END;
$$ LANGUAGE plpgsql;
****************
/*PROCEDIMIENTO PARA CALCULAR TOTAL COMPRAS Y ACTUALIZAR EL CAMPO EMPRESAS.TOTAL
-COMPRAS*/
CREATE OR REPLACE FUNCTION CAL_TOTALCOMPRAS() RETURNS FLOAT AS $$
DECLARE
TOTAL_CMP FLOAT;
BEGIN
SELECT SUM(CMP_BASE0+CMP_BASEIVA+CMP_IVA+CMP_TOTAL)
INTO TOTAL_CMP
FROM COMPRAS
WHERE
EMP_RUC = EMPRESAS.EMP_RUC;
UPDATE EMPRESAS SET EMP_TOTAL_COMPRAS=TOTAL_CMP;
RETURN TOTAL_CMP;
END;
$$ LANGUAGE plpgsql;
***********************
/*PROCEDIMIENTO PARA CALCULAR EL TOTAL DE VENTAS Y ACTUALIZAR EL CAMPO EMPRESAS.
TOTAL-VENTAS */
CREATE OR REPLACE FUNCTION CAL_TOTALVENTAS() RETURNS FLOAT AS $$
DECLARE
TOTAL_VTNS FLOAT;
BEGIN
SELECT (CANTIDAD*PV)
INTO TOTAL_VTNS
FROM VENTAS
WHERE
FCT_CODIGO = FACTURAS.FCT_CODIGO;
UPDATE EMPRESAS SET EMP_TOTAL_VENTAS=TOTAL_VTNS;
RETURN TOTAL_VTNS;
END;
$$ LANGUAGE plpgsql;

También podría gustarte