use laporan;
DROP PROCEDURE IF EXISTS `laporan`.`getStokFifo`;
DELIMITER //

CREATE DEFINER=`root`@`localhost` PROCEDURE `laporan`.`getStokFifo`(
	IN `PIDOBAT` INT,
	IN `PSTOK` DECIMAL(15,3),
	IN `PTANGGAL` DATETIME
)
BEGIN



	SET @jmlsisa= ROUND(0.00,2);
	SET @stokakhir=null;

	
	DROP TEMPORARY TABLE IF EXISTS tmp1;
	
	CREATE TEMPORARY TABLE tmp1 (id INT, jml DECIMAL(60,2), idx BIGINT, harga DECIMAL(60,2), tanggal DATETIME, rkkl VARCHAR(250)) ENGINE = MEMORY;
	INSERT INTO tmp1
	SELECT BARANG, SUM(jmlsisa) jmlsisa, ID, HARGA, TANGGAL, RKKL
		FROM (	
				SELECT ID, ab.TANGGAL, ab.BARANG, ab.JUMLAH, ab.HARGA, RKKL
						, @stokakhir:=(IF(@stokakhir is null,@stokakhir:=ROUND(PSTOK,2),@stokakhir) - @jmlsisa) stokakhir
						, @jmlsisa:= IF(ab.JUMLAH > @stokakhir,@stokakhir, IF(YEAR(ab.TANGGAL)< '2021',@stokakhir,ab.JUMLAH)) jmlsisa
					 
					FROM (
								(
									SELECT pbd.ID, pb.TANGGAL_DIBUAT TANGGAL, pbd.BARANG, pbd.JUMLAH, pbd.HARGA, pb.REF_SKA RKKL
									  FROM inventory.penerimaan_barang_detil pbd
										  , inventory.penerimaan_barang pb
										
									 WHERE pbd.BARANG=PIDOBAT AND pbd.PENERIMAAN=pb.ID AND pbd.`STATUS` = 2 AND pbd.BONUS=0 AND pb.TANGGAL_DIBUAT <= PTANGGAL AND pb.`STATUS`=2
									ORDER BY pb.TANGGAL_DIBUAT DESC, pbd.ID DESC
								)
									UNION ALL
								(
									SELECT 1 ID, DATE_ADD('2022-12-01 00:00:00', INTERVAL ID MINUTE) TANGGAL, pgd.BARANG, pgd.JUMLAH, pgd.HARGA, '' RKKL
										
									FROM inventory.hrg_migrasi_sistem pgd
									WHERE pgd.BARANG=PIDOBAT AND pgd.JUMLAH > 0
								)
									UNION ALL
								(
									SELECT d.ID, h.TANGGAL, d.BARANG, d.QTY JUMLAH, d.HARGA, '' RKKL
									FROM inventory.hibah h
										, inventory.hibah_detil d
									WHERE d.HIBAH = h.ID AND d.BARANG = PIDOBAT and h.`STATUS` = 2 AND h.JENIS = 1 and h.TANGGAL <= PTANGGAL
									ORDER BY h.TANGGAL DESC, d.ID DESC
								) 
									UNION ALL
								(
									SELECT bp.ID, bp.TANGGAL, bp.BARANG, bp.QTY, bp.HARGA_ESTIMASI HARGA, '' RKKL 
									FROM inventory.barang_produksi bp 
									WHERE bp.BARANG= PIDOBAT AND bp.TANGGAL <= PTANGGAL
									ORDER BY bp.TANGGAL DESC, bp.ID DESC
								) 
									
									UNION ALL
								 (  
								 SELECT 1 ID,  '2022-12-01 00:00:00' TANGGAL, PIDOBAT, PSTOK, 0 HARGA, '' RKKL
								 )
							) ab ORDER BY ab.TANGGAL DESC, ab.ID DESC
				) cd
	WHERE cd.jmlsisa!=0
	GROUP BY BARANG, ID, HARGA ;
	
END//
DELIMITER ;