
use inventory;
DROP TRIGGER IF EXISTS `transaksi_stok_ruangan_before_update`;
DELIMITER //
CREATE DEFINER=`root`@`localhost` TRIGGER `transaksi_stok_ruangan_before_update` BEFORE UPDATE ON `transaksi_stok_ruangan` FOR EACH ROW BEGIN
	DECLARE VSTOK_SEBELUMNYA DECIMAL(60,2);
	DECLARE VSTOK_SEBELUM_SO DECIMAL(60,2);
	DECLARE VSTOK_SEBELUM_STOK_OPNAME DECIMAL(60,2);
	DECLARE VTAMBAH_ATAU_KURANG,VTAMBAH_ATAU_KURANGS CHAR(1);
	
	
	SELECT STOK INTO VSTOK_SEBELUMNYA
	  FROM inventory.transaksi_stok_ruangan
	 WHERE BARANG_RUANGAN = OLD.BARANG_RUANGAN
		AND ID < OLD.ID
	 ORDER BY ID DESC, TANGGAL DESC LIMIT 1;
	
	
	IF FOUND_ROWS() = 0 THEN
		
		SELECT jts.TAMBAH_ATAU_KURANG INTO VTAMBAH_ATAU_KURANGS
		  FROM inventory.jenis_transaksi_stok jts
		 WHERE jts.ID = NEW.JENIS;
		 
		IF FOUND_ROWS() > 0 THEN
			
			IF NEW.JENIS != 11 THEN
				IF NEW.JENIS != 15 THEN
					IF VTAMBAH_ATAU_KURANGS = '+' THEN
						SET NEW.STOK = NEW.JUMLAH;
					ELSEIF VTAMBAH_ATAU_KURANGS = '-' THEN
						SET NEW.STOK = (0 - NEW.JUMLAH);
					ELSE
						SET NEW.STOK = NEW.JUMLAH;
					END IF;
				ELSE
					SET NEW.STOK = 0;
				END IF;
			ELSE
				SET NEW.STOK = NEW.JUMLAH;
			END IF;
		END IF;
		
	ELSE
	
		SELECT STOK INTO VSTOK_SEBELUM_SO
		  FROM inventory.transaksi_stok_ruangan
		 WHERE BARANG_RUANGAN = OLD.BARANG_RUANGAN
			AND ID < OLD.ID AND JENIS NOT IN (11,15)
		 ORDER BY ID DESC, TANGGAL DESC LIMIT 1;
		IF FOUND_ROWS() > 0 THEN
			SET VSTOK_SEBELUM_STOK_OPNAME = VSTOK_SEBELUM_SO;
		ELSE
			SET VSTOK_SEBELUM_STOK_OPNAME = 0;
		END IF;
		 
		SELECT jts.TAMBAH_ATAU_KURANG INTO VTAMBAH_ATAU_KURANG
		  FROM inventory.jenis_transaksi_stok jts
		 WHERE jts.ID = NEW.JENIS;
		 
		IF FOUND_ROWS() > 0 THEN
			
			IF NEW.JENIS != 11 THEN
				IF NEW.JENIS != 15 THEN
					IF VTAMBAH_ATAU_KURANG = '+' THEN
						SET NEW.STOK = VSTOK_SEBELUMNYA + NEW.JUMLAH;
					ELSEIF VTAMBAH_ATAU_KURANG = '-' THEN
						SET NEW.STOK = VSTOK_SEBELUMNYA - NEW.JUMLAH;
					ELSE
						SET NEW.STOK = VSTOK_SEBELUMNYA;
					END IF;
				ELSE
					SET NEW.STOK = VSTOK_SEBELUM_STOK_OPNAME;
				END IF;
			ELSE
				SET NEW.STOK = NEW.JUMLAH;
			END IF;
		END IF;
	END IF;
	
		
	IF NOT EXISTS(SELECT 1
			FROM inventory.transaksi_stok_ruangan
		  WHERE BARANG_RUANGAN = OLD.BARANG_RUANGAN
			 AND ID > OLD.ID LIMIT 1) THEN
	BEGIN
		UPDATE inventory.barang_ruangan
		   SET STOK = NEW.STOK,
		   	 TANGGAL = NEW.TANGGAL,
		   	 TRANSAKSI_STOK_RUANGAN = OLD.ID,
             STATUS = 1
		 WHERE ID = OLD.BARANG_RUANGAN;
	END;
	END IF;
END;

//

DELIMITER ;