Está en la página 1de 6

IF (SELECT COUNT(AlmCod) FROM nota_ingreso.

almacen WHERE
AlmNom=new.AlmNom AND AlmCod=new.AlmCod)=0 THEN

INSERT INTO nota_ingreso.almacen (AlmNom,AlmCod,AlmStock) VALUES


('NEW.AlmNom','NEW.AlmCod','1');
ELSE

UPDATE nota_ingreso.almacen SET AlmStock=(AlmStock+1)WHERE


AlmNom=NEW.AlmNom AND AlmCod=NEW.AlmCod;

END IF

CREATE TABLE 'enAlmacen '(


'AlmacenNom' char(2) NOT NULL,

'NroNota' int(11) NOT NULL,


'AlmacenCod' char(10) NOT NULL,
'Cantidad' decimal(20,5) NOT NULL DEFAULT '0.00000',
PRIMARY KEY ('Almacen','Codigo','Clase')
)

CREATE TABLE `auditoriaAlmacen` (


`AlmacenNom` char(50) DEFAULT NULL,
`Nro_Nota` int(11) DEFAULT NULL,
`AlmacenCod` char(10) DEFAULT NULL,
`Cantidad_Anterior` decimal(20,5) DEFAULT 0.00000,
`Cantidad_Nueva` decimal(20,5) DEFAULT 0.00000,
`Fecha_Hora` char(20) DEFAULT NULL,
`Accion` tinytext
) ENGINE=MyISAM DEFAULT CHARSET=latin1

IF (SELECT COUNT(AlmCod) FROM nota_ingreso.almacen WHERE


AlmNom=new.AlmNom AND AlmCod=new.AlmCod)=0 THEN
INSERT INTO nota_ingreso.almacen (AlmNom,AlmCod,AlmStock) VALUES
('NEW.AlmNom','NEW.AlmCod','1');
ELSE
UPDATE nota_ingreso.almacen SET AlmStock=(AlmStock+1)WHERE
AlmNom=NEW.AlmNom AND AlmCod=NEW.AlmCod;
END IF

DELIMITER $$
CREATE

TRIGGER Stock_Insert BEFORE INSERT ON movi


FOR EACH ROW
BEGIN
/*Evaluamos la clase de movimiento que se esta realizando*/
/*I=Para cuando ingresa Mercadera*/
/*S=Para cuando Sale Mercadera*/
IF New.Clase='I THEN

/*Ingresos de Mercaderia*/

/*Verificamos si el registro existe en nuestra tabla de Stock*/


/*Si esiste, sera igual a 1 sino sera 0 */

IF (SELECT COUNT(codigo) FROM test.stock WHERE Almacen=new.Almacen AND


Codigo=new.Codigo)=0 THEN
/*Insertamos el registro si no existe en nuestra tabla de stock*/
INSERT INTO test.stock (Almacen,Codigo,StockActual) VALUES
(NEW.Almacen,NEW.Codigo,NEW.Cantidad);
ELSE
/*Si el registro ya existe, solo actualizamos el stock sumando la nueva
cantidad*/
UPDATE test.stock SET StockActual=StockActual+New.Cantidad WHERE
Almacen=NEW.Almacen AND Codigo=NEW.Codigo;
END IF;
ELSEIF New.Clase='S THEN /*Salidas de Mercaderia*/
/*Si es una salida, necesariamente el registro debe existir en nuestra
tabla de stock*/
/*y solo actualizamos descontando del stock, la cantidad saliente*/
UPDATE test.stock SET StockActual=StockActual-New.Cantidad WHERE
Almacen=NEW.Almacen AND Codigo=NEW.Codigo;
END IF;
END;
$$
DELIMITER ;

DELIMITER $$
CREATE

TRIGGER Stock_Delete BEFORE DELETE ON movi


FOR EACH ROW
BEGIN

UPDATE test.stock SET StockActual=StockActual-OLD.Cantidad WHERE


Almacen=OLD.Almacen AND Codigo=OLD.Codigo;

ELSEIF OLD.Clase='S THEN /*Salidas de Mercaderia*/


/*Solo actualizamos el stock sumando la cantidad anterior */
UPDATE test.stock SET StockActual=StockActual+OLD.Cantidad WHERE
Almacen=OLD.Almacen AND Codigo=OLD.Codigo;
END IF;
/*Auditamos esta modificacin. Claro esto es para atrapar a quienes hacen
travesuras, a veces mal intencionadas*/
INSERT INTO test.auditoriainventarios
(Almacen,Clase,Nro_Voucher,Codigo,Cantidad_Anterior,Cantidad_Nueva,Usuario,Fecha_
Hora,Accion)
VALUES(OLD.Almacen,OLD.Clase,OLD.Nro_Voucher,OLD.Codigo,OLD.Cantidad,0,SESSION_US
ER(),CONCAT(CURRENT_DATE,' ,CURRENT_TIME),'Eliminacin);
END;
$$
DELIMITER ;

También podría gustarte