Logo Studenta

Procedure y triggers

Esta es una vista previa del archivo. Inicie sesión para ver el archivo original

BEGIN
	INSERT into sesion (id_sesion, usuario_id_usuario, fecha_inicio) 
 VALUES (DEFAULT, id_user,CURRENT_TIMESTAMP );
END
BEGIN
	UPDATE sesion set fecha_final = CURRENT_TIMESTAMP 
 WHERE usuario_id_usuario = id_user and sesion.id_sesion = (SELECT MAX(id_sesion) FROM sesion);
END
drop table if EXISTS temporal;
CREATE TABLE temporal(
 	id_item integer not null,
 cantidad integer not null,
 	id_sesion integer not null,
 id_producto integer not null,
 id_inventario varchar(255) not null,
 id_usuario varchar(255) not null,
 subtotal float not null
 );
 
drop PROCEDURE if EXISTS carrito;
DELIMITER /
CREATE PROCEDURE carrito(in id_user varchar(255))
BEGIN
	set @subtotal = 0;
 
 
 insert into temporal SELECT car.id_cart_item, car.cantidad, car.id_sesion, car.id_producto, pro.id_inventario, 
 us.id_usuario, @subtotal:=(car.cantidad*precio) as subtotal
 FROM usuario as us, cart_item as car, producto as pro, sesion, inventario_producto as inv
 WHERE us.id_usuario = id_user and us.id_usuario=sesion.id_usuario 
 and car.id_sesion=sesion.id_sesion and car.modificado is null 
 and pro.id_producto = car.id_producto and pro.id_inventario = inv.id_inventario; 
 #se obtiene el carrito que no se ha comprado del usuario
 
end/
DELIMITER ;
drop PROCEDURE if EXISTS comprar;
DELIMITER /
CREATE PROCEDURE comprar(in id_user varchar(255))
BEGIN
	delete FROM temporal;
	call carrito(id_user);
 
 if((SELECT COUNT(*) from temporal) > 0) THEN 
 set @total = (SELECT sum(subtotal) FROM temporal); 
 set @proveedor = (SELECT proveedor FROM usuario, temporal, metodo_pago 
 WHERE usuario.id_usuario = temporal.id_usuario and metodo_pago.id_usuario = usuario.id_usuario group by proveedor);
 set @id_detalles = CONCAT(round(rand()*10000), "");
 set @id_pago = CONCAT(round(rand()*10000), "");
 INSERT into detalles_pago(id_detalles_pago, monto, proveedor, estado, fecha_pago) 
 VALUES (@id_pago, @total, @proveedor, "Aprobado", CURRENT_TIMESTAMP);
 INSERT into detalles_compra(id_compra, id_usuario, id_detalles_pago, total, fecha_compra) 
 VALUES (@id_detalles, id_user, CONCAT(@id_pago, ""), @total, CURRENT_TIMESTAMP);
 INSERT into productos_compra SELECT CONCAT(round(rand()*10000), ""), @id_detalles, temporal.id_producto, temporal.cantidad 
 FROM temporal;
 UPDATE cart_item
 		INNER JOIN temporal on cart_item.id_cart_item = temporal.id_item
 		set cart_item.modificado=CURRENT_TIMESTAMP;
 
 delete FROM temporal;
 else
 	SELECT "Carrito vacio";
 END IF;
end/
DELIMITER ;
drop TRIGGER if EXISTS TR_insert;
DELIMITER /
create TRIGGER TR_insert after INSERT on productos_compra
for EACH row 
BEGIN
	set @idpro = new.id_producto;
 set @cantidad = (SELECT cantidad FROM inventario_producto 
 WHERE inventario_producto.id_inventario = (SELECT producto.id_inventario FROM producto 
 WHERE producto.id_producto = @idpro)) - new.cantidad;
 set @idinv = (SELECT producto.id_inventario FROM producto where producto.id_producto = @idpro);
 
 update inventario_producto 
 set inventario_producto.cantidad = @cantidad
 WHERE inventario_producto.id_inventario=@idinv;
	
end /
DELIMITER ;

Más contenidos de este tema