use facturacion create table encabezado(cf int primary key IDENTITY (1,1), FECHA DATE DEFAULT (GETDATE()), CLIENTE VARCHAR(100)); CREATE TABLE PRODUCTO(CP INT PRIMARY KEY IDENTITY (1,1), NOMBRE VARCHAR(100), ESTADO TINYINT DEFAULT(1)) CREATE TABLE DETALLE( CF INT CONSTRAINT FK_DETALLE_ENCABEZADO REFERENCES ENCABEZADO(CF), CP INT CONSTRAINT FK_DETALLE_PRODUCTO REFERENCES PRODUCTO(CP), PRECIO FLOAT CHECK(PRECIO>0.0), CANTIDAD INT); CREATE TABLE INVENTARIO (CODIGOP INT, FECHA DATE DEFAULT(GETDATE()), TPM CHAR(1) DEFAULT('S') , CANT INT); ALTER TABLE INVENTARIO ADD CONSTRAINT FK_INVENTARIO_PRODUCTO FOREIGN KEY(CODIGOP) REFERENCES PRODUCTO(CP); CREATE TABLE BT_PRODUCTO (CP INT, NOMBRE VARCHAR(100), FECHA DATE DEFAULT(GETDATE()), ACCION VARCHAR(50), USSER VARCHAR(50), CREATE PROCEDURE ADD PRODUCTO @PNOMBRE VARCHAR (100) AS BEGIN IF NOT EXISTS(SELECT * FROM PRODUCTO WHERE NOMBRE=UPPER(PNOMBRE)) END CREATE PROCEDURE ADD_INVENTARIO @PCP INT , @PCANT INT AS INSERT INTO INVENTARIO(CODIGOP, TPM , CANT)VALUES(@pcp, 'E' , @PCANT) select UPPER('edwinn') CREATE FUNCTION DISPONOBILIDAD(@PCP NT)RETURNS INT AS BEGIN DECLARE @VE INT, @VS INT SELECT @VE=ISNULL (SUM(CANT),0) FROM INVENTARIO WHERE CODIGOP=@PCP AND TPM='E' SELECT @VS=ISNULL (SUM(CANT),0) FROM INVENTARIO WHERE CODIGOP=@PCP AND TPM='S' RETURN (@VE-@VS) END CREATE PROCEDURE ADD_FACTURA @PCL VARCHAR(100), @PCP INT , @PRECIO FLOAT , @PCANT INT AS BEGIN
DECLARE @CF INT
IF DBO.DISPONIBILIDAD(@PCP)>@PCP BEGIN INSERT INTO ENCABEZADO(CLIENTE) VALUES(@PCL) SET @CF=SELECT @@IDENTITY INSERT INTO DETALLE(CF, CP, PRECIO, CANTIDAD)VALUES (@CF, @PCP, @PPRECIO, @PCANT) END CREATE TRIGGER ACT INVENTARIO ON DETALLE AFTER INSERT AS BEGIN DECLARE @PCP INT, @CANT INT SELECT @PCP=CP, @CANT=CANTIDAD FROM inserted INSERT INTO INVENTARIO (CODIGOP, TPM, CANT)VALUES(@PCP.'S', @CANT) END EXEC EXEC EXEC EXEC