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;