USE `inventory`;
-- --------------------------------------------------------
-- Versi server:                 8.0.11 - MySQL Community Server - GPL
-- OS Server:                    Win64
-- HeidiSQL Versi:               9.2.0.4947
-- --------------------------------------------------------


-- Dumping structure for procedure inventory.generateDataPerencanaan
DROP PROCEDURE IF EXISTS `generateDataPerencanaan`;
DELIMITER //
CREATE DEFINER=`root`@`localhost` PROCEDURE `generateDataPerencanaan`(IN `PAWAL` DATETIME, IN `PAKHIR` DATETIME)
BEGIN
	DECLARE KTOTAL DECIMAL(60,2);
	DECLARE VPERIODE_A,VPERIODE_B,VPERIODE_C,VVOLUME_A,VVOLUME_B,VVOLUME_C,VLEAD_A,VLEAD_B,VLEAD_C INT;
	
	SET @KTOTAL := ROUND(0.00,2);
	SET @PERSENTASE:= ROUND(0.00,2);
	SET @JUMLAH:= ROUND(0.00,2);
	SET @KOMULATIF := 0;
	SET @KATEGORI:= '';
	SET @VOLUME_KENAIKAN := 0;
	SET @LEAD_TIME := 0;
	SET @RATA:= 0;
	SET @RATA_PERIODE:= 0;
	
	SELECT SUM(VTOTAL) INTO KTOTAL 
	FROM (
		SELECT (
			(SUM(IF(MONTH(tsr.TANGGAL)=MONTH(DATE_ADD(PAKHIR, INTERVAL -1 MONTH)),tsr.JUMLAH,0)) 
				+ SUM(IF(MONTH(tsr.TANGGAL)=MONTH(DATE_ADD(PAKHIR, INTERVAL -2 MONTH)),tsr.JUMLAH,0))
				+ SUM(IF(MONTH(tsr.TANGGAL)=MONTH(DATE_ADD(PAKHIR, INTERVAL -3 MONTH)),tsr.JUMLAH,0))
				+ SUM(IF(MONTH(tsr.TANGGAL)=MONTH(DATE_ADD(PAKHIR, INTERVAL -4 MONTH)),tsr.JUMLAH,0))
				) * (SELECT inventory.getHargaBeli(br.BARANG, PAKHIR))) AS VTOTAL
		FROM inventory.transaksi_stok_ruangan tsr
		    , inventory.barang_ruangan br
		WHERE br.ID = tsr.BARANG_RUANGAN AND tsr.JENIS IN (30,33,40,52) AND tsr.TANGGAL BETWEEN PAWAL AND PAKHIR
		GROUP BY br.BARANG
	) da1;
	
	SELECT r.PERIODE_PERENCANAAN, r.VOLUME_PRESENTASE, r.LEAD_TIME INTO VPERIODE_A, VVOLUME_A, VLEAD_A
	FROM rumus_perencanaan r WHERE r.KATEGORI = 'A' AND r.STATUS = 1 ORDER BY r.UPDATE_TIME DESC LIMIT 1;
	SELECT r.PERIODE_PERENCANAAN, r.VOLUME_PRESENTASE, r.LEAD_TIME INTO VPERIODE_B, VVOLUME_B, VLEAD_B
	FROM rumus_perencanaan r WHERE r.KATEGORI = 'B' AND r.STATUS = 1 ORDER BY r.UPDATE_TIME DESC LIMIT 1;
	SELECT r.PERIODE_PERENCANAAN, r.VOLUME_PRESENTASE, r.LEAD_TIME INTO VPERIODE_C, VVOLUME_C, VLEAD_C
	FROM rumus_perencanaan r WHERE r.KATEGORI = 'C' AND r.STATUS = 1 ORDER BY r.UPDATE_TIME DESC LIMIT 1;
	
	#INSERT INTO material_request_detil m (m.NO_MR, m.BARANG, m.KATEGORI, m.SISA_STOK, m.RATAPENJUALAN, m.HARGA_BELI, m.JML_BIAYA, m.PERSENTASE, m.KOMULATIF_BIAYA)
	
	SELECT
		BARANG,STOKRS,BLN5,BLN4,BLN3,BLN2,BLN1,(BLN5+BLN4+BLN3+BLN2+BLN1) JUMLAH5, HRG_BELI
		, @JUMLAH:= (BLN4+BLN3+BLN2+BLN1) JUMLAH4
		, @KTOTAL:=ROUND((@JUMLAH * HRG_BELI),2) TOTAL
		, @KOMULATIF:=ROUND((@KOMULATIF+@KTOTAL),2) KOMULATIF
		, @PERSENTASE:=ROUND((IF((@KOMULATIF / KTOTAL) IS NULL,0,(@KOMULATIF / KTOTAL)) * 100),2) PERSENTASE
		, @KATEGORI:=(SELECT inventory.getKategoriRumusPerencanaan(@PERSENTASE)) KATEGORI
		, @RATA:=ROUND((@JUMLAH / 4),2) RATA_RATA
		, @RATA_PERIODE:=ROUND((@RATA / IF(@KATEGORI='A',VPERIODE_A,IF(@KATEGORI='B',VPERIODE_B,VPERIODE_C))),2) RATA_RATA_PERIODE
		, @VOLUME_KENAIKAN:= (@RATA_PERIODE * IF(@KATEGORI='A',VVOLUME_A,IF(@KATEGORI='B',VVOLUME_B,VVOLUME_C))) VOLUME_KENAIKAN
		, @LEAD_TIME:= ROUND(((IF(@KATEGORI='A',VVOLUME_A,IF(@KATEGORI='B',VVOLUME_B,VVOLUME_C)) / 30) * (@RATA_PERIODE + @VOLUME_KENAIKAN)),2) LEAD_TIME
		, ROUND(((@RATA_PERIODE + @VOLUME_KENAIKAN + @LEAD_TIME) - STOKRS),2) JML_RUMUS
	FROM (
		SELECT br.BARANG
		  , SUM(IF(MONTH(tsr.TANGGAL)=MONTH(PAKHIR),tsr.JUMLAH,0)) BLN5
		  , SUM(IF(MONTH(tsr.TANGGAL)=MONTH(DATE_ADD(PAKHIR, INTERVAL -1 MONTH)),tsr.JUMLAH,0)) BLN4
		  , SUM(IF(MONTH(tsr.TANGGAL)=MONTH(DATE_ADD(PAKHIR, INTERVAL -2 MONTH)),tsr.JUMLAH,0)) BLN3
		  , SUM(IF(MONTH(tsr.TANGGAL)=MONTH(DATE_ADD(PAKHIR, INTERVAL -3 MONTH)),tsr.JUMLAH,0)) BLN2
		  , SUM(IF(MONTH(tsr.TANGGAL)=MONTH(DATE_ADD(PAKHIR, INTERVAL -4 MONTH)),tsr.JUMLAH,0)) BLN1
		  , (SELECT inventory.getHargaBeli(br.BARANG, PAKHIR)) HRG_BELI
		  , (SELECT SUM(IF(brs.STOK < 0,0,brs.STOK))
						FROM inventory.barang_ruangan brs
						WHERE brs.ID=br.ID
						GROUP BY brs.BARANG) STOKRS 
		FROM inventory.transaksi_stok_ruangan tsr
		    , inventory.barang_ruangan br
		WHERE br.ID = tsr.BARANG_RUANGAN AND tsr.JENIS IN (30,33,40,52) AND tsr.TANGGAL BETWEEN PAWAL AND PAKHIR
		GROUP BY br.BARANG
	) rec ORDER BY (BLN4+BLN3+BLN2+BLN1) DESC;

END//
DELIMITER ;
