	DROP TABLE IF EXISTS tmp.BackorderRegels;
	DROP TEMPORARY TABLE IF EXISTS tmp.BackorderRegels;
	CREATE TEMPORARY TABLE tmp.BackorderRegels (
		Id INT PRIMARY KEY, BestellingId INT, DT DATETIME, Ean CHAR(13) CHARACTER SET latin1,
		BoekStatus INT, Aantal INT, AantalBackorder INT, Geleverd INT,
		Gereserveerd INT, Leverbaar INT, DeelLeverbaar INT, Wacht INT,
		VerstuurCompleteOrder INT,
		
		BeschikbareVoorraad INT, GereserveerdeVoorraad INT, FysiekeVoorraad INT,
		GeprinteVoorraad INT, NogNietGeprint INT,
		
		Bindwijze_voorraadartikel INT, Bindwijze_evenement INT,
		Voorafgaand INT, GenoegVoorraad INT,
		KEY( BestellingId )
	) ENGINE=MEMORY;
	
	CALL Voorraadbeheer.berekenGeprinteVoorraad();
	
	INSERT INTO tmp.BackorderRegels
		SELECT
			A.Id, A.BestellingId, BA.DT, A.Ean, BK.BoekStatus, A.Aantal, A.AantalBackorder,
			IFNULL( B.Geleverd, 0 ) AS Geleverd,
			IF( OP.niet_reserveren, 0, 1 ) AS Gereserveerd, /* Gereserveerd */
			IF( Bindwijze_voorraadartikel, 0, IF( BK.BoekStatus = 5, 0, 1 ) ) AS Leverbaar, /* Leverbaar */
			0, /* DeelLeverbaar */ 0, /* Wacht */ VerstuurCompleteOrder,
			
			IFNULL( BeschikbareVoorraad, 0 ), IFNULL( GereserveerdeVoorraad, 0 ),
			IFNULL( FysiekeVoorraad, 0 ), IFNULL( GP.GeprintAantal, 0), 
			IFNULL( GP.NogNietGeprint, 0),
			
			IFNULL( Bindwijze_voorraadartikel, 0 ), IFNULL( Bindwijze_evenement, 0 ),
			0, /* Voorafgaand */ IF( Bindwijze_voorraadartikel, 0 , 1 ) /* GenoegVoorraad */
		FROM Bestellingen A 
			JOIN OrderregelStatusPlat OP USING ( Id )                           -- Niet reserveren
			JOIN BestellingAll BA USING ( BestellingId )                        -- Datum
			LEFT JOIN Voorraadbeheer.Voorraad V ON ( A.Ean = V.Ean )            -- Voorraadstanden
			LEFT JOIN tmp.GeprinteVoorraad GP ON ( A.Ean = GP.Ean )             -- Geprinte Voorraad
			LEFT JOIN Managementboek_Boeken.Boeken BK ON ( A.Ean = BK.Ean )     -- Boekstatus
			LEFT JOIN Managementboek_Boeken.Bindwijze USING ( Bindwijze )       -- Bindwijzes
			LEFT JOIN tmp.Backorders B ON ( A.Id = B.BackorderOrigineel )       -- Voor geleverd aantal
			LEFT JOIN BestellingStatus ST
				ON ( ST.Bestellingid = A.BestellingId
					AND ST.StatusId IN ( 33 /* Afgesloten */, 24 /* Geannuleerd */, 16 /* Geannuleerd */ ) )		
		WHERE A.AantalBackorder > 0 
			AND ST.StatusId IS NULL
			AND IFNULL( Geleverd, 0 ) < AantalBackorder
			AND A.Ean NOT IN ( 'IDEAL' )
			AND OP.vink_open = 1;
			-- AND A.Geannuleerd = 0;
	
	
	-- Voor alles dat NIET gereserveerd is geldt: Het is leverbaar als er genoeg BESCHIKBARE voorraad is.
	/*
	DROP TEMPORARY TABLE IF EXISTS tmp.LeverbareEans;
	CREATE TEMPORARY TABLE tmp.LeverbareEans ENGINE=MEMORY
		SELECT Ean, SUM( AantalBackorder ) AS Totaal, Bindwijze_voorraadartikel, Boekstatus, T.BeschikbareVoorraad  
			FROM tmp.BackorderRegels T WHERE Gereserveerd = 0 AND Bindwijze_voorraadartikel = 1 
			GROUP BY Ean HAVING BeschikbareVoorraad >= Totaal;
	
	UPDATE tmp.BackorderRegels JOIN tmp.LeverbareEans USING ( Ean ) SET GenoegVoorraad = 1, Leverbaar = 1;
	*/
	
	CALL bereken_voorrang_backorderregels();
	
	-- Niet genoeg voorraad -> Dan niet leverbaar.
	UPDATE tmp.BackorderRegels SET Leverbaar = 0 WHERE GenoegVoorraad = 0;
	
	-- Nog niet verschenen? Dan niet leverbaar.
	UPDATE tmp.BackorderRegels SET Leverbaar = 0 WHERE Boekstatus = 5;
	
	-- Bereken leverbaar; Alles is leverbaar BEHALVE:
	-- a) Orders met ten minste 1 regel waarvoor geldt: VerstuurCompleteOrder = 1 AND Niet genoeg voorraad AND boekstatus != 1, 2, 5
	DROP TEMPORARY TABLE IF EXISTS tmp.NietLeverbareOrders;
	
	CREATE TEMPORARY TABLE tmp.NietLeverbareOrders ENGINE=MEMORY
		SELECT DISTINCT BestellingId
		FROM tmp.BackorderRegels 
		WHERE VerstuurCompleteOrder = 1 AND GenoegVoorraad = 0 AND BoekStatus NOT IN ( 1, 2, 5 );
	
	-- Porto's, Bong's & Ideal's.
	DROP TEMPORARY TABLE IF EXISTS tmp.AlleLeverbareOrders;
	CREATE TEMPORARY TABLE tmp.AlleLeverbareOrders ENGINE=MEMORY
		SELECT DISTINCT BestellingId
		FROM tmp.BackorderRegels
		WHERE Leverbaar = 1 AND Ean NOT IN ( 'VOUCHER', 'PORTO', 'BONG', 'IDEAL' );
	
	UPDATE tmp.BackorderRegels
	SET Leverbaar = 0
	WHERE Ean IN ( 'VOUCHER', 'PORTO', 'BONG', 'IDEAL' )
		AND BestellingId NOT IN ( SELECT BestellingId FROM tmp.AlleLeverbareOrders );
	
	-- Zet op niet leveren, behalve die orderregels waarvan boekstatus 5,2,1  is -> 
	UPDATE tmp.BackorderRegels JOIN tmp.NietLeverbareOrders USING ( BestellingId )	SET Leverbaar = 0, Wacht = 1;
	
	COMMIT;
	
	END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `BerekenStemmen` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `BerekenStemmen`()
BEGIN
	CALL common_schema.run( 'foreach($ean: SELECT DISTINCT Ean FROM Managementboek_vogoo.`vogoo_ratings` WHERE Ean > 0) { CALL Managementboek_Klanten.BerekenStemmenEan( $ean ); }' );
	/* REPLACE INTO VogooAvg ( Ean, Stemmen, Gemiddeld) SELECT Ean,
		   COUNT( member_id ) AS Stemmen,
		   IFNULL( AVG( VR.rating ), 0) AS Gemiddeld
		   FROM Managementboek_vogoo.vogoo_ratings VR 
		   WHERE IFNULL( VR.rating, 0) >= 0
		   GROUP BY Ean;
	DROP TEMPORARY TABLE IF EXISTS BoekVervangingen;	
	CREATE TEMPORARY TABLE BoekVervangingen ( Ean CHAR(13), EanOut CHAR(13), PRIMARY KEY(Ean,EanOut), KEY( EanOut ) );
	
	INSERT IGNORE INTO BoekVervangingen SELECT A.Ean, V.Vervangtean AS EanOut FROM Managementboek_Boeken.Boekanderebindwijzen A JOIN Managementboek_Boeken.Boekvervangtean V ON ( V.Ean = A.Eangekoppeld );
	INSERT IGNORE INTO BoekVervangingen SELECT V.Ean, V.Vervangtean AS Ean FROM Managementboek_Boeken.Boekvervangtean V;
	CREATE TABLE IF NOT EXISTS VogooStemmen ( Ean CHAR(13) PRIMARY KEY, Gemiddeld DECIMAL(4,2), Waardering DECIMAL( 4,1 ), Ranking INT, Aantal INT ) ENGINE=INNODB;
	DELETE FROM VogooStemmen;
	
	INSERT INTO VogooStemmen SELECT B.Ean,
		ROUND(IFNULL(SUM( Stemmen * Gemiddeld ) / SUM( Stemmen ),0),2) AS Gemiddeld, 
		ROUND(IFNULL(ROUND(10*SUM( Stemmen * Gemiddeld ) / SUM( Stemmen )),0)/2,1) AS Waardering, 
	-- Zie: http://stackoverflow.com/questions/1411199/what-is-a-better-way-to-sort-by-a-5-star-rating?lq=1
		IFNULL( 100000 * ( ( ( SUM(Stemmen) / ( SUM(Stemmen) + 5 ) ) * ( SUM( Stemmen * Gemiddeld ) / SUM( Stemmen ) ) ) + ( ( 1 / ( SUM(Stemmen) + 5 ) ) * 0.75 ) ), 0) AS Ranking,
		SUM(Stemmen) 
		FROM 
		BoekVervangingen B 
		JOIN Managementboek_Klanten.`VogooAvg` A  ON ( A.Ean = B.EanOut )
		WHERE B.Ean != ''
		GROUP BY B.Ean; */
	
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `BerekenStemmenEan` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `BerekenStemmenEan`( _ean CHAR(13) CHARSET latin1 )
BEGIN
	DECLARE iscb INT;
	DECLARE h INT;
	
	REPLACE INTO VogooAvg ( Ean, Stemmen, Gemiddeld) SELECT Ean,
		   COUNT( member_id ) AS Stemmen,
		   IFNULL( AVG( VR.rating ), 0) AS Gemiddeld
		   FROM Managementboek_vogoo.vogoo_ratings VR 
		   WHERE IFNULL( VR.rating, 0) >= 0
		   AND Ean = _ean
		   GROUP BY Ean; -- CB-proof
		   
		   
/*	DROP TEMPORARY TABLE IF EXISTS BoekVervangingen;	
	CREATE TEMPORARY TABLE BoekVervangingen ( Ean CHAR(13), EanOut CHAR(13), PRIMARY KEY(Ean,EanOut), KEY( EanOut ) ) CHARACTER SET latin1;
	
	INSERT IGNORE INTO BoekVervangingen SELECT A.Ean, V.Vervangtean AS EanOut FROM Managementboek_Boeken.Boekanderebindwijzen A 
		JOIN Managementboek_Boeken.Boekvervangtean V ON ( V.Ean = A.Eangekoppeld )
		WHERE V.Ean = _ean;
		
	INSERT IGNORE INTO BoekVervangingen SELECT V.Ean, V.Vervangtean AS Ean FROM Managementboek_Boeken.Boekvervangtean V WHERE V.Ean = _ean; */
	
	SELECT COUNT(*) INTO iscb FROM CbBoeken.`Boeken_gefilterd` WHERE Ean = _ean;
	
	iF iscb > 0 THEN
		REPLACE INTO VogooStemmen 
			  SELECT Ean,
				ROUND(IFNULL(SUM( Stemmen * Gemiddeld ) / SUM( Stemmen ),0),2) AS Gemiddeld, 
				ROUND(IFNULL(ROUND(10*SUM( Stemmen * Gemiddeld ) / SUM( Stemmen )),0)/2,1) AS Waardering, 
				-- Zie: http://stackoverflow.com/questions/1411199/what-is-a-better-way-to-sort-by-a-5-star-rating?lq=1
				IFNULL( 100000 * ( ( ( SUM(Stemmen) / ( SUM(Stemmen) + 5 ) ) * ( SUM( Stemmen * Gemiddeld ) / SUM( Stemmen ) ) ) + ( ( 1 / ( SUM(Stemmen) + 5 ) ) * 0.75 ) ), 0) AS Ranking,
				SUM(Stemmen) AS Stemmen
				FROM 
				Managementboek_Klanten.`VogooAvg` A 
				WHERE A.Ean = _ean;
	ELSE
		DROP TEMPORARY TABLE IF EXISTS Temp;
		CREATE TEMPORARY TABLE Temp SELECT _ean AS OrigineelEan, _ean AS Ean;
		
		SELECT COUNT(*) INTO h FROM Manpo.Boeken WHERE Ean = _ean AND Historieovernemen = 1;
		
		IF h = 1 THEN
			REPLACE INTO Temp SELECT 
				B.`L1` AS OrigineelEan, _ean AS Ean
				FROM Manpo.`BoekVervangtEAN` A JOIN Manpo.`Mapped_EAN` B ON (B.`U8` = A.`Vervangt`)
				WHERE Ean = _ean;
		END IF;
		
/*		REPLACE INTO VogooStemmen SELECT GAEVB.Ean, Gemiddeld, Waardering, Ranking, Stemmen FROM 
			 ( SELECT B.Ean,
				ROUND(IFNULL(SUM( Stemmen * Gemiddeld ) / SUM( Stemmen ),0),2) AS Gemiddeld, 
				ROUND(IFNULL(ROUND(10*SUM( Stemmen * Gemiddeld ) / SUM( Stemmen )),0)/2,1) AS Waardering, 
				-- Zie: http://stackoverflow.com/questions/1411199/what-is-a-better-way-to-sort-by-a-5-star-rating?lq=1
				IFNULL( 100000 * ( ( ( SUM(Stemmen) / ( SUM(Stemmen) + 5 ) ) * ( SUM( Stemmen * Gemiddeld ) / SUM( Stemmen ) ) ) + ( ( 1 / ( SUM(Stemmen) + 5 ) ) * 0.75 ) ), 0) AS Ranking,
				SUM(Stemmen) AS Stemmen
				FROM 
				Manpo.`GAEVB` B 
				JOIN Managementboek_Klanten.`VogooAvg` A  ON ( A.Ean = B.Ean )
				WHERE B.Ean != ''
				AND B.`OrigineelEAN` = _ean
				GROUP BY B.OrigineelEAN ) A 	
			JOIN Manpo.`GAEVB` ON ( OrigineelEan = A.Ean ); */
		CREATE TEMPORARY TABLE Temp2 SELECT T.Ean, 
		ROUND(SUM( Stemmen * Gemiddeld ) / SUM( Stemmen ),2) AS Gemiddeld, 
		ROUND(IFNULL(ROUND(10*SUM( Stemmen * Gemiddeld ) / SUM( Stemmen )),0)/2,1) AS Waardering, 
		IFNULL( 100000 * ( ( ( SUM(Stemmen) / ( SUM(Stemmen) + 5 ) ) * ( SUM( Stemmen * Gemiddeld ) / SUM( Stemmen ) ) ) + ( ( 1 / ( SUM(Stemmen) + 5 ) ) * 0.75 ) ), 0) AS Ranking,
		SUM(Stemmen) AS Stemmen
		FROM Temp T JOIN Managementboek_Klanten.`VogooAvg` V ON ( V.`Ean` = T.OrigineelEan ) WHERE T.Ean = _ean;
		REPLACE INTO VogooStemmen SELECT OrigineelEan, Gemiddeld, Waardering, Ranking, Stemmen FROM Temp JOIN Temp2 USING ( Ean );			
	END IF;
	
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `bereken_aanbevelingen` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `bereken_aanbevelingen`( _klantid INT )
BEGIN
	START TRANSACTION;
	DELETE FROM KlantAanbevolenReden2 WHERE Klantid = _klantid; -- AND DTBijgewerkt < DATE(NOW());	
	
	/* Pak de 'aanbevolen basis' van de klant en haal daar alle aanbevelingen bij op */
	INSERT INTO KlantAanbevolenReden2
	SELECT 
	  KAB.Klantid,
	  RecommendedEan,
	  s.Ean AS Ean,  
	  Positie,
	  ( TO_DAYS(NOW()) - TO_DAYS(KAB.DTBesteld) ) / 356 AS JarenGeleden,
	  ROUND( 10 * ( LEAST( 365 / ( TO_DAYS(NOW()) - TO_DAYS(KAB.DTBesteld) ), 1 ) / (3+Positie) ), 2 ) Factor, 
	  DATE(NOW()) AS DTOntstaan,
	  DATE(NOW()) AS DTBijgewerkt
	FROM
	  Managementboek_Klanten.`KlantAanbevolenBasis` KAB JOIN Managementboek_Klanten.sale_recommendation_eans s ON ( s.Ean = KAB.Ean )
	  JOIN Managementboek_Boeken.Boeken bAanbevolen ON (s.RecommendedEan = bAanbevolen.Ean) 
	  JOIN Managementboek_Boeken.Boeken bOmdat ON ( s.Ean = bOmdat.Ean )
	  JOIN Managementboek_Klanten.Boekranking_Plat r ON (bAanbevolen.Ean = r.Ean) 
	WHERE `90d` > 10 
	  AND s.Ean NOT IN ( SELECT Ean FROM Managementboek_Klanten.`KlantAanbevolenExcludeBron` E WHERE E.Klantid = _klantid ) 
	  AND s.Ean NOT IN ( '9780000000620','9780000000668','9780000000675','9780000000637','9780000000644','9780000000651', 'PORTO', 'BONG' )
	  AND s.RecommendedEan NOT IN ( SELECT RecommendedEan FROM Managementboek_Klanten.`KlantAanbevolenGemaild` E WHERE E.Klantid = _klantid ) 
	  AND s.RecommendedEan NOT IN ( '9780000000620','9780000000668','9780000000675','9780000000637','9780000000644','9780000000651', 'PORTO', 'BONG' )
	  AND s.RecommendedEan NOT IN ( SELECT B.Ean FROM Managementboek_Klanten.`KlantAanbevolenBasis` B WHERE B.Klantid = _klantid ) 
	  AND bAanbevolen.BoekStatus IN (0) 
	  AND bAanbevolen.Ean NOT IN ( SELECT Eangekoppeld FROM Managementboek_Boeken.`Boekgekoppeldean` G WHERE G.Ean = bAanbevolen.Ean )
	  AND bAanbevolen.Ean NOT IN ( SELECT Eangekoppeld FROM Managementboek_Boeken.`Boekanderebindwijzen` W WHERE W.Ean = bAanbevolen.Ean )
	  AND bAanbevolen.Bindwijze NOT IN ( 'boek en e-book' )	  
	  AND bAanbevolen.JaarUitgifte > YEAR(nOW())-5
	  AND Managementboek_Boeken.calc_prijs( bAanbevolen.Prijs, bAanbevolen.Valuta ) > 10
	  AND Managementboek_Boeken.calc_prijs( bOmdat.Prijs, bOmdat.Valuta ) > 10
	  AND KAB.DTBesteld > DATE_SUB( NOW(), INTERVAL 7 YEAR )
	  AND KAB.Klantid = _klantid
	  AND Positie < 10
	  AND LENGTH(s.Ean)=13
	  AND s.Percentage > 1
	  ORDER BY RecommendedEan, Factor DESC
	ON DUPLICATE KEY UPDATE 
	  Positie = VALUES(Positie),
	  BestelDatumFactor = VALUES(BestelDatumFactor),
	  Sorteer = VALUES(Sorteer),
	  DTBijgewerkt = VALUES(DTBijgewerkt);
	
	/* Markeer records als 'wissen' */
	UPDATE KlantAanbevolenEans2 SET Wissen = 1 WHERE Klantid = _klantid;
	
	/* Nu de echte aanbevelingen */
	SET @positie := 0;  
	
	INSERT INTO KlantAanbevolenEans2
	SELECT Klantid, 
	RecommendedEan, 
	@positie := @positie+1 AS Positie, 
	AantalReden, 
	BoekVerschijningFactor, 
	SorteerFactor, 
	DTOntstaan, 
	DATE(NOW()) AS DTBijgewerkt, 
	0 AS Wissen FROM 
	( SELECT Klantid, RecommendedEan, COUNT(Sorteer) AS AantalReden, DATE(NOW()) AS DTOntstaan, 
	(TO_DAYS(NOW()) - TO_DAYS(IF( B.`Verschijningsdatum` = '0000-00-00', CONCAT( IF( B.Jaaruitgifte < 1900, '2000', B.Jaaruitgifte ), '-01-01' ), B.`Verschijningsdatum` ))) / 356 AS BoekVerschijningFactor,
	ROUND( 100 * POW( AVG(Sorteer),1.2 ) * POW( ( 1 / ( 6 - LEAST( COUNT(Sorteer), 5 ) ) ), 1.4 ) / ( GREATEST(LEAST(ABS(TO_DAYS(NOW()) - TO_DAYS(IF( B.`Verschijningsdatum` = '0000-00-00', CONCAT( IF( B.Jaaruitgifte < 1900, '2000', B.Jaaruitgifte ), '-01-01' ), B.`Verschijningsdatum` )))/356,2),0.33) ), 2 ) AS SorteerFactor
	FROM KlantAanbevolenReden2 R JOIN Managementboek_Boeken.Boeken B ON ( R.RecommendedEan = B.Ean )
	
	WHERE Klantid = _klantid
	AND RecommendedEan NOT IN ( '9780000000620','9780000000668','9780000000675','9780000000637','9780000000644','9780000000651', 'PORTO', 'BONG' )
	AND B.Prijs > 14.94
	GROUP BY RecommendedEan
	ORDER BY POW( AVG(Sorteer),1.2 ) * POW( ( 1 / ( 6 - LEAST( COUNT(Sorteer), 5 ) ) ), 1.4 ) / ( GREATEST(LEAST(ABS(TO_DAYS(NOW()) - 
	   TO_DAYS(IF( B.`Verschijningsdatum` = '0000-00-00', CONCAT( IF( B.Jaaruitgifte < 1900, '2000', B.Jaaruitgifte ), '-01-01' ), B.`Verschijningsdatum` )))/356,2),0.33) ) DESC 
	LIMIT 25) REF
	
	ON DUPLICATE KEY UPDATE 
	  Positie = VALUES( Positie ),
	  AantalReden = VALUES( AantalReden ),
	  BoekVerschijningsFactor = VALUES( BoekVerschijningsFactor ),
	  SorteerFactor = VALUES( SorteerFactor ),
	  DTBijgewerkt = DATE(NOW()),
	  Wissen=0;
	 
	DELETE FROM KlantAanbevolenEans2 WHERE Wissen = 1 AND Klantid = _klantid;
	
	REPLACE INTO KlantAanbevolenBerekend SET Klantid = _klantid, DT = NOW();
	
	COMMIT;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `bereken_voorrang` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `bereken_voorrang`()
    READS SQL DATA
BEGIN
	-- Declare variables used just for cursor and loop control
	DECLARE curEan CHAR( 13 ) character set LATIN1;
	DECLARE no_more_rows BOOLEAN;
	DECLARE loop_cntr INT DEFAULT 0;
	DECLARE num_rows INT DEFAULT 0;
	DECLARE v INT;
	
	DECLARE eanCursor CURSOR FOR SELECT DISTINCT Ean FROM OrderregelStatusPlat JOIN Bestellingen USING ( Id ) WHERE vink_open = 1;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
	
	DROP TEMPORARY TABLE IF EXISTS tmp.Voorafgaand;
	CREATE TEMPORARY TABLE tmp.Voorafgaand ( Id INT PRIMARY KEY, Voorafgaand INT ) ENGINE=MEMORY;
	
	OPEN eanCursor;
	the_loop: LOOP
		FETCH eanCursor INTO curEan;
		
		IF no_more_rows THEN
			CLOSE eanCursor;
			LEAVE the_loop;
		END IF;
		
		BLOCK2: BEGIN
			DECLARE v INT DEFAULT 0;
			DECLARE lId INT;
			DECLARE lAantal INT;
			DECLARE no_more_rows2 BOOLEAN;			
			DECLARE loopCursor CURSOR FOR SELECT Id, Aantal + AantalBackorder  FROM Bestellingen JOIN OrderregelStatusPlat USING ( Id ) JOIN BestellingAll A USING ( BestellingId ) 
					WHERE vink_open = 1 AND gefactureerd = 0 AND Ean = curEan ORDER BY A.DT;		
			DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows2 = TRUE;
			
			OPEN loopCursor;
			the_loop2: LOOP
				FETCH loopCursor INTO lId, lAantal;
				
				IF no_more_rows2 THEN
					CLOSE loopCursor;
					LEAVE the_loop2;
				END IF;
				
				INSERT INTO tmp.Voorafgaand SET Voorafgaand = v, Id = lId;
				SET v = v + lAantal;				
			END LOOP the_loop2;
		END BLOCK2;
	END LOOP the_loop;		
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `bereken_voorrang_backorderregels` */;
DELIMITER ;;
CREATE DEFINER=`main`@`%` PROCEDURE `bereken_voorrang_backorderregels`()
BEGIN
	-- Declare variables used just for cursor and loop control
	DECLARE curEan CHAR( 13 ) CHARACTER SET latin1;
	DECLARE no_more_rows BOOLEAN;
	DECLARE loop_cntr INT DEFAULT 0;
	DECLARE num_rows INT DEFAULT 0;
	DECLARE v INT;
	
	DECLARE eanCursor CURSOR FOR SELECT DISTINCT Ean FROM tmp.BackorderRegels;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
	
	/*
	-- Niet gereserveerde voorraad
	DECLARE cur CURSOR FOR SELECT DISTINCT Ean FROM tmp.BackorderRegels WHERE Gereserveerd = 0 AND Bindwijze_voorraadartikel = 1  AND BeschikbareVoorraad > 0 AND NOT( Bindwijze_evenement = 1 && BoekStatus = 5);
	-- Wel gereserveerde voorraad
	DECLARE cur2 CURSOR FOR SELECT DISTINCT Ean FROM tmp.BackorderRegels WHERE Gereserveerd = 1 AND Bindwijze_voorraadartikel = 1 AND FysiekeVoorraad > 0 AND NOT( Bindwijze_evenement = 1 && BoekStatus = 5);
	-- Declare 'handlers' for exceptions
	
	
	-- Eerst wel gereserveerde voorraad
	OPEN cur2;
	the_loop2: LOOP
		FETCH  cur2  INTO  curEan;
		
		IF no_more_rows THEN
			CLOSE cur2;
			LEAVE the_loop2;
		END IF;
		SET @c = 0;
		UPDATE tmp.BackorderRegels 
		  SET Voorafgaand = ( @c := @c + ( AantalBackorder - Geleverd ) ) - ( AantalBackorder - Geleverd ) 
		  WHERE Ean = curEan AND Gereserveerd = 1 ORDER BY DT;
	END LOOP the_loop2;	
	
	UPDATE tmp.BackorderRegels SET GenoegVoorraad = 1, Leverbaar = NOT( Bindwijze_evenement = 1 && BoekStatus = 5 ) 
	   WHERE Gereserveerd = 1 AND ( Voorafgaand + ( AantalBackorder - Geleverd ) ) <= ( FysiekeVoorraad - GeprinteVoorraad ) AND Bindwijze_voorraadartikel = 1 AND FysiekeVoorraad > 0;
	
	UPDATE tmp.BackorderRegels SET DeelLeverbaar = LEAST( AantalBackorder - Geleverd, FysiekeVoorraad - Voorafgaand ) 
	   WHERE Gereserveerd = 1 AND ( FysiekeVoorraad - GeprinteVoorraad ) - Voorafgaand > 0 AND Bindwijze_voorraadartikel = 1 AND FysiekeVoorraad > 0;	 
	
	-- Dan niet gereserveerde voorraad
	OPEN cur;
	the_loop: LOOP
		FETCH  cur  INTO  curEan;
		
		IF no_more_rows THEN
			CLOSE cur;
			LEAVE the_loop;
		END IF;
		SET @c = 0;
		UPDATE tmp.BackorderRegels 
		  SET Voorafgaand = ( @c := @c + ( AantalBackorder - Geleverd ) ) - ( AantalBackorder - Geleverd ) 
		  WHERE Ean = curEan AND Gereserveerd = 0 ORDER BY DT;
	END LOOP the_loop;	
	*/
	
	-- UPDATE tmp.BackorderRegels SET Voorafgaand = orderregel_voorafgaand( Id );
	
	OPEN eanCursor;
	the_loop: LOOP
		FETCH eanCursor INTO curEan;
		
		IF no_more_rows THEN
			CLOSE eanCursor;
			LEAVE the_loop;
		END IF;
		
		BLOCK2: BEGIN
			DECLARE v INT DEFAULT 0;
			DECLARE lId INT;
			DECLARE lAantal INT;
			DECLARE no_more_rows2 BOOLEAN;			
			DECLARE loopCursor CURSOR FOR SELECT Id, Aantal + AantalBackorder
                FROM Bestellingen
                    JOIN OrderregelStatusPlat USING ( Id )
                    JOIN BestellingAll A USING ( BestellingId ) 
				WHERE vink_open = 1 AND gefactureerd = 0
                    AND Ean = curEan ORDER BY A.DT;
			DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows2 = TRUE;
			
			OPEN loopCursor;
			the_loop2: LOOP
				FETCH loopCursor INTO lId, lAantal;
				
				IF no_more_rows2 THEN
					CLOSE loopCursor;
					LEAVE the_loop2;
				END IF;
				
				UPDATE tmp.BackorderRegels SET Voorafgaand = v WHERE Id = lId;
				SET v = v + lAantal;				
			END LOOP the_loop2;
		END BLOCK2;
	END LOOP the_loop;		
			
	
	UPDATE tmp.BackorderRegels SET GenoegVoorraad = 0 WHERE ( AantalBackorder - Geleverd ) > ( FysiekeVoorraad - GeprinteVoorraad );
	
	UPDATE tmp.BackorderRegels SET GenoegVoorraad = 1, Leverbaar = NOT( Bindwijze_evenement = 1 && BoekStatus = 5 ) 
	   WHERE ( Voorafgaand + ( AantalBackorder - Geleverd ) ) <= ( FysiekeVoorraad - GeprinteVoorraad ) AND Bindwijze_voorraadartikel = 1 AND FysiekeVoorraad > 0;
	
	UPDATE tmp.BackorderRegels SET DeelLeverbaar = LEAST( AantalBackorder - Geleverd, FysiekeVoorraad - Voorafgaand ) 
	   WHERE ( FysiekeVoorraad - GeprinteVoorraad ) - Voorafgaand > 0 AND Bindwijze_voorraadartikel = 1 AND FysiekeVoorraad > 0; 
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `bestelling_getoond` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `bestelling_getoond`( BId INT )
BEGIN
	UPDATE BestellingAll SET ToonBestelling =  IF( Herkomst IN ( 'Website', 'iOS' ) AND IsCredit = 0 AND IsOpnieuw = 0, 1, 0 )
	WHERE BestellingId = BId;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `cascade_bestellingenstatus` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `cascade_bestellingenstatus`( OrderId INT )
BEGIN
	DECLARE BO INT;
	SELECT IFNULL( BackorderOrigineel, 0) INTO BO FROM Bestellingen WHERE Id = OrderId;
	IF BO > 0 THEN
		UPDATE BestellingenStatus SET VerzondenOp = NEW.VerzondenOp, GereedOp = NEW.GereedOp, BetaaldOp = NEW.BetaaldOp, GeannuleerdOp = NEW.GeannuleerdOp WHERE Id = BO;
	END IF;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `Daily` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `Daily`()
    MODIFIES SQL DATA
BEGIN
	-- 
	--    UPDATE Statussen
	--
	/* Credit: Hoeft niet ingepakt te worden... */
	INSERT INTO BestellingStatus
	SELECT 32, BA.BestellingId, 'gelukt', '~1', BA.DT
	FROM BestellingAll BA
	LEFT JOIN BestellingStatus BS ON ( BA.Bestellingid = BS.BestellingId AND BS.StatusId = 32 )
	WHERE BS.StatusId IS NULL
	AND BA.Afgerond = 1
	AND BA.IsCredit = 1;
	
	/* Credits van 0 euro -> Betaald 
	INSERT INTO BestellingStatus
	SELECT 21, BA.BestellingId, 'gelukt', '~4', BA.DT
	FROM BestellingAll BA
	LEFT JOIN BestellingStatus BS ON ( BA.Bestellingid = BS.BestellingId AND BS.StatusId = 21 )
	WHERE BS.StatusId IS NULL
	AND BA.Afgerond = 1
	AND BA.IsCredit = 1
	AND bestelling_totaal( BA.BestellingID ) = 0; */
	
	/* Credits van 0 euro -> Afgerond 
	INSERT INTO BestellingStatus
	SELECT 33, BA.BestellingId, 'gelukt', '~4', BA.DT
	FROM BestellingAll BA
	LEFT JOIN BestellingStatus BS ON ( BA.Bestellingid = BS.BestellingId AND BS.StatusId = 33 )
	WHERE BS.StatusId IS NULL
	AND BA.Afgerond = 1
	AND BA.IsCredit = 1
	AND bestelling_totaal( BA.BestellingID ) = 0; */
	
		
	/* Hoeft niet ingepakt te worden; ABO */
	INSERT INTO BestellingStatus
	SELECT 32, BA.BestellingId, 'gelukt', '~1', NOW()
	FROM BestellingAll BA
	LEFT JOIN BestellingStatus BS ON ( BA.Bestellingid = BS.BestellingId AND BS.StatusId = 32 )
	WHERE BS.StatusId IS NULL
	AND BA.Afgerond = 1
	AND BA.BestellingId IN ( SELECT BestellingId FROM Bestellingen WHERE Ean IN ( 'VER_ABO', 'VER_SLOW', 'VER_TOPICS' ) );
	
	/* Sluit geleverde backorders */
	INSERT INTO BestellingStatus
	SELECT 33, BA.BestellingId, 'gelukt', '~3', NOW()
	FROM BestellingAll BA
	LEFT JOIN BestellingStatus BBackorder ON (BA.Bestellingid = BBackorder.BestellingId AND BBackorder.StatusId IN ( 30, 25 ) )
	LEFT JOIN BestellingStatus BAfgerond ON (BA.Bestellingid = BAfgerond.BestellingId AND BAfgerond.StatusId = 33 )
	LEFT JOIN Bestellingen X ON ( BA.Bestellingid = X.Bestellingid )
	WHERE BA.Afgerond = 1
	AND BBackorder.Resultaat = 'gelukt'
	AND X.AantalBackorder > 0
	AND BA.DT BETWEEN DATE_SUB( NOW(), INTERVAL 2 YEAR ) AND DATE_SUB( NOW(), INTERVAL 4 DAY ) 
	AND BAfgerond.StatusId IS NULL
	GROUP BY BA.BestellingId
	HAVING backorder_afgesloten( BA.Bestellingid ) = 1;
	
	/* Orders zonder orderregels; Maar nog niet afgerond / geannuleerd */
	INSERT INTO BestellingStatus
	SELECT 16, BA.BestellingId, 'gelukt', '~4', NOW() FROM Managementboek_Klanten.BestellingAll BA LEFT JOIN Managementboek_Klanten.Klanten USING ( Klantid )
	LEFT JOIN Managementboek_Klanten.Bestellingen BN ON ( BA.BestellingId = BN.Bestellingid AND BN.Ean NOT IN ( 'BONG', 'IDEAL', 'PORTO' ) )
	LEFT JOIN BestellingStatus BAfgerond ON ( BA.BestellingId = BAfgerond.BestellingId AND BAfgerond.StatusId IN ( 33 ) )
	LEFT JOIN BestellingStatus BAnn ON ( BA.BestellingId = BAnn.BestellingId AND BAnn.StatusId IN ( 16 ) )
	WHERE BA.Afgerond = 1
	AND BN.Id IS NULL
	AND BAfgerond.StatusId IS NULL
	AND BAnn.StatusId IS NULL;
	
	/* Orders zonder orderregels; Maar nog niet afgerond / geannuleerd (2e annuleer-status) */
	INSERT INTO BestellingStatus
	SELECT 24, BA.BestellingId, 'gelukt', '~5', NOW() FROM Managementboek_Klanten.BestellingAll BA LEFT JOIN Managementboek_Klanten.Klanten USING ( Klantid )
	LEFT JOIN Managementboek_Klanten.Bestellingen BN ON ( BA.BestellingId = BN.Bestellingid AND BN.Ean NOT IN ( 'BONG', 'IDEAL', 'PORTO' ) )
	LEFT JOIN BestellingStatus BAfgerond ON ( BA.BestellingId = BAfgerond.BestellingId AND BAfgerond.StatusId IN ( 33 ) )
	LEFT JOIN BestellingStatus BAnn ON ( BA.BestellingId = BAnn.BestellingId AND BAnn.StatusId IN ( 24 ) )
	WHERE BA.Afgerond = 1
	AND BN.Id IS NULL
	AND BAfgerond.StatusId IS NULL
	AND BAnn.StatusId IS NULL;
	
	/* Afgesloten orders 
	INSERT INTO BestellingStatus
	SELECT 33, BA.BestellingId, 'gelukt', '~2', BA.DT 
	FROM
	BestellingAll   BA 
	LEFT JOIN BestellingStatus BOud ON ( BA.BestellingId = BOud.BestellingId AND BOud.StatusId IN ( 26, 16, 24 ) )
	LEFT JOIN BestellingStatus BIngepakt ON ( BA.BestellingId = BIngepakt.BestellingId AND BIngepakt.StatusId IN ( 15, 18, 19, 32 ) )
	LEFT JOIN BestellingStatus BAfgesloten ON ( BA.BestellingId = BAfgesloten.BestellingId AND BAfgesloten.StatusId IN ( 33 ) )
	LEFT JOIN BestellingStatus BBetaald ON ( BA.BestellingId = BBetaald.BestellingId AND BBetaald.StatusId IN ( 21 ) )
	LEFT JOIN Bestellingen BN ON ( BA.BestellingId = BN.BestellingId )
	WHERE ( ( BOud.Resultaat = 'gelukt' ) OR ( BIngepakt.Resultaat = 'gelukt' AND BBetaald.Resultaat = 'gelukt' ) )
	AND BAfgesloten.Resultaat IS NULL
	AND BA.Afgerond = 1
	AND BA.Geannuleerd = 0
	AND BA.DT > DATE_SUB( NOW(), INTERVAL 120 DAY )
	GROUP BY BestellingId
	HAVING ( SUM( Aantal ) <> 0 OR MAX(BOud.Resultaat) = 'gelukt' ); */	
	
	/* Werk daadwerkelijk de annuleringen bij */
	-- CREATE TEMPORARY TABLE tmp.GeannuleerdeBestellingen SELECT BestellingId FROM Managementboek_Klanten.BestellingStatus JOIN Managementboek_Klanten.BestellingAll USING ( BestellingId ) WHERE StatusId IN ( 16, 24 ) AND Geannuleerd = 0;
	-- UPDATE tmp.GeannuleerdeBestellingen JOIN Managementboek_Klanten.BestellingAll USING ( BestellingId ) SET Geannuleerd = 1;
	
	--
	--    UPDATE BACKORDERS
	--
	 
	/* Update betalingen */
	UPDATE
	Managementboek_Klanten.Bestellingen BN1 JOIN Managementboek_Klanten.BestellingenStatus BS1 USING ( Id ) 
	JOIN Managementboek_Klanten.BestellingenStatus BS2 ON ( BN1.BackorderOrigineel = BS2.Id )
	SET BS2.BetaaldOp = BS1.BetaaldOp
	WHERE BS1.BetaaldOp > 0
	AND BN1.BackorderOrigineel > 0
	AND BS2.BetaaldOp IS NULL;
	
	/* Update verzendingen */
	UPDATE
	Managementboek_Klanten.Bestellingen BN1 JOIN Managementboek_Klanten.BestellingenStatus BS1 USING ( Id ) 
	JOIN Managementboek_Klanten.BestellingenStatus BS2 ON ( BN1.BackorderOrigineel = BS2.Id )
	SET BS2.VerzondenOp = BS1.VerzondenOp
	WHERE BS1.VerzondenOp > 0
	AND BN1.BackorderOrigineel > 0
	AND BS2.VerzondenOp IS NULL;
	
	
	/* Niet inpakken niet gezet? Dan alsnog! */
	INSERT INTO OrderregelStatus
	SELECT 32, Bestellingen.Id, 'gelukt', '~6', NOW() FROM Managementboek_Boeken.Boeken JOIN Managementboek_Boeken.`Bindwijze` USING ( Bindwijze ) JOIN Managementboek_Klanten.Bestellingen USING ( Ean ) JOIN Managementboek_Klanten.BestellingAll USING ( BestellingId )
	LEFT JOIN Managementboek_Klanten.`OrderregelStatus` ON ( Bestellingen.Id = OrderregelStatus.Id AND OrderregelStatus.`StatusId` = 32 )
	WHERE Bindwijze_inpakken = 0
	AND OrderregelStatus.Id IS NULL
	AND Afgerond = 1
	AND DTOrderregel > DATE_SUB( NOW(), INTERVAL 1 DAY )
	LIMIT 1000;
	
	CALL Managementboek_Klanten.`herbereken_alle_reserveringen`();
	CALL Computerboek_Klanten.`herbereken_alle_reserveringen`();
	CALL Juridischboek_Klanten.`herbereken_alle_reserveringen`();	
	
	/* We hebben gedraaid */
	REPLACE INTO Mainpress_Globals.LastRun VALUES ( 210, 'Daily Stored Procedure', 'Managementboek', NOW(), NOW(), '' );	
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `delete_orderregel_status` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` PROCEDURE `delete_orderregel_status`( iStatus INT(11), iOrderRegel INT(11))
BEGIN
	DECLARE LStatusId INT;
	
	DELETE FROM OrderregelStatus WHERE StatusId = iStatus AND Id = iOrderRegel;
		
	/* Zet 'actuele status' op orderregel */
	SELECT StatusId INTO LStatusId FROM OrderregelStatus JOIN BestellingStatussen USING ( StatusId ) WHERE  Volgorde < 10000 AND Id = iOrderRegel ORDER BY Volgorde DESC LIMIT 1;
	UPDATE Bestellingen BN SET BN.StatusId = LStatusId WHERE BN.Id = iOrderRegel;
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `herbereken_alle_herkomsten` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `herbereken_alle_herkomsten`()
BEGIN
	DECLARE no_more_rows INT DEFAULT 0;
	DECLARE loopBestellingid INT;
	DECLARE cur CURSOR FOR SELECT Bestellingid FROM Bestelling WHERE DT BETWEEN DATE_SUB(NOW(), INTERVAL 1 WEEK) AND NOW() ORDER BY BestellingId dESC;
	
	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET no_more_rows = 1;	
		
	OPEN cur;
				
	the_loop: LOOP
		FETCH cur INTO
			loopBestellingid;
		IF no_more_rows THEN
			CLOSE cur;
			LEAVE the_loop;
		END IF;		
		
		/* opnieuw aanroepen om te bepalen of er nog meer afgeleide orders zijn */
		CALL update_bestelling_herkomst(loopBestellingid);			
	END LOOP the_loop;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `herbereken_alle_reserveringen` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `herbereken_alle_reserveringen`()
BEGIN
	-- START TRANSACTION;
	-- Wis alles
	SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
	
	DELETE FROM Voorraadbeheer.`ReserveringenPerEan` WHERE Administratie = get_administratie();
	
	-- Insert alles
	INSERT IGNORE INTO Voorraadbeheer.`ReserveringenPerEan` SELECT get_administratie(), Ean, SUM( OpenAantal ) FROM open_orderregels WHERE niet_reserveren = 0 AND NOT Ean IS NULL GROUP BY Ean;
	
	SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
	
	-- COMMIT;	
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `herbereken_kosten` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `herbereken_kosten`()
    MODIFIES SQL DATA
BEGIN
	DECLARE bid INT;
	DECLARE no_more_rows BOOLEAN;
	DECLARE loop_cntr INT DEFAULT 0;
	DECLARE num_rows INT DEFAULT 0;
	
	DECLARE C1 CURSOR FOR 
			SELECT DISTINCT BestellingId FROM Bestelling 
				JOIN Bestellingen USING ( BestellingId )
				JOIN OrderregelStatusPlat USING ( Id ) 
			WHERE DT > '2013-04-01'
			AND ( ( Ean NOT IN ( 'porto' )
			AND niet_inpakken = 1 ) OR ( Ean = 'BONG' ) );
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
	OPEN C1;
	
	the_loop: LOOP
		FETCH C1 INTO bid;
		
		IF no_more_rows THEN
			CLOSE C1;
			LEAVE the_loop;
		END IF;
		
		CALL `update_kosten_mp`( bid );
	END LOOP the_loop;
	END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `herbereken_lege_herkomsten` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `herbereken_lege_herkomsten`()
BEGIN
	DECLARE no_more_rows INT DEFAULT 0;
	DECLARE loopBestellingid INT;
	DECLARE cur CURSOR FOR SELECT Bestellingid FROM BestellingAll LEFT JOIN BestellingHerkomst USING ( BestellingId ) 
	                                           WHERE DT > '2012-01-01' AND ( BestellingHerkomst iS NULL OR Kanaal IS NULL OR BestellingHerkomst IN ('AdWords','AdWordsDirect') ) AND Afgerond = 1;
	
	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET no_more_rows = 1;	
		
	OPEN cur;
				
	the_loop: LOOP
		FETCH cur INTO
			loopBestellingid;
		IF no_more_rows THEN
			CLOSE cur;
			LEAVE the_loop;
		END IF;		
		
		/* opnieuw aanroepen om te bepalen of er nog meer afgeleide orders zijn */
		CALL update_bestelling_herkomst(loopBestellingid);			
	END LOOP the_loop;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `herbereken_ranking` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `herbereken_ranking`()
BEGIN
	DECLARE curEan CHAR( 13 ) CHARACTER SET LATIN1;	
	DECLARE no_more_rows BOOLEAN;
	DECLARE loop_cntr INT DEFAULT 0;
	DECLARE num_rows INT DEFAULT 0;
	DECLARE rank INT DEFAULT 1;
	
	DECLARE cursor1 CURSOR FOR 
		SELECT Ean FROM Managementboek_Boeken.Boeken JOIN Managementboek_Boeken.`Uitgevers` ON ( Uitgever = Uitgeverid ) LEFT JOIN Tellingen_Plat USING ( Ean )
			WHERE BoekStatus NOT IN ( 99 ) 
			AND Prijs BETWEEN 0 AND 9999 AND Boeken_verborgenboek=0
			ORDER BY GREATEST(IFNULL(`30d`,0),0) DESC, 
			GREATEST(IFNULL(`year`,0),0) DESC, 
			GREATEST(IFNULL(`ever`,0),0) DESC, 
			Boeken.Aanmaakdatum DESC, Ean;
	
	DECLARE cursor2 CURSOR FOR 
		SELECT Ean FROM Managementboek_Boeken.Boeken JOIN Managementboek_Boeken.`Uitgevers` ON ( Uitgever = Uitgeverid ) LEFT JOIN Tellingen_Plat USING ( Ean )
			WHERE BoekStatus NOT IN ( 99 ) 
			AND Prijs BETWEEN 0 AND 9999 AND Boeken_verborgenboek=0
			ORDER BY GREATEST(IFNULL(`60d`,0),0) DESC, 
			GREATEST(IFNULL(`year`,0),0) DESC, 
			GREATEST(IFNULL(`ever`,0),0) DESC,
			Boeken.Aanmaakdatum DESC, Ean;
	
	DECLARE cursor3 CURSOR FOR 
		SELECT Ean FROM Managementboek_Boeken.Boeken JOIN Managementboek_Boeken.`Uitgevers` ON ( Uitgever = Uitgeverid ) LEFT JOIN Tellingen_Plat USING ( Ean )
			WHERE BoekStatus NOT IN ( 99 ) 
			AND Prijs BETWEEN 0 AND 9999 AND Boeken_verborgenboek=0
			ORDER BY GREATEST(IFNULL(`90d`,0),0) DESC, 
			GREATEST(IFNULL(`year`,0),0) DESC, 
			GREATEST(IFNULL(`ever`,0),0) DESC,
			Boeken.Aanmaakdatum DESC, Ean;
	
	DECLARE cursor4 CURSOR FOR 
		SELECT Ean FROM Managementboek_Boeken.Boeken JOIN Managementboek_Boeken.`Uitgevers` ON ( Uitgever = Uitgeverid ) LEFT JOIN Tellingen_Plat USING ( Ean )
			WHERE BoekStatus NOT IN ( 99 ) 
			AND Prijs BETWEEN 0 AND 9999 AND Boeken_verborgenboek=0
			ORDER BY GREATEST(IFNULL(`7d`,0),0) DESC, 
			GREATEST(IFNULL(`year`,0),0) DESC, 
			GREATEST(IFNULL(`ever`,0),0) DESC,
			Boeken.Aanmaakdatum DESC, Ean;
		
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
	
	--
	-- 30d
	START TRANSACTION;	
	UPDATE Boekranking_Plat SET `30d` = 9999999, `60d` = 9999999, `90d` = 9999999, `7d` = 9999999;
	SET no_more_rows = FALSE;
	OPEN cursor1;
	the_loop1: LOOP
		FETCH cursor1 INTO curEan;
		
		IF no_more_rows THEN
			CLOSE cursor1;
			LEAVE the_loop1;
		END IF;
		
		INSERT INTO Boekranking_Plat ( Ean, `30d` ) VALUES ( curEan, rank ) ON DUPLICATE KEY UPDATE `30d` = VALUES(`30d`);
		SET rank = rank + 1;
	END LOOP the_loop1;
	COMMIT;
	
	--
	-- 60d
	-- 
	START TRANSACTION;
	SET rank = 1;
	SET no_more_rows = FALSE;
	OPEN cursor2;
	the_loop2: LOOP
		FETCH cursor2 INTO curEan;
		
		IF no_more_rows THEN
			CLOSE cursor2;
			LEAVE the_loop2;
		END IF;
		
		INSERT INTO Boekranking_Plat ( Ean, `60d` ) VALUES ( curEan, rank ) ON DUPLICATE KEY UPDATE `60d` = VALUES(`60d`);
		SET rank = rank + 1;
	END LOOP the_loop2;
	COMMIT;
	
	--
	-- 90d
	-- 
	START TRANSACTION;
	SET rank = 1;
	SET no_more_rows = FALSE;
	OPEN cursor3;
	the_loop3: LOOP
		FETCH cursor3 INTO curEan;
		
		IF no_more_rows THEN
			CLOSE cursor3;
			LEAVE the_loop3;
		END IF;
		
		INSERT INTO Boekranking_Plat ( Ean, `90d` ) VALUES ( curEan, rank ) ON DUPLICATE KEY UPDATE `90d` = VALUES(`90d`);
		SET rank = rank + 1;
	END LOOP the_loop3;
	COMMIT;
	
	--
	-- 7d
	-- 
	START TRANSACTION;
	SET rank = 1;
	SET no_more_rows = FALSE;
	OPEN cursor4;
	the_loop4: LOOP
		FETCH cursor4 INTO curEan;
		
		IF no_more_rows THEN
			CLOSE cursor4;
			LEAVE the_loop4;
		END IF;
		
		INSERT INTO Boekranking_Plat ( Ean, `7d` ) VALUES ( curEan, rank ) ON DUPLICATE KEY UPDATE `7d` = VALUES(`7d`);
		SET rank = rank + 1;
	END LOOP the_loop4;
	COMMIT;
	
	-- Ranking TOP
	INSERT IGNORE INTO Ranking_Top SELECT Ean, `1d`, `5d`, `7d`, `30d`, `90d` FROM Boekranking_Plat B;
	
	-- Ranking TOP #2
	UPDATE Ranking_Top T JOIN Boekranking_Plat P USING ( Ean )
		SET
			T.`1d` = IF( T.`1d` < P.`1d`, T.`1d`, P.`1d` ),
			T.`7d` = IF( T.`7d` < P.`7d`, T.`7d`, P.`7d` ),
			T.`30d` = IF( T.`30d` < P.`30d`, T.`30d`, P.`30d` ),
			T.`90d` = IF( T.`90d` < P.`90d`, T.`90d`, P.`90d` )
		WHERE  P.`30d` > 0 AND ( P.1d < T.1d OR P.5d < T.5d OR P.7d < T.7d OR P.30d < T.30d OR P.90d < T.90d );
		
	-- Ranking DATUM
	REPLACE INTO Boekranking_Datum SELECT Ean, CURDATE(), `30d` FROM Boekranking_Plat ORDER BY `30d` LIMIT 1000;
	
	
	-- Manpo-ranking
	CALL Manpo.update_boekranking();
	
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `herbereken_reserveringen` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `herbereken_reserveringen`( myId INT )
BEGIN
DECLARE localEan CHAR(13) CHARACTER SET latin1;
DECLARE localReserveringen INT;
SELECT Ean INTO localEan FROM Bestellingen WHERE Id = myId;
CALL herbereken_reserveringen_ean( localEan );
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `herbereken_reserveringen_ean` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `herbereken_reserveringen_ean`( localEan CHAR(13) CHARACTER SET latin1 )
BEGIN
	DECLARE localReserveringen INT;
	IF localEan NOT IN ( 'PORTO', 'IDEAL', 'BONG', 'VOUCHER' ) THEN
		SELECT IFNULL( SUM( OpenAantal ), 0 ) INTO localReserveringen 
		   FROM open_orderregels
		   WHERE Ean = localEan AND niet_reserveren = 0;
		
		INSERT INTO Voorraadbeheer.`ReserveringenPerEan` SET Administratie = get_administratie(), Ean = localEan, Aantal = localReserveringen ON DUPLICATE KEY UPDATE Aantal = localReserveringen;
	END IF;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `herbereken_uur_reserveringen` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `herbereken_uur_reserveringen`()
BEGIN
	DECLARE localEan CHAR(13) character set latin1;
	DECLARE no_more_rows BOOLEAN;
	DECLARE loop_cntr INT DEFAULT 0;
	DECLARE num_rows INT DEFAULT 0;
	
	DECLARE C1 CURSOR FOR SELECT DISTINCT Ean FROM Managementboek_Klanten.Bestellingen JOIN Managementboek_Klanten.Bestelling USING ( BestellingId ) WHERE DT > DATE_SUB( NOW(), INTERVAL 1 HOUR ) AND Ean LIKE "978%";
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
	OPEN C1;
	
	the_loop: LOOP
		FETCH C1 INTO localEan;
		
		IF no_more_rows THEN
			CLOSE C1;
			LEAVE the_loop;
		END IF;
		
		CALL `herbereken_reserveringen_ean`( localEan );
	END LOOP the_loop;	
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `herbereken_week_reserveringen` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `herbereken_week_reserveringen`()
BEGIN
	DECLARE localEan CHAR(13) character set latin1;
	DECLARE no_more_rows BOOLEAN;
	DECLARE loop_cntr INT DEFAULT 0;
	DECLARE num_rows INT DEFAULT 0;
	
	DECLARE C1 CURSOR FOR SELECT DISTINCT Ean FROM Managementboek_Klanten.Bestellingen WHERE DTOrderregel > DATE_SUB( NOW(), INTERVAL 1 DAY ) AND Ean LIKE "978%";
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
	OPEN C1;
	
	the_loop: LOOP
		FETCH C1 INTO localEan;
		
		IF no_more_rows THEN
			CLOSE C1;
			LEAVE the_loop;
		END IF;
		
		CALL `herbereken_reserveringen_ean`( localEan );
	END LOOP the_loop;	
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `log_klanten_wijziging` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `log_klanten_wijziging`( iklantid INT, iveldnaam VARCHAR(255), ioud VARCHAR(255), inieuw VARCHAR(255), iomschrijving VARCHAR(255), iwie VARCHAR(255) )
    MODIFIES SQL DATA
BEGIN
	IF NOT ioud = inieuw THEN
		INSERT INTO Managementboek_Klanten.KlantenWijzigingen ( Klantid, DT, Veldnaam, Voor, Na, Omschrijving, Gebruiker ) VALUES ( iklantid, NOW(), iveldnaam, ioud, inieuw, IFNULL(iomschrijving,''), IFNULL(iwie,'') );	
	END IF;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `log_ramsj_voorraad` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `log_ramsj_voorraad`()
BEGIN
    DECLARE ManRamsjWaarde DECIMAL(10,2);
    DECLARE ManRamsjAantal INT;
    DECLARE ManUitverkWaarde DECIMAL(10,2);
    DECLARE ManUitverkAantal INT;   
    DECLARE ManEigenWaarde DECIMAL(10,2);
    DECLARE ManEigenAantal INT; 
    DECLARE ComRamsjWaarde DECIMAL(10,2);
    DECLARE ComRamsjAantal INT;
    DECLARE ComUitverkWaarde DECIMAL(10,2);
    DECLARE ComUitverkAantal INT;   
    DECLARE TotaalWaarde DECIMAL(10,2);
    DECLARE TotaalAantal INT;   
    
    -- Managementboek Ramsj
    SELECT 
    SUM( ROUND( ( IFNULL(PV.FysiekeVoorraad, 0) ) * ROUND( ( ( 100 - IF((IFNULL(`BK`.`Aangepastekortingmp`,0) > 0),`BK`.`Aangepastekortingmp`,(CASE `BK`.`Boeksoort` WHEN 'A' THEN `U`.`Kortingmp_a` WHEN 'S' THEN `U`.`Kortingmp_s` WHEN 'W' THEN `U`.`Kortingmp_w` WHEN 'O' THEN `U`.`Kortingmp_o` WHEN 'E' THEN `U`.`Kortingmp_e` ELSE `U`.`Kortingmp_g` END)) ) / 100 ) * ( BK.Prijs * VI.Formulevariabele ) / IF( Valuta NOT IN ( 'EUR', 'DITM' ), 1, IF( Bindwijze.Btwcode IN ('H', 'I'), 1.19, IF( Bindwijze.Btwcode IN ('7', '8'), 1.21, 1.06 ) ) ), 2 ), 2 ) ),
    SUM(FysiekeVoorraad) INTO ManRamsjWaarde,ManRamsjAantal
    FROM 
    (((`Manpo`.`Boeken` `BK`
    JOIN `Manpo`.`Bindwijze`
    ON ((`BK`.`Bindwijze` = `Manpo`.`Bindwijze`.`Bindwijze`)))
    JOIN `Voorraadbeheer`.`Voorraad` PV
    ON ((`BK`.`Ean` = CONVERT(`PV`.`Ean` USING utf8))))
    JOIN `Manpo`.`Uitgevers` `U`
    ON ((`BK`.`UitgeverID` = `U`.`UitgeverID`)))
    JOIN Manpo.`Valuta` VI ON ( Valuta = VI.`Soort` )
    WHERE `Boeken_inramsj`=1 
    AND `Computer-boek` = 0
    AND U.`Naamuitgever` NOT IN ( 'Managementboek' )
    AND IF((IFNULL(`BK`.`Aangepastekortingmp`,0) > 0),`BK`.`Aangepastekortingmp`,IF((IFNULL(`BK`.`Aangepastekortingmp`,0) > 0),`BK`.`Aangepastekortingmp`,(CASE `BK`.`Boeksoort` WHEN 'A' THEN `U`.`Kortingmp_a` WHEN 'S' THEN `U`.`Kortingmp_s` WHEN 'W' THEN `U`.`Kortingmp_w` WHEN 'O' THEN `U`.`Kortingmp_o` WHEN 'E' THEN `U`.`Kortingmp_e` ELSE `U`.`Kortingmp_g` END))) >= 56
    AND FysiekeVoorraad > 0
    AND FysiekeVoorraad < 9000000
    AND Bindwijze.Bindwijze_voorraadartikel = 1 
    AND Bindwijze.Bindwijze_evenement = 0 
    AND Bindwijze.Bindwijze_download = 0 
    AND Bindwijze.Bindwijze NOT IN (
        'boek en e-book',
        'schriftelijke cursus',
        'workshop/training',
        'managementboekengala',
        'congres of seminar',
        'congres/seminar (19% ex BTW!)',
        'events',
        'boekevent',
        'workshops',
        'seminars'
      ) 
      AND BK.Ean NOT IN (
        '9781111111113',
        '9797090000645',
        '9797090000652',
        '9780000001030'
      );
    -- Managementboek Uitverkoop
    SELECT 
    SUM( ROUND( ( IFNULL(PV.FysiekeVoorraad, 0) ) * ROUND( ( ( 100 - IF((IFNULL(`BK`.`Aangepastekortingmp`,0) > 0),`BK`.`Aangepastekortingmp`,(CASE `BK`.`Boeksoort` WHEN 'A' THEN `U`.`Kortingmp_a` WHEN 'S' THEN `U`.`Kortingmp_s` WHEN 'W' THEN `U`.`Kortingmp_w` WHEN 'O' THEN `U`.`Kortingmp_o` WHEN 'E' THEN `U`.`Kortingmp_e` ELSE `U`.`Kortingmp_g` END)) ) / 100 ) * ( BK.Prijs * VI.Formulevariabele ) / IF( Valuta NOT IN ( 'EUR', 'DITM' ), 1, IF( Bindwijze.Btwcode IN ('H', 'I'), 1.19, IF( Bindwijze.Btwcode IN ('7', '8'), 1.21, 1.06 ) ) ), 2 ), 2 ) ),
    SUM(FysiekeVoorraad) INTO ManUitverkWaarde,ManUitverkAantal
    FROM 
    (((`Manpo`.`Boeken` `BK`
    JOIN `Manpo`.`Bindwijze`
    ON ((`BK`.`Bindwijze` = `Manpo`.`Bindwijze`.`Bindwijze`)))
    JOIN `Voorraadbeheer`.`Voorraad` PV
    ON ((`BK`.`Ean` = CONVERT(`PV`.`Ean` USING utf8))))
    JOIN `Manpo`.`Uitgevers` `U`
    ON ((`BK`.`UitgeverID` = `U`.`UitgeverID`)))
    JOIN Manpo.`Valuta` VI ON ( Valuta = VI.`Soort` )
    WHERE Boeken_inramsj=1 
    AND `Computer-boek` = 0
    AND U.`Naamuitgever` NOT IN ( 'Managementboek' )
    AND IF((IFNULL(`BK`.`Aangepastekortingmp`,0) > 0),`BK`.`Aangepastekortingmp`,IF((IFNULL(`BK`.`Aangepastekortingmp`,0) > 0),`BK`.`Aangepastekortingmp`,(CASE `BK`.`Boeksoort` WHEN 'A' THEN `U`.`Kortingmp_a` WHEN 'S' THEN `U`.`Kortingmp_s` WHEN 'W' THEN `U`.`Kortingmp_w` WHEN 'O' THEN `U`.`Kortingmp_o` WHEN 'E' THEN `U`.`Kortingmp_e` ELSE `U`.`Kortingmp_g` END))) < 56
    AND FysiekeVoorraad>0
    AND FysiekeVoorraad < 9000000
    AND Bindwijze.Bindwijze_voorraadartikel = 1 
    AND Bindwijze.Bindwijze_evenement = 0 
    AND Bindwijze.Bindwijze_download = 0 
    AND Bindwijze.Bindwijze NOT IN (
        'boek en e-book',
        'schriftelijke cursus',
        'workshop/training',
        'managementboekengala',
        'congres of seminar',
        'congres/seminar (19% ex BTW!)',
        'events',
        'boekevent',
        'workshops',
        'seminars'
      ) 
      AND BK.Ean NOT IN (
        '9781111111113',
        '9797090000645',
        '9797090000652',
        '9780000001030'
      );
    -- Managementboek Eigen
    SELECT 
    SUM( ROUND( ( IFNULL(PV.FysiekeVoorraad, 0) ) * ROUND( ( ( 100 - IF((IFNULL(`BK`.`Aangepastekortingmp`,0) > 0),`BK`.`Aangepastekortingmp`,(CASE `BK`.`Boeksoort` WHEN 'A' THEN `U`.`Kortingmp_a` WHEN 'S' THEN `U`.`Kortingmp_s` WHEN 'W' THEN `U`.`Kortingmp_w` WHEN 'O' THEN `U`.`Kortingmp_o` WHEN 'E' THEN `U`.`Kortingmp_e` ELSE `U`.`Kortingmp_g` END)) ) / 100 ) * ( BK.Prijs * VI.Formulevariabele ) / IF( Valuta NOT IN ( 'EUR', 'DITM' ), 1, IF( Bindwijze.Btwcode IN ('H', 'I'), 1.19, IF( Bindwijze.Btwcode IN ('7', '8'), 1.21, 1.06 ) ) ), 2 ), 2 ) ),
    SUM(FysiekeVoorraad) INTO ManEigenWaarde,ManEigenAantal
    FROM 
    (((`Manpo`.`Boeken` `BK`
    JOIN `Manpo`.`Bindwijze`
    ON ((`BK`.`Bindwijze` = `Manpo`.`Bindwijze`.`Bindwijze`)))
    JOIN `Voorraadbeheer`.`Voorraad` PV
    ON ((`BK`.`Ean` = CONVERT(`PV`.`Ean` USING utf8))))
    JOIN `Manpo`.`Uitgevers` `U`
    ON ((`BK`.`UitgeverID` = `U`.`UitgeverID`)))
    JOIN Manpo.`Valuta` VI ON ( Valuta = VI.`Soort` )
    WHERE Boeken_inramsj=1 
    AND `Computer-boek` = 0
    AND U.`Naamuitgever` IN ( 'Managementboek' )
    AND IF((IFNULL(`BK`.`Aangepastekortingmp`,0) > 0),`BK`.`Aangepastekortingmp`,IF((IFNULL(`BK`.`Aangepastekortingmp`,0) > 0),`BK`.`Aangepastekortingmp`,(CASE `BK`.`Boeksoort` WHEN 'A' THEN `U`.`Kortingmp_a` WHEN 'S' THEN `U`.`Kortingmp_s` WHEN 'W' THEN `U`.`Kortingmp_w` WHEN 'O' THEN `U`.`Kortingmp_o` WHEN 'E' THEN `U`.`Kortingmp_e` ELSE `U`.`Kortingmp_g` END))) >= 56
    AND FysiekeVoorraad>0
    AND FysiekeVoorraad < 9000000
    AND Bindwijze.Bindwijze_voorraadartikel = 1 
    AND Bindwijze.Bindwijze_evenement = 0 
    AND Bindwijze.Bindwijze_download = 0 
    AND Bindwijze.Bindwijze NOT IN (
        'boek en e-book',
        'schriftelijke cursus',
        'workshop/training',
        'managementboekengala',
        'congres of seminar',
        'congres/seminar (19% ex BTW!)',
        'events',
        'boekevent',
        'workshops',
        'seminars'
      ) 
      AND BK.Ean NOT IN (
        '9781111111113',
        '9797090000645',
        '9797090000652',
        '9780000001030'
      );
-- ManRamsj:    Korting >= 56, Boeken_inramsj=1 EN Rubriek_Computerboek = Leeg, Uitgever != Managementboek
-- ManUitverk:  Korting <56, Comrubriek Leeg, Uitgever != Managementboek
-- ManEigen:    InRamsj=1, Korting >= 56, Comrubriek Leeg, Uitgever=Managementboek
    -- Computerboek Ramsj
    SELECT 
    SUM( ROUND( ( IFNULL(PV.FysiekeVoorraad, 0) ) * ROUND( ( ( 100 - IF((IFNULL(`BK`.`Aangepastekortingmp`,0) > 0),`BK`.`Aangepastekortingmp`,(CASE `BK`.`Boeksoort` WHEN 'A' THEN `U`.`Kortingmp_a` WHEN 'S' THEN `U`.`Kortingmp_s` WHEN 'W' THEN `U`.`Kortingmp_w` WHEN 'O' THEN `U`.`Kortingmp_o` WHEN 'E' THEN `U`.`Kortingmp_e` ELSE `U`.`Kortingmp_g` END)) ) / 100 ) * ( BK.Prijs * VI.Formulevariabele ) / IF( Valuta NOT IN ( 'EUR', 'DITM' ), 1, IF( Bindwijze.Btwcode IN ('H', 'I'), 1.19, IF( Bindwijze.Btwcode IN ('7', '8'), 1.21, 1.06 ) ) ), 2 ), 2 ) ),
    SUM(FysiekeVoorraad) INTO ComRamsjWaarde,ComRamsjAantal
    FROM 
    (((`Manpo`.`Boeken` `BK`
    JOIN `Manpo`.`Bindwijze`
    ON ((`BK`.`Bindwijze` = `Manpo`.`Bindwijze`.`Bindwijze`)))
    JOIN `Voorraadbeheer`.`Voorraad` PV
    ON ((`BK`.`Ean` = CONVERT(`PV`.`Ean` USING utf8))))
    JOIN `Manpo`.`Uitgevers` `U`
    ON ((`BK`.`UitgeverID` = `U`.`UitgeverID`)))
    JOIN Manpo.`Valuta` VI ON ( Valuta = VI.`Soort` )
    WHERE Boeken_inramsj=1 
    AND `Computer-boek` = 1
    AND U.`Naamuitgever` NOT IN ( 'Managementboek' )
    AND IF((IFNULL(`BK`.`Aangepastekortingmp`,0) > 0),`BK`.`Aangepastekortingmp`,IF((IFNULL(`BK`.`Aangepastekortingmp`,0) > 0),`BK`.`Aangepastekortingmp`,(CASE `BK`.`Boeksoort` WHEN 'A' THEN `U`.`Kortingmp_a` WHEN 'S' THEN `U`.`Kortingmp_s` WHEN 'W' THEN `U`.`Kortingmp_w` WHEN 'O' THEN `U`.`Kortingmp_o` WHEN 'E' THEN `U`.`Kortingmp_e` ELSE `U`.`Kortingmp_g` END))) >= 56
    AND FysiekeVoorraad>0
    AND FysiekeVoorraad < 9000000
    AND Bindwijze.Bindwijze_voorraadartikel = 1 
    AND Bindwijze.Bindwijze_evenement = 0 
    AND Bindwijze.Bindwijze_download = 0 
    AND Bindwijze.Bindwijze NOT IN (
        'boek en e-book',
        'schriftelijke cursus',
        'workshop/training',
        'managementboekengala',
        'congres of seminar',
        'congres/seminar (19% ex BTW!)',
        'events',
        'boekevent',
        'workshops',
        'seminars'
      ) 
      AND BK.Ean NOT IN (
        '9781111111113',
        '9797090000645',
        '9797090000652',
        '9780000001030'
      );
    -- Computerboek Uitverkoop
    SELECT 
    SUM( ROUND( ( IFNULL(PV.FysiekeVoorraad, 0) ) * ROUND( ( ( 100 - IF((IFNULL(`BK`.`Aangepastekortingmp`,0) > 0),`BK`.`Aangepastekortingmp`,(CASE `BK`.`Boeksoort` WHEN 'A' THEN `U`.`Kortingmp_a` WHEN 'S' THEN `U`.`Kortingmp_s` WHEN 'W' THEN `U`.`Kortingmp_w` WHEN 'O' THEN `U`.`Kortingmp_o` WHEN 'E' THEN `U`.`Kortingmp_e` ELSE `U`.`Kortingmp_g` END)) ) / 100 ) * ( BK.Prijs * VI.Formulevariabele ) / IF( Valuta NOT IN ( 'EUR', 'DITM' ), 1, IF( Bindwijze.Btwcode IN ('H', 'I'), 1.19, IF( Bindwijze.Btwcode IN ('7', '8'), 1.21, 1.06 ) ) ), 2 ), 2 ) ),
    SUM(FysiekeVoorraad) INTO ComUitverkWaarde,ComUitverkAantal
    FROM 
    (((`Manpo`.`Boeken` `BK`
    JOIN `Manpo`.`Bindwijze`
    ON ((`BK`.`Bindwijze` = `Manpo`.`Bindwijze`.`Bindwijze`)))
    JOIN `Voorraadbeheer`.`Voorraad` PV
    ON ((`BK`.`Ean` = CONVERT(`PV`.`Ean` USING utf8))))
    JOIN `Manpo`.`Uitgevers` `U`
    ON ((`BK`.`UitgeverID` = `U`.`UitgeverID`)))
    JOIN Manpo.`Valuta` VI ON ( Valuta = VI.`Soort` )
    WHERE Boeken_inramsj=1 
    AND `Computer-boek` = 1
    AND U.`Naamuitgever` NOT IN ( 'Managementboek' )
    AND IF((IFNULL(`BK`.`Aangepastekortingmp`,0) > 0),`BK`.`Aangepastekortingmp`,IF((IFNULL(`BK`.`Aangepastekortingmp`,0) > 0),`BK`.`Aangepastekortingmp`,(CASE `BK`.`Boeksoort` WHEN 'A' THEN `U`.`Kortingmp_a` WHEN 'S' THEN `U`.`Kortingmp_s` WHEN 'W' THEN `U`.`Kortingmp_w` WHEN 'O' THEN `U`.`Kortingmp_o` WHEN 'E' THEN `U`.`Kortingmp_e` ELSE `U`.`Kortingmp_g` END))) < 56
    AND FysiekeVoorraad>0
    AND FysiekeVoorraad < 9000000
    AND Bindwijze.Bindwijze_voorraadartikel = 1 
    AND Bindwijze.Bindwijze_evenement = 0 
    AND Bindwijze.Bindwijze_download = 0 
    AND Bindwijze.Bindwijze NOT IN (
        'boek en e-book',
        'schriftelijke cursus',
        'workshop/training',
        'managementboekengala',
        'congres of seminar',
        'congres/seminar (19% ex BTW!)',
        'events',
        'boekevent',
        'workshops',
        'seminars'
      ) 
      AND BK.Ean NOT IN (
        '9781111111113',
        '9797090000645',
        '9797090000652',
        '9780000001030'
      );
-- ComRamsj:    Korting >= 56, Boeken_inramsj=1 EN Rubriek_Computerboek != Leeg, Uitgever != Managementboek
-- ComUitverk:  Korting <56, Comrubriek != Leeg, Uitgever != Managementboek
    REPLACE INTO RamsjLogging SET DT=NOW(),
    ManRamsjWaarde = ManRamsjWaarde, 
    ManRamsjAantal = ManRamsjAantal,
    ManUitverkWaarde = ManUitverkWaarde,
    ManUitverkAantal = ManUitverkAantal,
    ManEigenWaarde = ManEigenWaarde,
    ManEigenAantal = ManEigenAantal,
    ComRamsjWaarde = ComRamsjWaarde, 
    ComRamsjAantal = ComRamsjAantal,
    ComUitverkWaarde = ComUitverkWaarde,
    ComUitverkAantal = ComUitverkAantal,
    TotaalWaarde = ManRamsjWaarde + ManUitverkWaarde + ManEigenWaarde + ComRamsjWaarde + ComUitverkWaarde,
    TotaalAantal = ManRamsjAantal + ManUitverkAantal + ManEigenAantal + ComRamsjAantal + ComUitverkAantal;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `migratieBackorderReserveringenVrijgeven` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` PROCEDURE `migratieBackorderReserveringenVrijgeven`()
BEGIN
	DECLARE myId INT(11);
	DECLARE myEan VARCHAR(20) CHARACTER SET latin1;
	DECLARE myOmschrijving VARCHAR(255);
	DECLARE myAantal INT(11);
	DECLARE myBestellingid INT(11);
	DECLARE myKlantid INT(11);
	
	DECLARE no_more_rows INT DEFAULT 0;
	DECLARE cur CURSOR FOR 
		SELECT V.Id,V.Ean,V.Omschrijving,V.AantalBackorder-V.Geleverd,V.Bestellingid,B.Klantid
		FROM Bestellingen_met_backorders V
		JOIN BestellingAll B USING (Bestellingid)
		WHERE Ean REGEXP '[0-9]{13}'
		    AND Geleverd < AantalBackorder;
		
	/* continue handler voor de cursor */	
	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET no_more_rows = 1;
	
	/**
	 * Doorloop de orders
	 */	
	OPEN cur;
	the_loop: LOOP
		FETCH cur INTO
			myId,MyEan,MyOmschrijving,myAantal,myBestellingid,myKlantid;		
				
		IF no_more_rows THEN
			CLOSE cur;
			LEAVE the_loop;
		END IF;
		
		/**
		 * processing
		 */
		SELECT Voorraadbeheer.maakVoorraadreservering(get_administratie(),
								myEan,
								-1*myAantal,
								myBestellingid,
								myId,
								myKlantid,
								'gecorrigeerd',
								0,
								myOmschrijving)
							INTO @myResevering;
	END LOOP the_loop;		
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `migratieOrderregelStatus` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` PROCEDURE `migratieOrderregelStatus`()
BEGIN
	DECLARE myBestellingid INT;
	DECLARE no_more_rows INT DEFAULT 0;
	DECLARE cur CURSOR FOR 
		/**
		 * Selecteer alle orders met status factuur geprint
		 */
		SELECT DISTINCT Bestellingid FROM BestellingStatus 
			/*WHERE StatusId = 17*/ /* factuur geprint */ 
			WHERE StatusId=41 /* factuur sturen niet nodig */
			AND DT > DATE_SUB(NOW(),INTERVAL 6 DAY);
	
	/* continue handler voor de cursor */	
	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET no_more_rows = 1;
	
	/**
	 * Doorloop de orders
	 */	
	OPEN cur;
	the_loop: LOOP
		FETCH cur INTO
			myBestellingid;		
				
		IF no_more_rows THEN
			CLOSE cur;
			LEAVE the_loop;
		END IF;
		
		/**
		 * processing
		 */
		 
		INSERT INTO OrderregelStatus (StatusId,Id,Resultaat,Gebruiker,DT)
			SELECT 
				/*17*/ /* factuur geprint */
				41 /* factuur sturen niet nodig */ 
				,Id,'gelukt','~p',NOW() FROM Bestellingen B
			WHERE B.Bestellingid=myBestellingid AND B.Geannuleerd = 0 AND B.AantalBackorder=0;
	END LOOP the_loop;		
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `orderregel_status` */;
DELIMITER ;;
CREATE DEFINER=`main`@`%` PROCEDURE `orderregel_status`( iStatus INT(11), iOrderRegel INT(11), iResultaat ENUM( 'gelukt', 'mislukt' ) )
BEGIN
	DECLARE LStatusId INT;
	DECLARE Download TINYINT;
	DECLARE BO INT;
	DECLARE VO INT;
	
	REPLACE INTO OrderregelStatus SET StatusId = iStatus, Id = iOrderRegel, DT = NOW(), Gebruiker = IFNULL( @initials, '' ), Resultaat = IResultaat;
	
	/* Zet ook status op backorderorigineel, indien nodig */
	SELECT BackorderOrigineel INTO BO FROM Bestellingen WHERE Id = iOrderRegel;
	SELECT Volgorde INTO VO FROM BestellingStatussen WHERE StatusId = iStatus;
	IF IFNULL( BO, 0 ) > 0 AND VO > 150 AND BO != iOrderRegel THEN
		CALL orderregel_status( iStatus, BO, iResultaat );
	END IF;
	
	/* Als afgesloten, zet dan ook 'kan gedownload worden' */
	IF iStatus = 2 THEN
		SELECT IFNULL( Bindwijze.Download, 0 ) INTO Download 
			FROM Managementboek_Boeken.`Bindwijze` JOIN Managementboek_Boeken.Boeken USING ( Bindwijze ) 
			JOIN Bestellingen ON ( Boeken.Ean = Bestellingen.Ean )
			WHERE Id = iOrderRegel;
			
		IF Download = 1 THEN  
			REPLACE INTO OrderregelStatus SET StatusId = 38, Id = iOrderRegel, DT = NOW(), Gebruiker = IFNULL( @initials, '' ), Resultaat = 'gelukt';	
		END IF;
	END IF;
	
	/* Zet 'actuele status' op orderregel */
	SELECT StatusId INTO LStatusId FROM OrderregelStatus JOIN BestellingStatussen USING ( StatusId ) WHERE  Volgorde < 10000 AND Id = iOrderRegel ORDER BY Volgorde DESC LIMIT 1;
	UPDATE Bestellingen BN SET BN.StatusId = LStatusId WHERE BN.Id = iOrderRegel;
	
	IF iStatus =  1 THEN UPDATE OrderregelStatusPlat SET `aangemaakt`                       = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus =  2 THEN UPDATE OrderregelStatusPlat SET `bevestigd`                        = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus =  5 THEN UPDATE OrderregelStatusPlat SET `gefactureerd`                     = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus =  6 THEN UPDATE OrderregelStatusPlat SET `is_geparkeerd`                    = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus =  7 THEN UPDATE OrderregelStatusPlat SET `factuurnummer_toegewezen`         = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus =  8 THEN UPDATE OrderregelStatusPlat SET `exact_export`                     = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus =  9 THEN UPDATE OrderregelStatusPlat SET `exact_controle`                   = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 11 THEN UPDATE OrderregelStatusPlat SET `exact_factuur_verwerkt`           = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 14 THEN UPDATE OrderregelStatusPlat SET `etiket_geprint`                   = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 15 THEN UPDATE OrderregelStatusPlat SET `ingepakt`                         = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 16  OR
       iStatus = 24 THEN UPDATE OrderregelStatusPlat SET `geannuleerd`                      = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 17 THEN UPDATE OrderregelStatusPlat SET `factuur_geprint`                  = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 18 THEN UPDATE OrderregelStatusPlat SET `pakketlabel_geprint`              = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 19 THEN UPDATE OrderregelStatusPlat SET `brieflabel_geprint`               = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 20 THEN UPDATE OrderregelStatusPlat SET `betaald_via_ideal`                = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 21 THEN UPDATE OrderregelStatusPlat SET `betaald`                          = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 23 THEN UPDATE OrderregelStatusPlat SET `openstaande_post_aangemaakt`      = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 25 THEN UPDATE OrderregelStatusPlat SET `in_backorder_gezet`               = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 26 THEN UPDATE OrderregelStatusPlat SET `oud_handmatig_verwerkt`           = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 27 THEN UPDATE OrderregelStatusPlat SET `automatisch_geclassificeerd`      = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 28 THEN UPDATE OrderregelStatusPlat SET `handmatig_geclassificeerd`        = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 29 THEN UPDATE OrderregelStatusPlat SET `gecrediteerd`                     = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 30 THEN UPDATE OrderregelStatusPlat SET `volledig_geleverd_backorder`      = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 31 THEN UPDATE OrderregelStatusPlat SET `samengevoegd_met_eerdere_order`   = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 32 THEN UPDATE OrderregelStatusPlat SET `niet_inpakken`                    = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 33 THEN UPDATE OrderregelStatusPlat SET `afgesloten`                       = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 34 THEN UPDATE OrderregelStatusPlat SET `factuur_per_mail_verzonden`       = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 35 THEN UPDATE OrderregelStatusPlat SET `pdf_factuur_gecontroleerd`        = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 36 THEN UPDATE OrderregelStatusPlat SET `voorgemeld_bij_postnl`            = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 37 THEN UPDATE OrderregelStatusPlat SET `pakket_afgeleverd_volgens_postnl` = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 38 THEN UPDATE OrderregelStatusPlat SET `kan_gedownload_worden`            = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 39 THEN UPDATE OrderregelStatusPlat SET `pakbon_geprint`                   = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 40 THEN UPDATE OrderregelStatusPlat SET `uit_backorder_gehaald`            = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 41 THEN UPDATE OrderregelStatusPlat SET `factuur_sturen_niet_nodig`        = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 42 THEN UPDATE OrderregelStatusPlat SET `hoeft_niet_betaald_te_worden`     = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 43 THEN UPDATE OrderregelStatusPlat SET `uitgevoerd_naar_exact_via_mari`   = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 44 THEN UPDATE OrderregelStatusPlat SET `wacht_op_compleet`                = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 45 THEN UPDATE OrderregelStatusPlat SET `inpakbevestiging_verzonden`       = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 46 THEN UPDATE OrderregelStatusPlat SET `niet_reserveren`                  = 1 WHERE Id = iOrderRegel; END IF;
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `orderregel_status_op_orderid` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `orderregel_status_op_orderid`( iStatus INT(11), iOrderId INT(11), iResultaat ENUM( 'gelukt', 'mislukt' ) )
BEGIN
	DECLARE LStatusId INT;
	DECLARE iId INT;
	DECLARE done BOOL;
	
	DECLARE cur1 CURSOR FOR SELECT Id FROM Bestellingen WHERE BestellingId = iOrderId AND Geannuleerd = 0;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
	
	OPEN cur1;
	
	read_loop: LOOP
		FETCH cur1 INTO iId;	
		
		IF done THEN
			LEAVE read_loop;
		END IF;		
	
		CALL orderregel_status( iStatus, iId, iResultaat );
	END LOOP;
	
	CLOSE cur1;
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `orderregel_status_op_orderid_zonder_backorders` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `orderregel_status_op_orderid_zonder_backorders`( iStatus INT(11), iOrderId INT(11), iResultaat ENUM( 'gelukt', 'mislukt' ) )
BEGIN
	DECLARE LStatusId INT;
	DECLARE iId INT;
	DECLARE done BOOL;
	
	DECLARE cur1 CURSOR FOR SELECT Id FROM Bestellingen WHERE BestellingId = iOrderId AND AantalBackorder = 0 AND Geannuleerd = 0;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
	
	OPEN cur1;
	
	read_loop: LOOP
		FETCH cur1 INTO iId;	
		
		IF done THEN
			LEAVE read_loop;
		END IF;		
	
		CALL orderregel_status( iStatus, iId, iResultaat );
	END LOOP;
	
	CLOSE cur1;
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `resyncOrderregelStatus` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `resyncOrderregelStatus`( _id INT )
BEGIN
	SET @skip_orderregelstatus_update = 1;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 2 ) SET A.`bevestigd` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 5 ) SET A.`gefactureerd` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 6 ) SET A.`is_geparkeerd` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 7 ) SET A.`factuurnummer_toegewezen` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 8 ) SET A.`exact_export` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 9 ) SET A.`exact_controle` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 11 ) SET A.`exact_factuur_verwerkt` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 14 ) SET A.`etiket_geprint` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 15 ) SET A.`ingepakt` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 16 ) SET A.`geannuleerd` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 17 ) SET A.`factuur_geprint` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 18 ) SET A.`pakketlabel_geprint` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 19 ) SET A.`brieflabel_geprint` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 20 ) SET A.`betaald_via_ideal` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 21 ) SET A.`betaald` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 23 ) SET A.`openstaande_post_aangemaakt` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 25 ) SET A.`in_backorder_gezet` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 26 ) SET A.`oud_handmatig_verwerkt` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 27 ) SET A.`automatisch_geclassificeerd` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 28 ) SET A.`handmatig_geclassificeerd` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 29 ) SET A.`gecrediteerd` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 30 ) SET A.`volledig_geleverd_backorder` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 31 ) SET A.`samengevoegd_met_eerdere_order` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 32 ) SET A.`niet_inpakken` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 33 ) SET A.`afgesloten` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 34 ) SET A.`factuur_per_mail_verzonden` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 35 ) SET A.`pdf_factuur_gecontroleerd` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 36 ) SET A.`voorgemeld_bij_postnl` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 37 ) SET A.`pakket_afgeleverd_volgens_postnl` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 38 ) SET A.`kan_gedownload_worden` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 39 ) SET A.`pakbon_geprint` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 40 ) SET A.`uit_backorder_gehaald` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 41 ) SET A.`factuur_sturen_niet_nodig` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 42 ) SET A.`hoeft_niet_betaald_te_worden` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 43 ) SET A.`uitgevoerd_naar_exact_via_mari` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 44 ) SET A.`wacht_op_compleet` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 45 ) SET A.`inpakbevestiging_verzonden` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 46 ) SET A.`niet_reserveren` = 1 WHERE B.Id = _id;
	SET @skip_orderregelstatus_update = 0;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `sync_exactartikel` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `sync_exactartikel`( _ean CHAR(13) )
BEGIN
	--
	-- Tijdelijke tabel met exact-achtige gevens uit de boekentabel, 
	-- maar alleen van die boeken die nog niet in de exactartikelen tabel staan
	--
	CREATE TEMPORARY TABLE Tmp.ExactTemp
		SELECT 
		    Ean AS `Code`,
		    CONCAT(
		      B.Titel,
		      IF(
			B.Bindwijze != 'paperback' 
			AND B.Bindwijze != 'ingebonden' 
			AND B.Bindwijze != 'ingenaaid' 
			AND B.Bindwijze != 'gebonden',
			CONCAT(' (', B.Bindwijze, ')'),
			''
		      )
		    ) AS Titel,
		    Achternaam,
		    IF(
		      Aanbiedingsprijs > 0 
		      AND (
			NOW() BETWEEN IF(
			  AanbiedingVanaf = 0,
			  '2000-01-01 00:00',
			  AanbiedingVanaf
			) 
			AND IF(
			  AanbiedingTotenmet = 0,
			  '2099-12-12 00:00',
			  AanbiedingTotenmet
			)
		      ),
		      Aanbiedingsprijs,
		      Managementboek_Boeken.calc_prijs (B.Prijs, Valuta)
		    ) AS Prijs,
		    Managementboek_Boeken.calc_prijs (B.Prijs, Valuta) AS VastePrijs,
		    Aanbiedingsprijs AS ActiePrijs,
		    IFNULL(BB.BriefTitel, '') AS BriefTitel,
		    IF(
		      B.BoekStatus = 5,
		      6,
		      IF(
			B.BoekStatus = 2,
			7,
			IF(
			  B.BoekStatus = 99,
			  8,
			  IF(B.BoekStatus = 1, 8, 0)
			)
		      )
		    ) AS BackorderCode,
		    0 AS ExactArtikel,
		    Btwcode_tbv_export AS BTWCode,
		    G.Artgroep AS ArtikelGroep,
		    IFNULL(B.Boeksoort, 'O'),
		    B.Bindwijze,
		    B.Magazijnsoort,
		    B.Magazijnlocatienummer,
		    W.Bindwijze_inpakken 
		  FROM
		    Managementboek_Boeken.Boeken B 
		    LEFT JOIN Managementboek_Boeken.Bindwijze W USING (Bindwijze) 
		    LEFT JOIN Managementboek_Boeken.Artikelgroep G 
		      ON (
			IF(
			  B.Artgroepid,
			  B.Artgroepid,
			  W.Artgroepid
			) = G.Id
		      ) 
		    JOIN Managementboek_Boeken.Auteurs A1 
		      ON (B.Auteur1 = A1.Auteurid) 
		    LEFT JOIN Managementboek_Boeken.Boekbrieven BB 
		      ON (B.Brief = BB.Brief_id)
		    LEFT JOIN Managementboek_Klanten.`ExactArtikelen` EA
		      ON ( EA.Code = B.Ean )
		    WHERE B.Ean = _ean;
  
	-- INSERT NU DIE BOEKEN
	INSERT IGNORE INTO Managementboek_Klanten.`ExactArtikelen`
	SELECT * FROM Tmp.ExactTemp
	ON DUPLICATE KEY UPDATE
	    `Titel`  = VALUES(Titel),
	    `Auteur` = VALUES(Auteur),
	    `Prijs`  = VALUES(Prijs),
	    VastePrijs = VALUES(VastePrijs),
	    ActiePrijs = VALUES(ActiePrijs),
	    BriefCode = VALUES(BriefCode),
	    BackorderCode = VALUES(BackorderCode),
	    ExactArtikel = VALUES(ExactArtikel),
	    BTWCode = VALUES(BTWCode),
	    ArtikelGroep = VALUES(ArtikelGroep),
	    BoekSoort = VALUES(BoekSoort),
	    Bindwijze = VALUES(Bindwijze),
	    Magazijnsoort = VALUES(Magazijnsoort),
	    Magazijnlocatienummer = VALUES(Magazijnlocatienummer),
	    NietInpakken = VALUES(NietInpakken);
	DROP TEMPORARY TABLE Tmp.ExactTemp;
		 
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `sync_exactartikelen` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `sync_exactartikelen`()
BEGIN
	--
	-- Tijdelijke tabel met exact-achtige gevens uit de boekentabel, 
	-- maar alleen van die boeken die nog niet in de exactartikelen tabel staan
	--
	CREATE TEMPORARY TABLE Tmp.ExactTemp
		SELECT 
		    Ean AS `Code`,
		    CONCAT(
		      B.Titel,
		      IF(
			B.Bindwijze != 'paperback' 
			AND B.Bindwijze != 'ingebonden' 
			AND B.Bindwijze != 'ingenaaid' 
			AND B.Bindwijze != 'gebonden',
			CONCAT(' (', B.Bindwijze, ')'),
			''
		      )
		    ) AS Titel,
		    Achternaam,
		    IF(
		      Aanbiedingsprijs > 0 
		      AND (
			NOW() BETWEEN IF(
			  AanbiedingVanaf = 0,
			  '2000-01-01 00:00',
			  AanbiedingVanaf
			) 
			AND IF(
			  AanbiedingTotenmet = 0,
			  '2099-12-12 00:00',
			  AanbiedingTotenmet
			)
		      ),
		      Aanbiedingsprijs,
		      Managementboek_Boeken.calc_prijs (B.Prijs, Valuta)
		    ) AS Prijs,
		    Managementboek_Boeken.calc_prijs (B.Prijs, Valuta) AS VastePrijs,
		    Aanbiedingsprijs AS ActiePrijs,
		    IFNULL(BB.BriefTitel, '') AS BriefTitel,
		    IF(
		      B.BoekStatus = 5,
		      6,
		      IF(
			B.BoekStatus = 2,
			7,
			IF(
			  B.BoekStatus = 99,
			  8,
			  IF(B.BoekStatus = 1, 8, 0)
			)
		      )
		    ) AS BackorderCode,
		    0 AS ExactArtikel,
		    Btwcode_tbv_export AS BTWCode,
		    G.Artgroep AS ArtikelGroep,
		    IFNULL(B.Boeksoort, 'O'),
		    B.Bindwijze,
		    B.Magazijnsoort,
		    B.Magazijnlocatienummer,
		    W.Bindwijze_inpakken 
		  FROM
		    Managementboek_Boeken.Boeken B 
		    LEFT JOIN Managementboek_Boeken.Bindwijze W USING (Bindwijze) 
		    LEFT JOIN Managementboek_Boeken.Artikelgroep G 
		      ON (
			IF(
			  B.Artgroepid,
			  B.Artgroepid,
			  W.Artgroepid
			) = G.Id
		      ) 
		    JOIN Managementboek_Boeken.Auteurs A1 
		      ON (B.Auteur1 = A1.Auteurid) 
		    LEFT JOIN Managementboek_Boeken.Boekbrieven BB 
		      ON (B.Brief = BB.Brief_id)
		    LEFT JOIN Managementboek_Klanten.`ExactArtikelen` EA
		      ON ( EA.Code = B.Ean )
		      
		    WHERE EA.Titel != CONCAT( B.Titel, IF(  B.Bindwijze != 'paperback' AND B.Bindwijze != 'ingebonden' AND B.Bindwijze != 'ingenaaid' AND B.Bindwijze != 'gebonden', CONCAT(' (', B.Bindwijze, ')'), '' ) )
		    OR EA.Prijs != ROUND(IF(
		      Aanbiedingsprijs > 0 
		      AND (
			NOW() BETWEEN IF(
			  AanbiedingVanaf = 0,
			  '2000-01-01 00:00',
			  AanbiedingVanaf
			) 
			AND IF(
			  AanbiedingTotenmet = 0,
			  '2099-12-12 00:00',
			  AanbiedingTotenmet
			)
		      ),
		      Aanbiedingsprijs,
		      Managementboek_Boeken.calc_prijs (B.Prijs, Valuta)
		    ),2)
		    OR IFNULL(BB.BriefTitel, '') != BriefTitel
		    OR IF(
		      B.BoekStatus = 5,
		      6,
		      IF(
			B.BoekStatus = 2,
			7,
			IF(
			  B.BoekStatus = 99,
			  8,
			  IF(B.BoekStatus = 1, 8, 0)
			)
		      )
		    ) != Backordercode
		    OR Btwcode_tbv_export != EA.BTWCode
		    OR EA.Bindwijze != B.`Bindwijze`
		    OR B.`Magazijnsoort` != EA.Magazijnsoort
		    OR W.`Bindwijze_inpakken` != NietInpakken
		    OR EA.`Code` IS NULL;
  
	-- INSERT NU DIE BOEKEN
	INSERT IGNORE INTO Managementboek_Klanten.`ExactArtikelen`
	SELECT * FROM Tmp.ExactTemp
	ON DUPLICATE KEY UPDATE
	    `Titel`  = VALUES(Titel),
	    `Auteur` = VALUES(Auteur),
	    `Prijs`  = VALUES(Prijs),
	    VastePrijs = VALUES(VastePrijs),
	    ActiePrijs = VALUES(ActiePrijs),
	    BriefCode = VALUES(BriefCode),
	    BackorderCode = VALUES(BackorderCode),
	    ExactArtikel = VALUES(ExactArtikel),
	    BTWCode = VALUES(BTWCode),
	    ArtikelGroep = VALUES(ArtikelGroep),
	    BoekSoort = VALUES(BoekSoort),
	    Bindwijze = VALUES(Bindwijze),
	    Magazijnsoort = VALUES(Magazijnsoort),
	    Magazijnlocatienummer = VALUES(Magazijnlocatienummer),
	    NietInpakken = VALUES(NietInpakken);
	DROP TEMPORARY TABLE Tmp.ExactTemp;
	
	--
	-- CREATE Tijdelijke tabel, stom prepared statement om performance te krijgen.
	--
	DROP TEMPORARY TABLE IF EXISTS Tmp.TmpBoeken;
	PREPARE st1 FROM 
	"CREATE TEMPORARY TABLE Tmp.TmpBoeken ENGINE=MEMORY
	SELECT `Code` , EA.Titel, IFNULL( EA.Prijs*100, 0 ) AS Prijs, 99 AS BoekStatus, IFNULL( EA.Bindwijze, K.Bindwijze ) AS Bindwijze FROM `ExactArtikelen` EA
					JOIN ExactKoppeling.`BindwijzeKoppeling` K USING ( Artikelgroep ) 
					LEFT JOIN Managementboek_Boeken.Boeken ON ( `Code` = `Ean` ) 
					WHERE `Code` <> ''
					AND Ean IS NULL;";
	EXECUTE st1;
	
	--
	-- Daarna sync exact artikelen naar boekendb. In apart stored procedure ivm cursor. 
	-- (cursor declaratie moet bovenaan; maar tijdelijke tabel word pas later gemaakt)
	--
	CALL sync_exact_naar_boeken;
	 
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `sync_exact_naar_boeken` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `sync_exact_naar_boeken`()
BEGIN
	DECLARE Ean CHAR(13);
	DECLARE Titel VarChar(255);
	DECLARE Bindwijze VARCHAR(255);
	DECLARE Prijs DECIMAL(8,2);
	DECLARE Boekstatus INT;
	DECLARE no_more_rows INT DEFAULT 0;
	DECLARE cur CURSOR FOR SELECT `Code`, Titel, Bindwijze, Prijs, Boekstatus FROM Tmp.TmpBoeken;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = 1;				
	
	OPEN cur;
	the_loop: LOOP
		FETCH cur INTO Ean, Titel, Bindwijze, Prijs, Boekstatus;
		IF no_more_rows THEN
			CLOSE cur;
			LEAVE the_loop;
		END IF;		
		
		INSERT IGNORE INTO Managementboek_Boeken.Boeken SET Ean = Ean, Bindwijze = Bindwijze, Titel = Titel, Prijs = Prijs, Boekstatus = Boekstatus, Boeken_verborgenBoek=1;
	END LOOP the_loop;
	DROP TEMPORARY TABLE Tmp.TmpBoeken;
	
	UPDATE Managementboek_Boeken.Boeken B JOIN CbBoeken.`Boeken_gefilterd` C USING ( Ean )  SET B.Titel = C.Titel WHERE B.Uitgever IS NULL AND B.Titel = '' AND B.`Boeken_verborgenboek` = 1;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `tmp_orderregels` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` PROCEDURE `tmp_orderregels`(myBestellingid INT)
    READS SQL DATA
BEGIN
	set @@session.max_sp_recursion_depth=10; 
	/* create tmp table orderregels */
	DROP TEMPORARY TABLE IF EXISTS tmp.Orderregels;
	CREATE TEMPORARY TABLE tmp.Orderregels(Id INT PRIMARY KEY, OrigineelBestellingId INT,BestellingId INT, Factuurid INT,DTFactuur DATETIME, DT DATETIME, Ean VARCHAR(100), Aantal INT,AantalBackorder INT,
						Auteurnaam VARCHAR(100), Omschrijving VARCHAR(100),StatusId INT, `Status` VARCHAR(100), Prijs DOUBLE, Kortingpercentage DOUBLE, Bedrag DOUBLE,
						DTBelofte VARCHAR(100),BriefCode INT, AantalNogInBackorder INT, BackorderReden INT, Geannuleerd INT,Geexporteerd TINYINT(1),
						OrigineleOrderregel TINYINT(1),`Type` VARCHAR(20),IsPakket TINYINT(1) DEFAULT 0,IsBrief TINYINT(1) DEFAULT 0,MagCredit TINYINT(1) DEFAULT 0,
						DTAnnulering DATETIME,KEY (`Id`),CreditBestellingId INT,IsVanKlantenservice TINYINT(1),IsOpen TINYINT(1), INDEX (`OrigineelBestellingId`)) ENGINE=MEMORY;										
						
	/*DROP TEMPORARY TABLE IF EXISTS tmp.OrderregelsLog;
	CREATE TEMPORARY TABLE tmp.OrderregelsLog(`Log` VARCHAR(255)) ENGINE=MEMORY;*/
						
	/* opvragen van de backorder informatie */
	-- CALL backorderregels();
	
	call tmp_order_toevoegen(myBestellingid,myBestellingid);			
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `tmp_orderregels_toevoegen` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` PROCEDURE `tmp_orderregels_toevoegen`(myBestellingId INT,myOrigineelBestellingid INT,myType VARCHAR(20))
    MODIFIES SQL DATA
BEGIN
	INSERT INTO tmp.Orderregels SELECT 
                  BS.Id,
		  myOrigineelBestellingid,
                  BS.BestellingId,
                  BS.Factuurid,
                  F.DT,
                  BS.DTOrderregel,
                  BS.Ean,
                  BS.Aantal,
                  BS.AantalBackorder,
                  BS.Auteurnaam,
                  BS.Omschrijving,
                  BS.StatusId,
                  BSS.Naam,
                  BS.Prijs,
                  BS.Kortingpercentage,
                  BS.BedragIncBtwIncKorting,                  
                  BB.DTBelofte,
                  BS.BriefCode,
                  IF(BS.AantalBackorder > 0,BS.AantalBackorder-orderregel_geleverd(BS.Id),0),
                  BS.BackorderReden,
                  BS.Geannuleerd,
                  BS.Geexporteerd,
                  IF(myOrigineelBestellingid = myBestellingId,1,0),
                  IF(BS.Geannuleerd = 1,'geannuleerd',IF(BS.AantalBackorder > 0 AND BS.AantalBackorder-orderregel_geleverd(BS.Id) = 0,'volledig geleverd',IF (BS.Factuurid > 0 AND myType NOT IN('credit','uit backorder'),'gefactureerd',myType))),
                  OSPlat.pakketlabel_geprint,
                  OSPlat.brieflabel_geprint,
                  IF(BS.Factuurid > 0 AND OSPlat.gecrediteerd = 0 AND BS.Aantal > 0,1,0)/*magCredit*/,
                  OSAnnulering.DT,
                  BS.BestellingId AS CreditBestellingId,
                  OSPlat.vink_klantenservice,
                  OSPlat.vink_open
                  FROM Bestellingen BS
                  LEFT JOIN OrderregelStatus OSAnnulering ON (OSAnnulering.Id = BS.Id AND OSAnnulering.StatusId=24) 
                  LEFT JOIN OrderregelStatusPlat OSPlat ON (OSPlat.Id = BS.Id) 
                  LEFT JOIN ExactKoppeling.Facturen F ON (F.FactuurID = BS.Factuurid)
                  LEFT JOIN BestellingenBelofte BB ON(BB.Id=BS.Id) 
                  LEFT JOIN BestellingStatussen BSS ON (BSS.StatusId=BS.StatusId)
                  WHERE BS.Bestellingid = myBestellingid
                  GROUP BY BS.Id
                  ORDER BY Factuurid;                                    
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `tmp_order_toevoegen` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` PROCEDURE `tmp_order_toevoegen`(myBestellingid INT,myOrigineelBestellingid INT)
    MODIFIES SQL DATA
BEGIN
	DECLARE loopBestellingid INT;
	DECLARE no_more_rows INT DEFAULT 0;
	DECLARE myUitBackorder INT DEFAULT 0;
	DECLARE myIsOpnieuw INT DEFAULT 0;
	DECLARE myIsCredit INT DEFAULT 0;
	DECLARE myType VARCHAR(20);
	
	DECLARE cur CURSOR FOR SELECT 
		BA.Bestellingid
	FROM BestellingAll BA
	WHERE BA.OrigineelBestellingid = myBestellingid;	
	
	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET no_more_rows = 1;	
		
	SELECT BA.UitBackorder, BA.IsOpnieuw, BA.IsCredit 
		INTO myUitBackorder,myIsOpnieuw,myIsCredit
		FROM BestellingAll BA WHERE Bestellingid=myBestellingid;
		
	IF myUitBackorder = 1 THEN
		SET myType = 'uit backorder';
	ELSEIF myIsCredit = 1 THEN
		SET myType = 'credit';
	ELSEIF myIsOpnieuw = 1 THEN
		SET myType = 'opnieuw';
	ELSE
		SET myType = 'origineel';
	END IF;
		
	/*INSERT INTO tmp.OrderregelsLog SET `Log` = CONCAT(myBestellingid,'-',myOrigineelBestellingid);*/
		
	/* orderregels toevoegen voor deze bestelling */			
	CALL tmp_orderregels_toevoegen(myBestellingid,myOrigineelBestellingid,myType);		
		
	/* loop door eventueel afgeleide orders */
	OPEN cur;		
	
	the_loop: LOOP
		FETCH cur INTO
			loopBestellingid;
		IF no_more_rows THEN
			CLOSE cur;
			LEAVE the_loop;
		END IF;		
		
		/* opnieuw aanroepen om te bepalen of er nog meer afgeleide orders zijn */
		CALL tmp_order_toevoegen(loopBestellingid,myOrigineelBestellingid);			
	END LOOP the_loop;	
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `undo_annulering` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `undo_annulering`( id INT )
    MODIFIES SQL DATA
BEGIN
	/* zet geannuleerd vink uit */
	UPDATE BestellingAll SET BestellingAll.Geannuleerd = 0 WHERE Bestellingid=id;
	
	/* zet de geannuleerd vink uit op alle orderregels */
	UPDATE Bestellingen SET Geannuleerd = 0 WHERE Bestellingid=id;
	
	/* 
	 * verwijder de 'geannuleerd' statussen
	 * 24,16 (geannuleerd)
	 * 33 (afgesloten) omdat na annulering ook de afgesloten status gezet wordt
	 */
	DELETE FROM `BestellingStatus` WHERE 
		BestellingId = id AND
		(StatusId = 24 OR StatusId=16 OR StatusId=33);
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `undo_order_inpakstatus` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` PROCEDURE `undo_order_inpakstatus`( bid INT )
BEGIN
	UPDATE BestellingenInpakstatus
	SET
		aantalIngepakt = 0,
		DT = NULL,
		Gebruiker = NULL
	WHERE BestellingenId IN ( SELECT Id FROM Bestellingen WHERE Bestellingid = bid );
	
	DELETE FROM BestellingStatus
	WHERE BestellingId = bid
		AND ( statusId = 12 OR statusId = 13 OR statusId = 14 );
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `update_bestelling_herkomst` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `update_bestelling_herkomst`( _id INT )
BEGIN
	DECLARE _gclid VARCHAR( 255 );
	DECLARE _referer VARCHAR( 255 );
	DECLARE _term VARCHAR(255);
	DECLARE _aff INT;
	DECLARE _nb INT;
	DECLARE _eoe INT;
	DECLARE _klantid INT;
	DECLARE _isEigenNaam INT;
	DECLARE _isProducten INT;
	DECLARE _oudeherkomst CHAR( 20 );
	DECLARE _isNCOI INT;
	
	INSERT IGNORE INTO BestellingHerkomst SET BestellingId = _id;
	
	-- Get GCLID
	SELECT A.`Gclid`, A.`Term` INTO _gclid,_term 
		FROM Managementboek_Klanten.`SessionGclid` A 
		JOIN Managementboek_Klanten.BestellingAll B USING ( SessionId ) 
		LEFT JOIN AdWords.`ClickLog` L USING ( gclid )
	WHERE BestellingId = _id 
	AND B.DT > DATE_SUB( L.DT,INTERVAL 4 HOUR )
	LIMIT 1;	
	
	-- Affiliate
	SELECT AffiliateId, Herkomst, ReferrerDomain, Klantid INTO _aff, _oudeherkomst, _referer, _klantid FROM BestellingAll WHERE BestellingId = _id;
	-- Fix lege herkomst	
	IF _oudeherkomst = '' THEN
		SET _oudeherkomst = 'Website';
	END IF;
	
	-- Get referer
	IF _referer IS NULL THEN
		SELECT Referer INTO _referer FROM Managementboek_Klanten.`SessionLog` JOIN Managementboek_Klanten.BestellingAll USING ( SessionId ) WHERE BestellingId = _id  LIMIT 1;
	END IF;
	
	-- Nieuwsbrief
	SELECT COUNT(*) > 0 INTO _nb FROM BestellingenExtra JOIN Bestellingen USING ( Id ) WHERE Tag LIKE "nb%" AND BestellingId = _id;
	-- 1OP1
	SELECT COUNT(*) > 0 INTO _eoe FROM BestellingenExtra JOIN Bestellingen USING ( Id ) WHERE Tag LIKE "eoe%" AND BestellingId = _id;
	
	SET _isProducten = 0;
	IF NOT _gclid IS NULL THEN		
		SELECT 
		  COUNT(*) INTO _isProducten
		FROM
		  AdWords.`ClickLog` 
		  JOIN AdWords.`StructureAds` A USING (adid) 
		  JOIN AdWords.`StructureAdGroup` G USING (adgroupid) 
		WHERE G.`campaignid` = 99973038 AND gclid = _gclid;		
	END IF;
	
	IF	_aff > 0 THEN
		UPDATE BestellingHerkomst SET BestellingHerkomst = 'Affiliate' WHERE BestellingId  = _id;
	ELSEIF _isProducten = 1 AND _referer LIKE "%google%" THEN
		UPDATE BestellingHerkomst SET Gclid = _gclid, Keyword = _term, BestellingHerkomst = 'Adwords' WHERE BestellingId = _id;
	ELSEIF (NOT _gclid IS NULL AND LENGTH(_gclid) > 0 ) AND (_isProducten = 0) THEN
		UPDATE BestellingHerkomst SET Gclid = _gclid, BestellingHerkomst = 'AdwordsDirect' WHERE BestellingId  = _id;
	ELSEIF _referer LIKE 'https://www.google.%' THEN
		UPDATE BestellingHerkomst SET BestellingHerkomst = 'OrganicDirect', Keyword = AdWords.urlparam( _referer, "q" ) WHERE BestellingId  = _id;
	ELSEIF _referer LIKE "%google%" AND AdWords.urlparam( _referer, "q" ) LIKE "%managementboek%" THEN
		UPDATE BestellingHerkomst SET BestellingHerkomst = 'OrganicDirect', Keyword = AdWords.urlparam( _referer, "q" ) WHERE BestellingId  = _id;
	ELSEIF _referer LIKE "%google%" AND AdWords.urlparam( _referer, "q" ) NOT LIKE "%managementboek%" THEN
		UPDATE BestellingHerkomst SET BestellingHerkomst = 'Organic', Keyword = AdWords.urlparam( _referer, "q" ) WHERE BestellingId  = _id;
	ELSEIF _referer IN ( 'https://www.google.nl', 'https://www.google.com', 'https://www.google.be' ) THEN
		UPDATE BestellingHerkomst SET BestellingHerkomst = 'Organic', Keyword = '(https)' WHERE BestellingId  = _id;
	ELSEIF _nb = 1 THEN
		UPDATE BestellingHerkomst SET BestellingHerkomst = 'Nieuwsbrief' WHERE BestellingId  = _id;
	ELSEIF _eoe = 1 THEN
		UPDATE BestellingHerkomst SET BestellingHerkomst = 'EenOpEen' WHERE BestellingId  = _id;		
	ELSEIF LENGTH( _referer ) > 0 AND _referer NOT LIKE "%google%" AND _referer NOT LIKE "%managementboek%" AND _referer NOT LIKE "%mainpress%" THEN
		UPDATE BestellingHerkomst SET BestellingHerkomst = 'Extern' WHERE BestellingId  = _id;
	ELSE
		UPDATE BestellingHerkomst SET BestellingHerkomst = 'Direct' WHERE BestellingId  = _id;
	END IF;
	
	-- oude herkomst >> Kanaal
	IF      _oudeherkomst = 'MARI' THEN
		UPDATE BestellingHerkomst SET Kanaal = 'MARI'  WHERE BestellingId = _id;
	ELSEIF _oudeherkomst = 'NCOI' THEN
		UPDATE BestellingHerkomst SET Kanaal = 'NCOI'  WHERE BestellingId = _id;
	ELSEIF _oudeherkomst = 'ABO' THEN
		UPDATE BestellingHerkomst SET Kanaal = 'ABO'  WHERE BestellingId = _id;
	ELSEIF _oudeherkomst = 'iOS' THEN
		UPDATE BestellingHerkomst SET Kanaal = 'IOS App' WHERE BestellingId = _id;
	ELSEIF _oudeherkomst = 'Android' THEN
		UPDATE BestellingHerkomst SET Kanaal = 'Android App' WHERE BestellingId  = _id;
	ELSEIF _oudeherkomst = 'Website' THEN
		UPDATE BestellingHerkomst SET Kanaal = 'Website' WHERE BestellingId  = _id AND IFNULL(Kanaal,'') != 'Mobile';
	END IF;
	
	-- NCOI Klant? Kanaal NCOI
	SELECT COUNT(*) INTO _isNCOI FROM NCOI.Klanten WHERE Klantid = _klantid;
	IF _isNCOI=1 THEN
		UPDATE BestellingHerkomst SET Kanaal = 'NCOI'  WHERE BestellingId = _id;
	END IF;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `update_ebooks_verzonden` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `update_ebooks_verzonden`( bid INT )
    MODIFIES SQL DATA
BEGIN
	UPDATE Managementboek_Klanten.`Bestelling`
	JOIN Managementboek_Klanten.`Bestellingen` USING ( BestellingId )
	JOIN Managementboek_Klanten.`BestellingenStatus` USING ( id )
	JOIN Managementboek_Boeken.Boeken USING ( Ean )
	JOIN Managementboek_Boeken.`Bindwijze` USING ( Bindwijze )
	SET `BestellingenStatus`.`VerzondenOp` = Bestelling.`DT`
	WHERE BestellingId = bid
	AND ( Bindwijze LIKE "%epub%" OR Bindwijze LIKE "%ebook%" OR Bindwijze LIKE "%download%" );
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `update_exactartikelen` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `update_exactartikelen`( iEAN CHAR(15) )
    MODIFIES SQL DATA
BEGIN
/*
  DECLARE vCode VARCHAR(20) ;
  DECLARE vTitel VARCHAR (255) ;
  DECLARE vAuteur VARCHAR (255) ;
  DECLARE vPrijs DECIMAL (8, 2) ;
  DECLARE vVastePrijs DECIMAL (8, 2) ;
  DECLARE vActiePrijs DECIMAL (8, 2) ;
  DECLARE vBriefCode VARCHAR (20) ;
  DECLARE vBackorderCode INT ;
  DECLARE vExactArtikel TINYINT ;
  DECLARE vBTWCode CHAR(1) ;
  DECLARE vArtikelGroep CHAR(4) ;
  DECLARE vBoekSoort CHAR(1) ;
  DECLARE vBindwijze VARCHAR (255) ;
  DECLARE vMagazijnsoort VARCHAR (5) ;
  DECLARE vMagazijnlocatienummer CHAR(4) ;
  DECLARE vNietInpakken TINYINT ;
  SELECT 
    Ean AS `Code`,
    CONCAT(
      Titel,
      IF(
        B.Bindwijze != 'paperback' 
        AND B.Bindwijze != 'ingebonden' 
        AND B.Bindwijze != 'ingenaaid' 
        AND B.Bindwijze != 'gebonden',
        CONCAT(' (', B.Bindwijze, ')'),
        ''
      )
    ),
    Achternaam,
    IF(
      Aanbiedingsprijs > 0 
      AND (
        NOW() BETWEEN IF(
          AanbiedingVanaf = 0,
          '2000-01-01 00:00',
          AanbiedingTotenmet
        ) 
        AND IF(
          AanbiedingTotenmet = 0,
          '2099-12-12 00:00',
          AanbiedingTotenmet
        )
      ),
      Aanbiedingsprijs,
      Managementboek_Boeken.calc_prijs (Prijs, Valuta)
    ) AS Prijs,
    Managementboek_Boeken.calc_prijs (Prijs, Valuta) AS VastePrijs,
    Aanbiedingsprijs AS ActiePrijs,
    IFNULL(BB.BriefTitel, '') AS BriefTitel,
    IF(
      B.BoekStatus = 5,
      6,
      IF(
        B.BoekStatus = 2,
        7,
        IF(
          B.BoekStatus = 99,
          8,
          IF(B.BoekStatus = 1, 8, 0)
        )
      )
    ) AS BackorderCode,
    0 AS ExactArtikel,
    Btwcode_tbv_export AS BTWCode,
    G.Artgroep AS ArtikelGroep,
    IFNULL(B.Boeksoort, 'O'),
    B.Bindwijze,
    B.Magazijnsoort,
    B.Magazijnlocatienummer,
    W.Bindwijze_inpakken 
    
    INTO vCode,
    vTitel,
    vAuteur,
    vPrijs,
    vVastePrijs,
    vActiePrijs,
    vBriefCode,
    vBackorderCode,
    vExactArtikel,
    vBTWCode,
    vArtikelGroep,
    vBoekSoort,
    vBindwijze,
    vMagazijnsoort,
    vMagazijnlocatienummer,
    vNietInpakken 
  FROM
    Managementboek_Boeken.Boeken B 
    LEFT JOIN Managementboek_Boeken.Bindwijze W USING (Bindwijze) 
    LEFT JOIN Managementboek_Boeken.Artikelgroep G 
      ON (
        IF(
          B.Artgroepid,
          B.Artgroepid,
          W.Artgroepid
        ) = G.Id
      ) 
    JOIN Managementboek_Boeken.Auteurs A1 
      ON (B.Auteur1 = A1.Auteurid) 
    LEFT JOIN Managementboek_Boeken.Boekbrieven BB 
      ON (B.Brief = BB.Brief_id) 
  WHERE Ean = iEAN ;
  INSERT IGNORE INTO ExactArtikelen SET
    `Code`   = vCode,
    `Titel`  = vTitel,
    `Auteur` = vAuteur,
    `Prijs`  = vPrijs,
    VastePrijs = vVastePrijs,
    ActiePrijs = vActiePrijs,
    BriefCode = vBriefCode,
    BackorderCode = vBackorderCode,
    ExactArtikel = vExactArtikel,
    BTWCode = vBTWCode,
    ArtikelGroep = vArtikelGroep,
    BoekSoort = vBoekSoort,
    Bindwijze = vBindwijze,
    Magazijnsoort = vMagazijnsoort,
    Magazijnlocatienummer = vMagazijnlocatienummer,
    NietInpakken = vNietInpakken;
  
  IF ROW_COUNT() = 0 THEN
	  UPDATE ExactArtikelen
	  SET
	    `Titel`  = vTitel,
	    `Auteur` = vAuteur,
	    `Prijs`  = vPrijs,
	    VastePrijs = vVastePrijs,
	    ActiePrijs = vActiePrijs,
	    BriefCode = vBriefCode,
	    BackorderCode = vBackorderCode,
	    ExactArtikel = vExactArtikel,
	    BTWCode = vBTWCode,
	    ArtikelGroep = vArtikelGroep,
	    BoekSoort = vBoekSoort,
	    Bindwijze = vBindwijze,
	    Magazijnsoort = vMagazijnsoort,
	    Magazijnlocatienummer = vMagazijnlocatienummer,
	    NietInpakken = vNietInpakken
	   WHERE `Code`   = vCode;
   END IF; 
   */
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `update_kosten_mp` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `update_kosten_mp`( id INT )
    MODIFIES SQL DATA
BEGIN
	DECLARE Porto DOUBLE;
	DECLARE VasteKosten DOUBLE;
	DECLARE Bong DOUBLE;
	DECLARE Aantal INT;
	DECLARE FirstID INT;
	DECLARE GedeeldeKosten DECIMAL( 10, 2 );
	DECLARE Verschil DECIMAL( 10, 2 );
	DECLARE R INT;
	
	SET VasteKosten = 5.5;
	
	-- Tel portokosten, zodat we die later kunnen verrekenen
	SELECT Prijs/100 INTO Porto FROM Bestellingen WHERE Bestellingid = id AND EAN = 'PORTO' LIMIT 1;
	SET Porto = IFNULL( Porto, 0 );
	
	-- Tel aantal in te pakken orderregels, niets in te pakken -> Geen kosten.
	SELECT COUNT(*) INTO Aantal 
	FROM Bestellingen
		JOIN OrderregelStatusPlat USING ( Id )
	WHERE Bestellingid = id
		AND EAN NOT IN ( 'PORTO', 'BONG', 'IDEAL', 'VOUCHER' )
		AND niet_inpakken = 0;
	
	IF Aantal > 0 THEN
		SET GedeeldeKosten = ( VasteKosten - Porto ) / Aantal;
		-- Reset alle kosten in deze bestelling
		UPDATE Bestellingen SET KostenMP = 0 WHERE Bestellingid = id;
		
		-- Zet kosten op die regels die er toe doen
		UPDATE Bestellingen JOIN OrderregelStatusPlat USING ( Id ) 
			SET KostenMP = GedeeldeKosten 
		WHERE Bestellingid = id 
			AND EAN NOT IN ( 'PORTO', 'BONG', 'IDEAL', 'VOUCHER' )
			AND niet_inpakken = 0;
			
		-- Afrondingsverschil wegwerken
		SELECT
			ROUND( ( VasteKosten - Porto ) - SUM( KostenMP ), 2 ),
			IFNULL( MIN(Id), 0 )
		INTO Verschil, R
		FROM Bestellingen JOIN OrderregelStatusPlat USING ( Id ) 
		WHERE Bestellingid = id
			AND EAN NOT IN ( 'PORTO', 'BONG', 'IDEAL', 'VOUCHER' )
			AND niet_inpakken = 0;
		
		IF Verschil > 0 AND R > 0 THEN
			UPDATE Bestellingen SET KostenMP = KostenMP + Verschil
			WHERE BestellingId = id AND Id = R;
		END IF;
		
	ELSE
		-- Niets in te pakken? Geen kosten.
		UPDATE Bestellingen SET KostenMP = 0
		WHERE Bestellingid = id
			AND KostenMP != 0
			AND EAN NOT IN ( 'PORTO', 'BONG', 'IDEAL', 'VOUCHER' );
	END IF;
	END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `verwerk_plankVoorraad_wijziging` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` PROCEDURE `verwerk_plankVoorraad_wijziging`( EanInput CHAR(13) CHARACTER SET latin1, AantalInput INT(11) )
BEGIN
	DECLARE huidigeVoorraad INT(11);
	SELECT voorraad(EanInput) INTO huidigeVoorraad;
	
	INSERT IGNORE INTO Voorraadmutaties SET
		Ean = EanInput,
		Mutatie = AantalInput - huidigeVoorraad,
		DT = NOW(),
		Orderregelid = null,
		Gebruiker = @initials,
		`Type` = 'gecorrigeerd';
	END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `verwijder_account` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `verwijder_account`( _klantid INT )
BEGIN
  INSERT INTO KlantMailinglistLog 
  SELECT NOW(), Klantid, Emailadres, 1, 0, 0 
  FROM Klanten 
  WHERE Klantid = _klantid;
    
  UPDATE IGNORE Adres 
  SET
    Huisnummer = 0,
    Huisnummer_oud = 0,
    Huisnummertoevoeging = '',
    Straatnaam = '',
    Straatnaam_oud = '',
    Geslacht = '',
    Faxnummer = '',
    Telefoonnummer = '',
    Plaats = '',
    Postcode = '',
    Plaats_oud = '',
    Postcode_oud = '',
    Adres = '',
    Adres_oud = '',
    Bedrijfsnaam = '',
    Bedrijfsnaam2 = '',
    Functie = '',
    Afdeling = '',
    Voornaam = '',
    Achternaam = '',
    Bedrijfsnaam_oud = '',
    Functie_oud = '',
    Afdeling_oud = '',
    Voornaam_oud = '',
    Achternaam_oud = '',
    Mobielnummer = '' 
  WHERE Klantid = _klantid 
  LIMIT 2;
  
  
  UPDATE IGNORE Klanten 
  SET
    Emailadres = CONCAT( Klantid, '@anoniem.mainpress.nl' ),
    Emailadres_oud = NULL,
    Wachtwoord = NULL,
    WachtwoordEncrypted = '',
    Bankrekening = '',
    Bankrekening_oud = '',
    Magbestellen = 0,
    Heefttoegang = 0,
    Mailcode = 'VERW',
    Notities = CONCAT( 'Verwijderd op ', DATE_FORMAT(NOW(),'%d-%m-%Y %H:%i') ),
    DTWijziging = NOW(),
    ExactEmailadres = NULL,
    InExact = 0,
    AdresStatus = 'unauthorized',
    IP=NULL,
    IPlaatstebezoek=NULL,
    OntvangtStemMail=0
  WHERE Klantid = _klantid 
  LIMIT 1 ;
  
  UPDATE KlantVinken SET Mailen=0, Emailen=0 WHERE Klantid = _klantid LIMIT 1;
    
  DELETE FROM KlantWijzigingen WHERE Klantid = _klantid ;
  DELETE FROM KlantenWijzigingen WHERE Klantid = _klantid ;
  DELETE FROM Klantmailinglist   WHERE Klantid = _klantid;
END ;;
DELIMITER ;

--
-- Current Database: `Test_Voorraadbeheer`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `Test_Voorraadbeheer` /*!40100 DEFAULT CHARACTER SET latin1 */;

USE `Test_Voorraadbeheer`;

--
-- Table structure for table `BeschikbareVoorraad`
--

CREATE TABLE `BeschikbareVoorraad` (
  `Ean` varchar(13) NOT NULL,
  `Voorraad` int(11) DEFAULT NULL,
  PRIMARY KEY (`Ean`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Table structure for table `DevLog`
--

CREATE TABLE `DevLog` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Log` text,
  `DT` datetime DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=MyISAM AUTO_INCREMENT=43149 DEFAULT CHARSET=latin1;

--
-- Table structure for table `MutatieAlerts`
--

CREATE TABLE `MutatieAlerts` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Type` enum('voorraadmutatie','voorraadreservering') DEFAULT NULL,
  `VoorraadmutatieId` int(11) DEFAULT NULL,
  `VoorraadreserveringId` int(11) DEFAULT NULL,
  `Gebruiker` char(2) DEFAULT NULL,
  `Gemaild` int(1) DEFAULT '0',
  `DT` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`Id`),
  KEY `VoorraadmutatieId` (`VoorraadmutatieId`),
  KEY `VoorraadreserveringId` (`VoorraadreserveringId`),
  KEY `Gemaild` (`Gemaild`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

--
-- Table structure for table `PlankVoorraad`
--

CREATE TABLE `PlankVoorraad` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Aantal` int(11) DEFAULT NULL,
  `Ean` varchar(13) DEFAULT NULL,
  `DTGewijzigd` datetime DEFAULT NULL,
  `DTAangemaakt` datetime DEFAULT NULL,
  `Gebruiker` char(5) DEFAULT NULL,
  PRIMARY KEY (`Id`),
  KEY `Ean` (`Ean`)
) ENGINE=MyISAM AUTO_INCREMENT=104 DEFAULT CHARSET=latin1;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`pieter`@`%`*/ /*!50003 TRIGGER `after_insert_plankVoorraad` AFTER INSERT ON `Test_Voorraadbeheer`.`PlankVoorraad` FOR EACH ROW BEGIN
	CALL verwerk_plankVoorraad_wijziging(NEW.Ean,NEW.Aantal);	
    END */;;
DELIMITER ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`pieter`@`%`*/ /*!50003 TRIGGER `after_update_plankVoorraad` AFTER UPDATE ON `Test_Voorraadbeheer`.`PlankVoorraad` FOR EACH ROW BEGIN
	
	CALL verwerk_plankVoorraad_wijziging(NEW.Ean,NEW.Aantal);	
	
	
	INSERT IGNORE INTO `PlankVoorraadLog` SET 
		LogGebruiker=@initials,
		DTLog = NOW(),
		Id = OLD.Id,
		Aantal = OLD.Aantal,
		Ean = OLD.Ean,
		DTGewijzigd = OLD.DTGewijzigd,
		DTAangemaakt = OLD.DTAangemaakt,
		Gebruiker = OLD.Gebruiker;	
    END */;;
DELIMITER ;

--
-- Table structure for table `PlankVoorraadLog`
--

CREATE TABLE `PlankVoorraadLog` (
  `LogId` int(11) NOT NULL AUTO_INCREMENT,
  `LogGebruiker` char(5) DEFAULT NULL,
  `DTLog` datetime DEFAULT NULL,
  `Id` int(11) DEFAULT '0',
  `Aantal` int(11) DEFAULT NULL,
  `Ean` varchar(13) DEFAULT NULL,
  `DTGewijzigd` datetime DEFAULT NULL,
  `DTAangemaakt` datetime DEFAULT NULL,
  `Gebruiker` char(5) DEFAULT NULL,
  PRIMARY KEY (`LogId`)
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=latin1;

--
-- Table structure for table `Voorraad`
--

CREATE TABLE `Voorraad` (
  `Ean` varchar(13) NOT NULL,
  `GereserveerdeVoorraad` int(11) DEFAULT NULL,
  `FysiekeVoorraad` int(11) DEFAULT NULL,
  `BeschikbareVoorraad` int(11) DEFAULT NULL,
  `DT` datetime DEFAULT NULL,
  PRIMARY KEY (`Ean`),
  KEY `DT` (`DT`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `Voorraadmutaties`
--

CREATE TABLE `Voorraadmutaties` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Ean` varchar(13) DEFAULT NULL,
  `Mutatie` int(11) DEFAULT NULL,
  `DT` datetime DEFAULT NULL,
  `Orderregelid` int(11) DEFAULT NULL,
  `Type` enum('ingepakt','ingeklaard','gecorrigeerd','uitgeklaard') DEFAULT NULL,
  `Voorraad` int(11) DEFAULT NULL,
  `Gebruiker` char(5) DEFAULT NULL,
  `PlankVoorraad` int(11) DEFAULT NULL,
  `GereserveerdeVoorraad` int(11) DEFAULT NULL,
  `VoorraadOud` int(11) DEFAULT NULL,
  `BeschikbareVoorraad` int(11) DEFAULT NULL,
  `Bestellingid` int(11) DEFAULT NULL,
  `Administratie` varchar(50) NOT NULL,
  `OrigineelBestellingId` int(11) DEFAULT NULL,
  `Omschrijving` varchar(255) DEFAULT NULL,
  `Reden` enum('cadeau','beschadigd','nieuw','retour uitgever','eigen gebruik','recensie','boekevent','overige','ncoi','voorraadaanpassing') DEFAULT NULL,
  PRIMARY KEY (`Id`),
  KEY `ean` (`Ean`),
  KEY `orderregelid` (`Orderregelid`)
) ENGINE=MyISAM AUTO_INCREMENT=42256 DEFAULT CHARSET=latin1;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`pieter`@`%`*/ /*!50003 TRIGGER `before_insert_voorraadmutaties` BEFORE INSERT ON `Voorraadmutaties` 
    FOR EACH ROW BEGIN
	
	DECLARE huidigeVoorraad,huidigePlankvoorraad,gereserveerdeVoorraad INT(11);
	
	
	SELECT voorraad(NEW.Ean) INTO huidigeVoorraad;
	SET NEW.VoorraadOud = huidigeVoorraad;
	
	
	SELECT IFNULL(Aantal,0) FROM PlankVoorraad WHERE Ean = NEW.Ean INTO huidigePlankvoorraad;
	SET NEW.Plankvoorraad = huidigePlankvoorraad;
	
	
	SELECT gereserveerdeVoorraad(NEW.Ean) INTO gereserveerdeVoorraad;
	SET NEW.GereserveerdeVoorraad = gereserveerdeVoorraad;
	
	
	SET NEW.Voorraad = huidigeVoorraad+NEW.Mutatie;
	
	
	SET NEW.BeschikbareVoorraad = NEW.Voorraad - NEW.GereserveerdeVoorraad;
    END */;;
DELIMITER ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`pieter`@`%`*/ /*!50003 TRIGGER `after_insert_voorraadmutaties` AFTER INSERT ON `Test_Voorraadbeheer`.`Voorraadmutaties` FOR EACH ROW BEGIN
	REPLACE INTO Voorraad SET
		Ean = NEW.Ean,
		GereserveerdeVoorraad = NEW.GereserveerdeVoorraad,
		FysiekeVoorraad = NEW.Voorraad,
		BeschikbareVoorraad = NEW.BeschikbareVoorraad,
		DT = NOW();
		
	IF NEW.Voorraad < 0 THEN
		INSERT IGNORE INTO MutatieAlerts(`Type`,VoorraadmutatieId,Gebruiker)
			VALUES ('voorraadmutatie',NEW.Id,@initials);
	END IF;
    END */;;
DELIMITER ;

--
-- Table structure for table `Voorraadreserveringen`
--

CREATE TABLE `Voorraadreserveringen` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Ean` varchar(13) DEFAULT NULL,
  `Mutatie` int(11) DEFAULT NULL,
  `DT` datetime DEFAULT NULL,
  `Orderregelid` int(11) DEFAULT NULL,
  `Gebruiker` char(5) DEFAULT NULL,
  `Voorraad` int(11) DEFAULT NULL,
  `Debug` varchar(255) DEFAULT NULL,
  `Klantid` int(11) DEFAULT NULL,
  `Type` enum('besteld','geannuleerd','gecorrigeerd','ingepakt','uit backorder','toegevoegd','gecrediteerd','verwijderd','niet inpakken','niet inpakken ongedaan','afgesloten','aantal gewijzigd','backorder aantal gewijzigd') DEFAULT NULL,
  `Bestellingid` int(11) DEFAULT NULL,
  `VoorraadOud` int(11) DEFAULT NULL,
  `FysiekeVoorraad` int(11) DEFAULT NULL,
  `BeschikbareVoorraad` int(11) DEFAULT NULL,
  `Administratie` varchar(50) NOT NULL,
  `OrigineelBestellingId` int(11) DEFAULT NULL,
  `Omschrijving` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=MyISAM AUTO_INCREMENT=66546 DEFAULT CHARSET=latin1;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`pieter`@`%`*/ /*!50003 TRIGGER `before_insert_voorraadreserveringen` BEFORE INSERT ON `Voorraadreserveringen` 
    FOR EACH ROW BEGIN
	
	DECLARE huidigeGereserveerdeVoorraad INT(11);
	SELECT gereserveerdeVoorraad(NEW.Ean) into huidigeGereserveerdeVoorraad;
	SET NEW.Debug = huidigeGereserveerdeVoorraad;
	
	
	
	SET NEW.Voorraad = huidigeGereserveerdeVoorraad + NEW.Mutatie;
	
	
	SET NEW.VoorraadOud = huidigeGereserveerdeVoorraad;
	
	
	SET NEW.FysiekeVoorraad = voorraad(NEW.Ean);
	
	
	SET NEW.BeschikbareVoorraad = NEW.FysiekeVoorraad - NEW.Voorraad;
    END */;;
DELIMITER ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`pieter`@`%`*/ /*!50003 TRIGGER `after_insert_voorraadreserveringen` AFTER INSERT ON `Test_Voorraadbeheer`.`Voorraadreserveringen` FOR EACH ROW BEGIN
	REPLACE INTO Voorraad SET
		Ean = NEW.Ean,
		GereserveerdeVoorraad = NEW.Voorraad,
		FysiekeVoorraad = NEW.FysiekeVoorraad,
		BeschikbareVoorraad = NEW.BeschikbareVoorraad,
		DT=NOW();
		
	IF NEW.Voorraad < 0 THEN
		INSERT IGNORE INTO MutatieAlerts(`Type`,VoorraadreserveringId,Gebruiker)
			VALUES ('voorraadreservering',NEW.Id,@initials);
	END IF;		
    END */;;
DELIMITER ;

--
-- Dumping routines for database 'Test_Voorraadbeheer'
--
/*!50003 DROP FUNCTION IF EXISTS `artikelOmschrijving` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `artikelOmschrijving`(myEan VARCHAR(13)) RETURNS varchar(255) CHARSET latin1
    READS SQL DATA
BEGIN
	DECLARE omschrijving VARCHAR(255);
	
	/* Zoek in Managementboek */
	SELECT Titel INTO omschrijving FROM Managementboek_Boeken.Boeken B WHERE `Ean` = myEan;
	
	IF omschrijving IS NULL THEN
		/* Zoek in Computerboek */
		SELECT Titel INTO omschrijving FROM Computerboek_Boeken.Boeken B WHERE `Ean` = myEan;	
	END IF;
	
	IF omschrijving IS NULL THEN 
		SET omschrijving = '';
	END IF;
	
	RETURN omschrijving;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `gereserveerdeVoorraad` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `gereserveerdeVoorraad`(eanInput VARCHAR(13)) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE huidigeGereserveerdeVoorraad INT(11) DEFAULT 0;	
	SELECT IFNULL(Voorraad,0) INTO huidigeGereserveerdeVoorraad FROM Voorraadreserveringen WHERE `Ean`=eanInput ORDER BY Id DESC LIMIT 0,1;
	RETURN huidigeGereserveerdeVoorraad;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `heeftVoorraadMutatie` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `heeftVoorraadMutatie`(myAdministratie VARCHAR(20),myId INT(11)) RETURNS int(1)
    MODIFIES SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE myEan VARCHAR(13);
	IF myAdministratie = 'Test' THEN
		SELECT Ean INTO myEan
			FROM Test_Voorraadbeheer.Voorraadmutaties V
			WHERE 
				V.Orderregelid=myId
			ORDER BY Id DESC LIMIT 0,1;			
		IF myEan IS NULL THEN
			RETURN 0;
		ELSE
			IF Test_Voorraadbeheer.voorraad(myEan) > 0 THEN
				RETURN 1;
			ELSE
				RETURN 0;
			END IF;
		END IF;
	ELSE
		SELECT Ean INTO myEan
			FROM Voorraadbeheer.Voorraadmutaties V
			WHERE 
				V.Orderregelid=myId
			ORDER BY Id DESC LIMIT 0,1;			
		IF myEan IS NULL THEN
			RETURN 0;
		ELSE
			IF Voorraadbeheer.voorraad(myEan) > 0 THEN
				RETURN 1;
			ELSE
				RETURN 0;
			END IF;
		END IF;
	END IF;	
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `heeftVoorraadReservering` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `heeftVoorraadReservering`(myAdministratie VARCHAR(20),myId INT(11)) RETURNS int(1)
    MODIFIES SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE myEan VARCHAR(13);
	IF myAdministratie = 'Test' THEN
		SELECT Ean into myEan
			FROM Test_Voorraadbeheer.Voorraadreserveringen V
			WHERE 
				V.Orderregelid=myId
			ORDER BY Id DESC LIMIT 0,1;
			
		IF myEan IS NULL THEN
			return 0;
		ELSE
			RETURN 1;
			/*IF Test_Voorraadbeheer.gereserveerdeVoorraad(myEan) > 0 THEN
				RETURN 1;
			ELSE
				RETURN 0;
			END IF;*/
		END IF;
	ELSE
		SELECT Ean INTO myEan
			FROM Voorraadbeheer.Voorraadreserveringen V
			WHERE 
				V.Orderregelid=myId
			ORDER BY Id DESC LIMIT 0,1;
			
		IF myEan IS NULL THEN
			RETURN 0;
		ELSE
			RETURN 1;
			/*IF Voorraadbeheer.gereserveerdeVoorraad(myEan) > 0 THEN
				RETURN 1;
			ELSE
				RETURN 0;
			END IF;*/
		END IF;
	END IF;	
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `isNcoiOrder` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `isNcoiOrder`(myBestellingid INT(11),myAdministratie VARCHAR(20)) RETURNS tinyint(1)
    READS SQL DATA
BEGIN
	DECLARE myHerkomst VARCHAR(255);
	IF myAdministratie <> 'Managementboek' THEN
		RETURN 0;
	ELSE
		SELECT Herkomst INTO myHerkomst FROM Managementboek_Klanten.BestellingAll 
			WHERE Bestellingid=myBestellingid;
			
		IF myHerkomst = 'NCOI' THEN
			RETURN 1;
		ELSE
			RETURN 0;
		END IF;
	END IF;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `isReserveringVrijgegeven` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `isReserveringVrijgegeven`(myAdministratie VARCHAR(20),myId INT(11)) RETURNS int(1)
    MODIFIES SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE mySum INT(11);
	IF myAdministratie = 'Test' THEN		
		SELECT SUM(V.Mutatie) into mySum
			FROM Test_Voorraadbeheer.Voorraadreserveringen V
			WHERE V.Orderregelid=myId;	
			
		IF mySum = 0 THEN /*reservering op de orderregel is vrij*/
			return 1;
		ELSE /*reservering op de orderregel is nog open*/
			RETURN 0;
		END IF;
	ELSE
		SELECT SUM(V.Mutatie) INTO mySum
			FROM Voorraadbeheer.Voorraadreserveringen V
			WHERE V.Orderregelid=myId;	
			
		IF mySum = 0 THEN /*reservering op de orderregel is vrij*/
			RETURN 1;
		ELSE /*reservering op de orderregel is nog open*/
			RETURN 0;
		END IF;
	END IF;	
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `is_voorraadartikel` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `is_voorraadartikel`(myEan VARCHAR(13)) RETURNS tinyint(1)
    READS SQL DATA
BEGIN
	DECLARE isVoorraadArtikel TINYINT(1);
	
	/* Zoek in Managementboek */
	SELECT Voorraadartikel INTO isVoorraadArtikel FROM Managementboek_Boeken.Boeken B WHERE `Ean` = myEan;
	
	IF isVoorraadArtikel IS NULL THEN
		/* Zoek in Computerboek */
		SELECT Voorraadartikel INTO isVoorraadArtikel FROM Computerboek_Boeken.Boeken B WHERE `Ean` = myEan;	
	END IF;
	
	/* Artikel kan niet worden gevonden, default is JA dit is een voorraadartikel*/
	IF isVoorraadArtikel IS NULL THEN
		SET isVoorraadArtikel = 1;
	END IF;
	
	/*return isVoorraadArtikel; @todo wacht op juiste vulling vinkje*/
	IF myEan IN ('porto','ideal','bong','p','ncoi') THEN
		return 0;
	ELSE
		Return 1;
	END IF;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `maakVoorraadmutatie` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `maakVoorraadmutatie`(myAdministratie VARCHAR(20),myEan VARCHAR(13),myMutatie INT(11),myBestellingid INT(11),myOrderregelid INT(11),myType VARCHAR(255),myOrigineelBestellingid INT(11),myOmschrijving VARCHAR(255)) RETURNS int(11)
    MODIFIES SQL DATA
    DETERMINISTIC
BEGIN
	IF is_voorraadartikel(myEan) = 1 AND isNcoiOrder(myBestellingid,myAdministratie) = 0 THEN
		IF myAdministratie = 'Test' THEN
			INSERT IGNORE INTO Test_Voorraadbeheer.Voorraadmutaties SET
				Ean=myEan,
				Mutatie=myMutatie,
				DT=NOW(),
				Orderregelid=myOrderregelid,
				Bestellingid=myBestellingid,
				Gebruiker=@initials,
				`Type`=myType,
				OrigineelBestellingId=myOrigineelBestellingid,
				Omschrijving=myOmschrijving,
				Administratie=myAdministratie;		
		ELSE			
			INSERT IGNORE INTO Voorraadbeheer.Voorraadmutaties SET
				Ean=myEan,
				Mutatie=myMutatie,
				DT=NOW(),
				Orderregelid=myOrderregelid,
				Bestellingid=myBestellingid,
				Gebruiker=@initials,
				`Type`=myType,
				OrigineelBestellingId=myOrigineelBestellingid,
				Omschrijving=myOmschrijving,
				Administratie=myAdministratie;
		END IF;	
		
		RETURN LAST_INSERT_ID();
	ELSE
		RETURN NULL;
	END IF;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `maakVoorraadreservering` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `maakVoorraadreservering`(myAdministratie VARCHAR(20),myEan VARCHAR(13),myMutatie INT(11),myBestellingid INT(11),myOrderregelid INT(11),myKlantid INT(11),myType VARCHAR(255),myOrigineelBestellingid INT(11),myOmschrijving VARCHAR(255)) RETURNS int(11)
    MODIFIES SQL DATA
    DETERMINISTIC
BEGIN
	INSERT INTO Test_Voorraadbeheer.DevLog SET LOG='hier' AND DT = NOW();
	IF is_voorraadartikel(myEan) = 1 AND isNcoiOrder(myBestellingid,myAdministratie) = 0 THEN
		IF (myMutatie > 0 AND myType <> 'ingepakt')
			OR (myMutatie < 0 AND myOrderregelid IS NULL /* systeem correctie */) 
			OR (myMutatie < 0 AND heeftVoorraadReservering(myAdministratie,myOrderregelid) = 1 AND isReserveringVrijgegeven(myAdministratie,myOrderregelId) = 0) THEN		
			
			/* 
			 * Extra controle dat annulering van een credit niet leidt
			 * tot een positieve voorraadmutatie
			 */
			IF myMutatie > 0 AND myType = 'geannuleerd' THEN
				RETURN NULL;
			ELSE
				IF myAdministratie = 'Test' THEN
					INSERT IGNORE INTO Test_Voorraadbeheer.Voorraadreserveringen SET
						Ean=myEan,
						Mutatie=myMutatie,
						DT=NOW(),
						Bestellingid=myBestellingid,
						Orderregelid=myOrderregelid,
						Gebruiker=@initials,
						Klantid=myKlantid,
						Debug='',
						`Type`=myType,
						OrigineelBestellingId=myOrigineelBestellingid,
						Omschrijving=myOmschrijving,
						Administratie=myAdministratie;			
				ELSE
					INSERT IGNORE INTO Voorraadbeheer.Voorraadreserveringen SET
						Ean=myEan,
						Mutatie=myMutatie,
						DT=NOW(),
						Bestellingid=myBestellingid,
						Orderregelid=myOrderregelid,
						Gebruiker=@initials,
						Klantid=myKlantid,
						Debug='',
						`Type`=myType,
						OrigineelBestellingId=myOrigineelBestellingid,
						Omschrijving=myOmschrijving,
						Administratie=myAdministratie;	
				END IF;	
				
				RETURN LAST_INSERT_ID();
			END IF;
		ELSE
			-- RETURN NUll;
			/** 
			 * Loggen tbv debug
			 */
			INSERT IGNORE INTO DevLog SET LOG = CONCAT('kan niet reserveren orderregelId=',CAST(myOrderregelid AS CHAR),' mutatie=',CAST(myMutatie AS CHAR),' ean=',myEan), DT = NOW();
			RETURN NULL;
		END IF;
	ELSE
		RETURN NULL;
	END IF;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `voorraad` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `voorraad`(EanInput VARCHAR(13)) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE huidigeVoorraad INT(11) DEFAULT 0;
	DECLARE aantalVoorraadRegels INT(11) DEFAULT 0;
    
	/* ophalen van de voorraad in laatste geregistreerde voorraadmutatie */	
	SELECT COUNT(*) INTO aantalVoorraadRegels FROM Voorraadmutaties WHERE `Ean`=EanInput;
	IF aantalVoorraadRegels > 0 THEN	 
		SELECT Voorraad INTO huidigeVoorraad FROM Voorraadmutaties WHERE `Ean`=EanInput ORDER BY DT DESC LIMIT 0,1;
	ELSE
		SET huidigeVoorraad = 0;
	END IF;
	
	RETURN huidigeVoorraad;	
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `verwerk_plankVoorraad_wijziging` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` PROCEDURE `verwerk_plankVoorraad_wijziging`(EanInput VARCHAR(13),AantalInput INT(11))
BEGIN
	DECLARE huidigeVoorraad INT(11);
	SELECT voorraad(EanInput) INTO huidigeVoorraad;
	SET @omschrijving = (SELECT artikelOmschrijving(EanInput));
	INSERT IGNORE INTO Voorraadmutaties SET
		`Ean`=EanInput,
		Mutatie=AantalInput-huidigeVoorraad,
		DT=NOW(),
		Orderregelid=null,
		Gebruiker=@initials,
		`Type`='hertelling',
		Omschrijving=@omschrijving;
    END ;;
DELIMITER ;

--
-- Current Database: `Test_vogoo`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `Test_vogoo` /*!40100 DEFAULT CHARACTER SET latin1 */;

USE `Test_vogoo`;

--
-- Table structure for table `vogoo_ratings`
--

CREATE TABLE `vogoo_ratings` (
  `member_id` int(11) DEFAULT NULL,
  `product_id` int(11) DEFAULT NULL,
  `category` int(11) DEFAULT NULL,
  `rating` float DEFAULT NULL,
  `ts` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  KEY `NewIndex1` (`product_id`,`category`,`rating`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;

--
-- Dumping routines for database 'Test_vogoo'
--

--
-- Current Database: `Voorraadbeheer`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `Voorraadbeheer` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `Voorraadbeheer`;

--
-- Table structure for table `AfgerondLog`
--

CREATE TABLE `AfgerondLog` (
  `Administratie` enum('Test','Managementboek','Juridischboek','Computerboek') NOT NULL,
  `BestellingId` int(11) NOT NULL,
  `AantalOrderregels` int(11) DEFAULT NULL,
  `AantalOrderregelsAfgerond` int(11) DEFAULT NULL,
  `DT` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`Administratie`,`BestellingId`),
  KEY `BestellingId` (`BestellingId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `AlleenComputerboek`
--

CREATE TABLE `AlleenComputerboek` (
  `Ean` char(13) NOT NULL,
  PRIMARY KEY (`Ean`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Temporary table structure for view `Bestellingen_met_reserveringen`
--

/*!50001 DROP VIEW IF EXISTS `Bestellingen_met_reserveringen`*/;
/*!50001 CREATE TABLE `Bestellingen_met_reserveringen` (
  `Id` tinyint NOT NULL,
  `Auteurnaam` tinyint NOT NULL,
  `Aantal` tinyint NOT NULL,
  `Prijs` tinyint NOT NULL,
  `Bestellingid` tinyint NOT NULL,
  `Ean` tinyint NOT NULL,
  `Omschrijving` tinyint NOT NULL,
  `Geexporteerd` tinyint NOT NULL,
  `KortingPercentage` tinyint NOT NULL,
  `IsPromo` tinyint NOT NULL,
  `KortingReden` tinyint NOT NULL,
  `KortingMP` tinyint NOT NULL,
  `KostenMP` tinyint NOT NULL,
  `DTOrderregel` tinyint NOT NULL,
  `VastePrijs` tinyint NOT NULL,
  `ActiePrijs` tinyint NOT NULL,
  `BTWTarief` tinyint NOT NULL,
  `BTWCode` tinyint NOT NULL,
  `AantalBackorder` tinyint NOT NULL,
  `BackorderOrigineel` tinyint NOT NULL,
  `BackorderReden` tinyint NOT NULL,
  `BriefCode` tinyint NOT NULL,
  `DTExactExport` tinyint NOT NULL,
  `KortingBedrag` tinyint NOT NULL,
  `KortingBedragExBtw` tinyint NOT NULL,
  `PrijsExBtwExKorting` tinyint NOT NULL,
  `PrijsExBtwIncKorting` tinyint NOT NULL,
  `BedragExBtwExKorting` tinyint NOT NULL,
  `BedragIncBtwExKorting` tinyint NOT NULL,
  `BedragIncBtwIncKorting` tinyint NOT NULL,
  `BedragExBtwIncKorting` tinyint NOT NULL,
  `BedragBTW` tinyint NOT NULL,
  `LineNr` tinyint NOT NULL,
  `Geannuleerd` tinyint NOT NULL,
  `Bijdrage` tinyint NOT NULL,
  `OmzetExBtwExKorting` tinyint NOT NULL,
  `OmzetExBtwIncKorting` tinyint NOT NULL,
  `OmzetIncBtwExKorting` tinyint NOT NULL,
  `OmzetIncBtwIncKorting` tinyint NOT NULL,
  `StatusId` tinyint NOT NULL,
  `FactuurId` tinyint NOT NULL,
  `RegelReferentie` tinyint NOT NULL,
  `BoekStatusBijBestelling` tinyint NOT NULL,
  `Reserveringen` tinyint NOT NULL
) ENGINE=MyISAM */;

--
-- Table structure for table `Correcties`
--

CREATE TABLE `Correcties` (
  `Ean` char(13) NOT NULL,
  `Punten` int(11) DEFAULT NULL,
  `Correctie` int(11) DEFAULT NULL,
  PRIMARY KEY (`Ean`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `DevLog`
--

CREATE TABLE `DevLog` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Log` text,
  `DT` datetime DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `GeprinteVoorraad`
--

CREATE TABLE `GeprinteVoorraad` (
  `Ean` char(13) CHARACTER SET latin1 NOT NULL,
  `GeprintAantal` int(11) NOT NULL DEFAULT '0',
  `NogNietGeprint` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`Ean`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8;

--
-- Table structure for table `InklaarLog`
--

CREATE TABLE `InklaarLog` (
  `DT` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
  `EAN` char(13) NOT NULL,
  `Listprijs` decimal(7,2) DEFAULT NULL,
  `Valuta` char(8) DEFAULT NULL,
  `KortingMP` decimal(5,2) DEFAULT NULL,
  PRIMARY KEY (`DT`,`EAN`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`thijs`@`%`*/ /*!50003 TRIGGER Voorraadbeheer.before_insert_inklaarlog BEFORE iNSERT ON Voorraadbeheer.InklaarLog
FOR EACH ROW BEGIN
	DECLARE kortingmp_ncoi DECIMAL(5,2);
	IF NEW.KortingMP IS NOT NULL THEN
		SELECT U.Kortingmp_NCOI INTO kortingmp_ncoi
		FROM Manpo.Boeken B
			JOIN Manpo.Uitgevers U USING ( UitgeverID )
		WHERE B.EAN = NEW.EAN;
		
		IF kortingmp_ncoi IS NOT NULL AND NEW.KortingMP = kortingmp_ncoi THEN
			SET NEW.KortingMP = null;
		END IF;
	END IF;
END */;;
DELIMITER ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`thijs`@`%`*/ /*!50003 TRIGGER `after_insert_inklaarlog` AFTER INSERT ON `InklaarLog` 
    FOR EACH ROW BEGIN
	INSERT INTO Voorraadbeheer.InklaarPrijs ( EAN, DT, Listprijs, Valuta, KortingMP )
		VALUES ( NEW.EAN, NEW.DT, NEW.Listprijs, NEW.Valuta, NEW.KortingMP )
		ON DUPLICATE KEY UPDATE DT=VALUES(DT),
			Listprijs = IFNULL(VALUES(Listprijs), Listprijs),
			Valuta = IFNULL(VALUES(Valuta), Valuta),
			KortingMP = IFNULL(VALUES(KortingMP), KortingMP);
END */;;
DELIMITER ;

--
-- Table structure for table `InklaarPrijs`
--

CREATE TABLE `InklaarPrijs` (
  `EAN` char(13) NOT NULL,
  `DT` timestamp(3) NULL DEFAULT NULL,
  `Listprijs` decimal(7,2) DEFAULT NULL,
  `Valuta` char(8) DEFAULT NULL,
  `KortingMP` decimal(5,2) DEFAULT NULL,
  PRIMARY KEY (`EAN`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `Inkoop`
--

CREATE TABLE `Inkoop` (
  `Ean` char(13) CHARACTER SET utf8 NOT NULL,
  `Titel` varchar(255) DEFAULT NULL,
  `Boekstatus` int(11) DEFAULT NULL,
  `ROL` int(11) DEFAULT NULL,
  `ROQ` int(11) DEFAULT NULL,
  `FysiekeVoorraad` int(11) DEFAULT NULL,
  `BeschikbareVoorraad` int(11) DEFAULT NULL,
  `Onderweg` int(11) DEFAULT NULL,
  `BestelAdvies` int(11) DEFAULT NULL,
  PRIMARY KEY (`Ean`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `Jongbloed_overname`
--

CREATE TABLE `Jongbloed_overname` (
  `EAN` char(13) CHARACTER SET latin1 NOT NULL,
  `DT` datetime NOT NULL,
  `Mutatie` int(11) NOT NULL DEFAULT '0',
  KEY `EAN` (`EAN`),
  KEY `DT` (`DT`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `Jongbloed_overname_copy`
--

CREATE TABLE `Jongbloed_overname_copy` (
  `EAN` char(13) CHARACTER SET latin1 NOT NULL,
  `DT` datetime NOT NULL,
  `Mutatie` int(11) NOT NULL DEFAULT '0',
  KEY `EAN` (`EAN`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `LaatstIngeklaard`
--

CREATE TABLE `LaatstIngeklaard` (
  `Ean` char(13) NOT NULL,
  `LaatstIngeklaard` date DEFAULT NULL,
  PRIMARY KEY (`Ean`),
  KEY `LaatstIngeklaard` (`LaatstIngeklaard`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `LaatstIngekocht`
--

CREATE TABLE `LaatstIngekocht` (
  `Ean` char(13) NOT NULL,
  `LaatstIngekocht` date DEFAULT NULL,
  PRIMARY KEY (`Ean`),
  KEY `LaatstIngeklaard` (`LaatstIngekocht`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `LaatstVerkocht`
--

CREATE TABLE `LaatstVerkocht` (
  `Ean` char(13) NOT NULL,
  `LaatstVerkocht` date DEFAULT NULL,
  PRIMARY KEY (`Ean`),
  KEY `LaatstIngeklaard` (`LaatstVerkocht`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `LangeTermijnTellingen`
--

CREATE TABLE `LangeTermijnTellingen` (
  `Ean` char(13) NOT NULL,
  `DB` char(3) NOT NULL DEFAULT '',
  `Aantal` int(11) DEFAULT NULL,
  PRIMARY KEY (`Ean`,`DB`),
  KEY `Ean` (`Ean`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `MutatieAlerts`
--

CREATE TABLE `MutatieAlerts` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Type` enum('voorraadmutatie','voorraadreservering') DEFAULT NULL,
  `EAN` char(13) DEFAULT NULL,
  `DT` datetime NOT NULL,
  `VoorraadmutatieId` int(11) DEFAULT NULL,
  `VoorraadreserveringId` int(11) DEFAULT NULL,
  `Gebruiker` char(2) DEFAULT NULL,
  `Gemaild` int(1) DEFAULT '0',
  PRIMARY KEY (`Id`),
  KEY `Gemaild` (`Gemaild`),
  KEY `Soort-van-ID` (`EAN`,`DT`)
) ENGINE=InnoDB AUTO_INCREMENT=11563 DEFAULT CHARSET=latin1;

--
-- Table structure for table `NietLeverbaar`
--

CREATE TABLE `NietLeverbaar` (
  `Ean` char(13) CHARACTER SET utf8 NOT NULL,
  `Titel` varchar(255) DEFAULT NULL,
  `Boekstatus` int(11) DEFAULT NULL,
  `ROL` int(11) DEFAULT NULL,
  `ROQ` int(11) DEFAULT NULL,
  `FysiekeVoorraad` int(11) DEFAULT NULL,
  `BeschikbareVoorraad` int(11) DEFAULT NULL,
  `Onderweg` int(11) DEFAULT NULL,
  `BestelAdvies` int(11) DEFAULT NULL,
  PRIMARY KEY (`Ean`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `NietRecentVerkocht`
--

CREATE TABLE `NietRecentVerkocht` (
  `Ean` char(13) NOT NULL,
  PRIMARY KEY (`Ean`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `NietRecentVerkochtPerDatabase`
--

CREATE TABLE `NietRecentVerkochtPerDatabase` (
  `DB` char(20) NOT NULL,
  `Ean` char(13) NOT NULL,
  `DT` date DEFAULT NULL,
  PRIMARY KEY (`Ean`,`DB`),
  KEY `DT` (`DT`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `OpenPerOrderregel`
--

CREATE TABLE `OpenPerOrderregel` (
  `Administratie` char(50) NOT NULL,
  `OrderregelId` int(11) NOT NULL,
  `Ean` char(13) DEFAULT NULL,
  `Saldo` int(11) NOT NULL,
  `EerdereReserveringen` int(11) NOT NULL,
  `DT` datetime NOT NULL,
  PRIMARY KEY (`Administratie`,`OrderregelId`),
  KEY `Ean` (`Ean`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `PlankVoorraad`
--

CREATE TABLE `PlankVoorraad` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Aantal` int(11) DEFAULT NULL,
  `Ean` varchar(13) DEFAULT NULL,
  `DTGewijzigd` datetime DEFAULT NULL,
  `DTAangemaakt` datetime DEFAULT NULL,
  `Gebruiker` char(5) DEFAULT NULL,
  PRIMARY KEY (`Id`),
  UNIQUE KEY `Ean` (`Ean`)
) ENGINE=InnoDB AUTO_INCREMENT=41423 DEFAULT CHARSET=latin1;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`pieter`@`%`*/ /*!50003 TRIGGER `after_insert_plankVoorraad` AFTER INSERT ON `Voorraadbeheer`.`PlankVoorraad` FOR EACH ROW BEGIN
	CALL verwerk_plankVoorraad_wijziging(NEW.Ean,NEW.Aantal);	
    END */;;
DELIMITER ;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET utf8 COLLATE utf8_general_ci ;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`pieter`@`%`*/ /*!50003 TRIGGER `after_update_plankVoorraad` AFTER UPDATE ON `Voorraadbeheer`.`PlankVoorraad` FOR EACH ROW BEGIN
	
	CALL verwerk_plankVoorraad_wijziging(NEW.Ean,NEW.Aantal);	
	
	
	INSERT IGNORE INTO `PlankVoorraadLog` SET 
		LogGebruiker=@initials,
		DTLog = NOW(),
		Id = OLD.Id,
		Aantal = OLD.Aantal,
		Ean = OLD.Ean,
		DTGewijzigd = OLD.DTGewijzigd,
		DTAangemaakt = OLD.DTAangemaakt,
		Gebruiker = OLD.Gebruiker;	
    END */;;
DELIMITER ;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET utf8 COLLATE utf8_general_ci ;

--
-- Table structure for table `PlankVoorraadLog`
--

CREATE TABLE `PlankVoorraadLog` (
  `LogId` int(11) NOT NULL AUTO_INCREMENT,
  `LogGebruiker` char(5) DEFAULT NULL,
  `DTLog` datetime DEFAULT NULL,
  `Id` int(11) DEFAULT '0',
  `Aantal` int(11) DEFAULT NULL,
  `Ean` varchar(13) DEFAULT NULL,
  `DTGewijzigd` datetime DEFAULT NULL,
  `DTAangemaakt` datetime DEFAULT NULL,
  `Gebruiker` char(5) DEFAULT NULL,
  PRIMARY KEY (`LogId`)
) ENGINE=InnoDB AUTO_INCREMENT=32407 DEFAULT CHARSET=latin1;

--
-- Table structure for table `ReserveringenPerEan`
--

CREATE TABLE `ReserveringenPerEan` (
  `Administratie` enum('Managementboek','Computerboek','Juridischboek','Test') NOT NULL,
  `Ean` char(13) NOT NULL,
  `Aantal` int(11) NOT NULL,
  PRIMARY KEY (`Ean`,`Administratie`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`sander`@`%`*/ /*!50003 TRIGGER `after_insert_reserveringenperean` AFTER INSERT ON `ReserveringenPerEan` 
    FOR EACH ROW BEGIN
	DECLARE rv INT;
	SET rv = bereken_reservering( NEW.Ean );	
    END */;;
DELIMITER ;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET utf8 COLLATE utf8_general_ci ;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`sander`@`%`*/ /*!50003 TRIGGER `Voorraadbeheer`.`after_update_reserveringenperean` AFTER UPDATE ON `Voorraadbeheer`.`ReserveringenPerEan`
    FOR EACH ROW BEGIN
	DECLARE rv INT;
	SET rv = bereken_reservering( NEW.Ean );
    END */;;
DELIMITER ;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET utf8 COLLATE utf8_general_ci ;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`sander`@`%`*/ /*!50003 TRIGGER `Voorraadbeheer`.`after_delete_reserveringenperean` AFTER DELETE ON `Voorraadbeheer`.`ReserveringenPerEan`
    FOR EACH ROW BEGIN
	DECLARE rv INT;
	SET rv = bereken_reservering( OLD.Ean );
    END */;;
DELIMITER ;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET utf8 COLLATE utf8_general_ci ;

--
-- Table structure for table `RoqAndRol`
--

CREATE TABLE `RoqAndRol` (
  `Ean` char(13) NOT NULL,
  `ROL` int(3) unsigned NOT NULL,
  `ROQ` int(3) unsigned NOT NULL,
  `Minimum` int(2) unsigned NOT NULL,
  `Correctie` int(1) unsigned NOT NULL,
  `OrigineleRoq` int(3) unsigned NOT NULL,
  PRIMARY KEY (`Ean`),
  KEY `ROL` (`ROL`),
  KEY `ROQ` (`ROQ`),
  KEY `Correctie` (`Correctie`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `TempExtraVoorraad`
--

CREATE TABLE `TempExtraVoorraad` (
  `Ean` char(13) CHARACTER SET utf8 NOT NULL,
  `Aantal` int(11) NOT NULL,
  `DT` datetime NOT NULL,
  PRIMARY KEY (`Ean`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `VBMIH_tekst_cache`
--

CREATE TABLE `VBMIH_tekst_cache` (
  `EAN` char(13) NOT NULL DEFAULT '',
  `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_vanwege` varchar(50) DEFAULT NULL,
  `expires` timestamp NULL DEFAULT NULL,
  `Tekst` varchar(255) DEFAULT NULL,
  `Knoptekst` varchar(50) DEFAULT NULL,
  `Dagen` int(11) DEFAULT NULL,
  `DT` datetime DEFAULT NULL,
  `Ref_EAN` char(13) DEFAULT NULL,
  `Voorraad` int(11) DEFAULT NULL,
  PRIMARY KEY (`EAN`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='BOE';

--
-- Table structure for table `VBMIH_tekst_cache_dev`
--

CREATE TABLE `VBMIH_tekst_cache_dev` (
  `EAN` char(13) NOT NULL DEFAULT '',
  `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_vanwege` varchar(50) DEFAULT NULL,
  `expires` timestamp NULL DEFAULT NULL,
  `Tekst` varchar(255) DEFAULT NULL,
  `Knoptekst` varchar(50) DEFAULT NULL,
  `Dagen` int(11) DEFAULT NULL,
  `DT` datetime DEFAULT NULL,
  `Ref_EAN` char(13) DEFAULT NULL,
  `Voorraad` int(11) DEFAULT NULL,
  PRIMARY KEY (`EAN`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Last updated at 2014-08-22 15:38:26';

--
-- Table structure for table `VBMIH_tekst_cache_k_dennis`
--

CREATE TABLE `VBMIH_tekst_cache_k_dennis` (
  `EAN` char(13) NOT NULL DEFAULT '',
  `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_vanwege` varchar(50) DEFAULT NULL,
  `expires` timestamp NULL DEFAULT NULL,
  `Tekst` varchar(255) DEFAULT NULL,
  `Knoptekst` varchar(50) DEFAULT NULL,
  `Dagen` int(11) DEFAULT NULL,
  `DT` datetime DEFAULT NULL,
  `Ref_EAN` char(13) DEFAULT NULL,
  `Voorraad` int(11) DEFAULT NULL,
  PRIMARY KEY (`EAN`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Last updated at 2014-08-22 15:34:51';

--
-- Table structure for table `VBMIH_tekst_cache_k_sander`
--

CREATE TABLE `VBMIH_tekst_cache_k_sander` (
  `EAN` char(13) NOT NULL DEFAULT '',
  `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_vanwege` varchar(50) DEFAULT NULL,
  `expires` timestamp NULL DEFAULT NULL,
  `Tekst` varchar(255) DEFAULT NULL,
  `Knoptekst` varchar(50) DEFAULT NULL,
  `Dagen` int(11) DEFAULT NULL,
  `DT` datetime DEFAULT NULL,
  `Ref_EAN` char(13) DEFAULT NULL,
  `Voorraad` int(11) DEFAULT NULL,
  PRIMARY KEY (`EAN`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Last updated at 2014-08-25 18:01:32';

--
-- Table structure for table `VBMIH_tekst_cache_k_thijs`
--

CREATE TABLE `VBMIH_tekst_cache_k_thijs` (
  `EAN` char(13) NOT NULL DEFAULT '',
  `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_vanwege` varchar(50) DEFAULT NULL,
  `expires` timestamp NULL DEFAULT NULL,
  `Tekst` varchar(255) DEFAULT NULL,
  `Knoptekst` varchar(50) DEFAULT NULL,
  `Dagen` int(11) DEFAULT NULL,
  `DT` datetime DEFAULT NULL,
  `Ref_EAN` char(13) DEFAULT NULL,
  `Voorraad` int(11) DEFAULT NULL,
  PRIMARY KEY (`EAN`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Last updated at 2014-08-22 15:34:51';

--
-- Table structure for table `VerkopenPerDagPerSite`
--

CREATE TABLE `VerkopenPerDagPerSite` (
  `DB` char(3) NOT NULL DEFAULT '',
  `DT` date NOT NULL DEFAULT '0000-00-00',
  `Ean` char(13) NOT NULL,
  `Aantal` int(11) DEFAULT NULL,
  `GecorrigeerdAantal` int(11) DEFAULT NULL,
  `MaxAantal` int(11) DEFAULT NULL,
  `Minimumvoorraad` int(11) NOT NULL DEFAULT '0',
  `FBoek` decimal(10,2) DEFAULT NULL,
  `FDT` decimal(10,2) DEFAULT NULL,
  `FLocatie` decimal(10,2) DEFAULT NULL,
  `FMaand` decimal(10,2) DEFAULT NULL,
  `DagenOud` int(11) DEFAULT NULL,
  PRIMARY KEY (`Ean`,`DB`,`DT`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `Voorraad`
--

CREATE TABLE `Voorraad` (
  `Ean` char(13) CHARACTER SET latin1 NOT NULL,
  `GereserveerdeVoorraad` int(11) NOT NULL DEFAULT '0',
  `FysiekeVoorraad` int(11) NOT NULL DEFAULT '0',
  `BeschikbareVoorraad` int(11) NOT NULL DEFAULT '0',
  `DT` datetime DEFAULT NULL,
  PRIMARY KEY (`Ean`),
  KEY `DT` (`DT`),
  KEY `FysiekeVoorraad` (`FysiekeVoorraad`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`sander`@`%`*/ /*!50003 TRIGGER `Voorraadbeheer`.`before_update_voorraad` BEFORE UPDATE
    ON `Voorraadbeheer`.`Voorraad`
    FOR EACH ROW BEGIN
	SET NEW.BeschikbareVoorraad = NEW.FysiekeVoorraad - NEW.GereserveerdeVoorraad;
    END */;;
DELIMITER ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`thijs`@`%`*/ /*!50003 TRIGGER `after_update_voorraad` AFTER UPDATE ON `Voorraad` 
    FOR EACH ROW BEGIN
	
		DECLARE r_Tekst VARCHAR(255) CHARSET UTF8;
		DECLARE r_Knoptekst VARCHAR(50) CHARSET UTF8;
		DECLARE r_Dagen INT(11);
		DECLARE r_DT DATETIME;
		DECLARE r_EAN CHAR(13) CHARSET UTF8;
		DECLARE r_Voorraad INT;
		
		IF IFNULL( @skip_vbmih_cache_update, 0 ) = 0 THEN
			CALL Voorraadbeheer.calc_vbmih_tekst( NEW.EAN, 1, "voorraadmutatie",
				r_Tekst, r_Knoptekst, r_Dagen, r_DT, r_EAN, r_Voorraad );
		END IF;
	END */;;
DELIMITER ;

--
-- Temporary table structure for view `VoorraadInclusiefCB`
--

/*!50001 DROP VIEW IF EXISTS `VoorraadInclusiefCB`*/;
/*!50001 CREATE TABLE `VoorraadInclusiefCB` (
  `Ean` tinyint NOT NULL,
  `GereserveerdeVoorraad` tinyint NOT NULL,
  `FysiekeVoorraad` tinyint NOT NULL,
  `FysiekeMBVoorraad` tinyint NOT NULL,
  `FysiekeCBVoorraad` tinyint NOT NULL,
  `BeschikbareVoorraad` tinyint NOT NULL,
  `BeschikbareMBVoorraad` tinyint NOT NULL,
  `BeschikbareCBVoorraad` tinyint NOT NULL
) ENGINE=MyISAM */;

--
-- Table structure for table `Voorraadmutaties`
--

CREATE TABLE `Voorraadmutaties` (
  `odie` int(11) DEFAULT NULL,
  `Ean` varchar(13) NOT NULL DEFAULT '',
  `Mutatie` int(11) DEFAULT NULL,
  `DT` datetime(3) NOT NULL DEFAULT '0000-00-00 00:00:00.000',
  `Orderregelid` int(11) DEFAULT NULL,
  `Type` enum('ingepakt','ingeklaard','gecorrigeerd','uitgeklaard','hertelling','overname-jongbloed','ter-info') DEFAULT NULL,
  `Voorraad` int(11) DEFAULT NULL,
  `Gebruiker` char(5) DEFAULT NULL,
  `PlankVoorraad` int(11) DEFAULT NULL,
  `GereserveerdeVoorraad` int(11) DEFAULT NULL,
  `VoorraadOud` int(11) DEFAULT NULL,
  `BeschikbareVoorraad` int(11) DEFAULT NULL,
  `Bestellingid` int(11) DEFAULT NULL,
  `Administratie` varchar(50) NOT NULL,
  `OrigineelBestellingId` int(11) DEFAULT NULL,
  `Omschrijving` varchar(255) DEFAULT NULL,
  `Reden` enum('cadeau','beschadigd','nieuw','retour uitgever','eigen gebruik','recensie','boekevent','overige','ncoi','jongbloed-overname','voorraadaanpassing','aantal gewijzigd','aantal backorder gewijzigd') DEFAULT NULL,
  PRIMARY KEY (`Ean`,`DT`),
  KEY `orderregelid` (`Orderregelid`),
  KEY `DT` (`DT`),
  KEY `Type` (`Type`),
  KEY `ean` (`Ean`,`DT`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`sander`@`%`*/ /*!50003 TRIGGER `before_insert_voorraadmutaties` BEFORE INSERT ON `Voorraadmutaties` 
    FOR EACH ROW BEGIN
	DECLARE huidigeVoorraad,gereserveerdeVoorraad INT(11);
	IF NEW.Type = 'ter-info' THEN
		SET NEW.VoorraadOud = NULL;
		SET NEW.Plankvoorraad = NULL;
		SET NEW.GereserveerdeVoorraad = NULL;
		SET NEW.Voorraad = NULL;
		SET NEW.BeschikbareVoorraad = NULL;
	ELSE
		SELECT IFNULL(FysiekeVoorraad,0), IFNULL(GereserveerdeVoorraad,0) INTO huidigeVoorraad, gereserveerdeVoorraad FROM Voorraad WHERE Ean = NEW.Ean;
		SET huidigeVoorraad = IFNULL(huidigeVoorraad,0);
		SET gereserveerdeVoorraad = IFNULL(gereserveerdeVoorraad,0);
		SET NEW.VoorraadOud   		= huidigeVoorraad;
		SET NEW.Plankvoorraad 		= huidigeVoorraad;	
		SET NEW.GereserveerdeVoorraad 	= gereserveerdeVoorraad;	
		SET NEW.Voorraad 		= huidigeVoorraad + NEW.Mutatie;
		SET NEW.BeschikbareVoorraad 	= huidigeVoorraad + NEW.Mutatie - gereserveerdeVoorraad;
	END IF;
END */;;
DELIMITER ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`pieter`@`%`*/ /*!50003 TRIGGER `after_insert_voorraadmutaties` AFTER INSERT ON `Voorraadmutaties` 
    FOR EACH ROW BEGIN
	IF NEW.Type != 'ter-info' THEN
		INSERT INTO Voorraad SET
			Ean                     = NEW.Ean,
			GereserveerdeVoorraad   = NEW.GereserveerdeVoorraad,
			FysiekeVoorraad         = NEW.Voorraad,
			BeschikbareVoorraad     = NEW.BeschikbareVoorraad,
			DT=NOW()
		ON DUPLICATE KEY UPDATE 
			FysiekeVoorraad         = NEW.Voorraad,
			BeschikbareVoorraad     = NEW.BeschikbareVoorraad,
			DT=NOW();
		IF NEW.Voorraad < 0 THEN
			INSERT IGNORE INTO MutatieAlerts(`Type`,Ean,DT,Gebruiker)
			VALUES ('voorraadmutatie', NEW.Ean, NEW.DT, @initials);
		END IF;
	END IF;
END */;;
DELIMITER ;

--
-- Table structure for table `Voorraadreserveringen`
--

CREATE TABLE `Voorraadreserveringen` (
  `geenidee` int(11) DEFAULT NULL,
  `Ean` varchar(13) NOT NULL DEFAULT '',
  `Mutatie` int(11) DEFAULT NULL,
  `DT` datetime(3) NOT NULL DEFAULT '0000-00-00 00:00:00.000',
  `Orderregelid` int(11) DEFAULT NULL,
  `Gebruiker` char(5) DEFAULT NULL,
  `Voorraad` int(11) DEFAULT NULL,
  `Debug` varchar(255) DEFAULT NULL,
  `Klantid` int(11) DEFAULT NULL,
  `Type` enum('besteld','geannuleerd','gecorrigeerd','ingepakt','uit backorder','toegevoegd','gecrediteerd','verwijderd','niet inpakken','niet inpakken ongedaan','afgesloten','besteld ongedaan','aantal gewijzigd','backorder aantal gewijzigd') DEFAULT NULL,
  `Bestellingid` int(11) DEFAULT NULL,
  `VoorraadOud` int(11) DEFAULT NULL,
  `FysiekeVoorraad` int(11) DEFAULT NULL,
  `BeschikbareVoorraad` int(11) DEFAULT NULL,
  `Administratie` varchar(50) NOT NULL,
  `OrigineelBestellingId` int(11) DEFAULT NULL,
  `Omschrijving` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`Ean`,`DT`),
  KEY `Ean` (`Ean`),
  KEY `Orderregelid` (`Orderregelid`),
  KEY `DT` (`DT`),
  KEY `Soort-van-ID` (`Ean`,`DT`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`pieter`@`%`*/ /*!50003 TRIGGER `before_insert_voorraadreserveringen` BEFORE INSERT ON `Voorraadreserveringen` 
    FOR EACH ROW BEGIN
	
	DECLARE huidigeVoorraad INT(11);
	SELECT gereserveerdeVoorraad(NEW.Ean) into huidigeVoorraad;
	
	
	SET NEW.Voorraad = huidigeVoorraad + NEW.Mutatie;
	
	
	SET NEW.VoorraadOud = huidigeVoorraad;
	
	
	SET NEW.FysiekeVoorraad = voorraad(NEW.Ean);
	
	
	SET NEW.BeschikbareVoorraad = NEW.FysiekeVoorraad - NEW.Voorraad;
    END */;;
DELIMITER ;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET utf8 COLLATE utf8_general_ci ;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`pieter`@`%`*/ /*!50003 TRIGGER `after_insert_voorraadreserveringen` AFTER INSERT ON `Voorraadreserveringen` 
    FOR EACH ROW BEGIN
	DECLARE mySaldo INT;    
    
	
	
	
    END */;;
DELIMITER ;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET utf8 COLLATE utf8_general_ci ;

--
-- Dumping routines for database 'Voorraadbeheer'
--
/*!50003 DROP FUNCTION IF EXISTS `artikelOmschrijving` */;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `artikelOmschrijving`(myEan VARCHAR(13)) RETURNS varchar(255) CHARSET latin1
    READS SQL DATA
BEGIN
	DECLARE omschrijving VARCHAR(255);
	
	/* Zoek in Managementboek */
	SELECT Titel INTO omschrijving FROM Managementboek_Boeken.Boeken B WHERE `Ean` = myEan;
	
	IF omschrijving IS NULL THEN
		/* Zoek in Computerboek */
		SELECT Titel INTO omschrijving FROM Computerboek_Boeken.Boeken B WHERE `Ean` = myEan;	
	END IF;
	
	IF omschrijving IS NULL THEN 
		SET omschrijving = '';
	END IF;
	
	RETURN omschrijving;
END ;;
DELIMITER ;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `bereken_reservering` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `bereken_reservering`( myEan CHAR(13) ) RETURNS int(11)
    MODIFIES SQL DATA
BEGIN
	DECLARE reserveringen INT;
	
	-- TOTALE aantal reserveringen. (Dus niet een delta ofzo)
	SELECT IFNULL( SUM( Aantal ), 0 ) INTO reserveringen FROM ReserveringenPerEan WHERE Ean = myEan;
	
	INSERT INTO Voorraad SET Ean = myEan, 
		GereserveerdeVoorraad = reserveringen, 
		FysiekeVoorraad = 0, 
		BeschikbareVoorraad = 0 - reserveringen, 
		DT = NOW() 
	   ON DUPLICATE KEY UPDATE 
		GereserveerdeVoorraad = reserveringen, 
		BeschikbareVoorraad = FysiekeVoorraad - reserveringen, 
		DT = NOW();
	
	RETURN reserveringen;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `beschikbareVoorraad` */;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `beschikbareVoorraad`( inEAN CHAR(13) ) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE RV INT;
	
	SELECT BeschikbareVoorraad INTO RV FROM Voorraad WHERE Ean = inEan;
	RETURN RV;
    END ;;
DELIMITER ;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `geldig_tot` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `geldig_tot`( i_Tijdstip TIME ) RETURNS timestamp
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 16:07:47'
BEGIN

	DECLARE t_rv TIMESTAMP;

	IF CURTIME() < i_Tijdstip AND WEEKDAY(CURDATE()) < 5
		AND NOT Voorraadbeheer.is_feestdag( CURDATE() )
	THEN

		SET t_rv = Voorraadbeheer.werkdag_tijdstip( 0, i_Tijdstip );

	ELSE

		SET t_rv = Voorraadbeheer.werkdag_tijdstip( 0, '00:00:00' );

	END IF;

	RETURN t_rv;

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `geldig_tot_dev` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `geldig_tot_dev`( i_Tijdstip TIME ) RETURNS timestamp
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 11:23:25'
BEGIN

	DECLARE t_rv TIMESTAMP;

	IF CURTIME() < i_Tijdstip AND WEEKDAY(CURDATE()) < 5
		AND NOT Voorraadbeheer.is_feestdag_dev( CURDATE() )
	THEN

		SET t_rv = Voorraadbeheer.werkdag_tijdstip_dev( 0, i_Tijdstip );

	ELSE

		SET t_rv = Voorraadbeheer.werkdag_tijdstip_dev( 0, '00:00:00' );

	END IF;

	RETURN t_rv;

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `geldig_tot_k_dennis` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `geldig_tot_k_dennis`( i_Tijdstip TIME ) RETURNS timestamp
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-21 10:11:52'
BEGIN

	DECLARE t_rv TIMESTAMP;

	IF CURTIME() < i_Tijdstip AND WEEKDAY(CURDATE()) < 5
		AND NOT Voorraadbeheer.is_feestdag_k_dennis( CURDATE() )
	THEN

		SET t_rv = Voorraadbeheer.werkdag_tijdstip_k_dennis( 0, i_Tijdstip );

	ELSE

		SET t_rv = Voorraadbeheer.werkdag_tijdstip_k_dennis( 0, '00:00:00' );

	END IF;

	RETURN t_rv;

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `geldig_tot_k_sander` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `geldig_tot_k_sander`( i_Tijdstip TIME ) RETURNS timestamp
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-24 10:22:54'
BEGIN

	DECLARE t_rv TIMESTAMP;

	IF CURTIME() < i_Tijdstip AND WEEKDAY(CURDATE()) < 5
		AND NOT Voorraadbeheer.is_feestdag_k_sander( CURDATE() )
	THEN

		SET t_rv = Voorraadbeheer.werkdag_tijdstip_k_sander( 0, i_Tijdstip );

	ELSE

		SET t_rv = Voorraadbeheer.werkdag_tijdstip_k_sander( 0, '00:00:00' );

	END IF;

	RETURN t_rv;

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `geldig_tot_k_thijs` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `geldig_tot_k_thijs`( i_Tijdstip TIME ) RETURNS timestamp
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 11:05:06'
BEGIN

	DECLARE t_rv TIMESTAMP;

	IF CURTIME() < i_Tijdstip AND WEEKDAY(CURDATE()) < 5
		AND NOT Voorraadbeheer.is_feestdag_k_thijs( CURDATE() )
	THEN

		SET t_rv = Voorraadbeheer.werkdag_tijdstip_k_thijs( 0, i_Tijdstip );

	ELSE

		SET t_rv = Voorraadbeheer.werkdag_tijdstip_k_thijs( 0, '00:00:00' );

	END IF;

	RETURN t_rv;

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `geprinte_voorraad` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `geprinte_voorraad`( myEan CHAR(13) ) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE M INT;
	SELECT IFNULL( SUM( Aantal - AantalGeleverd ), 0 ) INTO M
	FROM Managementboek_Klanten.OrderregelStatusPlat P
		JOIN Managementboek_Klanten.Bestellingen USING ( Id )
		JOIN Managementboek_Klanten.OrderkopStatusPlat KP USING ( BestellingId )
	WHERE ( P.vink_open = 1 OR P.vink_magazijn = 1 )
		AND P.bevestigd = 1
		AND ( P.exact_export OR P.pakbon_geprint = 1 OR P.factuur_geprint = 1 OR P.gefactureerd = 1 OR P.uit_backorder_gehaald = 1 OR KP.leveren_via_cb = 1 )
		AND ( P.niet_inpakken = 0 )
		AND ( P.ingepakt = 0 )
		AND P.geannuleerd = 0
		AND Ean = myEan;	
	RETURN M;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `gereserveerdeVoorraad` */;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `gereserveerdeVoorraad`(eanInput VARCHAR(13)) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE huidigeGereserveerdeVoorraad INT(11) DEFAULT 0;	
	-- SELECT IFNULL(Voorraad,0) INTO huidigeGereserveerdeVoorraad FROM Voorraadreserveringen WHERE `Ean`=eanInput ORDER BY Id DESC LIMIT 0,1;
	SELECT IFNULL( SUM( Aantal ), 0 ) INTO huidigeGereserveerdeVoorraad FROM ReserveringenPerEan WHERE Ean = eanInput AND Administratie IN ( 'Managementboek', 'Juridischboek', 'Computerboek' );
	RETURN huidigeGereserveerdeVoorraad;
END ;;
DELIMITER ;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `heeftVoorraadMutatie` */;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `heeftVoorraadMutatie`(myAdministratie VARCHAR(20),myId INT(11)) RETURNS int(1)
    MODIFIES SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE myEan VARCHAR(13);
	IF myAdministratie = 'Test' THEN
		SELECT Ean INTO myEan
			FROM Test_Voorraadbeheer.Voorraadmutaties V
			WHERE 
				V.Orderregelid=myId
			ORDER BY Id DESC LIMIT 0,1;			
		IF myEan IS NULL THEN
			RETURN 0;
		ELSE
			IF Test_Voorraadbeheer.voorraad(myEan) > 0 THEN
				RETURN 1;
			ELSE
				RETURN 0;
			END IF;
		END IF;
	ELSE
		SELECT Ean INTO myEan
			FROM Voorraadbeheer.Voorraadmutaties V
			WHERE 
				V.Orderregelid=myId
			ORDER BY Id DESC LIMIT 0,1;			
		IF myEan IS NULL THEN
			RETURN 0;
		ELSE
			IF Voorraadbeheer.voorraad(myEan) > 0 THEN
				RETURN 1;
			ELSE
				RETURN 0;
			END IF;
		END IF;
	END IF;	
    END ;;
DELIMITER ;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `heeftVoorraadReservering` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `heeftVoorraadReservering`(myAdministratie VARCHAR(20),myId INT(11)) RETURNS int(1)
    MODIFIES SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE myEan VARCHAR(13);
	IF myAdministratie = 'Test' THEN
		SELECT Ean into myEan
			FROM Test_Voorraadbeheer.Voorraadreserveringen V
			WHERE 
				V.Orderregelid=myId
			ORDER BY DT DESC LIMIT 0,1;
			
		IF myEan IS NULL THEN
			return 0;
		ELSE
			RETURN 1;
			/*IF Test_Voorraadbeheer.gereserveerdeVoorraad(myEan) > 0 THEN
				RETURN 1;
			ELSE
				RETURN 0;
			END IF;*/
		END IF;
	ELSE
		SELECT Ean INTO myEan
			FROM Voorraadbeheer.Voorraadreserveringen V
			WHERE 
				V.Orderregelid=myId
			ORDER BY DT DESC LIMIT 0,1;
			
		IF myEan IS NULL THEN
			RETURN 0;
		ELSE
			RETURN 1;
			/*IF Voorraadbeheer.gereserveerdeVoorraad(myEan) > 0 THEN
				RETURN 1;
			ELSE
				RETURN 0;
			END IF;*/
		END IF;
	END IF;	
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `isNcoiOrder` */;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `isNcoiOrder`(myBestellingid INT(11),myAdministratie VARCHAR(20)) RETURNS tinyint(1)
    READS SQL DATA
BEGIN
	DECLARE myHerkomst VARCHAR(255);
	IF myAdministratie <> 'Managementboek' THEN
		RETURN 0;
	ELSE
		SELECT Herkomst INTO myHerkomst FROM Managementboek_Klanten.BestellingAll 
			WHERE Bestellingid=myBestellingid;
			
		IF myHerkomst = 'NCOI' THEN
			RETURN 1;
		ELSE
			RETURN 0;
		END IF;
	END IF;
END ;;
DELIMITER ;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `isReserveringVrijgegeven` */;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `isReserveringVrijgegeven`(myAdministratie VARCHAR(20),myId INT(11)) RETURNS int(1)
    MODIFIES SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE mySum INT(11);
	IF myAdministratie = 'Test' THEN		
		SELECT SUM(V.Mutatie) into mySum
			FROM Test_Voorraadbeheer.Voorraadreserveringen V
			WHERE V.Orderregelid=myId;	
			
		IF mySum = 0 THEN /*reservering op de orderregel is vrij*/
			return 1;
		ELSE /*reservering op de orderregel is nog open*/
			RETURN 0;
		END IF;
	ELSE
		SELECT SUM(V.Mutatie) INTO mySum
			FROM Voorraadbeheer.Voorraadreserveringen V
			WHERE V.Orderregelid=myId;	
			
		IF mySum = 0 THEN /*reservering op de orderregel is vrij*/
			RETURN 1;
		ELSE /*reservering op de orderregel is nog open*/
			RETURN 0;
		END IF;
	END IF;	
    END ;;
DELIMITER ;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `is_feestdag` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `is_feestdag`( i_dt DATE ) RETURNS int(11)
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 16:07:47'
BEGIN

	DECLARE _D, _M, _Y, _W INT;
	DECLARE PASEN DATE;

	SET _D = DAY(i_dt);
	SET _M = MONTH(i_dt);
	SET _Y = YEAR(i_dt);
	SET _W = WEEKDAY(i_dt);

	IF _M =  1 AND _D =  1  THEN  RETURN 1;  END IF; 
	IF _M =  5 AND _D =  5  THEN  RETURN 1;  END IF; 
	
	IF _M = 12 AND _D = 25  THEN  RETURN 1;  END IF; 
	IF _M = 12 AND _D = 26  THEN  RETURN 1;  END IF; 
	IF _M = 12 AND _D = 31  THEN  RETURN 1;  END IF; 

	
	
	IF ( _M = 4 AND _D = 27 AND _W != 6 )
		OR ( _M = 4 AND _D = 26 AND _W = 5 )
	THEN  RETURN 1;  END IF;

	
	SET PASEN = Voorraadbeheer.pasen( _Y );

	IF i_DT = DATE_ADD(PASEN,INTERVAL  0 DAY)   THEN  RETURN 1;  END IF; 
	IF i_DT = DATE_ADD(PASEN,INTERVAL  1 DAY)   THEN  RETURN 1;  END IF; 
	IF i_DT = DATE_ADD(PASEN,INTERVAL 39 DAY)   THEN  RETURN 1;  END IF; 
	IF i_DT = DATE_ADD(PASEN,INTERVAL 49 DAY)   THEN  RETURN 1;  END IF; 
	IF i_DT = DATE_ADD(PASEN,INTERVAL 50 DAY)   THEN  RETURN 1;  END IF; 

	RETURN 0;

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `is_feestdag_dev` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `is_feestdag_dev`( i_dt DATE ) RETURNS int(11)
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 11:23:25'
BEGIN

	DECLARE _D, _M, _Y, _W INT;
	DECLARE PASEN DATE;

	SET _D = DAY(i_dt);
	SET _M = MONTH(i_dt);
	SET _Y = YEAR(i_dt);
	SET _W = WEEKDAY(i_dt);

	IF _M =  1 AND _D =  1  THEN  RETURN 1;  END IF; 
	IF _M =  5 AND _D =  5  THEN  RETURN 1;  END IF; 
	
	IF _M = 12 AND _D = 25  THEN  RETURN 1;  END IF; 
	IF _M = 12 AND _D = 26  THEN  RETURN 1;  END IF; 
	IF _M = 12 AND _D = 31  THEN  RETURN 1;  END IF; 

	
	
	IF ( _M = 4 AND _D = 27 AND _W != 6 )
		OR ( _M = 4 AND _D = 26 AND _W = 5 )
	THEN  RETURN 1;  END IF;

	
	SET PASEN = Voorraadbeheer.pasen_dev( _Y );

	IF i_DT = DATE_ADD(PASEN,INTERVAL  0 DAY)   THEN  RETURN 1;  END IF; 
	IF i_DT = DATE_ADD(PASEN,INTERVAL  1 DAY)   THEN  RETURN 1;  END IF; 
	IF i_DT = DATE_ADD(PASEN,INTERVAL 39 DAY)   THEN  RETURN 1;  END IF; 
	IF i_DT = DATE_ADD(PASEN,INTERVAL 49 DAY)   THEN  RETURN 1;  END IF; 
	IF i_DT = DATE_ADD(PASEN,INTERVAL 50 DAY)   THEN  RETURN 1;  END IF; 

	RETURN 0;

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `is_feestdag_k_dennis` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `is_feestdag_k_dennis`( i_dt DATE ) RETURNS int(11)
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-21 10:11:52'
BEGIN

	DECLARE _D, _M, _Y, _W INT;
	DECLARE PASEN DATE;

	SET _D = DAY(i_dt);
	SET _M = MONTH(i_dt);
	SET _Y = YEAR(i_dt);
	SET _W = WEEKDAY(i_dt);

	IF _M =  1 AND _D =  1  THEN  RETURN 1;  END IF; 
	IF _M =  5 AND _D =  5  THEN  RETURN 1;  END IF; 
	
	IF _M = 12 AND _D = 25  THEN  RETURN 1;  END IF; 
	IF _M = 12 AND _D = 26  THEN  RETURN 1;  END IF; 
	IF _M = 12 AND _D = 31  THEN  RETURN 1;  END IF; 

	
	
	IF ( _M = 4 AND _D = 27 AND _W != 6 )
		OR ( _M = 4 AND _D = 26 AND _W = 5 )
	THEN  RETURN 1;  END IF;

	
	SET PASEN = Voorraadbeheer.pasen_k_dennis( _Y );

	IF i_DT = DATE_ADD(PASEN,INTERVAL  0 DAY)   THEN  RETURN 1;  END IF; 
	IF i_DT = DATE_ADD(PASEN,INTERVAL  1 DAY)   THEN  RETURN 1;  END IF; 
	IF i_DT = DATE_ADD(PASEN,INTERVAL 39 DAY)   THEN  RETURN 1;  END IF; 
	IF i_DT = DATE_ADD(PASEN,INTERVAL 49 DAY)   THEN  RETURN 1;  END IF; 
	IF i_DT = DATE_ADD(PASEN,INTERVAL 50 DAY)   THEN  RETURN 1;  END IF; 

	RETURN 0;

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `is_feestdag_k_sander` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `is_feestdag_k_sander`( i_dt DATE ) RETURNS int(11)
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-24 10:22:54'
BEGIN

	DECLARE _D, _M, _Y, _W INT;
	DECLARE PASEN DATE;

	SET _D = DAY(i_dt);
	SET _M = MONTH(i_dt);
	SET _Y = YEAR(i_dt);
	SET _W = WEEKDAY(i_dt);

	IF _M =  1 AND _D =  1  THEN  RETURN 1;  END IF; 
	IF _M =  5 AND _D =  5  THEN  RETURN 1;  END IF; 
	
	IF _M = 12 AND _D = 25  THEN  RETURN 1;  END IF; 
	IF _M = 12 AND _D = 26  THEN  RETURN 1;  END IF; 
	IF _M = 12 AND _D = 31  THEN  RETURN 1;  END IF; 

	
	
	IF ( _M = 4 AND _D = 27 AND _W != 6 )
		OR ( _M = 4 AND _D = 26 AND _W = 5 )
	THEN  RETURN 1;  END IF;

	
	SET PASEN = Voorraadbeheer.pasen_k_sander( _Y );

	IF i_DT = DATE_ADD(PASEN,INTERVAL  0 DAY)   THEN  RETURN 1;  END IF; 
	IF i_DT = DATE_ADD(PASEN,INTERVAL  1 DAY)   THEN  RETURN 1;  END IF; 
	IF i_DT = DATE_ADD(PASEN,INTERVAL 39 DAY)   THEN  RETURN 1;  END IF; 
	IF i_DT = DATE_ADD(PASEN,INTERVAL 49 DAY)   THEN  RETURN 1;  END IF; 
	IF i_DT = DATE_ADD(PASEN,INTERVAL 50 DAY)   THEN  RETURN 1;  END IF; 

	RETURN 0;

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `is_feestdag_k_thijs` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `is_feestdag_k_thijs`( i_dt DATE ) RETURNS int(11)
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 11:05:06'
BEGIN

	DECLARE _D, _M, _Y, _W INT;
	DECLARE PASEN DATE;

	SET _D = DAY(i_dt);
	SET _M = MONTH(i_dt);
	SET _Y = YEAR(i_dt);
	SET _W = WEEKDAY(i_dt);

	IF _M =  1 AND _D =  1  THEN  RETURN 1;  END IF; 
	IF _M =  5 AND _D =  5  THEN  RETURN 1;  END IF; 
	
	IF _M = 12 AND _D = 25  THEN  RETURN 1;  END IF; 
	IF _M = 12 AND _D = 26  THEN  RETURN 1;  END IF; 
	IF _M = 12 AND _D = 31  THEN  RETURN 1;  END IF; 

	
	
	IF ( _M = 4 AND _D = 27 AND _W != 6 )
		OR ( _M = 4 AND _D = 26 AND _W = 5 )
	THEN  RETURN 1;  END IF;

	
	SET PASEN = Voorraadbeheer.pasen_k_thijs( _Y );

	IF i_DT = DATE_ADD(PASEN,INTERVAL  0 DAY)   THEN  RETURN 1;  END IF; 
	IF i_DT = DATE_ADD(PASEN,INTERVAL  1 DAY)   THEN  RETURN 1;  END IF; 
	IF i_DT = DATE_ADD(PASEN,INTERVAL 39 DAY)   THEN  RETURN 1;  END IF; 
	IF i_DT = DATE_ADD(PASEN,INTERVAL 49 DAY)   THEN  RETURN 1;  END IF; 
	IF i_DT = DATE_ADD(PASEN,INTERVAL 50 DAY)   THEN  RETURN 1;  END IF; 

	RETURN 0;

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `is_voorraadartikel` */;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `is_voorraadartikel`(myEan VARCHAR(13)) RETURNS tinyint(1)
    READS SQL DATA
BEGIN
	DECLARE isVoorraadArtikel TINYINT(1);
	
	/* Zoek in Managementboek */
	SELECT Voorraadartikel INTO isVoorraadArtikel FROM Managementboek_Boeken.Boeken B WHERE `Ean` = myEan;
	
	IF isVoorraadArtikel IS NULL THEN
		/* Zoek in Computerboek */
		SELECT Voorraadartikel INTO isVoorraadArtikel FROM Computerboek_Boeken.Boeken B WHERE `Ean` = myEan;	
	END IF;
	
	/* Artikel kan niet worden gevonden, default is JA dit is een voorraadartikel*/
	IF isVoorraadArtikel IS NULL THEN
		SET isVoorraadArtikel = 1;
	END IF;
	
	/*return isVoorraadArtikel; @todo wacht op juiste vulling vinkje*/
	IF myEan IN ('porto','ideal','bong','p','ncoi') THEN
		return 0;
	ELSE
		Return 1;
	END IF;
END ;;
DELIMITER ;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `maakVoorraadmutatie` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `maakVoorraadmutatie`(myAdministratie VARCHAR(20),myEan VARCHAR(13),myMutatie INT(11),myBestellingid INT(11),myOrderregelid INT(11),myType VARCHAR(255),myOrigineelBestellingid INT(11),myOmschrijving VARCHAR(255)) RETURNS int(11)
    MODIFIES SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE realType VARCHAR(255);
	DECLARE recMut INT;
	
	-- Gewoon handig??
	UPDATE VBMIH_tekst_cache SET expires = NOW() WHERE EAN = myEan;
	
	SET realType = myType;
	if realType = 'ingeklaard' AND myMutatie < 0 THEN
	    SET realType = 'uitgeklaard';
	END IF;
	IF is_voorraadartikel(myEan) = 1 AND isNcoiOrder(myBestellingid,myAdministratie) = 0 
        AND ( myMutatie != 0 OR realType IN ( 'hertelling', 'ter-info' ) ) THEN
		IF myAdministratie != 'Test' THEN
			/* INSERT IGNORE INTO Test_Voorraadbeheer.Voorraadmutaties SET
				Ean=myEan,
				Mutatie=myMutatie,
				DT=NOW(3),
				Orderregelid=myOrderregelid,
				Bestellingid=myBestellingid,
				Gebruiker=@initials,
				`Type`=realType,
				OrigineelBestellingId=myOrigineelBestellingid,
				Omschrijving=myOmschrijving,
				Administratie=myAdministratie; */
		-- ELSE			
			SELECT COUNT(*) INTO recMut FROM Voorraadbeheer.Voorraadmutaties 
				WHERE Ean=myEAn 
				  AND Mutatie=myMutatie 
				  AND DT>=DATE_SUB(NOW(), INTERVAL 2 SECOND)
				  AND `Type`='ingeklaard' 
				  AND Gebruiker=@initials
				  AND OrigineelBestellingId=myOrigineelBestellingid 
				  AND Omschrijving=myOmschrijving
				  AND Administratie=myAdministratie
				  AND Orderregelid=myOrderregelid;
				  
			IF recMut > 0 THEN				  		
				set myMutatie = 0;
				SET myOmschrijving = "DUBBELE INKLAARACTIE";
			END IF;
			
			INSERT IGNORE INTO Voorraadbeheer.Voorraadmutaties SET
				Ean=myEan,
				Mutatie=myMutatie,
				DT=NOW(3),
				Orderregelid=myOrderregelid,
				Bestellingid=myBestellingid,
				Gebruiker=@initials,
				`Type`=realType,
				OrigineelBestellingId=myOrigineelBestellingid,
				Omschrijving=myOmschrijving,
				Administratie=myAdministratie;
			
		END IF;	
		
		RETURN 0;
	ELSE
		RETURN NULL;
	END IF;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `maakVoorraadreservering` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `maakVoorraadreservering`(myAdministratie VARCHAR(20),myEan VARCHAR(13),myMutatie INT(11),myBestellingid INT(11),myOrderregelid INT(11),myKlantid INT(11),myType VARCHAR(255),myOrigineelBestellingid INT(11),myOmschrijving VARCHAR(255)) RETURNS int(11)
    MODIFIES SQL DATA
    DETERMINISTIC
BEGIN
	IF is_voorraadartikel(myEan) = 1 AND isNcoiOrder(myBestellingid,myAdministratie) = 0 THEN
		IF (myMutatie > 0 AND myType <> 'ingepakt')
			OR (myMutatie < 0 AND myOrderregelid IS NULL /* systeem correctie */) 
			OR (myMutatie < 0 AND heeftVoorraadReservering(myAdministratie,myOrderregelid) = 1 AND isReserveringVrijgegeven(myAdministratie,myOrderregelId) = 0) THEN
			
			/* 
			 * Extra controle dat annulering van een credit niet leidt
			 * tot een positieve voorraadmutatie
			 */
			IF myMutatie > 0 AND myType = 'geannuleerd' THEN
				RETURN NULL;
			ELSE
				IF myAdministratie != 'Test' THEN
					INSERT IGNORE INTO Voorraadbeheer.Voorraadreserveringen SET
						Ean=myEan,
						Mutatie=myMutatie,
						DT=NOW(),
						Bestellingid=myBestellingid,
						Orderregelid=myOrderregelid,
						Gebruiker=@initials,
						Klantid=myKlantid,
						Debug='',
						`Type`=myType,
						OrigineelBestellingId=myOrigineelBestellingid,
						Omschrijving=myOmschrijving,
						Administratie=myAdministratie;	
				END IF;	
				
				RETURN LAST_INSERT_ID();
			END IF;
		ELSE
			RETURN NULL;
		END IF;
	ELSE
		RETURN NULL;
	END IF;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `morgen` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `morgen`() RETURNS varchar(10) CHARSET utf8
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 16:07:47'
BEGIN

	DECLARE t_morgen, t_evwd DATE;
	SET t_morgen = DATE_ADD( CURDATE(), INTERVAL 1 DAY );
	SET t_evwd = Voorraadbeheer.werkdag_op_of_na( CURDATE(), 1, 1 );

	IF t_morgen = t_evwd THEN
		RETURN 'morgen';
	ELSE
		RETURN Voorraadbeheer.weekdag( t_evwd );
	END IF;

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `morgen_dev` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `morgen_dev`() RETURNS varchar(10) CHARSET utf8
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 11:23:25'
BEGIN

	DECLARE t_morgen, t_evwd DATE;
	SET t_morgen = DATE_ADD( CURDATE(), INTERVAL 1 DAY );
	SET t_evwd = Voorraadbeheer.werkdag_op_of_na_dev( CURDATE(), 1, 1 );

	IF t_morgen = t_evwd THEN
		RETURN 'morgen';
	ELSE
		RETURN Voorraadbeheer.weekdag_dev( t_evwd );
	END IF;

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `morgen_k_dennis` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `morgen_k_dennis`() RETURNS varchar(10) CHARSET utf8
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-21 10:11:52'
BEGIN

	DECLARE t_morgen, t_evwd DATE;
	SET t_morgen = DATE_ADD( CURDATE(), INTERVAL 1 DAY );
	SET t_evwd = Voorraadbeheer.werkdag_op_of_na_k_dennis( CURDATE(), 1, 1 );

	IF t_morgen = t_evwd THEN
		RETURN 'morgen';
	ELSE
		RETURN Voorraadbeheer.weekdag_k_dennis( t_evwd );
	END IF;

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `morgen_k_sander` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `morgen_k_sander`() RETURNS varchar(10) CHARSET utf8
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-24 10:22:54'
BEGIN

	DECLARE t_morgen, t_evwd DATE;
	SET t_morgen = DATE_ADD( CURDATE(), INTERVAL 1 DAY );
	SET t_evwd = Voorraadbeheer.werkdag_op_of_na_k_sander( CURDATE(), 1, 1 );

	IF t_morgen = t_evwd THEN
		RETURN 'morgen';
	ELSE
		RETURN Voorraadbeheer.weekdag_k_sander( t_evwd );
	END IF;

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `morgen_k_thijs` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `morgen_k_thijs`() RETURNS varchar(10) CHARSET utf8
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 11:05:06'
BEGIN

	DECLARE t_morgen, t_evwd DATE;
	SET t_morgen = DATE_ADD( CURDATE(), INTERVAL 1 DAY );
	SET t_evwd = Voorraadbeheer.werkdag_op_of_na_k_thijs( CURDATE(), 1, 1 );

	IF t_morgen = t_evwd THEN
		RETURN 'morgen';
	ELSE
		RETURN Voorraadbeheer.weekdag_k_thijs( t_evwd );
	END IF;

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `nog_niet_geprinte_voorraad` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `nog_niet_geprinte_voorraad`( myEan CHAR(13) ) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE M INT;
	
	SELECT IFNULL( SUM(Aantal + AantalBackorder - Managementboek_Klanten.orderregel_geleverd_nieuw(Id) ), 0 ) INTO M
	FROM Managementboek_Klanten.Bestellingen B
		JOIN Managementboek_Klanten.OrderregelStatusPlat P USING ( Id )
	WHERE P.vink_open = 1
        AND P.bevestigd = 1
        AND ( P.exact_export = 0 AND P.factuur_geprint = 0 AND P.gefactureerd = 0 AND P.uit_backorder_gehaald = 0 )
		AND EAN = myEan;
	
	
	RETURN M;
	END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `nog_niet_geprinte_voorraad_test` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `nog_niet_geprinte_voorraad_test`( myEan CHAR(13) ) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE M INT;
	
	SELECT IFNULL( SUM(Aantal + AantalBackorder - Managementboek_Klanten.orderregel_geleverd_nieuw(Id) ), 0 ) INTO M
	FROM Managementboek_Klanten.Bestellingen B
		JOIN Managementboek_Klanten.OrderregelStatusPlat P USING ( Id )
	WHERE P.vink_open = 1
        AND P.bevestigd = 1
        AND ( P.exact_export = 0 AND P.factuur_geprint = 0 AND P.gefactureerd = 0 AND P.uit_backorder_gehaald = 0 )
		AND EAN = myEan;
	
	
	RETURN M;
	END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `pasen` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `pasen`( X INTEGER ) RETURNS date
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 16:07:47'
BEGIN
	DECLARE K,M,S,A,D,R,OG,SZ,OE,OS INT;

	SET K = X DIV 100;
	SET M = 15 + (3*K + 3) DIV 4 - (8*K + 13) DIV 25;
	SET S = 2 - (3*K + 3) DIV 4;
	SET A = X MOD 19;
	SET D = (19*A + M) MOD 30;
	SET R = (D + A DIV 11) DIV 29;
	SET OG = 21 + D - R ;
	SET SZ = 7 - (X + X DIV 4 + S) MOD 7;
	SET OE = 7 - (OG - SZ) MOD 7;
	SET OS = OG + OE;

	RETURN date_add(concat(X, '-03-01'), INTERVAL OS-1 DAY);
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `pasen_dev` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `pasen_dev`( X INTEGER ) RETURNS date
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 11:23:25'
BEGIN
	DECLARE K,M,S,A,D,R,OG,SZ,OE,OS INT;

	SET K = X DIV 100;
	SET M = 15 + (3*K + 3) DIV 4 - (8*K + 13) DIV 25;
	SET S = 2 - (3*K + 3) DIV 4;
	SET A = X MOD 19;
	SET D = (19*A + M) MOD 30;
	SET R = (D + A DIV 11) DIV 29;
	SET OG = 21 + D - R ;
	SET SZ = 7 - (X + X DIV 4 + S) MOD 7;
	SET OE = 7 - (OG - SZ) MOD 7;
	SET OS = OG + OE;

	RETURN date_add(concat(X, '-03-01'), INTERVAL OS-1 DAY);
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `pasen_k_dennis` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `pasen_k_dennis`( X INTEGER ) RETURNS date
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-21 10:11:52'
BEGIN
	DECLARE K,M,S,A,D,R,OG,SZ,OE,OS INT;

	SET K = X DIV 100;
	SET M = 15 + (3*K + 3) DIV 4 - (8*K + 13) DIV 25;
	SET S = 2 - (3*K + 3) DIV 4;
	SET A = X MOD 19;
	SET D = (19*A + M) MOD 30;
	SET R = (D + A DIV 11) DIV 29;
	SET OG = 21 + D - R ;
	SET SZ = 7 - (X + X DIV 4 + S) MOD 7;
	SET OE = 7 - (OG - SZ) MOD 7;
	SET OS = OG + OE;

	RETURN date_add(concat(X, '-03-01'), INTERVAL OS-1 DAY);
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `pasen_k_sander` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `pasen_k_sander`( X INTEGER ) RETURNS date
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-24 10:22:54'
BEGIN
	DECLARE K,M,S,A,D,R,OG,SZ,OE,OS INT;

	SET K = X DIV 100;
	SET M = 15 + (3*K + 3) DIV 4 - (8*K + 13) DIV 25;
	SET S = 2 - (3*K + 3) DIV 4;
	SET A = X MOD 19;
	SET D = (19*A + M) MOD 30;
	SET R = (D + A DIV 11) DIV 29;
	SET OG = 21 + D - R ;
	SET SZ = 7 - (X + X DIV 4 + S) MOD 7;
	SET OE = 7 - (OG - SZ) MOD 7;
	SET OS = OG + OE;

	RETURN date_add(concat(X, '-03-01'), INTERVAL OS-1 DAY);
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `pasen_k_thijs` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `pasen_k_thijs`( X INTEGER ) RETURNS date
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 11:05:06'
BEGIN
	DECLARE K,M,S,A,D,R,OG,SZ,OE,OS INT;

	SET K = X DIV 100;
	SET M = 15 + (3*K + 3) DIV 4 - (8*K + 13) DIV 25;
	SET S = 2 - (3*K + 3) DIV 4;
	SET A = X MOD 19;
	SET D = (19*A + M) MOD 30;
	SET R = (D + A DIV 11) DIV 29;
	SET OG = 21 + D - R ;
	SET SZ = 7 - (X + X DIV 4 + S) MOD 7;
	SET OE = 7 - (OG - SZ) MOD 7;
	SET OS = OG + OE;

	RETURN date_add(concat(X, '-03-01'), INTERVAL OS-1 DAY);
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `regelReserveringen` */;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `regelReserveringen`( myAdmin VARCHAR(50), myOrderregelId INT ) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE RV INT;
	
	IF myAdmin = 'Test' THEN
		SELECT IFNULL( SUM( Mutatie ), 0 ) INTO RV FROM Test_Voorraadbeheer.Voorraadreserveringen WHERE Administratie = myAdmin AND Orderregelid = myOrderregelId;			
	ELSE
		SELECT IFNULL( SUM( Mutatie ), 0 ) INTO RV FROM Voorraadreserveringen WHERE Administratie = myAdmin AND Orderregelid = myOrderregelId;	
	END IF;
	
	RETURN RV;
    END ;;
DELIMITER ;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `reserveringenVoorafgaandRegel` */;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `reserveringenVoorafgaandRegel`( myAdministratie CHAR(50), myId INT ) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE reserveringId INT;
	DECLARE rv INT;
	DECLARE myEan CHAR(13);
	DECLARE m INT;
	
	SET m = 0;
	
	SELECT MAX(Id), Ean INTO reserveringId, myEan FROM Voorraadreserveringen WHERE OrderregelId = myId AND Administratie = myAdministratie AND Mutatie > 0;
	IF myEan IS NULL THEN
		SELECT Ean INTO myEAn FROM Managementboek_Klanten.Bestellingen WHERE Id = myId;
		SET m = 1;
	END IF;
	
	IF myEan IN ( 'porto', 'bong', 'voucher', 'ideal', 'boek' ) THEN
		SET RV = 0;
	ELSE
		IF m = 0 THEN
			DROP TEMPORARY TABLE tmp.rvr;
			CREATE TEMPORARY TABLE tmp.rvr ENGINE=MEMORY SELECT Id, Ean, Mutatie, OrderregelId, 0 AS Cumulative FROM Voorraadreserveringen WHERE Ean = myEan AND OrderregelId > 0;
			SET @c = 0;	
			UPDATE tmp.rvr  SET Cumulative = ( @c := @c + Mutatie ) - Mutatie ORDER BY Id;
		
			SELECT Cumulative INTO RV FROM tmp.rvr WHERE Orderregelid = myId ORDER BY Id DESC LIMIT 1;
		ELSE
			SELECT SUM( Mutatie ) INTO RV FROM Voorraadreserveringen WHERE Ean = myEan;
		END IF;
	END IF;
	
/*	DROP TEMPORARY TABLE IF EXISTS tmp.OpenReserveringen;
	
	CREATE TEMPORARY TABLE tmp.OpenReserveringen SELECT MIN( Id ) AS MinId, SUM( Mutatie ) AS Mutatie FROM `Voorraadreserveringen` 
	WHERE Ean = myEan
	AND NOT OrderregelId IS NULL
	GROUP BY OrderregelId
	HAVING SUM( Mutatie ) > 0;
	
	IF NOT reserveringId IS NULL THEN
		SELECT IFNULL( SUM( Mutatie ), 0 ) INTO rv FROM tmp.OpenReserveringen WHERE MinId < reserveringId;
	ELSE
		SELECT IFNULL( SUM( Mutatie ), 0 ) INTO rv FROM tmp.OpenReserveringen;
	END IF; */
	
	RETURN IF( rv < 0, 0, rv );
    END ;;
DELIMITER ;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `vbmih_config` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `vbmih_config`( i_key CHAR(25) ) RETURNS varchar(50) CHARSET utf8
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 16:07:47'
BEGIN

	RETURN ( SELECT C.Val FROM Managementboek_Klanten.VBMIHConfig C
		WHERE C.Key = i_key LIMIT 1 );

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `vbmih_config_dev` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `vbmih_config_dev`( i_key CHAR(25) ) RETURNS varchar(50) CHARSET utf8
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 11:23:25'
BEGIN

	RETURN ( SELECT C.Val FROM Managementboek_Klanten.VBMIHConfig C
		WHERE C.Key = i_key LIMIT 1 );

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `vbmih_config_k_dennis` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `vbmih_config_k_dennis`( i_key CHAR(25) ) RETURNS varchar(50) CHARSET utf8
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-21 10:11:52'
BEGIN

	RETURN ( SELECT C.Val FROM Managementboek_Klanten.VBMIHConfig C
		WHERE C.Key = i_key LIMIT 1 );

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `vbmih_config_k_sander` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `vbmih_config_k_sander`( i_key CHAR(25) ) RETURNS varchar(50) CHARSET utf8
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-24 10:22:54'
BEGIN

	RETURN ( SELECT C.Val FROM Managementboek_Klanten.VBMIHConfig C
		WHERE C.Key = i_key LIMIT 1 );

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `vbmih_config_k_thijs` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `vbmih_config_k_thijs`( i_key CHAR(25) ) RETURNS varchar(50) CHARSET utf8
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 11:05:06'
BEGIN

	RETURN ( SELECT C.Val FROM Managementboek_Klanten.VBMIHConfig C
		WHERE C.Key = i_key LIMIT 1 );

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `vbmih_tekst_only` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `vbmih_tekst_only`( i_EAN CHAR(13) ) RETURNS varchar(255) CHARSET utf8
BEGIN
	DECLARE _rv VARCHAR(255);
	DECLARE r_Tekst VARCHAR(255) CHARSET UTF8 DEFAULT '';
	DECLARE r_Knoptekst VARCHAR(50) CHARSET UTF8;
	DECLARE r_Dagen INT(11);
	DECLARE r_DT DATETIME;
	DECLARE r_EAN CHAR(13) CHARSET UTF8;
	DECLARE r_Voorraad INT;
	
	IF NOT i_EAN IS NULL THEN 
	  CALL Voorraadbeheer.calc_vbmih_tekst( i_EAN, 1, '',r_Tekst, r_Knoptekst, r_Dagen, r_DT, r_EAN, r_Voorraad );
	END IF;
	
	RETURN r_Tekst;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `voorraad` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `voorraad`(EanInput VARCHAR(13)) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE huidigeVoorraad INT(11) DEFAULT 0;
	DECLARE aantalVoorraadRegels INT(11) DEFAULT 0;
    
	SELECT IFNULL( FysiekeVoorraad, 0 ) INTO huidigeVoorraad FROM Voorraad WHERE `Ean`=EanInput;
		
	RETURN huidigeVoorraad;	
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `weekdag` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `weekdag`( i_dt DATE ) RETURNS varchar(10) CHARSET utf8
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 16:07:47'
BEGIN
	RETURN CASE WEEKDAY( i_dt )
		WHEN 0 THEN 'maandag'
		WHEN 1 THEN 'dinsdag'
		WHEN 2 THEN 'woensdag'
		WHEN 3 THEN 'donderdag'
		WHEN 4 THEN 'vrijdag'
		WHEN 5 THEN 'zaterdag'
		WHEN 6 THEN 'zondag'
		ELSE 'doensdag'
	END;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `weekdag_dev` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `weekdag_dev`( i_dt DATE ) RETURNS varchar(10) CHARSET utf8
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 11:23:25'
BEGIN
	RETURN CASE WEEKDAY( i_dt )
		WHEN 0 THEN 'maandag'
		WHEN 1 THEN 'dinsdag'
		WHEN 2 THEN 'woensdag'
		WHEN 3 THEN 'donderdag'
		WHEN 4 THEN 'vrijdag'
		WHEN 5 THEN 'zaterdag'
		WHEN 6 THEN 'zondag'
		ELSE 'doensdag'
	END;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `weekdag_k_dennis` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `weekdag_k_dennis`( i_dt DATE ) RETURNS varchar(10) CHARSET utf8
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-21 10:11:52'
BEGIN
	RETURN CASE WEEKDAY( i_dt )
		WHEN 0 THEN 'maandag'
		WHEN 1 THEN 'dinsdag'
		WHEN 2 THEN 'woensdag'
		WHEN 3 THEN 'donderdag'
		WHEN 4 THEN 'vrijdag'
		WHEN 5 THEN 'zaterdag'
		WHEN 6 THEN 'zondag'
		ELSE 'doensdag'
	END;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `weekdag_k_sander` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `weekdag_k_sander`( i_dt DATE ) RETURNS varchar(10) CHARSET utf8
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-24 10:22:54'
BEGIN
	RETURN CASE WEEKDAY( i_dt )
		WHEN 0 THEN 'maandag'
		WHEN 1 THEN 'dinsdag'
		WHEN 2 THEN 'woensdag'
		WHEN 3 THEN 'donderdag'
		WHEN 4 THEN 'vrijdag'
		WHEN 5 THEN 'zaterdag'
		WHEN 6 THEN 'zondag'
		ELSE 'doensdag'
	END;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `weekdag_k_thijs` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `weekdag_k_thijs`( i_dt DATE ) RETURNS varchar(10) CHARSET utf8
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 11:05:06'
BEGIN
	RETURN CASE WEEKDAY( i_dt )
		WHEN 0 THEN 'maandag'
		WHEN 1 THEN 'dinsdag'
		WHEN 2 THEN 'woensdag'
		WHEN 3 THEN 'donderdag'
		WHEN 4 THEN 'vrijdag'
		WHEN 5 THEN 'zaterdag'
		WHEN 6 THEN 'zondag'
		ELSE 'doensdag'
	END;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `werkdag_op_of_na` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `werkdag_op_of_na`( i_dt DATE, i_offset INT, i_zaterdag INT ) RETURNS date
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 16:07:47'
BEGIN

	DECLARE rv DATE;
	DECLARE teller INT;
	DECLARE _v INT;

	SET rv = i_dt;
	SET teller = i_offset;
	SET _v = 0;

	WHILE _v = 0 DO

		IF WEEKDAY(rv) = 6
				OR ( i_zaterdag = 0 AND WEEKDAY(rv) = 5 )
				OR Voorraadbeheer.is_feestdag( rv )
		THEN
			
			SET rv = DATE_ADD( rv, INTERVAL 1 DAY );

		ELSE

			

			IF teller <= 0 THEN
				SET _v = 1;
			ELSE
				SET teller = teller - 1;
				SET rv = DATE_ADD( rv, INTERVAL 1 DAY );
			END IF;

		END IF;

	END WHILE;

	RETURN rv;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `werkdag_op_of_na_dev` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `werkdag_op_of_na_dev`( i_dt DATE, i_offset INT, i_zaterdag INT ) RETURNS date
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 11:23:25'
BEGIN

	DECLARE rv DATE;
	DECLARE teller INT;
	DECLARE _v INT;

	SET rv = i_dt;
	SET teller = i_offset;
	SET _v = 0;

	WHILE _v = 0 DO

		IF WEEKDAY(rv) = 6
				OR ( i_zaterdag = 0 AND WEEKDAY(rv) = 5 )
				OR Voorraadbeheer.is_feestdag_dev( rv )
		THEN
			
			SET rv = DATE_ADD( rv, INTERVAL 1 DAY );

		ELSE

			

			IF teller <= 0 THEN
				SET _v = 1;
			ELSE
				SET teller = teller - 1;
				SET rv = DATE_ADD( rv, INTERVAL 1 DAY );
			END IF;

		END IF;

	END WHILE;

	RETURN rv;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `werkdag_op_of_na_k_dennis` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `werkdag_op_of_na_k_dennis`( i_dt DATE, i_offset INT, i_zaterdag INT ) RETURNS date
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-21 10:11:52'
BEGIN

	DECLARE rv DATE;
	DECLARE teller INT;
	DECLARE _v INT;

	SET rv = i_dt;
	SET teller = i_offset;
	SET _v = 0;

	WHILE _v = 0 DO

		IF WEEKDAY(rv) = 6
				OR ( i_zaterdag = 0 AND WEEKDAY(rv) = 5 )
				OR Voorraadbeheer.is_feestdag_k_dennis( rv )
		THEN
			
			SET rv = DATE_ADD( rv, INTERVAL 1 DAY );

		ELSE

			

			IF teller <= 0 THEN
				SET _v = 1;
			ELSE
				SET teller = teller - 1;
				SET rv = DATE_ADD( rv, INTERVAL 1 DAY );
			END IF;

		END IF;

	END WHILE;

	RETURN rv;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `werkdag_op_of_na_k_sander` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `werkdag_op_of_na_k_sander`( i_dt DATE, i_offset INT, i_zaterdag INT ) RETURNS date
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-24 10:22:54'
BEGIN

	DECLARE rv DATE;
	DECLARE teller INT;
	DECLARE _v INT;

	SET rv = i_dt;
	SET teller = i_offset;
	SET _v = 0;

	WHILE _v = 0 DO

		IF WEEKDAY(rv) = 6
				OR ( i_zaterdag = 0 AND WEEKDAY(rv) = 5 )
				OR Voorraadbeheer.is_feestdag_k_sander( rv )
		THEN
			
			SET rv = DATE_ADD( rv, INTERVAL 1 DAY );

		ELSE

			

			IF teller <= 0 THEN
				SET _v = 1;
			ELSE
				SET teller = teller - 1;
				SET rv = DATE_ADD( rv, INTERVAL 1 DAY );
			END IF;

		END IF;

	END WHILE;

	RETURN rv;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `werkdag_op_of_na_k_thijs` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `werkdag_op_of_na_k_thijs`( i_dt DATE, i_offset INT, i_zaterdag INT ) RETURNS date
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 11:05:06'
BEGIN

	DECLARE rv DATE;
	DECLARE teller INT;
	DECLARE _v INT;

	SET rv = i_dt;
	SET teller = i_offset;
	SET _v = 0;

	WHILE _v = 0 DO

		IF WEEKDAY(rv) = 6
				OR ( i_zaterdag = 0 AND WEEKDAY(rv) = 5 )
				OR Voorraadbeheer.is_feestdag_k_thijs( rv )
		THEN
			
			SET rv = DATE_ADD( rv, INTERVAL 1 DAY );

		ELSE

			

			IF teller <= 0 THEN
				SET _v = 1;
			ELSE
				SET teller = teller - 1;
				SET rv = DATE_ADD( rv, INTERVAL 1 DAY );
			END IF;

		END IF;

	END WHILE;

	RETURN rv;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `werkdag_tijdstip` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `werkdag_tijdstip`( i_dagen INT, i_Tijdstip TIME ) RETURNS timestamp
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 16:07:47'
BEGIN

	DECLARE t_DT DATE;
	DECLARE t_offset INT;

	SET t_offset = IF( CURTIME() > i_Tijdstip, 1, 0 ) +
		IF( i_dagen > 0, i_dagen - 1, 0 );

	SET t_DT = Voorraadbeheer.werkdag_op_of_na( CURDATE(), t_offset, 0 );
	RETURN TIMESTAMP( t_DT, i_Tijdstip );

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `werkdag_tijdstip_dev` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `werkdag_tijdstip_dev`( i_dagen INT, i_Tijdstip TIME ) RETURNS timestamp
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 11:23:25'
BEGIN

	DECLARE t_DT DATE;
	DECLARE t_offset INT;

	SET t_offset = IF( CURTIME() > i_Tijdstip, 1, 0 ) +
		IF( i_dagen > 0, i_dagen - 1, 0 );

	SET t_DT = Voorraadbeheer.werkdag_op_of_na_dev( CURDATE(), t_offset, 0 );
	RETURN TIMESTAMP( t_DT, i_Tijdstip );

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `werkdag_tijdstip_k_dennis` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `werkdag_tijdstip_k_dennis`( i_dagen INT, i_Tijdstip TIME ) RETURNS timestamp
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-21 10:11:52'
BEGIN

	DECLARE t_DT DATE;
	DECLARE t_offset INT;

	SET t_offset = IF( CURTIME() > i_Tijdstip, 1, 0 ) +
		IF( i_dagen > 0, i_dagen - 1, 0 );

	SET t_DT = Voorraadbeheer.werkdag_op_of_na_k_dennis( CURDATE(), t_offset, 0 );
	RETURN TIMESTAMP( t_DT, i_Tijdstip );

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `werkdag_tijdstip_k_sander` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `werkdag_tijdstip_k_sander`( i_dagen INT, i_Tijdstip TIME ) RETURNS timestamp
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-24 10:22:54'
BEGIN

	DECLARE t_DT DATE;
	DECLARE t_offset INT;

	SET t_offset = IF( CURTIME() > i_Tijdstip, 1, 0 ) +
		IF( i_dagen > 0, i_dagen - 1, 0 );

	SET t_DT = Voorraadbeheer.werkdag_op_of_na_k_sander( CURDATE(), t_offset, 0 );
	RETURN TIMESTAMP( t_DT, i_Tijdstip );

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `werkdag_tijdstip_k_thijs` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `werkdag_tijdstip_k_thijs`( i_dagen INT, i_Tijdstip TIME ) RETURNS timestamp
    DETERMINISTIC
    COMMENT 'Last updated at 2016-06-23 11:05:06'
BEGIN

	DECLARE t_DT DATE;
	DECLARE t_offset INT;

	SET t_offset = IF( CURTIME() > i_Tijdstip, 1, 0 ) +
		IF( i_dagen > 0, i_dagen - 1, 0 );

	SET t_DT = Voorraadbeheer.werkdag_op_of_na_k_thijs( CURDATE(), t_offset, 0 );
	RETURN TIMESTAMP( t_DT, i_Tijdstip );

END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `backorderregels` */;
ALTER DATABASE `Voorraadbeheer` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` PROCEDURE `backorderregels`()
    READS SQL DATA
BEGIN
	DROP TEMPORARY TABLE IF EXISTS tmp.Backorders;
	CREATE TEMPORARY TABLE tmp.Backorders ( BackorderOrigineel INT PRIMARY KEY, Geleverd INT ) ENGINE=MEMORY;
	INSERT INTO tmp.Backorders
		SELECT BackorderOrigineel, SUM( Aantal ) AS Geleverd
		FROM Bestellingen
		WHERE BackorderOrigineel > 0
			AND Aantal > 0
			AND Geannuleerd = 0
		GROUP BY BackorderOrigineel;
	
