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

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

	DECLARE VTGL_AWAL DATETIME;

	SET VTGL_AWAL = CONCAT(DATE_FORMAT(PTANGGAL,'%Y-%m-01'), ' 00:00:01');

	SET @jmlsisa1= ROUND(0.00,2);
	SET @stokakhir1=null;
	SET @jmlsisa= ROUND(0.00,2);
	SET @stokakhir=null;
	
	DROP TEMPORARY TABLE IF EXISTS tmp1_masuk;

	CREATE TEMPORARY TABLE tmp1_masuk (id INT, jml DECIMAL(60,2), idx BIGINT, harga DECIMAL(60,2), tanggal datetime, rkkl VARCHAR(250)) ENGINE = MEMORY;
	INSERT INTO tmp1_masuk
	SELECT BARANG, SUM(jmlsisa) jmlsisa, ID, HARGA, TANGGAL, RKKL
						FROM (

					SELECT ID, BARANG, HARGA , TANGGAL, RKKL
						, @stokakhir:=(IF(@stokakhir is null,@stokakhir:=ROUND(PSTOK,2),@stokakhir) - @jmlsisa) stokakhir
						, @jmlsisa:= IF(jmlsisa > @stokakhir,@stokakhir, IF(YEAR(TANGGAL)< '2021',@stokakhir,jmlsisa)) jmlsisa
					FROM (
					SELECT ID,  BARANG, SUM(jmlsisa) jmlsisa, HARGA, TANGGAL, RKKL
						FROM (	
								SELECT ID, ab.TANGGAL, ab.BARANG, ab.JUMLAH, ab.HARGA, RKKL
										, @stokakhir1:=(IF(@stokakhir1 is null,@stokakhir1:=ROUND(PNILAI_MAX,2),@stokakhir1) - @jmlsisa1) stokakhir
										, @jmlsisa1:= IF(ab.JUMLAH > @stokakhir1,@stokakhir1, IF(YEAR(ab.TANGGAL)< '2021',@stokakhir1,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 BETWEEN VTGL_AWAL AND PTANGGAL AND pb.`STATUS`=2
													ORDER BY pb.TANGGAL_DIBUAT DESC, pbd.ID DESC
												)
												
													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 BETWEEN VTGL_AWAL AND PTANGGAL
													ORDER BY h.TANGGAL DESC, h.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 BETWEEN VTGL_AWAL AND PTANGGAL
													ORDER BY bp.TANGGAL DESC, bp.ID DESC
												) 
												
												
											) ab ORDER BY ab.TANGGAL DESC, ID DESC
								) cd
					WHERE cd.jmlsisa!=0
					GROUP BY BARANG, ID, HARGA 
					) ef 
					ORDER BY TANGGAL DESC, ID DESC
				) gh
		WHERE jmlsisa!=0
	GROUP BY BARANG, ID, HARGA;

END//
DELIMITER ;