	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', 'GROTIUS' );
	
	UPDATE tmp.BackorderRegels
	SET Leverbaar = 0
	WHERE Ean IN ( 'VOUCHER', 'PORTO', 'BONG', 'IDEAL', 'GROTIUS' )
		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 `backorderregels_t` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` PROCEDURE `backorderregels_t`()
    READS SQL DATA
BEGIN
	-- READ COMMITTED heeft iets minder deadlock problematiek, maar leest ook iets minder consistent gedurende een transactie. Dit is in ons geval niet heel erg.
	SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
	START TRANSACTIOn;
	
	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;
	
	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', 'GROTIUS' );
	
	UPDATE tmp.BackorderRegels
	SET Leverbaar = 0
	WHERE Ean IN ( 'VOUCHER', 'PORTO', 'BONG', 'IDEAL', 'GROTIUS' )
		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;
		
		DROP TEMPORARY TABLE IF EXISTS Temp2;
		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 );			
		
		DROP TEMPORARY TABLE IF EXISTS Temp;
		DROP TEMPORARY TABLE IF EXISTS Temp2;
	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 bAanbevolen.Ean != s.Ean
	  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 P USING ( Id )
					JOIN BestellingAll A USING ( BestellingId )
					JOIN OrderkopStatusPlat KP USING ( BestellingID )
				WHERE P.vink_open = 1
					AND P.gefactureerd = 0
					AND KP.leveren_via_cb = 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` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
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 ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP PROCEDURE IF EXISTS `cascade_bestellingenstatus` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
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 ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP PROCEDURE IF EXISTS `create_verzamelorder` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `create_verzamelorder`( _factuurKlantid INT )
BEGIN
	DECLARE _neworder INT;
	DECLARE _ean CHAR(13);
	DECLARE _korting DECIMAL(4,2);
	DECLARE _aantal INT;
	DECLARE _prijs INT;
	DECLARE _omschrijving VARCHAR(200);
	DECLARE _auteurnaam VARCHAR(200);
	DECLARE _newid INT;		
	DECLARE _achternaam VARCHAR(255);
	DECLARE _siteid INT;
	DECLARE _termijn INT;
	DECLARE _icl INT DEFAULT 0;
	DECLARE no_more_rows BOOLEAN;
	DECLARE loop_cntr INT DEFAULT 0;
	
	DECLARE c CURSOR FOR 
		SELECT Ean, Prijs, SUM(Aantal), KortingPercentage, Omschrijving, Auteurnaam 
			FROM VerzamelFactuurRegels 
			WHERE FactuurKlantid = _factuurKlantid 
			GROUP BY Ean, Prijs, KortingPercentage;
	
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
	
	DECLARE EXIT HANDLER FOR SQLEXCEPTION 
	BEGIN
	    GET DIAGNOSTICS CONDITION 1 @sqlstate = RETURNED_SQLSTATE, @errno = MYSQL_ERRNO, @text = MESSAGE_TEXT;
	    SET @full_error = CONCAT("ERROR ", @errno, " (", @sqlstate, "): ", @text, "   -   ", IFNULL(@debug,""));
	    SELECT @full_error;
	    SET @rv=0;
	    ROLLBACK;
	END;
	
	-- SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
	SET innodb_lock_wait_timeout = 160;
	SET @skip_vbmih_cache_update = 1;
	
	START TRANSACTION;
		SELECT Achternaam, Betalingsconditie, VoorkeurICL INTO _achternaam, _termijn, _icl FROM Klanten_met_adres WHERE Klantid = _factuurKlantid;
		
		SELECT VoorkeurSiteId INTO _siteid FROM Managementboek_Klanten.`Klanten` WHERE KlantId = _factuurKlantid;
		IF _siteid = 0 THEN
			SELECT SiteId INTO _siteid FROM VerzamelFactuurRegels R JOIN BestellingAll USING ( BestellingId ) WHERE R.FactuurKlantid = _factuurKlantid LIMIT 1;
		END IF;
		
		/* Nieuwe kop */
		INSERT INTO BestellingAll SET Klantid = _factuurKlantid, ICBestelling=_icl, Betaalmethode='A', BetalingsTermijn = IFNULL(_termijn,14) , Herkomst='MARI', Achternaam=_achternaam, Opmerkingen = 'Verzamelfactuur', SiteId = _siteid;
		SELECT LAST_INSERT_ID() INTO _neworder;
		
		/* Adressen */
		INSERT INTO BestellingAdressen
		( BestellingId,Klantid,AfwijkendFactuurAdres,FactuurKlantId,FactuurEmailadres,FactuurBedrijfsnaam,FactuurBedrijfsnaam2,FactuurAfdeling,FactuurGeslacht,FactuurInitialen,FactuurAchternaam,FactuurStraatnaam,FactuurHuisnummer,FactuurHuisnummerToevoeging,FactuurPostcode,FactuurPlaatsnaam,FactuurLand,AfwijkendVerzendAdres,VerzendKlantId,VerzendBedrijfsnaam,VerzendBedrijfsnaam2,VerzendAfdeling,VerzendGeslacht,VerzendInitialen,VerzendAchternaam,VerzendStraatnaam,VerzendHuisnummer,VerzendHuisnummerToevoeging,VerzendPostcode,VerzendPlaatsnaam,VerzendLand )
		SELECT _neworder, Klantid, 
		0, Klantid, Emailadres, A.`Bedrijfsnaam`, A.`Bedrijfsnaam2`, A.`Afdeling`, A.`Geslacht`, A.`Voornaam`, A.`Achternaam`, A.`Straatnaam`, A.`Huisnummer`, A.`Huisnummertoevoeging`, A.`Postcode`, A.`Plaats`, A.Land,
		0, Klantid, A.`Bedrijfsnaam`, A.`Bedrijfsnaam2`, A.`Afdeling`, A.`Geslacht`, A.`Voornaam`, A.`Achternaam`, A.`Straatnaam`, A.`Huisnummer`, A.`Huisnummertoevoeging`, A.`Postcode`, A.`Plaats`, A.Land
		FROM Klanten_met_adres A WHERE A.Klantid = _factuurKlantid;		
		
		SET @debug='A';
		
		/* Sommeer orderregels tot verzamelfactuur */
		OPEN c;
		the_loop: LOOP
			FETCH c INTO _ean, _prijs, _aantal, _korting, _omschrijving, _auteurnaam;
			
			SET @debug='B';			
			
			IF no_more_rows THEN
				CLOSE c;
				LEAVE the_loop;
			END IF;
			
			SET @debug=CONCAT( 'C ', no_more_rows );			
			
			INSERT INTO Bestellingen SET BestellingId = _neworder, Ean = _ean, Prijs = _prijs, Aantal = _aantal, KortingPercentage = _korting, KortingForce = 1, Omschrijving = _omschrijving, Auteurnaam = _auteurnaam, ICL=_icl, Verzamelregel = 1;
			SELECT LAST_INSERT_ID() INTO _newid;
			
			SET @newid = _newid;
			
			REPLACE INTO BestellingenVerzameld SELECT Id, _newid FROM VerzamelFactuurRegels WHERE FactuurKlantid = _factuurKlantid AND Ean = _ean AND Prijs = _prijs AND KortingPercentage = _korting;
			UPDATE BestellingenExtra SET PrijsHerkomst = 'MARI' WHERE Id = _newid;
			-- UPDATE OrderregelStatusPlat K JOIN BestellingenVerzameld USING ( Id ) SET achteraf_gefactureerd=1, afgesloten=1 WHERE VerzameldIn = _newid;
			
			/*
			 * Check op volledig achteraf-gefactureerde bestellingen! 
			 */
			BEGIN
				DECLARE _id2 INT;
				DECLARE _oldorder INT;
				DECLARE _aantal_niet_afgesloten INT;
				DECLARE no_more_rows2 BOOLEAN;
				DECLARE loop_cntr2 INT DEFAULT 0;
	
				DECLARE c2 CURSOR FOR SELECT Id FROM BestellingenVerzameld WHERE VerzameldIn = _newid;
				DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows2 = TRUE;
				
				OPEN c2;
				the_loop2: LOOP
					FETCH c2 INTO _id2;
					
					IF no_more_rows2 THEN
						CLOSE c2;
						LEAVE the_loop2;
					END IF;
					
					UPDATE OrderregelStatusPlat SET afgesloten=1 WHERE Id = _id2; 
					UPDATE OrderregelStatusPlat SET achteraf_gefactureerd=1 WHERE Id = _id2; 
					
					-- Kijk of alle orderregels op de oude order al zijn gefactureerd.
					SELECT BestellingId INTO _oldorder FROM Bestellingen WHERE Id = _id2;
					SELECT COUNT(*) INTO _aantal_niet_afgesloten FROM OrderregelStatusPlat JOIN Bestellingen USING ( Id ) 
						WHERE BestellingId = _oldorder AND achteraf_factureren=1 AND achteraf_gefactureerd=0;
					
					IF _aantal_niet_afgesloten=0 THEN
						UPDATE OrderkopStatusPlat SET afgesloten=1 WHERE BestellingId = _oldorder;
					END IF;
				END LOOP the_loop2;
			END;
			
		END LOOP the_loop;
		
		UPDATE BestellingAll SET Afgerond=1, ProcessStatus='email', ClassificatieRedenKort='Verzamelfactuur', AutoClassificatie='handmatig', DT=NOW() WHERE BestellingId = _neworder;
		UPDATE OrderkopStatusPlat SET niet_inpakken=1, achteraf_factureren=0, verzamelfactuur=1 WHERE BestellingId = _neworder;
		INSERT INTO BestellingStatus SET StatusId = 27, BestellingId = _neworder, Resultaat = 'gelukt', DT=NOW(), Gebruiker = IFNULL(@current_initials,'--');
		UPDATE OrderregelStatusPlat JOIN Bestellingen USING ( Id ) SET achteraf_factureren=0, niet_reserveren=0, niet_inpakken=1 WHERE BestellingId = _neworder;
		
	COMMIT;
	
	SET @rv = _neworder;
    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 ( StatusId, BestellingId, Resultaat, Gebruiker, DT )
		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;
	
	/* Hoeft niet ingepakt te worden; ABO */
	INSERT INTO BestellingStatus ( StatusId, BestellingId, Resultaat, Gebruiker, DT )
		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 ( StatusId, BestellingId, Resultaat, Gebruiker, DT )
		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 ( StatusId, BestellingId, Resultaat, Gebruiker, DT )
		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 BA.OrigineelBestellingID = 0
			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 ( StatusId, BestellingId, Resultaat, Gebruiker, DT )
		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 BA.OrigineelBestellingID = 0
			AND BN.Id IS NULL
			AND BAfgerond.StatusId IS NULL
			AND BAnn.StatusId IS NULL;
	/* Afgesloten orders 
	INSERT INTO BestellingStatus ( StatusId, BestellingId, Resultaat, Gebruiker, DT )
	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 ( StatusId, Id, Resultaat, Gebruiker, DT )
		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` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
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 ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!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 > DATE_SUB( NOW(), INTERVAL 6 MONTH )
			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
	-- Manpo-ranking
	CALL Manpo.update_boekranking();
	-- Neem de Manpo-ranking gewoon over.
	START TRANSACTION;	
	UPDATE Boekranking_Plat SET `7d` = 9999999, `30d` = 9999999, `60d` = 0, `90d` = 9999999;
	INSERT INTO Boekranking_Plat ( EAN, `7d`, `30d`, `90d` )
		SELECT M.L1 AS `Ean`, `7d`, `30d`, `90d`
		FROM Manpo.BoekRanking R
			JOIN Manpo.Mapped_EAN M ON ( M.U8 = R.EAN )
		WHERE R.Website = 'Managementboek' AND R.Rubriek = ''
		ON DUPLICATE KEY UPDATE `7d` = VALUES(`7d`), `30d` = values(`30d`), `90d` = VALUES(`90d`);
	COMMIT;
	-- Ranking TOP
	INSERT IGNORE INTO Ranking_Top ( Ean, `7d`, `30d`, `90d` ) SELECT Ean, `7d`, `30d`, `90d` FROM Boekranking_Plat B;
	-- Ranking TOP #2
	UPDATE Ranking_Top T JOIN Boekranking_Plat P USING ( Ean )
		SET
			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.7d < T.7d OR P.30d < T.30d OR P.90d < T.90d );
	-- Ranking DATUM
	REPLACE INTO Boekranking_Datum ( EAN, DT, Ranking )
		SELECT Ean, CURDATE(), `30d` FROM Boekranking_Plat ORDER BY `30d` LIMIT 1000;
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;
	
	SET @skip_vbmih_cache_update = 1;
	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;	
	SET @skip_vbmih_cache_update = 0;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `klanten_in_organisatie_dev` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` PROCEDURE `klanten_in_organisatie_dev`(iOrganisatieID INT)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE i INT DEFAULT 0;
	DECLARE ii INT DEFAULT 0;

	
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg;
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg_b;
	CREATE TEMPORARY TABLE tmp.grandchildorg ( OrganisatieID INT(11) PRIMARY KEY ) ENGINE=MEMORY;
	CREATE TEMPORARY TABLE tmp.grandchildorg_b ( OrganisatieID INT(11) PRIMARY KEY ) ENGINE=MEMORY;

	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID ) VALUES ( iOrganisatieID );
	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg;
	WHILE i > ii DO
		SET ii = i;
		INSERT IGNORE INTO tmp.grandchildorg_b ( OrganisatieID )
			SELECT OrganisatieID FROM tmp.grandchildorg;
		INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID )
			SELECT DISTINCT O.OrganisatieID
			FROM Managementboek_Klanten.Organisaties O
				JOIN tmp.grandchildorg_b B ON ( B.OrganisatieID = O.ParentOrganisatie );
		SELECT COUNT(1) INTO i
		FROM tmp.grandchildorg;
	END WHILE;

	
	SELECT OK.KlantID, OK.OrganisatieID
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		JOIN tmp.grandchildorg USING ( OrganisatieID )
		LEFT JOIN Managementboek_Klanten.Klanten_met_adres KMA USING ( KlantID )
	ORDER BY OrganisatieID, KMA.Achternaam, KMA.Voornaam, KlantID;
	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `klanten_in_organisatie_k_sander` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` PROCEDURE `klanten_in_organisatie_k_sander`(iOrganisatieID INT)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE i INT DEFAULT 0;
	DECLARE ii INT DEFAULT 0;

	
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg;
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg_b;
	CREATE TEMPORARY TABLE tmp.grandchildorg ( OrganisatieID INT(11) PRIMARY KEY ) ENGINE=MEMORY;
	CREATE TEMPORARY TABLE tmp.grandchildorg_b ( OrganisatieID INT(11) PRIMARY KEY ) ENGINE=MEMORY;

	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID ) VALUES ( iOrganisatieID );
	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg;
	WHILE i > ii DO
		SET ii = i;
		INSERT IGNORE INTO tmp.grandchildorg_b ( OrganisatieID )
			SELECT OrganisatieID FROM tmp.grandchildorg;
		INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID )
			SELECT DISTINCT O.OrganisatieID
			FROM Managementboek_Klanten.Organisaties O
				JOIN tmp.grandchildorg_b B ON ( B.OrganisatieID = O.ParentOrganisatie );
		SELECT COUNT(1) INTO i
		FROM tmp.grandchildorg;
	END WHILE;

	
	SELECT OK.KlantID, OK.OrganisatieID
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		JOIN tmp.grandchildorg USING ( OrganisatieID )
		LEFT JOIN Managementboek_Klanten.Klanten_met_adres KMA USING ( KlantID )
	ORDER BY OrganisatieID, KMA.Achternaam, KMA.Voornaam, KlantID;
	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `klanten_in_organisatie_k_thijs` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` PROCEDURE `klanten_in_organisatie_k_thijs`(iOrganisatieID INT)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE i INT DEFAULT 0;
	DECLARE ii INT DEFAULT 0;

	
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg;
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg_b;
	CREATE TEMPORARY TABLE tmp.grandchildorg ( OrganisatieID INT(11) PRIMARY KEY ) ENGINE=MEMORY;
	CREATE TEMPORARY TABLE tmp.grandchildorg_b ( OrganisatieID INT(11) PRIMARY KEY ) ENGINE=MEMORY;

	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID ) VALUES ( iOrganisatieID );
	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg;
	WHILE i > ii DO
		SET ii = i;
		INSERT IGNORE INTO tmp.grandchildorg_b ( OrganisatieID )
			SELECT OrganisatieID FROM tmp.grandchildorg;
		INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID )
			SELECT DISTINCT O.OrganisatieID
			FROM Managementboek_Klanten.Organisaties O
				JOIN tmp.grandchildorg_b B ON ( B.OrganisatieID = O.ParentOrganisatie );
		SELECT COUNT(1) INTO i
		FROM tmp.grandchildorg;
	END WHILE;

	
	SELECT OK.KlantID, OK.OrganisatieID
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		JOIN tmp.grandchildorg USING ( OrganisatieID )
		LEFT JOIN Managementboek_Klanten.Klanten_met_adres KMA USING ( KlantID )
	ORDER BY OrganisatieID, KMA.Achternaam, KMA.Voornaam, KlantID;
	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `klanten_in_organisatie_politie` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` PROCEDURE `klanten_in_organisatie_politie`()
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE i INT DEFAULT 0;
	DECLARE ii INT DEFAULT 0;
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg;
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg_b;
	CREATE TEMPORARY TABLE tmp.grandchildorg ( OrganisatieID INT(11) PRIMARY KEY ) ENGINE=MEMORY;
	CREATE TEMPORARY TABLE tmp.grandchildorg_b ( OrganisatieID INT(11) PRIMARY KEY ) ENGINE=MEMORY;
	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID ) 
		SELECT OrganisatieId FROM Managementboek_Klanten.`Organisaties` WHERE Label LIKE "%olitie%";
	
	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg;
	WHILE i > ii DO
		SET ii = i;
		INSERT IGNORE INTO tmp.grandchildorg_b ( OrganisatieID )
			SELECT OrganisatieID FROM tmp.grandchildorg;
		INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID )
			SELECT DISTINCT O.OrganisatieID
			FROM Managementboek_Klanten.Organisaties O
				JOIN tmp.grandchildorg_b B ON ( B.OrganisatieID = O.ParentOrganisatie );
		SELECT COUNT(1) INTO i
		FROM tmp.grandchildorg;
	END WHILE;
	
	REPLACE INTO Manpo.`PolitieBoeken`
	SELECT `Ean`
		FROM Managementboek_Klanten.OrganisatieKlanten OK
			JOIN tmp.grandchildorg USING ( OrganisatieID )
			JOIN Managementboek_Klanten.Bestelling USING ( Klantid )
			JOIN Managementboek_Klanten.`Bestellingen` USING ( BestellingId );
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `log_inventarisatie` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `log_inventarisatie`()
BEGIN
CREATE TEMPORARY TABLE Tmp.RptCom
SELECT 
  'COM',  
  CONCAT('E', B.Ean) AS Ean,
  IFNULL(
    PV.FysiekeVoorraad,
    0
  ) AS Voorraad,
  0 AS NCOIVoorraad,
  BMP.VastePrijs AS Europrijs,
  ROUND(
    BMP.VastePrijs / IF(
      Bindwijze.Btwcode IN ('H', 'I'),
      1.19,
      IF(
        Bindwijze.Btwcode IN ('7', '8'),
        1.21,
        1.06
      )
    ),
    2
  ) AS prijsExBTW,
  KortingMp,
  ROUND( ( IFNULL(PV.FysiekeVoorraad, 0) ) * ROUND( ( ( 100 - KortingMp ) / 100 ) * ( B.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 ) AS Waarde
FROM
  Computerboek_Boeken.Boeken B 
  JOIN Computerboek_Boeken.Boeken_met_aanbiedingsprijs BMP USING (Ean) 
  JOIN Computerboek_Boeken.Bindwijze USING (Bindwijze) 
JOIN Computerboek_Boeken.Uitgevers U
				ON (B.Uitgever = U.Uitgeverid)
			JOIN Computerboek_Boeken.Auteurs A
				ON (B.Auteur1 = A.Auteurid)
			JOIN Computerboek_Boeken.Valuta V
				ON (B.Valuta = V.Soort)
			JOIN tmp.Valutas VI
				ON (B.Valuta = VI.Soort)
  LEFT JOIN Computerboek_Klanten.Tellingen_Plat TP USING (Ean) 
  LEFT JOIN Voorraadbeheer.Voorraad PV USING (Ean) 
  LEFT JOIN tmp.VerkopenPerJaar PJ USING (Ean) 
  LEFT JOIN tmp.LaatstVerkocht LV USING (Ean) 
  LEFT JOIN Voorraadbeheer.RoqAndRol RR USING (Ean) 
WHERE ( 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 B.Ean NOT IN (
    '9781111111113',
    '9797090000645',
    '9797090000652',
    '9780000001030'
  ) 
  AND Ean NOT IN ( SELECT Ean FROM Managementboek_Boeken.Boeken WHERE Uitgever>0)
GROUP BY Ean;
/*
 * Ask for opinions.
 * Mull it over. Then you can
 * Just do what you want.
 */
CREATE TEMPORARY TABLE Tmp.RptMan
SELECT 
  'MAN',  
  CONCAT('E', B.Ean) AS Ean,
  IFNULL(
    PV.FysiekeVoorraad,
    0
  ) AS Voorraad,
  IFNULL(NV.Voorraad, 0) AS NCOIVoorraad,
  BMP.VastePrijs AS Europrijs,
  ROUND(
    BMP.VastePrijs / IF(
      Bindwijze.Btwcode IN ('H', 'I'),
      1.19,
      IF(
        Bindwijze.Btwcode IN ('7', '8'),
        1.21,
        1.06
      )
    ),
    2
  ) AS prijsExBTW,
  KortingMp,
  ROUND( ( IFNULL(PV.FysiekeVoorraad, 0) ) * ROUND( ( ( 100 - KortingMp ) / 100 ) * ( B.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 ) AS Waarde
FROM
  Managementboek_Boeken.Boeken B 
  JOIN Managementboek_Boeken.Boeken_met_aanbiedingsprijs BMP USING (Ean) 
  JOIN Managementboek_Boeken.Bindwijze USING (Bindwijze) 
  					JOIN Managementboek_Boeken.Uitgevers U
									ON (B.Uitgever = U.Uitgeverid)
								JOIN Managementboek_Boeken.Auteurs A
									ON (B.Auteur1 = A.Auteurid)
								JOIN Managementboek_Boeken.Valuta V
									ON (B.Valuta = V.Soort)
								JOIN tmp.Valutas VI
									ON (B.Valuta = VI.Soort)
  LEFT JOIN Managementboek_Klanten.Tellingen_Plat TP USING (Ean) 
  LEFT JOIN Voorraadbeheer.Voorraad PV USING (Ean) 
  LEFT JOIN tmp.VerkopenPerJaar PJ USING (Ean) 
  LEFT JOIN tmp.LaatstVerkocht LV USING (Ean) 
  LEFT JOIN Voorraadbeheer.RoqAndRol RR USING (Ean) 
  LEFT JOIN NCOI.Voorraad NV USING (Ean) 
WHERE ( 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 B.Ean NOT IN (
    '9781111111113',
    '9797090000645',
    '9797090000652',
    '9780000001030'
  ) 
  AND B.Ean NOT IN ( SELECT Ean FROM Manpo.Boeken WHERE Consignatie=1 )
GROUP BY Ean;
CREATE TEMPORARY TABLE Tmp.RptNCOI
SELECT 
  'NCOI',  
  CONCAT('E', B.Ean) AS Ean,
  IFNULL(
    NV.Voorraad,
    '0'
  ) AS Voorraad,
  IFNULL(NV.Voorraad, 0) AS NCOIVoorraad,
  BMP.VastePrijs AS Europrijs,
  ROUND( ( IFNULL( NV.Voorraad, 0 ) ) * ROUND( ( ( 100 - KortingMp ) / 100 ) * ( B.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 ) AS Waarde
FROM
  Managementboek_Boeken.Boeken B 
  JOIN Managementboek_Boeken.Boeken_met_aanbiedingsprijs BMP USING (Ean) 
  JOIN Managementboek_Boeken.Bindwijze USING (Bindwijze) 
JOIN Managementboek_Boeken.Uitgevers U
				ON (B.Uitgever = U.Uitgeverid)
			JOIN Managementboek_Boeken.Auteurs A
				ON (B.Auteur1 = A.Auteurid)
			JOIN Managementboek_Boeken.Valuta V
				ON (B.Valuta = V.Soort)
			JOIN tmp.Valutas VI
				ON (B.Valuta = VI.Soort)
  LEFT JOIN Managementboek_Klanten.Tellingen_Plat TP USING (Ean) 
  LEFT JOIN Voorraadbeheer.Voorraad PV USING (Ean) 
  LEFT JOIN tmp.VerkopenPerJaar PJ USING (Ean) 
  LEFT JOIN tmp.LaatstVerkocht LV USING (Ean) 
  LEFT JOIN Voorraadbeheer.RoqAndRol RR USING (Ean) 
  LEFT JOIN NCOI.Voorraad NV USING (Ean) 
WHERE ( NV.`Voorraad` > 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 B.Ean NOT IN (
    '9781111111113',
    '9797090000645',
    '9797090000652',
    '9780000001030'
  ) 
  AND B.Ean NOT IN ( SELECT Ean FROM Manpo.Boeken WHERE Consignatie=1 )
GROUP BY Ean;
REPLACE INTO Managementboek_Klanten.InventarisatieLogging SELECT DATE(NOW()) AS DT, (SELECT SUM(Waarde) FROM Tmp.RptMan) AS Man, IFNULL( (SELECT SUM(Waarde) FROM Tmp.RptCom), 0 ) AS Com, (SELECT SUM(Waarde) FROM Tmp.RptNCOI) AS NCOI;	
    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 `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 `MARI_orderhistorie` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `MARI_orderhistorie`( _klantid INT, _page INT, _pagesize INT )
    READS SQL DATA
BEGIN
	DECLARE noMoreRows INT DEFAULT 1;
	DECLARE bi INT;	
	DECLARE aantalsubregels INT;	
	DECLARE cursor_orders CURSOR FOR SELECT DISTINCT BestellingId 
		FROM Managementboek_Klanten.BestellingAll A
		JOIN Managementboek_Klanten.`OrderkopStatusPlat` OKSP USING ( BestellingId )
		WHERE Klantid = _klantid 
		AND Afgerond=1
		AND `IsCredit` = 0 AND `IsOpnieuw` = 0 AND OrigineelBestellingId=0
		ORDER BY DT DESC, BestellingId DESC LIMIT _page, _pagesize;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET noMoreRows = 0;
	
	SET SESSION max_sp_recursion_depth = 10;
	
	DROP TEMPORARY TABLE IF EXISTS T;	
	CREATE TEMPORARY TABLE T LIKE Managementboek_Extra.MARI_orderhistorie_template;	
	
	OPEN cursor_orders; 
	LOOPROWS: LOOP
		FETCH cursor_orders INTO bi;
		
		IF noMoreRows = 0 THEN
			CLOSE cursor_orders;
			LEAVE LOOPROWS;
		END IF;
		INSERT INTO T SELECT *,0 FROM Managementboek_Klanten.MARI_orderhistorie WHERE BestellingId = bi;
		
		CALL MARI_select_subregels( bi, 1 );
	END LOOP;	
	
	SELECT * FROM T;
	DROP TEMPORARY TABLE T;
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `MARI_select_subregels` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `MARI_select_subregels`( _bid INT, indent INT )
BEGIN
	DECLARE noMoreRows2 INT DEFAULT 1;
	DECLARE bi INT;
	DECLARE cursor_suborders CURSOR FOR SELECT BestellingId 
	FROM Managementboek_Klanten.BestellingAll A
	JOIN Managementboek_Klanten.`OrderkopStatusPlat` OKSP USING ( BestellingId )
	WHERE OrigineelBestellingId = _bid
	ORDER BY DT, BestellingId;
	
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET noMoreRows2 = 0;
	OPEN cursor_suborders; 
	LOOPROWS2: LOOP
		FETCH cursor_suborders INTO bi;		
		
		IF noMoreRows2 = 0 THEN
			CLOSE cursor_suborders;
			LEAVE LOOPROWS2;
		END IF;
				
		INSERT INTO T SELECT *, indent FROM Managementboek_Klanten.MARI_orderhistorie WHERE BestellingId = bi LIMIT 1;
		
		CALL MARI_select_subregels( bi, indent+1 );
	END LOOP;
    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` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
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 ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!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;
	
	INSERT INTO OrderregelStatus SET StatusId = iStatus, Id = iOrderRegel, DT = NOW(), Gebruiker = IFNULL( @initials, '' ), Resultaat = IResultaat;
	
	/* 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` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
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 ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP PROCEDURE IF EXISTS `orderregel_status_op_orderid_zonder_backorders` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
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 ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP PROCEDURE IF EXISTS `orderschermregels_alles` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `orderschermregels_alles`( )
BEGIN
	DECLARE allesCurId INT;
	DECLARE curEan CHAR(13);
	DECLARE no_more_rows BOOLEAN;
	DECLARE loop_cntr INT DEFAULT 0;
	DECLARE num_rows INT DEFAULT 0;
	DECLARE v INT;
	DECLARE min_genoeg INT DEFAULT 0;
	DECLARE max_genoeg INT DEFAULT 0;
	DECLARE have_lock INT DEFAULT 0;
	
	DECLARE eanCursor CURSOR FOR SELECT DISTINCT Ean FROM OrderschermRegels WHERE FysiekeVoorraad > 0;
	DECLARE idCursor  CURSOR FOR SELECT DISTINCT BestellingId FROM OrderschermRegels R JOIN OrderregelStatusPlat P USING ( Id ) WHERE R.FysiekeVoorraad>0 OR R.CBLeverbaar>0 OR niet_inpakken=1 OR R.bakje = 'nieuw';
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
	
	SELECT 1 as `Alles klaar`;
	SELECT GET_LOCK('orderscherm',20) INTO have_lock;
	
	SET @_dbg_voorrang = 0;
	SET @_dbg_bakje    = 0;
	
	IF have_lock = 1 THEN
		SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
		START TRANSACTION WITH CONSISTENT SNAPSHOT;
		SELECT * FROM OrderschermRegels FOR UPDATE;
		UPDATE OrderschermRegels SET Gewist=1;
		REPLACE INTO OrderschermRegels ( Id, BestellingId, OrigineelBestellingId, DT, Ean, BoekStatus, Aantal, Geleverd, FysiekeVoorraad, 
			GeprinteVoorraad, NogNietGeprint, Bron, VerstuurCompleteOrder, CBLeverbaar, FeedLeverbaar, 
			Bindwijze_voorraadartikel, Bindwijze_Evenement, Gereserveerd, NietReserveren, Magazijn, MagONE, AantalOnderweg, OnderwegSinds, 
			PromoBoek, PromoReden, DTVerwacht, bakje_proto_magazijn, bakje_vink_open, Gewist,
			Adres_Geaccepteerd, Risico_Geaccepteerd )
			SELECT 
			Id, N.BestellingId, OrigineelBestellingId, A.DT, N.Ean, COALESCE( B.Boekstatus, C.Boekstatus, F.Boekstatus, IF( E.`Code`, 998, NULL ), 999 ) Boekstatus, N.Aantal+N.`AantalBackorder` Aantal,
			orderregel_geleverd_nieuw( N.Id ) AS Geleverd,
			FysiekeVoorraad, IFNULL(PR.`GeprintAantal`,0), IFNULL(PR.`NogNietGeprint`,0),
			COALESCE( IF(B.Ean,'Manpo',NULL), IF(C.Ean,'CB',NULL), IF(F.Ean,'Feeds',NULL), IF( E.`Code`, 'Handmatig', NULL ), 'Onbekend' ),
			A.VerstuurCompleteOrder,
			/* CBLeverbaar */ IFNULL( ( (ORVO.`mag_one`)=1 AND IFNULL(C.Boekstatus,99)=0 AND IFNULL(N.IsPromo,0)=0 ) OR ( N.Ean IN ('VOUCHER', 'PORTO', 'IDEAL', 'B', 'P', 'BORTO', 'GROTIUS') OR (IFNULL(Bindwijze_boekenweekgeschenk,0)=1) ), 0 ),
			/* FeedLeverbaar */ IF( F.Boekstatus = 0, 1, 0 ),
			COALESCE( Bindwijze_voorraadartikel, IF( N.Ean IN ('VOUCHER', 'PORTO', 'IDEAL', 'B', 'P', 'BORTO'), 0, NULL ), 1 ),
			IFNULL( Bindwijze_Evenement, 0 ),
			(R.vink_open=1 AND R.niet_reserveren=0),
			R.niet_reserveren,
			R.vink_magazijn,
			( (ORVO.`mag_one`)=1 AND IFNULL(C.Boekstatus,99)=0 AND IFNULL(N.IsPromo,0)=0 ) OR Bindwijze_Boekenweekgeschenk=1,
			IFNULL(AantalOnderweg,0),
			OW.DT OnderwegSinds,
			/* Promoboek, PromoReden */ IF( Bindwijze_boekenweekgeschenk, 0, N.IsPromo ), IF( PB.Ean IS NULL, 0, 1 ),
			COALESCE( B.Herdrukdatum, C.Herdrukdatum, B.Verschijningsdatum, C.Verschijningsdatum, '0000-00-00' ),
			( KR.geannuleerd = 0 AND PKR.geannuleerd = 0 AND KR.afgesloten = 0 AND KR.klantannulering = 0 AND R.levering = 1 AND R.leveren_via_cb = 0 AND R.ingepakt = 0 AND R.niet_inpakken = 0 ) AS proto_magazijn,  /** HACK: vink_magazijn is eigenlijk niet toereikend **/
			R.vink_open,
			0 /* Gewist */,
			IFNULL(ACC.Adres_Geaccepteerd, 0), IFNULL(ACC.Risico_Geaccepteerd, 0)
			FROM OrderregelStatusPlat R 
			JOIN Bestellingen N USING ( Id ) 		
			JOIN BestellingAll A ON ( N.BestellingId = A.BestellingId )
			JOIN OrderregelsViaONE ORVO USING ( Id )
			JOIN OrderkopStatusPlat KR ON ( N.BestellingID = KR.BestellingID )
			LEFT JOIN BestellingAcceptatie ACC ON ( ACC.BestellingID = A.BestellingID )
			LEFT JOIN OrderkopStatusPlat PKR ON ( A.OrigineelBestellingID = PKR.BestellingID )
			LEFT JOIN Voorraadbeheer.`VoorraadInclusiefCB` VR ON ( N.Ean = VR.Ean )
			LEFT JOIN Voorraadbeheer.`GeprinteVoorraad` PR ON ( N.Ean = PR.Ean )
			LEFT JOIN Manpo.Boeken B ON ( N.Ean = B.Ean )
			LEFT JOIN Manpo.`Uitgevers` U ON ( B.UitgeverId = U.UitgeverId )
			LEFT JOIN CbBoeken.`Uitgevers_cb_mb` MAP ON ( U.UitgeverID = MAP.`Uitgeverid` ) 
			LEFT JOIN CbBoeken.`Uitgevers` CBU ON (MAP.`cb_id` = CBU.`cb_id` )		
			LEFT JOIN Manpo.Bindwijze BW ON ( B.Bindwijze = BW.Bindwijze )
			LEFT JOIN CbBoeken.Boeken C ON ( N.Ean = C.Ean )
			LEFT JOIN Managementboek_Klanten.`ExactArtikelen` E ON ( N.Ean = E.`Code` )
			LEFT JOIN Feeds.`DagPrijzen` FD ON ( N.Ean = FD.Ean )
			LEFT JOIN Feeds.`Boeken` F ON ( N.Ean = F.Ean AND FD.Feedcode = F.Feedcode )
			LEFT JOIN CbBestellingen.AantalOnderweg OW ON ( OW.Ean = N.Ean )
			LEFT JOIN Promo_eans_actief PB ON ( PB.Ean = N.Ean )
			WHERE ( R.vink_open=1 AND A.OrigineelBestellingId=0) OR ( R.vink_magazijn=1 AND A.OrigineelBestellingId != 0 )
				 OR ( KR.geannuleerd = 0 AND PKR.geannuleerd = 0 AND KR.afgesloten = 0 AND KR.klantannulering = 0 AND R.levering = 1 AND R.leveren_via_cb = 0 AND R.ingepakt = 0 AND R.niet_inpakken = 0 )
				 -- OR ( KR.geannuleerd = 0 AND PKR.geannuleerd = 0 AND KR.afgesloten = 0 AND KR.klantannulering = 0 AND A.OrigineelBestellingId != 0 AND A.FactuurID = 0 AND R.achteraf_factureren = 0 )
			HAVING ( Aantal - Geleverd <> 0 ) OR ( vink_magazijn = 1 ) OR ( proto_magazijn = 1 );
			
		DELETE FROM OrderschermRegels WHERE Gewist=1;
		
		OPEN eanCursor;
		the_loop: LOOP
			FETCH eanCursor INTO curEan;
			
			IF no_more_rows THEN
				CLOSE eanCursor;
				LEAVE the_loop;
			END IF;
			
			CALL orderschermregels_voorrang( curEan );
			SET @_dbg_voorrang = @_dbg_voorrang + 1;
		END LOOP the_loop;
		
		
		sET no_more_rows = false;
		OPEN idCursor;
		the_loop2: LOOP
			FETCH idCursor INTO allesCurId;
			
			IF no_more_rows THEN
				CLOSE idCursor;
				LEAVE the_loop2;
			END IF;
			
			CALL orderschermregel_bakje( allesCurId );
			CALL orderschermregel_bereken_levering( allesCurId );
			
			SET @_dbg_bakje    = @_dbg_bakje+1;
		END LOOP the_loop2;
		COMMIT;
		
		SELECT RELEASE_LOCK('orderscherm');
		SELECT 'klaar';
	END IF;
	
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `orderschermregels_alle_bakjes` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `orderschermregels_alle_bakjes`( )
BEGIN
	DECLARE curId INT;
	DECLARE curEan CHAR(13);
	DECLARE no_more_rows BOOLEAN;
	DECLARE loop_cntr INT DEFAULT 0;
	DECLARE num_rows INT DEFAULT 0;
	DECLARE v INT;
	DECLARE min_genoeg INT DEFAULT 0;
	DECLARE max_genoeg INT DEFAULT 0;
	
	DECLARE eanCursor CURSOR FOR SELECT DISTINCT Ean FROM OrderschermRegels WHERE FysiekeVoorraad > 0;
	DECLARE idCursor  CURSOR FOR SELECT DISTINCT BestellingId FROM OrderschermRegels R JOIN OrderregelStatusPlat P USING ( Id ) WHERE R.FysiekeVoorraad>0 OR R.CBLeverbaar>0 OR niet_inpakken=1;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
	SELECT GET_LOCK('orderscherm',1);
	
	SET @_dbg_voorrang = 0;
	SET @_dbg_bakje    = 0;
	
	SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
	START TRANSACTION;
	
	sET no_more_rows = false;
	OPEN idCursor;
	the_loop2: LOOP
		FETCH idCursor INTO curId;
		
		IF no_more_rows THEN
			CLOSE idCursor;
			LEAVE the_loop2;
		END IF;
		
		CALL orderschermregel_bakje( curId );
		CALL orderschermregel_bereken_levering( curId );
		
		SET @_dbg_bakje    = @_dbg_bakje+1;
	END LOOP the_loop2;
	COMMIT;
	
	SELECT RELEASE_LOCK('orderscherm');
	SELECT 'klaar';
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `orderschermregels_alle_voorrang` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `orderschermregels_alle_voorrang`( )
BEGIN
	DECLARE curId INT;
	DECLARE curEan CHAR(13);
	DECLARE no_more_rows BOOLEAN;
	DECLARE loop_cntr INT DEFAULT 0;
	DECLARE num_rows INT DEFAULT 0;
	DECLARE v INT;
	DECLARE min_genoeg INT DEFAULT 0;
	DECLARE max_genoeg INT DEFAULT 0;
	
	DECLARE eanCursor CURSOR FOR SELECT DISTINCT Ean FROM OrderschermRegels WHERE FysiekeVoorraad > 0;
	DECLARE idCursor  CURSOR FOR SELECT DISTINCT BestellingId FROM OrderschermRegels R JOIN OrderregelStatusPlat P USING ( Id ) WHERE R.FysiekeVoorraad>0 OR R.CBLeverbaar>0 OR niet_inpakken=1;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
	SELECT GET_LOCK('orderscherm',1);
	
	SET @_dbg_voorrang = 0;
	SET @_dbg_bakje    = 0;
	
	SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
	START TRANSACTION;
	
	OPEN eanCursor;
	the_loop: LOOP
		FETCH eanCursor INTO curEan;
		
		IF no_more_rows THEN
			CLOSE eanCursor;
			LEAVE the_loop;
		END IF;
		
		CALL orderschermregels_voorrang( curEan );
		SET @_dbg_voorrang = @_dbg_voorrang + 1;
	END LOOP the_loop;	
	
	COMMIT;
	
	SELECT RELEASE_LOCK('orderscherm');
	SELECT 'klaar';
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `orderschermregels_ordermutatie` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `orderschermregels_ordermutatie`( _orderid INT )
BEGIN
	DECLARE _afwijkend INT;
	DECLARE _started INT DEFAULT 0;
	DECLARE _deadlock INT DEFAULT 0;
	DECLARE _had_deadlock INT DEFAULT 0;
	DECLARE _attempts INT DEFAULT 0;
	DECLARE _lockname TEXT DEFAULT CONCAT( 'mutatie_',_orderid);
	DECLARE _bulk_lockname TEXT DEFAULT 'orderscherm-bulk';
	DECLARE _got_lock INT DEFAULT 0;
	DECLARE _bulk_lock INT DEFAULT 0;
	DECLARE _used_lock INT DEFAULT 0;
	DECLARE _used_bulk_lock INT DEFAULT 0;
	DECLARE _start DATETIME(3);
	DECLARE _end DATETIME(3);
	SET SESSION innodb_lock_wait_timeout = 4; 		
	
	body: 
	BEGIN
		SET _used_lock = is_used_lock( _lockname );
		SET _used_bulk_lock = IS_USED_LOCK( _bulk_lockname );
		SET _start = NOW(3);
		IF _used_lock > 0 OR _used_bulk_lock > 0 THEN 
			INSERT INTO tmp.`OrderschermLog` SET Context = IFNULL(@context,''), ConnectionId = CONNECTION_ID(), OrderId = _orderid, BlockingId = _used_lock, Msg = CONCAT( 'Dubbele lock: ', IFNULL(_lockname,'*GEEN*'), ' ', _used_lock, ' Bulk lock in gebruik: ', IFNULL(_used_bulk_lock,'*GEEN*') );
		END IF;
		
		INSERT INTO tmp.`OrderschermLog` SET Context = IFNULL(@context,''), ConnectionId = CONNECTION_ID(), OrderId = _orderid, Msg = CONCAT( 'Begin mutatie: ', _lockname );		
		
		-- SET _bulk_lock = GET_LOCK(_bulk_lockname,20);
		SET _got_lock  = GET_LOCK(_lockname,5);
		IF _got_lock THEN	
			attempt_loop: WHILE( _attempts < 10 ) DO
				BEGIN
					DECLARE deadlock_detected CONDITION FOR 1213;
					DECLARE EXIT HANDLER FOR deadlock_detected
						BEGIN
							ROLLBACK;
							SET _deadlock=1;
							SET _had_deadlock=1;
							DO SLEEP(0.2);
							INSERT INTO tmp.`OrderschermLog` SET Msg = CONCAT( 'Deadlock! ', IFNULL(_orderid,'!N'), ' ', IFNULL(_attempts,'!N') );
						END;
						
					SET _deadlock=0;
					
					START TRANSACTION;
					SELECT * FROM OrderschermRegels WHERE BestellingId = _orderid FOR UPDATE;
					CALL orderschermregels_ordermutatie_backend( _orderid );
					CALL orderschermregel_bakje( _orderid );
					CALL orderschermregel_bereken_levering( _orderid );
				
					/* Afwijkend factuuradres */
					SELECT COUNT(*) INTO _afwijkend FROM Managementboek_Klanten.`Klanten_met_adres` A JOIN Managementboek_Klanten.BestellingAll USING ( Klantid ) JOIN Managementboek_Klanten.`BestellingAdressen` B USING ( BestellingId )
						WHERE B.BestellingId = _orderid AND ( B.FactuurPostcode != A.Postcode OR B.FactuurHuisnummer != A.Huisnummer OR B.FactuurLand != A.Land );
					
					IF _afwijkend THEN
						UPDATE Managementboek_Klanten.`BestellingAdressen` A SET A.AfwijkendFactuurAdres=1 WHERE AfwijkendFactuurAdres = 0 AND BestellingId = _orderid;
					END IF;
						
					/* Afwijkend verzendadres */
					SELECT COUNT(*) INTO _afwijkend FROM Managementboek_Klanten.`Klanten_met_adres` A JOIN Managementboek_Klanten.BestellingAll USING ( Klantid ) JOIN Managementboek_Klanten.`BestellingAdressen` B USING ( BestellingId )
						WHERE B.BestellingId = _orderid AND ( B.VerzendPostcode != A.Postcode OR B.VerzendHuisnummer != A.Huisnummer OR B.VerzendLand != A.Land );
					
					IF _afwijkend THEN
						UPDATE Managementboek_Klanten.`BestellingAdressen` A SET A.AfwijkendVerzendAdres=1 WHERE AfwijkendVerzendAdres = 0 AND BestellingId = _orderid;
					END IF;
					
					COMMIT;	
				END;
				
				IF _deadlock=0 THEN
					LEAVE attempt_loop;
				ELSE
					SET _attempts = _attempts + 1;
				END IF;
			END WHILE attempt_loop;
			SET @_last_deadlock = CONCAT( 'Deadlock: ', _deadlock, ' attempts: ', _attempts );
			
			IF _had_deadlock=1 THEN
				INSERT INTO tmp.`OrderschermLog` SET Context = IFNULL(@context,''), ConnectionId = CONNECTION_ID(), OrderId = _orderid, Msg = CONCAT( CONNECTION_ID(), ' Deadlock success after: ', _attempts );		
			END IF;
		END IF;
		
		DO RELEASE_LOCK( _lockname );
		-- DO RELEASE_LOCK( _bulk_lockname );
		
		INSERT INTO tmp.`OrderschermLog` SET Context = IFNULL(@context,''), ConnectionId = CONNECTION_ID(), OrderId = _orderid, Duration = TIMEDIFF( NOW(3), _start ), Msg = CONCAT( 'Einde mutatie: ', _lockname, ' [', TIMEDIFF( NOW(3), _start ), '] ' );		
	END body;
	
	DO RELEASE_LOCK( _lockname );
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `orderschermregels_ordermutatie_backend` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `orderschermregels_ordermutatie_backend`( _orderid INT )
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 v INT;
	DECLARE min_genoeg INT DEFAULT 0;
	DECLARE max_genoeg INT default 0;
	DECLARE cb_leverbaar INT DEFAULT 0;
	DECLARE alles_leverbaar INT DEFAULT 0;
	DECLARE _geaccepteerd INT;
	DECLARE _institutioneel INT;
	DECLARE _geprint INT;
	DECLARE _ingepakt INT;
	DECLARE _niet_inpakken INT;
	DECLARE _opmerking INT;
	DECLARE _opmerking_negeren INT;
	DECLARE _geparkeerd INT;
	DECLARE _kso INT;
	DECLARE _risico INT;
	DECLARE _adres INT;
	
	DECLARE __Id int;
	DECLARE __BestellingId int;
	DECLARE __OrigineelBestellingId int;
	DECLARE __DT datetime DEFAULT NULL;
	DECLARE __Ean char(13);
	DECLARE __BoekStatus tinyint;
	DECLARE __Aantal int;
	DECLARE __AantalBackorder int;
	DECLARE __Geleverd int;
	DECLARE __Gereserveerd int;
	DECLARE __Leverbaar tinyint;
	DECLARE __DeelLeverbaar tinyint;
	DECLARE __Splitsbaar tinyint;
	DECLARE __Wacht tinyint;
	DECLARE __VerstuurCompleteOrder tinyint;
	DECLARE __BeschikbareVoorraad int;
	DECLARE __GereserveerdeVoorraad int;
	DECLARE __FysiekeVoorraad int;
	DECLARE __GeprinteVoorraad int;
	DECLARE __NogNietGeprint int;
	DECLARE __Bindwijze_voorraadartikel tinyint;
	DECLARE __Bindwijze_evenement tinyint;
	DECLARE __Voorafgaand int;
	DECLARE __GenoegVoorraad tinyint;
	DECLARE __CB24Leverbaar int;
	DECLARE __CBLeverbaar tinyint;
	DECLARE __FeedLeverbaar tinyint;
	DECLARE __Bakje char(15);
	DECLARE __BakjeReden char(100);
	DECLARE __Bron char(10);
	DECLARE __NietReserveren tinyint;
	DECLARE __Magazijn tinyint;
	DECLARE __MagONE tinyint;
	DECLARE __AantalOnderweg int;
	DECLARE __OnderwegSinds datetime DEFAULT NULL;
	DECLARE __Risico_Geaccepteerd tinyint;
	DECLARE __Adres_Geaccepteerd tinyint;
	DECLARE __LeverenMB int;
	DECLARE __LeverenCB int;
	DECLARE __LeverenNiet int;
	DECLARE __LeverenPad char(20);
	DECLARE __PromoBoek tinyint;
	DECLARE __PromoReden tinyint;
	DECLARE __DTVerwacht date DEFAULT NULL;
	DECLARE __bakje_proto_magazijn tinyint;
	DECLARE __bakje_vink_open tinyint;
	DECLARE __Gewist tinyint;
	
	DECLARE eanCursor CURSOR FOR SELECT DISTINCT Ean FROM Bestellingen WHERE BestellingId = _orderid AND Ean NOT IN ( '9789059653603', 'porto', 'grotius','bong', 'voucher', 'coach' );
	DECLARE updateCursor CURSOR FOR SELECT 
		Id, N.BestellingId, OrigineelBestellingId, A.DT, N.Ean, COALESCE( B.Boekstatus, C.Boekstatus, F.Boekstatus, IF( E.`Code`, 998, NULL ), 999 ) Boekstatus, N.Aantal+N.`AantalBackorder` Aantal,
		orderregel_geleverd_nieuw( N.Id ) AS Geleverd,
		VR.FysiekeMBVoorraad, IFNULL(PR.`GeprintAantal`,0), IFNULL(PR.`NogNietGeprint`,0),
		COALESCE( IF(B.Ean,'Manpo',NULL), IF(C.Ean,'CB',NULL), IF(F.Ean,'Feeds',NULL), IF( E.`Code`, 'Handmatig', NULL ), 'Onbekend' ),
		/* VerstuurCompleteOrder*/ A.VerstuurCompleteOrder,
		/* CBLeverbaar */ IFNULL( ( (ORVO.`mag_one`)=1 AND IFNULL(C.Boekstatus,99)=0 AND IFNULL(N.IsPromo,0)=0 ) OR ( N.Ean IN ('VOUCHER', 'PORTO', 'IDEAL', 'B', 'P', 'BORTO', 'GROTIUS') OR (IFNULL(Bindwijze_boekenweekgeschenk,0)=1) ), 0 ),
		IF( F.Boekstatus = 0, 1, 0 ),
		/* CBLeverbaar */ COALESCE( Bindwijze_voorraadartikel, IF( N.Ean IN ('VOUCHER', 'PORTO', 'IDEAL', 'B', 'P', 'BORTO'), 0, NULL ), 1 ),
		IFNULL( Bindwijze_Evenement, 0 ),
		(R.vink_open=1 AND R.niet_reserveren=0),
		R.niet_reserveren,
		R.vink_magazijn,
		/*MagONE*/( (ORVO.`mag_one`)=1 AND IFNULL(C.Boekstatus,99)=0 AND IFNULL(N.IsPromo,0)=0 ) OR Bindwijze_Boekenweekgeschenk=1,
		IFNULL(AantalOnderweg,0),
		OW.DT OnderwegSinds,
		/* Promoboek, PromoReden */ IF( Bindwijze_boekenweekgeschenk, 0, N.IsPromo ), IF( PB.Ean IS NULL, 0, 1 ),
		COALESCE( B.Herdrukdatum, C.Herdrukdatum, B.Verschijningsdatum, C.Verschijningsdatum, '0000-00-00' ),
		( KR.geannuleerd = 0 AND PKR.geannuleerd = 0 AND KR.afgesloten = 0 AND KR.klantannulering = 0 AND R.levering = 1 AND R.leveren_via_cb = 0 AND R.ingepakt = 0 AND R.niet_inpakken = 0 ) AS proto_magazijn,  /** HACK: vink_magazijn is eigenlijk niet toereikend **/
		R.vink_open,
		0 /* Gewist */,
		IFNULL(ACC.Adres_Geaccepteerd, 0), IFNULL(ACC.Risico_Geaccepteerd, 0)
		FROM OrderregelStatusPlat R 
		JOIN Bestellingen N USING ( Id ) 		
		JOIN BestellingAll A ON ( N.BestellingId = A.BestellingId )
		JOIN OrderregelsViaONE ORVO USING ( Id )
		JOIN OrderkopStatusPlat KR ON ( N.BestellingID = KR.BestellingID )
		LEFT JOIN BestellingAcceptatie ACC ON ( ACC.BestellingID = A.BestellingID )
		LEFT JOIN OrderkopStatusPlat PKR ON ( A.OrigineelBestellingID = PKR.BestellingID )
		LEFT JOIN Voorraadbeheer.`VoorraadInclusiefCB` VR ON ( N.Ean = VR.Ean )
		LEFT JOIN Voorraadbeheer.`GeprinteVoorraad` PR ON ( N.Ean = PR.Ean )
		LEFT JOIN Manpo.Boeken B ON ( N.Ean = B.Ean )
		LEFT JOIN Manpo.`Uitgevers` U ON ( B.UitgeverId = U.UitgeverId )
		LEFT JOIN CbBoeken.`Uitgevers_cb_mb` MAP ON ( U.UitgeverID = MAP.`Uitgeverid` ) 
		LEFT JOIN CbBoeken.`Uitgevers` CBU ON (MAP.`cb_id` = CBU.`cb_id` )		
		LEFT JOIN Manpo.Bindwijze BW ON ( B.Bindwijze = BW.Bindwijze )
		LEFT JOIN CbBoeken.Boeken C ON ( N.Ean = C.Ean )
		LEFT JOIN Managementboek_Klanten.`ExactArtikelen` E ON ( N.Ean = E.`Code` )
		LEFT JOIN Feeds.`DagPrijzen` FD ON ( N.Ean = FD.Ean )
		LEFT JOIN Feeds.`Boeken` F ON ( N.Ean = F.Ean AND FD.Feedcode = F.Feedcode )
		LEFT JOIN CbBestellingen.AantalOnderweg OW ON ( OW.Ean = N.Ean )
		LEFT JOIN Promo_eans_actief PB ON ( PB.Ean = N.Ean )
		WHERE N.BestellingID = _orderid
			AND (( R.vink_open=1 AND A.OrigineelBestellingId=0) OR ( R.vink_magazijn=1 AND A.OrigineelBestellingId != 0 )
			 OR ( KR.geannuleerd = 0 AND PKR.geannuleerd = 0 AND KR.afgesloten = 0 AND KR.klantannulering = 0 AND R.levering = 1 AND R.leveren_via_cb = 0 AND R.ingepakt = 0 AND R.niet_inpakken = 0 ))
		HAVING ( Aantal - Geleverd <> 0 ) OR ( vink_magazijn = 1 ) OR ( proto_magazijn = 1 );
	
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
	
	SELECT * FROM OrderschermRegels WHERE BestellingId = _orderid FOR UPDATE;
	UPDATE OrderschermRegels SET Gewist=1 WHERE BestellingId = _orderid;
	OPEN updateCursor;
	update_loop: LOOP
		FETCH updateCursor INTO __Id, __BestellingId, __OrigineelBestellingId, __DT, __Ean, __BoekStatus, __Aantal, __Geleverd, __FysiekeVoorraad, __GeprinteVoorraad, __NogNietGeprint, __Bron, __VerstuurCompleteOrder, __CBLeverbaar, __FeedLeverbaar, __Bindwijze_voorraadartikel, __Bindwijze_Evenement, __Gereserveerd, __NietReserveren, __Magazijn, __MagONE, __AantalOnderweg, __OnderwegSinds, __PromoBoek, __PromoReden, __DTVerwacht, __bakje_proto_magazijn, __bakje_vink_open, __Gewist, __Adres_Geaccepteerd, __Risico_Geaccepteerd;
		
		IF no_more_rows THEN
			CLOSE updateCursor;
			LEAVE update_loop;
		END IF;
		
		INSERT INTO OrderschermRegels 
			( Id, BestellingId, OrigineelBestellingId, DT, Ean, BoekStatus, Aantal, Geleverd, FysiekeVoorraad, GeprinteVoorraad, NogNietGeprint, Bron, VerstuurCompleteOrder, CBLeverbaar, FeedLeverbaar, Bindwijze_voorraadartikel, Bindwijze_Evenement, Gereserveerd, NietReserveren, Magazijn, MagONE, AantalOnderweg, OnderwegSinds, PromoBoek, PromoReden, DTVerwacht, bakje_proto_magazijn, bakje_vink_open, Gewist, Adres_Geaccepteerd, Risico_Geaccepteerd )
		VALUES
			( __Id, __BestellingId, __OrigineelBestellingId, __DT, __Ean, __BoekStatus, __Aantal, __Geleverd, __FysiekeVoorraad, __GeprinteVoorraad, __NogNietGeprint, __Bron, __VerstuurCompleteOrder, __CBLeverbaar, __FeedLeverbaar, __Bindwijze_voorraadartikel, __Bindwijze_Evenement, __Gereserveerd, __NietReserveren, __Magazijn, __MagONE, __AantalOnderweg, __OnderwegSinds, __PromoBoek, __PromoReden, __DTVerwacht, __bakje_proto_magazijn, __bakje_vink_open, __Gewist, __Adres_Geaccepteerd, __Risico_Geaccepteerd )
		ON DUPLICATE KEY UPDATE
			Id=VALUES(Id), BestellingId=VALUES(BestellingId), OrigineelBestellingId=VALUES(OrigineelBestellingId), DT=VALUES(DT), Ean=VALUES(Ean), BoekStatus=VALUES(BoekStatus), Aantal=VALUES(Aantal), 
			Geleverd=VALUES(Geleverd), FysiekeVoorraad=VALUES(FysiekeVoorraad), GeprinteVoorraad=VALUES(GeprinteVoorraad), NogNietGeprint=VALUES(NogNietGeprint), Bron=VALUES(Bron), 
			VerstuurCompleteOrder=VALUES(VerstuurCompleteOrder), CBLeverbaar=VALUES(CBLeverbaar), FeedLeverbaar=VALUES(FeedLeverbaar), Bindwijze_voorraadartikel=VALUES(Bindwijze_voorraadartikel), 
			Bindwijze_Evenement=VALUES(Bindwijze_Evenement), Gereserveerd=VALUES(Gereserveerd), NietReserveren=VALUES(NietReserveren), Magazijn=VALUES(Magazijn), MagONE=VALUES(MagONE), 
			AantalOnderweg=VALUES(AantalOnderweg), OnderwegSinds=VALUES(OnderwegSinds), PromoBoek=VALUES(PromoBoek), PromoReden=VALUES(PromoReden), DTVerwacht=VALUES(DTVerwacht), 
			bakje_proto_magazijn=VALUES(bakje_proto_magazijn), bakje_vink_open=VALUES(bakje_vink_open), Gewist=VALUES(Gewist), Adres_Geaccepteerd=VALUES(Adres_Geaccepteerd), 
			Risico_Geaccepteerd=VALUES(Risico_Geaccepteerd);
			
	END LOOp update_loop;
	
	DELETE FROM OrderschermRegels WHERE Gewist=1 AND BestellingId = _orderid;
	
	SET no_more_rows = FALSE;
	SET @orderid = _orderid;
	OPEN eanCursor;
	the_loop: LOOP
		FETCH eanCursor INTO curEan;
		
		IF no_more_rows THEN
			CLOSE eanCursor;
			LEAVE the_loop;
		END IF;
		
		CALL orderschermregels_voorrang( curEan );
	END LOOP the_loop;
	
	-- Hack voor boekenweekdrama 2016
	UPDATE OrderschermRegels SET GenoegVoorraad=1, CB24Leverbaar=1, CBLeverbaar=1, `FysiekeVoorraad`=2000, GeprinteVoorraad=0 WHERE Ean = '9789059653603' AND BestellingId = _orderid;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `orderschermregels_ordermutatie_backend_orig` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `orderschermregels_ordermutatie_backend_orig`( _orderid INT )
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 v INT;
	DECLARE min_genoeg INT DEFAULT 0;
	DECLARE max_genoeg INT default 0;
	DECLARE cb_leverbaar INT DEFAULT 0;
	DECLARE alles_leverbaar INT DEFAULT 0;
	DECLARE _geaccepteerd INT;
	DECLARE _institutioneel INT;
	DECLARE _geprint INT;
	DECLARE _ingepakt INT;
	DECLARE _niet_inpakken INT;
	DECLARE _opmerking INT;
	DECLARE _opmerking_negeren INT;
	DECLARE _geparkeerd INT;
	DECLARE _kso INT;
	DECLARE _risico INT;
	DECLARE _adres INT;
	
	DECLARE eanCursor CURSOR FOR SELECT DISTINCT Ean FROM Bestellingen WHERE BestellingId = _orderid;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
	
	-- CALL herbereken_reserveringen( _orderid );
	-- UPDATE Bestellingen N JOIN OrderregelStatusPlat P USING ( Id ) SET P.`geannuleerd`=1 WHERE N.`Geannuleerd`=1 AND P.`geannuleerd`=0 AND BestellingId = _orderid;
	
	UPDATE OrderschermRegels SET Gewist=1 WHERE BestellingId = _orderid;
	REPLACE INTO OrderschermRegels ( Id, BestellingId, OrigineelBestellingId, DT, Ean, BoekStatus, Aantal, Geleverd, FysiekeVoorraad, GeprinteVoorraad, NogNietGeprint, Bron, VerstuurCompleteOrder, CBLeverbaar, FeedLeverbaar, Bindwijze_voorraadartikel, Bindwijze_Evenement, Gereserveerd, NietReserveren, Magazijn, MagONE, AantalOnderweg, OnderwegSinds, PromoBoek, PromoReden, DTVerwacht, bakje_proto_magazijn, bakje_vink_open, Gewist, Adres_Geaccepteerd, Risico_Geaccepteerd )
	SELECT 
		Id, N.BestellingId, OrigineelBestellingId, A.DT, N.Ean, COALESCE( B.Boekstatus, C.Boekstatus, F.Boekstatus, IF( E.`Code`, 998, NULL ), 999 ) Boekstatus, N.Aantal+N.`AantalBackorder` Aantal,
		orderregel_geleverd_nieuw( N.Id ) AS Geleverd,
		VR.FysiekeMBVoorraad, IFNULL(PR.`GeprintAantal`,0), IFNULL(PR.`NogNietGeprint`,0),
		COALESCE( IF(B.Ean,'Manpo',NULL), IF(C.Ean,'CB',NULL), IF(F.Ean,'Feeds',NULL), IF( E.`Code`, 'Handmatig', NULL ), 'Onbekend' ),
		/* VerstuurCompleteOrder*/ A.VerstuurCompleteOrder,
		/* CBLeverbaar */ ( (ORVO.`mag_one`)=1 AND IFNULL(C.Boekstatus,99)=0 AND IFNULL(N.IsPromo,0)=0 ) OR ( N.Ean IN ('VOUCHER', 'PORTO', 'IDEAL', 'B', 'P', 'BORTO', 'GROTIUS') ),
		IF( F.Boekstatus = 0, 1, 0 ),
		/* CBLeverbaar */ COALESCE( Bindwijze_voorraadartikel, IF( N.Ean IN ('VOUCHER', 'PORTO', 'IDEAL', 'B', 'P', 'BORTO'), 0, NULL ), 1 ),
		IFNULL( Bindwijze_Evenement, 0 ),
		(R.vink_open=1 AND R.niet_reserveren=0),
		R.niet_reserveren,
		R.vink_magazijn,
		(ORVO.`mag_one`)=1 AND IFNULL(C.Boekstatus,99)=0 AND IFNULL(N.IsPromo,0)=0,
		IFNULL(AantalOnderweg,0),
		OW.DT OnderwegSinds,
		/* Promoboek, PromoReden */ N.IsPromo, IF( PB.Ean IS NULL, 0, 1 ),
		COALESCE( B.Herdrukdatum, C.Herdrukdatum, B.Verschijningsdatum, C.Verschijningsdatum, '0000-00-00' ),
		( KR.geannuleerd = 0 AND PKR.geannuleerd = 0 AND KR.afgesloten = 0 AND KR.klantannulering = 0 AND R.levering = 1 AND R.leveren_via_cb = 0 AND R.ingepakt = 0 AND R.niet_inpakken = 0 ) AS proto_magazijn,  /** HACK: vink_magazijn is eigenlijk niet toereikend **/
		R.vink_open,
		0 /* Gewist */,
		IFNULL(ACC.Adres_Geaccepteerd, 0), IFNULL(ACC.Risico_Geaccepteerd, 0)
		FROM OrderregelStatusPlat R 
		JOIN Bestellingen N USING ( Id ) 		
		JOIN BestellingAll A ON ( N.BestellingId = A.BestellingId )
		JOIN OrderregelsViaONE ORVO USING ( Id )
		JOIN OrderkopStatusPlat KR ON ( N.BestellingID = KR.BestellingID )
		LEFT JOIN BestellingAcceptatie ACC ON ( ACC.BestellingID = A.BestellingID )
		LEFT JOIN OrderkopStatusPlat PKR ON ( A.OrigineelBestellingID = PKR.BestellingID )
		LEFT JOIN Voorraadbeheer.`VoorraadInclusiefCB` VR ON ( N.Ean = VR.Ean )
		LEFT JOIN Voorraadbeheer.`GeprinteVoorraad` PR ON ( N.Ean = PR.Ean )
		LEFT JOIN Manpo.Boeken B ON ( N.Ean = B.Ean )
		LEFT JOIN Manpo.`Uitgevers` U ON ( B.UitgeverId = U.UitgeverId )
		LEFT JOIN CbBoeken.`Uitgevers_cb_mb` MAP ON ( U.UitgeverID = MAP.`Uitgeverid` ) 
		LEFT JOIN CbBoeken.`Uitgevers` CBU ON (MAP.`cb_id` = CBU.`cb_id` )		
		LEFT JOIN Manpo.Bindwijze BW ON ( B.Bindwijze = BW.Bindwijze )
		LEFT JOIN CbBoeken.Boeken C ON ( N.Ean = C.Ean )
		LEFT JOIN Managementboek_Klanten.`ExactArtikelen` E ON ( N.Ean = E.`Code` )
		LEFT JOIN Feeds.`DagPrijzen` FD ON ( N.Ean = FD.Ean )
		LEFT JOIN Feeds.`Boeken` F ON ( N.Ean = F.Ean AND FD.Feedcode = F.Feedcode )
		LEFT JOIN CbBestellingen.AantalOnderweg OW ON ( OW.Ean = N.Ean )
		LEFT JOIN Promo_eans_actief PB ON ( PB.Ean = N.Ean )
		WHERE N.BestellingID = _orderid
			AND (( R.vink_open=1 AND A.OrigineelBestellingId=0) OR ( R.vink_magazijn=1 AND A.OrigineelBestellingId != 0 )
			 OR ( KR.geannuleerd = 0 AND PKR.geannuleerd = 0 AND KR.afgesloten = 0 AND KR.klantannulering = 0 AND R.levering = 1 AND R.leveren_via_cb = 0 AND R.ingepakt = 0 AND R.niet_inpakken = 0 ))
		HAVING ( Aantal - Geleverd <> 0 ) OR ( vink_magazijn = 1 ) OR ( proto_magazijn = 1 );
	
	DELETE FROM OrderschermRegels WHERE Gewist=1 AND BestellingId = _orderid;
	
	OPEN eanCursor;
	the_loop: LOOP
		FETCH eanCursor INTO curEan;
		
		IF no_more_rows THEN
			CLOSE eanCursor;
			LEAVE the_loop;
		END IF;
		
		CALL orderschermregels_voorrang( curEan );
	END LOOP the_loop;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `orderschermregels_ordermutatie_backend_test` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `orderschermregels_ordermutatie_backend_test`( _orderid INT )
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 v INT;
	DECLARE min_genoeg INT DEFAULT 0;
	DECLARE max_genoeg INT default 0;
	DECLARE cb_leverbaar INT DEFAULT 0;
	DECLARE alles_leverbaar INT DEFAULT 0;
	DECLARE _geaccepteerd INT;
	DECLARE _institutioneel INT;
	DECLARE _geprint INT;
	DECLARE _ingepakt INT;
	DECLARE _niet_inpakken INT;
	DECLARE _opmerking INT;
	DECLARE _opmerking_negeren INT;
	DECLARE _geparkeerd INT;
	DECLARE _kso INT;
	DECLARE _risico INT;
	DECLARE _adres INT;
	
	DECLARE __Id int;
	DECLARE __BestellingId int;
	DECLARE __OrigineelBestellingId int;
	DECLARE __DT datetime DEFAULT NULL;
	DECLARE __Ean char(13);
	DECLARE __BoekStatus tinyint;
	DECLARE __Aantal int;
	DECLARE __AantalBackorder int;
	DECLARE __Geleverd int;
	DECLARE __Gereserveerd int;
	DECLARE __Leverbaar tinyint;
	DECLARE __DeelLeverbaar tinyint;
	DECLARE __Splitsbaar tinyint;
	DECLARE __Wacht tinyint;
	DECLARE __VerstuurCompleteOrder tinyint;
	DECLARE __BeschikbareVoorraad int;
	DECLARE __GereserveerdeVoorraad int;
	DECLARE __FysiekeVoorraad int;
	DECLARE __GeprinteVoorraad int;
	DECLARE __NogNietGeprint int;
	DECLARE __Bindwijze_voorraadartikel tinyint;
	DECLARE __Bindwijze_evenement tinyint;
	DECLARE __Voorafgaand int;
	DECLARE __GenoegVoorraad tinyint;
	DECLARE __CB24Leverbaar int;
	DECLARE __CBLeverbaar tinyint;
	DECLARE __FeedLeverbaar tinyint;
	DECLARE __Bakje char(15);
	DECLARE __BakjeReden char(100);
	DECLARE __Bron char(10);
	DECLARE __NietReserveren tinyint;
	DECLARE __Magazijn tinyint;
	DECLARE __MagONE tinyint;
	DECLARE __AantalOnderweg int;
	DECLARE __OnderwegSinds datetime DEFAULT NULL;
	DECLARE __Risico_Geaccepteerd tinyint;
	DECLARE __Adres_Geaccepteerd tinyint;
	DECLARE __LeverenMB int;
	DECLARE __LeverenCB int;
	DECLARE __LeverenNiet int;
	DECLARE __LeverenPad char(20);
	DECLARE __PromoBoek tinyint;
	DECLARE __PromoReden tinyint;
	DECLARE __DTVerwacht date DEFAULT NULL;
	DECLARE __bakje_proto_magazijn tinyint;
	DECLARE __bakje_vink_open tinyint;
	DECLARE __Gewist tinyint;
	
	DECLARE eanCursor CURSOR FOR SELECT DISTINCT Ean FROM Bestellingen WHERE BestellingId = _orderid;
	DECLARE updateCursor CURSOR FOR SELECT 
		Id, N.BestellingId, OrigineelBestellingId, A.DT, N.Ean, COALESCE( B.Boekstatus, C.Boekstatus, F.Boekstatus, IF( E.`Code`, 998, NULL ), 999 ) Boekstatus, N.Aantal+N.`AantalBackorder` Aantal,
		orderregel_geleverd_nieuw( N.Id ) AS Geleverd,
		VR.FysiekeMBVoorraad, IFNULL(PR.`GeprintAantal`,0), IFNULL(PR.`NogNietGeprint`,0),
		COALESCE( IF(B.Ean,'Manpo',NULL), IF(C.Ean,'CB',NULL), IF(F.Ean,'Feeds',NULL), IF( E.`Code`, 'Handmatig', NULL ), 'Onbekend' ),
		/* VerstuurCompleteOrder*/ A.VerstuurCompleteOrder,
		/* CBLeverbaar */ ( (ORVO.`mag_one`)=1 AND IFNULL(C.Boekstatus,99)=0 AND IFNULL(N.IsPromo,0)=0 ) OR ( N.Ean IN ('VOUCHER', 'PORTO', 'IDEAL', 'B', 'P', 'BORTO', 'GROTIUS') ),
		IF( F.Boekstatus = 0, 1, 0 ),
		/* CBLeverbaar */ COALESCE( Bindwijze_voorraadartikel, IF( N.Ean IN ('VOUCHER', 'PORTO', 'IDEAL', 'B', 'P', 'BORTO'), 0, NULL ), 1 ),
		IFNULL( Bindwijze_Evenement, 0 ),
		(R.vink_open=1 AND R.niet_reserveren=0),
		R.niet_reserveren,
		R.vink_magazijn,
		(ORVO.`mag_one`)=1 AND IFNULL(C.Boekstatus,99)=0 AND IFNULL(N.IsPromo,0)=0,
		IFNULL(AantalOnderweg,0),
		OW.DT OnderwegSinds,
		/* Promoboek, PromoReden */ N.IsPromo, IF( PB.Ean IS NULL, 0, 1 ),
		COALESCE( B.Herdrukdatum, C.Herdrukdatum, B.Verschijningsdatum, C.Verschijningsdatum, '0000-00-00' ),
		( KR.geannuleerd = 0 AND PKR.geannuleerd = 0 AND KR.afgesloten = 0 AND KR.klantannulering = 0 AND R.levering = 1 AND R.leveren_via_cb = 0 AND R.ingepakt = 0 AND R.niet_inpakken = 0 ) AS proto_magazijn,  /** HACK: vink_magazijn is eigenlijk niet toereikend **/
		R.vink_open,
		0 /* Gewist */,
		IFNULL(ACC.Adres_Geaccepteerd, 0), IFNULL(ACC.Risico_Geaccepteerd, 0)
		FROM OrderregelStatusPlat R 
		JOIN Bestellingen N USING ( Id ) 		
		JOIN BestellingAll A ON ( N.BestellingId = A.BestellingId )
		JOIN OrderregelsViaONE ORVO USING ( Id )
		JOIN OrderkopStatusPlat KR ON ( N.BestellingID = KR.BestellingID )
		LEFT JOIN BestellingAcceptatie ACC ON ( ACC.BestellingID = A.BestellingID )
		LEFT JOIN OrderkopStatusPlat PKR ON ( A.OrigineelBestellingID = PKR.BestellingID )
		LEFT JOIN Voorraadbeheer.`VoorraadInclusiefCB` VR ON ( N.Ean = VR.Ean )
		LEFT JOIN Voorraadbeheer.`GeprinteVoorraad` PR ON ( N.Ean = PR.Ean )
		LEFT JOIN Manpo.Boeken B ON ( N.Ean = B.Ean )
		LEFT JOIN Manpo.`Uitgevers` U ON ( B.UitgeverId = U.UitgeverId )
		LEFT JOIN CbBoeken.`Uitgevers_cb_mb` MAP ON ( U.UitgeverID = MAP.`Uitgeverid` ) 
		LEFT JOIN CbBoeken.`Uitgevers` CBU ON (MAP.`cb_id` = CBU.`cb_id` )		
		LEFT JOIN Manpo.Bindwijze BW ON ( B.Bindwijze = BW.Bindwijze )
		LEFT JOIN CbBoeken.Boeken C ON ( N.Ean = C.Ean )
		LEFT JOIN Managementboek_Klanten.`ExactArtikelen` E ON ( N.Ean = E.`Code` )
		LEFT JOIN Feeds.`DagPrijzen` FD ON ( N.Ean = FD.Ean )
		LEFT JOIN Feeds.`Boeken` F ON ( N.Ean = F.Ean AND FD.Feedcode = F.Feedcode )
		LEFT JOIN CbBestellingen.AantalOnderweg OW ON ( OW.Ean = N.Ean )
		LEFT JOIN Promo_eans_actief PB ON ( PB.Ean = N.Ean )
		WHERE N.BestellingID = _orderid
			AND (( R.vink_open=1 AND A.OrigineelBestellingId=0) OR ( R.vink_magazijn=1 AND A.OrigineelBestellingId != 0 )
			 OR ( KR.geannuleerd = 0 AND PKR.geannuleerd = 0 AND KR.afgesloten = 0 AND KR.klantannulering = 0 AND R.levering = 1 AND R.leveren_via_cb = 0 AND R.ingepakt = 0 AND R.niet_inpakken = 0 ))
		HAVING ( Aantal - Geleverd <> 0 ) OR ( vink_magazijn = 1 ) OR ( proto_magazijn = 1 );
	
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
	
	UPDATE OrderschermRegels SET Gewist=1 WHERE BestellingId = _orderid;
	OPEN updateCursor;
	update_loop: LOOP
		FETCH updateCursor INTO __Id, __BestellingId, __OrigineelBestellingId, __DT, __Ean, __BoekStatus, __Aantal, __Geleverd, __FysiekeVoorraad, __GeprinteVoorraad, __NogNietGeprint, __Bron, __VerstuurCompleteOrder, __CBLeverbaar, __FeedLeverbaar, __Bindwijze_voorraadartikel, __Bindwijze_Evenement, __Gereserveerd, __NietReserveren, __Magazijn, __MagONE, __AantalOnderweg, __OnderwegSinds, __PromoBoek, __PromoReden, __DTVerwacht, __bakje_proto_magazijn, __bakje_vink_open, __Gewist, __Adres_Geaccepteerd, __Risico_Geaccepteerd;
		
		IF no_more_rows THEN
			CLOSE updateCursor;
			LEAVE update_loop;
		END IF;
		
		INSERT INTO OrderschermRegels 
			( Id, BestellingId, OrigineelBestellingId, DT, Ean, BoekStatus, Aantal, Geleverd, FysiekeVoorraad, GeprinteVoorraad, NogNietGeprint, Bron, VerstuurCompleteOrder, CBLeverbaar, FeedLeverbaar, Bindwijze_voorraadartikel, Bindwijze_Evenement, Gereserveerd, NietReserveren, Magazijn, MagONE, AantalOnderweg, OnderwegSinds, PromoBoek, PromoReden, DTVerwacht, bakje_proto_magazijn, bakje_vink_open, Gewist, Adres_Geaccepteerd, Risico_Geaccepteerd )
		VALUES
			( __Id, __BestellingId, __OrigineelBestellingId, __DT, __Ean, __BoekStatus, __Aantal, __Geleverd, __FysiekeVoorraad, __GeprinteVoorraad, __NogNietGeprint, __Bron, __VerstuurCompleteOrder, __CBLeverbaar, __FeedLeverbaar, __Bindwijze_voorraadartikel, __Bindwijze_Evenement, __Gereserveerd, __NietReserveren, __Magazijn, __MagONE, __AantalOnderweg, __OnderwegSinds, __PromoBoek, __PromoReden, __DTVerwacht, __bakje_proto_magazijn, __bakje_vink_open, __Gewist, __Adres_Geaccepteerd, __Risico_Geaccepteerd )
		ON DUPLICATE KEY UPDATE
			Id=VALUES(Id), BestellingId=VALUES(BestellingId), OrigineelBestellingId=VALUES(OrigineelBestellingId), DT=VALUES(DT), Ean=VALUES(Ean), BoekStatus=VALUES(BoekStatus), Aantal=VALUES(Aantal), 
			Geleverd=VALUES(Geleverd), FysiekeVoorraad=VALUES(FysiekeVoorraad), GeprinteVoorraad=VALUES(GeprinteVoorraad), NogNietGeprint=VALUES(NogNietGeprint), Bron=VALUES(Bron), 
			VerstuurCompleteOrder=VALUES(VerstuurCompleteOrder), CBLeverbaar=VALUES(CBLeverbaar), FeedLeverbaar=VALUES(FeedLeverbaar), Bindwijze_voorraadartikel=VALUES(Bindwijze_voorraadartikel), 
			Bindwijze_Evenement=VALUES(Bindwijze_Evenement), Gereserveerd=VALUES(Gereserveerd), NietReserveren=VALUES(NietReserveren), Magazijn=VALUES(Magazijn), MagONE=VALUES(MagONE), 
			AantalOnderweg=VALUES(AantalOnderweg), OnderwegSinds=VALUES(OnderwegSinds), PromoBoek=VALUES(PromoBoek), PromoReden=VALUES(PromoReden), DTVerwacht=VALUES(DTVerwacht), 
			bakje_proto_magazijn=VALUES(bakje_proto_magazijn), bakje_vink_open=VALUES(bakje_vink_open), Gewist=VALUES(Gewist), Adres_Geaccepteerd=VALUES(Adres_Geaccepteerd), 
			Risico_Geaccepteerd=VALUES(Risico_Geaccepteerd);
			
	END LOOp update_loop;
	
	DELETE FROM OrderschermRegels WHERE Gewist=1 AND BestellingId = _orderid;
	
	OPEN eanCursor;
	the_loop: LOOP
		FETCH eanCursor INTO curEan;
		
		IF no_more_rows THEN
			CLOSE eanCursor;
			LEAVE the_loop;
		END IF;
		
		CALL orderschermregels_voorrang( curEan );
	END LOOP the_loop;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `orderschermregels_ordermutatie_test` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `orderschermregels_ordermutatie_test`( _orderid INT )
BEGIN
	DECLARE _afwijkend INT;
	DECLARE _started INT DEFAULT 0;
	DECLARE _deadlock INT DEFAULT 0;
	DECLARE _attempts INT DEFAULT 0;
	DECLARE _lockname TEXT DEFAULT CONCAT( 'mutatie_',_orderid);
	DECLARE _got_lock INT DEFAULT 0;
	DECLARE _used_lock INT DEFAULT 0;
	DECLARE _start DATETIME(3);
	DECLARE _end DATETIME(3);
	SET SESSION innodb_lock_wait_timeout = 10; 		
	
	body: 
	BEGIN
		SET _used_lock = is_used_lock( _lockname );
		SET _start = NOW(3);
		IF _used_lock > 0 THEN 
			INSERT INTO tmp.`OrderschermLog` SET Msg = CONCAT( CONNECTION_ID(), 'Dubbele lock: ', _lockname, ' ', _used_lock, ' ', IFNULL(@context,'') );
			LEAVE body;
		END IF;
		
		INSERT INTO tmp.`OrderschermLog` SET Msg = CONCAT( CONNECTION_ID(), ' Begin mutatie: ', _lockname, ' ', IFNULL(@context,'') );		
		
		SET _got_lock = GET_LOCK(_lockname,3);
		IF _got_lock THEN	
			attempt_loop: WHILE( _attempts < 4 ) DO
				BEGIN
					DECLARE deadlock_detected CONDITION FOR 1213;
					DECLARE EXIT HANDLER FOR deadlock_detected
						BEGIN
							ROLLBACK;
							SET _deadlock=1;
						END;
					SET _deadlock=0;
					
					START TRANSACTION;
						
					CALL orderschermregels_ordermutatie_backend( _orderid );
					CALL orderschermregel_bakje( _orderid );
					CALL orderschermregel_bereken_levering( _orderid );
				
					/* Afwijkend factuuradres */
					SELECT COUNT(*) INTO _afwijkend FROM Managementboek_Klanten.`Klanten_met_adres` A JOIN Managementboek_Klanten.BestellingAll USING ( Klantid ) JOIN Managementboek_Klanten.`BestellingAdressen` B USING ( BestellingId )
						WHERE B.BestellingId = _orderid AND ( B.FactuurPostcode != A.Postcode OR B.FactuurHuisnummer != A.Huisnummer OR B.FactuurLand != A.Land );
					
					IF _afwijkend THEN
						UPDATE Managementboek_Klanten.`BestellingAdressen` A SET A.AfwijkendFactuurAdres=1 WHERE AfwijkendFactuurAdres = 0 AND BestellingId = _orderid;
					END IF;
						
					/* Afwijkend verzendadres */
					SELECT COUNT(*) INTO _afwijkend FROM Managementboek_Klanten.`Klanten_met_adres` A JOIN Managementboek_Klanten.BestellingAll USING ( Klantid ) JOIN Managementboek_Klanten.`BestellingAdressen` B USING ( BestellingId )
						WHERE B.BestellingId = _orderid AND ( B.VerzendPostcode != A.Postcode OR B.VerzendHuisnummer != A.Huisnummer OR B.VerzendLand != A.Land );
					
					IF _afwijkend THEN
						UPDATE Managementboek_Klanten.`BestellingAdressen` A SET A.AfwijkendVerzendAdres=1 WHERE AfwijkendVerzendAdres = 0 AND BestellingId = _orderid;
					END IF;
					
					COMMIT;	
				END;
				
				IF _deadlock=0 THEN
					LEAVE attempt_loop;
				ELSE
					SET _attempts = _attempts + 1;
				END IF;
			END WHILE attempt_loop;
			SET @_last_deadlock = CONCAT( 'Deadlock: ', _deadlock, ' attempts: ', _attempts );
		END IF;
		
		DO RELEASE_LOCK( _lockname );
		
		INSERT INTO tmp.`OrderschermLog` SET Msg = CONCAT( connection_id(), ' Einde mutatie: ', _lockname, ' [', TIMEDIFF( NOW(3), _start ), '] ', IFNULL(@context,'') );		
	END body;
	
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `orderschermregels_recheck` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `orderschermregels_recheck`( _bakje CHAR(20) )
BEGIN
	DECLARE curId INT;
	DECLARE curEan CHAR(13);
	DECLARE no_more_rows BOOLEAN;
	DECLARE loop_cntr INT DEFAULT 0;
	DECLARE num_rows INT DEFAULT 0;
	DECLARE v INT;
	DECLARE min_genoeg INT DEFAULT 0;
	DECLARE max_genoeg INT DEFAULT 0;
	
	DECLARE eanCursor CURSOR FOR SELECT DISTINCT Ean FROM OrderschermRegels WHERE Bakje = _bakje;
	DECLARE idCursor  CURSOR FOR SELECT DISTINCT BestellingId FROM OrderschermRegels WHERE Bakje = _bakje;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
		
		
	-- Alle eans voorrang herberekenen.
	START TRANSACTION WITH CONSISTENT SNAPSHOT;
	OPEN eanCursor;
	the_loop: LOOP
		FETCH eanCursor INTO curEan;
		
		IF no_more_rows THEN
			CLOSE eanCursor;
			LEAVE the_loop;
		END IF;
		
		CALL orderschermregels_voorrang( curEan );
	END LOOP the_loop;
	COMMIT;
	
	-- Alle bakjes herberekenen
	sET no_more_rows = false;
	OPEN idCursor;
	the_loop2: LOOP
		FETCH idCursor INTO curId;
		
		IF no_more_rows THEN
			CLOSE idCursor;
			LEAVE the_loop2;
		END IF;
		
		CALL orderschermregel_bakje( curId );
		CALL orderschermregel_bereken_levering( curId );
	END LOOP the_loop2;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `orderschermregels_recheck_ean` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `orderschermregels_recheck_ean`( _ean CHAR(13) )
    MODIFIES SQL DATA
BEGIN
	DECLARE v INT DEFAULT 0;
	DECLARE lId INT;
	DECLARE lAantal INT;
	DECLARE _start DATETIME(3);
	DECLARE _end DATETIME(3);
	DECLARE _old_context VARCHAR(200);
	DECLARE no_more_rows2 BOOLEAN;			
	
	DECLARE loopCursor CURSOR FOR SELECT DISTINCT BestellingId FROM OrderschermRegels WHERE Ean = _ean ORDER BY BestellingId;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows2 = TRUE;
	
	SET _start = NOW(3);
	INSERT INTO tmp.`OrderschermLog` SET Context = IFNULL(@context,''), ConnectionId = CONNECTION_ID(), Msg = CONCAT( 'Start recheck ', _ean );			
	
	SET _old_context = @context;
	SET @context = CONCAT( "orderschermregels_recheck_ean( ", _ean, " )" );
	
	SELECT * FROM OrderschermRegels FOR UPDATE;
	SET no_more_rows2 = FALSE;
	OPEN loopCursor;
	the_loop1: LOOP
		FETCH loopCursor INTO lId;
		
		IF no_more_rows2 THEN
			CLOSE loopCursor;
			LEAVE the_loop1;
		END IF;
	
		SELECT GET_LOCK( CONCAT( 'mutatie_',lId), 4 );
	END LOOP the_loop1;
	SET no_more_rows2 = FALSE;
	OPEN loopCursor;
	the_loop2: LOOP
		FETCH loopCursor INTO lId;
		
		IF no_more_rows2 THEN
			CLOSE loopCursor;
			LEAVE the_loop2;
		END IF;
	
		CALL orderschermregels_ordermutatie( lId );
	END LOOP the_loop2;
	
	SET no_more_rows2 = FALSE;
	OPEN loopCursor;
	the_loop1: LOOP
		FETCH loopCursor INTO lId;
		
		IF no_more_rows2 THEN
			CLOSE loopCursor;
			LEAVE the_loop1;
		END IF;
	
		SELECT RELEASE_LOCK( CONCAT( 'mutatie_',lId) );
	END LOOP the_loop1;	
	
	INSERT INTO tmp.`OrderschermLog` SET Context = IFNULL(@context,''), ConnectionId = CONNECTION_ID(), Duration = TIMEDIFF( NOW(3), _start ), Msg = CONCAT( 'Einde recheck ', _ean );		
	SET @context = _old_context;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `orderschermregels_voorrang` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `orderschermregels_voorrang`( _ean CHAR(13) CHARSET latin1 )
BEGIN
	DECLARE _fysiek INT DEFAULT 0;
	DECLARE _geprint INT DEFAULT 0;
	DECLARE _nognietgeprint INT DEFAULT 0;
	DECLARE _cb INT;
	DECLARE _lockname TEXT DEFAULT CONCAT( 'voorrang_', _ean );
	DECLARE _got_lock INT DEFAULT 0;
	DECLARE _nodig INT DEFAULT 0;
	
	SET @_loopcount=0;
	
	SET _got_lock = GET_LOCK(_lockname,2);
	
	INSERT INTO tmp.`OrderschermLog` SET DT=NOW(),ConnectionId=CONNECTION_ID(),Msg=CONCAT('voorrang ', _ean, ' lock:', _got_lock );
	
	IF _got_lock THEN	
	
		SELECT IFNULL(FysiekeMBVoorraad,0), IFNULL(BeschikbareCBVoorraad,0) INTO _fysiek, _cb
			FROM Voorraadbeheer.VoorraadInclusiefCB WHERE Ean = _ean;
		SELECT IFNULL(GeprintAantal,0), IFNULL(NogNietGeprint,0) INTO _geprint, _nognietgeprint
			FROM Voorraadbeheer.`GeprinteVoorraad` WHERE Ean = _ean;
		SELECT IFNULL( SUM( Aantal-Geleverd ), 0 ) INTO _nodig FROM OrderschermRegels JOIN OrderregelStatusPlat USING ( Id ) 
					    WHERE vink_open = 1 AND gefactureerd = 0 AND niet_inpakken=0 AND niet_reserveren=0
					    AND Ean = _ean;
		UPDATE OrderschermRegels
		SET Voorafgaand = 0,
			FysiekeVoorraad = _fysiek, 
			GenoegVoorraad = IF( Bindwijze_voorraadartikel=0, 1, IF( _nodig <= ( _fysiek - _geprint ), 1, 0 ) ),
			GeprinteVoorraad = _geprint,
			NogNietGeprint = _nognietgeprint,
			CB24Leverbaar = _cb
		WHERE Ean = _ean;
		
		-- Debug van Thijs
		/*
		IF _ean = "9789013129793" THEN
			INSERT INTO tmp.thijs_log ( DT, Message )
			SELECT NOW(6), CONCAT(
					"RegelID: ", IFNULL(ID,'(null)'),
					"; BestellingID: ", IFNULL(BestellingID,'(null)'),
					"; Aantal: ", IFNULL(Aantal,'(null)'),
					"; Geleverd: ", IFNULL(Geleverd,'(null)'),
					"; Voorafgaand: ", IFNULL(Voorafgaand,'(null)'),
					"; FysiekeVoorraad: ", IFNULL(FysiekeVoorraad,'(null)'),
					"; Genoeg: ", IFNULL(GenoegVoorraad,'(null)'),
					"; _geprint: ", IFNULL(_geprint,'(null)') )
				FROM OrderschermRegels WHERE Ean = _ean;
		END IF;
		*/
		
		
		IF ( ( _nodig > ( _fysiek-_geprint ) ) AND _fysiek > 0 ) AND  ( _ean NOT IN ( 'P', 'PORTO', 'porto', 'GROTIUS', 'BONG', 'VOUCHER' ) ) THEN
		
			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-Geleverd
					FROM OrderschermRegels 	JOIN OrderregelStatusPlat USING ( Id ) 
								JOIN BestellingAll A USING ( BestellingId )
								JOIN BestellingHerkomst AH USING ( BestellingId )
					    WHERE vink_open = 1 AND gefactureerd = 0 AND niet_inpakken=0 AND niet_reserveren=0
					    AND Ean = _ean 
						ORDER BY AH.Kanaal='SerieABO' DESC, 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;
					
					SET @_loopcount = @_loopcount+1;
					
					UPDATE OrderschermRegels SET
						Voorafgaand = v,
						GenoegVoorraad = IF( Bindwijze_voorraadartikel=0, 1, ( ( Aantal - Geleverd ) + Voorafgaand <= ( FysiekeVoorraad - _geprint ) ))
					WHERE Id = lId;
					
					SET v = v + lAantal;				
				END LOOP the_loop2;
			END BLOCK2;
		END IF;
		
		DO RELEASE_LOCK( _lockname );
	END IF;
	
	SET @_loopreden	= CONCAT( 'Fysiek: ', IFNULL(_fysiek-_geprint,'') , ' Nodig: ', IFNULL(_nodig,'') , ' => Loops: ', IFNULL(@_loopcount,''), ' Lock: ', _got_lock ); 	
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `orderschermregels_voorrang_test` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `orderschermregels_voorrang_test`( _ean CHAR(13) CHARSET latin1 )
BEGIN
	DECLARE _fysiek INT DEFAULT 0;
	DECLARE _geprint INT DEFAULT 0;
	DECLARE _nognietgeprint INT DEFAULT 0;
	DECLARE _cb INT;
	DECLARE _lock_name TEXT DEFAULT CONCAT('voorrang_', _ean);
	DECLARE _got_lock INT DEFAULT 0;
	DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
	DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;
	START TRANSACTION;
	
	SELECT IFNULL(FysiekeMBVoorraad,0),  IFNULL(BeschikbareCBVoorraad,0) INTO _fysiek, _cb
		FROM Voorraadbeheer.`VoorraadInclusiefCB` WHERE Ean = _ean;
	SELECT IFNULL(GeprintAantal,0), IFNULL(NogNietGeprint,0) INTO _geprint, _nognietgeprint
		FROM Voorraadbeheer.`GeprinteVoorraad` WHERE Ean = _ean;
		
	UPDATE OrderschermRegels SET Voorafgaand = 0, FysiekeVoorraad = _fysiek, 
	 GenoegVoorraad = IF( Bindwijze_voorraadartikel=0, 1, 0 ),
	 GeprinteVoorraad = _geprint, NogNietGeprint = _nognietgeprint, CB24Leverbaar = _cb WHERE Ean = _ean; 
	
	IF _ean NOT IN ( 'PORTO', 'porto', 'GROTIUS', 'BONG', 'VOUCHER' ) THEN
	
		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-Geleverd
				FROM OrderschermRegels JOIN OrderregelStatusPlat USING ( Id ) JOIN BestellingAll A USING ( BestellingId )
				    WHERE vink_open = 1 AND gefactureerd = 0 AND niet_inpakken=0 AND niet_reserveren=0
				    AND Ean = _ean 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;
				
				SET @_loopcount = @_loopcount+1;
				
				UPDATE OrderschermRegels SET Voorafgaand = v, GenoegVoorraad = IF( Bindwijze_voorraadartikel=0, 1, ( ( Aantal - Geleverd ) + Voorafgaand <= ( FysiekeVoorraad - _geprint ) )) WHERE Id = lId;
				
				SET v = v + lAantal;				
			END LOOP the_loop2;
		END BLOCK2;
	END IF;
	
	COMMIT;
		
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `orderschermregel_bakje` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `orderschermregel_bakje`( _orderid INT )
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 v INT;
	DECLARE min_genoeg INT DEFAULT 0;
	DECLARE max_genoeg INT DEFAULT 0;
	DECLARE iets_leverbaar INT DEFAULT 0;
	DECLARE cb_leverbaar INT DEFAULT 0;
	DECLARE alles_leverbaar INT DEFAULT 0;
	DECLARE alle_verschenen_leverbaar INT DEFAULT 0;
	DECLARE _geaccepteerd INT;
	DECLARE _uitvallen_naar_hand INT DEFAULT 0;
	DECLARE _alles_download INT;
	DECLARE _aantal_regels INT;
	DECLARE _totaal_aantal_exemplaren INT;
	DECLARE _institutioneel INT;
	DECLARE _geprint INT;
	DECLARE _ingepakt INT;
	DECLARE _niet_inpakken INT;
	DECLARE _opmerking INT;
	DECLARE _opmerking_negeren INT;
	DECLARE _geparkeerd INT;
	DECLARE _kso INT;
	DECLARE _risico INT;
	DECLARE _adres INT;
	DECLARE _origineel INT;
	DECLARE _kanaal CHAR(20);
	DECLARE _eans CHAR(20);
	DECLARE _ncoiklant INT;
	DECLARE _ntiklant INT;
	DECLARE _event INT;
	DECLARE _wacht_op_klant INT;
	DECLARE _wacht_op_levering INT;
	DECLARE _wacht_tot_compleet INT;
	DECLARE _verstuur_compleet INT;
	DECLARE _alles_niet_inpakken INT;
	DECLARE _adresstatus CHAR(20);
	DECLARE _grotius INT;
	DECLARE _splitsbaar INT;
	DECLARE _te_leveren INT;
	DECLARE _iets_deelleverbaar INT;
	DECLARE _heeft_promo INT;
	DECLARE _promoreden_in_backorder INT;
	DECLARE _aantal_nnv INT;
	DECLARE _ebooks_teveel INT DEFAULT 0;
	DECLARE _uitgeverfactuur VARCHAR(30) DEFAULT NULL;
	DECLARE _is_credit TINYINT;
	DECLARE _vink_proto_magazijn TINYINT;
	DECLARE _alle_verschenen_leverbaar TINYINT;
	DECLARE _abn_voucher TINYINT;
	
	-- Grotius pre-conditie
	SELECT COUNT(*) INTO _grotius FROM Bestellingen WHERE Ean IN ( 'GROTIUS', 'JFRKORTING' ) AND BestellingId = _orderid;	
	IF _grotius = 1 THEN
		UPDATE OrderschermRegels SET MagONE=0, CBLeverbaar=0, CB24Leverbaar=0, VerstuurCompleteOrder=1, BakjeReden = 'GROTIUS' WHERE BestellingId = _orderid;
	END IF;	
	
	-- Boeken die in de promo zitten nooit via CB leveren
	UPDATE OrderschermRegels SET MagONE=0, CBLeverbaar=0, CB24Leverbaar=0, BakjeReden = 'Promo 1' WHERE BestellingId = _orderid AND ( PromoBoek > 0 OR PromoReden > 0 );
	
	-- Geen voorraadartikel? Dan altijd genoeg voorraad
	UPDATE OrderschermRegels SET GenoegVoorraad = 1 WHERE BestellingId = _orderid AND Bindwijze_voorraadartikel=0;
	
	-- Als de promo-reden niet leverbaar is, lever dan de promo-boeken ook niet
	SELECT COUNT(*) INTO _promoreden_in_backorder FROM OrderschermRegels WHERE BestellingId = _orderid AND PromoReden > 0 AND GenoegVoorraad=0;
	IF _promoreden_in_backorder > 0 THEN
		UPDATE OrderschermRegels SET GenoegVoorraad=0, MagONE=0, CBLeverbaar=0, CB24Leverbaar=0, BakjeReden = 'Promo 2' WHERE BestellingId = _orderid AND PromoBoek > 0;
		SET @promo_trigger = NOW();
	END IF;	
	
	-- In den beginne was er: rest
	UPDATE OrderschermRegels SET Splitsbaar = 1 WHERE IF( Bindwijze_voorraadartikel=1, 
		(Aantal+AantalBackorder-Geleverd) <= ( `CB24Leverbaar` + (`FysiekeVoorraad`-`GeprinteVoorraad`) ) AND (Aantal+AantalBackorder-Geleverd) > (`FysiekeVoorraad`-`GeprinteVoorraad`) AND (Aantal+AantalBackorder-Geleverd) > (`CB24Leverbaar`) ,1 )
		AND BestellingId = _orderid
		AND (Aantal+AantalBackorder-Geleverd) > 1;	
	
	-- Deze regels zijn volledig leverbaar
	UPDATE OrderschermRegels SET DeelLeverbaar = 1
	WHERE Wacht=0
		AND ( Aantal+AantalBackorder-Geleverd ) > 0
		AND ( (FysiekeVoorraad-GeprinteVoorraad) < (Aantal+AantalBackorder-Geleverd) )
		AND ( (FysiekeVoorraad-GeprinteVoorraad) ) > 0
		AND BestellingId = _orderid;	
	
	-- Even tellen
	SELECT COUNT(*), sum(Aantal + AantalBackorder) INTO _aantal_regels, _totaal_aantal_exemplaren  FROM OrderschermRegels WHERE BestellingId = _orderid;	
	SELECT COUNT(*) INTO _alles_download FROM OrderschermRegels WHERE BestellingId = _orderid AND Bindwijze_voorraadartikel=0;
	SELECT MIN(GenoegVoorraad) INTO _alle_verschenen_leverbaar FROM Managementboek_Klanten.`OrderschermRegels` WHERE Boekstatus NOT IN ( 2, 5 ) AND BestellingId = _orderid; 	
	
	-- Als alle verschenen leverbaar is, zet dan wacht uit.
	IF _alle_verschenen_leverbaar = 1 AND _aantal_regels > 1 THEN
		UPDATE OrderschermRegels SET VerstuurCompleteOrder = 0 WHERE BestellingId = _orderid;
		SET @_debug = CONCAT( 'A: ', _alle_verschenen_leverbaar, ' B: ', _aantal_regels );
	END IF;
	
	--
	SELECT Geaccepteerd, Risico_Geaccepteerd, Adres_Geaccepteerd, Uitval_naar_hand INTO _geaccepteerd, _risico, _adres, _uitvallen_naar_hand FROM Managementboek_Klanten.BestellingAcceptatie WHERE BestellingId = _orderid;
	SELECT IFNULL( LENGTH( TRIM( Opmerkingen) ), 0 ), OpmerkingNegeren, OrigineelBestellingId INTO _opmerking, _opmerking_negeren, _origineel FROM BestellingAll WHERE BestellingId = _orderid;
	SELECT COUNT(*) INTO _kso FROM Managementboek_Klanten.`BestellingAllOpmerkingen`  WHERE BestellingId = _orderid AND LENGTH(TRIM(KlantenServiceOpmerking))>0;		
	SELECT MIN( aantal ) < 0 AND MAX( aantal ) < 0 INTO _is_credit FROM OrderschermRegels WHERE BestellingId = _orderid;	
	SELECT `factuur_geprint`+`pakbon_geprint`, ingepakt, niet_inpakken, is_geparkeerd, wacht_op_klant
		INTO _geprint, _ingepakt, _niet_inpakken, _geparkeerd, _wacht_op_klant
		FROM OrderkopStatusPlat WHERE BestellingId = _orderid;
	
	SELECT MIN( IFNULL(GenoegVoorraad,0) ), MAX( IFNULL(GenoegVoorraad,0) ), MAX( IFNULL( CBLeverbaar, 0 ) ), 
	       MIN( IFNULL(GenoegVoorraad,0) + IFNULL(CBLeverbaar,0) + IFNULL(Splitsbaar,0) ) AS AllesLeverbaar,
	       MAX( IFNULL(GenoegVoorraad,0) + IFNULL(CBLeverbaar,0) + IFNULL(Splitsbaar,0) ) AS IetsLeverbaar, VerstuurCompleteOrder, MAX(Bindwijze_Evenement),
	       (Aantal - Geleverd), MAX(DeelLeverbaar), GROUP_CONCAT(EAN)
		INTO min_genoeg, max_genoeg, cb_leverbaar, alles_leverbaar, iets_leverbaar, _verstuur_compleet, _event, _te_leveren, _iets_deelleverbaar, _eans
		FROM OrderschermRegels WHERE BestellingId = _orderid AND Bindwijze_voorraadartikel=1; 
		--  AND Aantal - Geleverd <> 0;
	
	SELECT MAX(Bindwijze_Evenement)	INTO _event FROM OrderschermRegels WHERE BestellingId = _orderid;
	
	SELECT MAX(bakje_proto_magazijn) INTO _vink_proto_magazijn FROM OrderschermRegels WHERE BestellingId = _orderid;
		
	-- Als alles downloadbaar -> Alles leverbaar
	IF _aantal_regels = _alles_download THEN
		SET alles_leverbaar = 1;
	END IF;
	
	-- Tel voorraad van alle verschenen titels.
	SELECT MIN( IFNULL(GenoegVoorraad,0) + IFNULL(CBLeverbaar,0) + IFNULL(Splitsbaar,0) ) AS AllesLeverbaar
		INTO alle_verschenen_leverbaar
		FROM OrderschermRegels WHERE BestellingId = _orderid AND Bindwijze_voorraadartikel=1;  
		/* AND Boekstatus IN ( 0, 1 ) */
		
	SELECT Kanaal INTO _kanaal FROM BestellingHerkomst WHERE BestellingId = _orderid;	
	SELECT COUNT(*) INTO _ncoiklant FROM NCOI.Klanten JOIN Managementboek_Klanten.BestellingAll USING ( Klantid ) WHERE BestellingId = _orderid;	
	SELECT COUNT(*) INTO _ntiklant FROM NCOI.KlantenNTI JOIN Managementboek_Klanten.BestellingAll USING ( Klantid ) WHERE BestellingId = _orderid;	
	SELECT AdresStatus INTO _adresstatus FROM Managementboek_Klanten.BestellingAll JOIN Managementboek_Klanten.Klanten A USING ( Klantid ) WHERE BestellingId = _orderid;		
	
	-- ALG-7603; E-boeken > 1.
	SELECT 
	  COUNT(*) INTO _ebooks_teveel
	FROM
	  Managementboek_Klanten.Bestellingen 
	  JOIN Manpo.Boeken USING ( Ean ) 
	  JOIN Manpo.Bindwijze USING (Bindwijze) 
	WHERE BestellingId = _orderid
	  AND Bindwijze_download = 1
	  AND Aantal > 1;
	
	-- Als overal genoeg voorraad, dan... leverbaar	
	UPDATE OrderschermRegels SET Bakje = 'rest', BakjeReden = CONCAT( 'Default K:', _kanaal ), 
		Leverbaar = IF( Bindwijze_voorraadartikel=1,min_genoeg,1) 
		/* DeelLeverbaar = IF( max_genoeg = 1 AND Wacht = 0, 1, 0 )  */
		WHERE BestellingId = _orderid;		
	
	bakjes: BEGIN 
		-- Dit is een levering of backorder-levering
		IF _origineel > 0 THEN
			if _vink_proto_magazijn > 0 THEN
				UPDATE OrderschermRegels SET Bakje = 'magazijn', BakjeReden = 'Levering -> nooit geprint.' WHERE BestellingId = _orderid;	
			ELSE
				UPDATE OrderschermRegels SET Bakje = 'rest', BakjeReden = 'Levering / child' WHERE BestellingId = _orderid;	
			END IF;
			LEAVE bakjes;
		END IF;	
	
		-- Niets meer te leveren
		IF _te_leveren <= 0 AND _is_credit = 0 THEN
			UPDATE OrderschermRegels SET Bakje = 'rest', BakjeReden = 'Geleverd, geen magazijn' WHERE BestellingId = _orderid;	
			LEAVE bakjes;
		END IF;	 
		-- Als helemaal niet geaccepteerd, dan 'nieuw'.
		IF _geaccepteerd IS NULL THEN
			IF _wacht_op_klant > 0 THEN
				UPDATE OrderschermRegels SET Bakje = 'wacht', BakjeReden = 'wacht + on hold' WHERE BestellingId = _orderid;
			ELSE
				UPDATE OrderschermRegels SET Bakje = 'onhold', BakjeReden = 'Nog niet geaccepteerd' WHERE BestellingId = _orderid;
			END IF;
			LEAVE bakjes;
		END IF;	 
		
		-- Periodieken
		IF _kanaal = 'Periodieken' THEN	
			SELECT UitgeverFactuurId INTO _uitgeverfactuur FROM Periodieken_Facturen WHERE BestellingId = _orderid;
			UPDATE OrderschermRegels SET Bakje = 'abo_fac', Leverbaar = IF( _uitgeverfactuur IS NULL, 0, 1 ), BakjeReden = 'Periodieken' WHERE BestellingId = _orderid;
			LEAVE bakjes;
		END IF;		
		-- Als risico niet geaccepteerd, dan 'nieuw'.
		IF _risico = 0 THEN
			IF _wacht_op_klant > 0 THEN
				UPDATE OrderschermRegels SET Bakje = 'wacht', BakjeReden = 'wacht + risico' WHERE BestellingId = _orderid;
			ELSE
				UPDATE OrderschermRegels SET Bakje = 'onhold', BakjeReden = 'Risico onacceptabel' WHERE BestellingId = _orderid;	
			END IF;
			LEAVE bakjes;
		ELSE
			-- Risico is al geaccepteerd, dus niet meer 'nieuw'.
			UPDATE OrderschermRegels SET BakjeReden = 'Risico geaccepteerd' WHERE BestellingId = _orderid;	
		END IF;
		IF IFNULL(_uitvallen_naar_hand,0) = 0 THEN
			-- NCOI
			IF _kanaal = 'NCOI' THEN
				UPDATE OrderschermRegels SET Bakje = 'ncoi', BakjeReden = 'Kanaal NCOI' WHERE BestellingId = _orderid;
				LEAVE bakjes;
			ELSEIF _ncoiklant = 1 THEN
				UPDATE OrderschermRegels SET Bakje = 'ncoi', BakjeReden = 'Klant NCOI' WHERE BestellingId = _orderid;
				LEAVE bakjes;		
			ELSEIF _ntiklant = 1 THEN
				UPDATE OrderschermRegels SET Bakje = 'nti', BakjeReden = 'Klant NTI' WHERE BestellingId = _orderid;
				LEAVE bakjes;		
			END IF;		
				
			-- Institutioneel
			SELECT Institutioneel INTO _institutioneel FROM KlantVinken JOIN BestellingAll USING ( Klantid ) WHERE BestellingId = _orderid;
			IF _institutioneel = 1 THEN
				UPDATE OrderschermRegels SET Bakje = 'institutioneel', BakjeReden = 'Vink Institutioneel' WHERE BestellingId = _orderid;
				LEAVE bakjes;
			END IF;		
		END IF;		
		-- Als niet geautoriseerd, dan 'nieuw'.
		IF _adresstatus = 'unauthorized' THEN
			UPDATE OrderschermRegels SET Bakje = 'hand', BakjeReden = 'Niet geautoriseerd' WHERE BestellingId = _orderid;	
			LEAVE bakjes;
		END IF;	 		
		-- SERIES
		IF _kanaal = 'SerieABO' THEN
			UPDATE OrderschermRegels SET Bakje = 'series', BakjeReden = 'Kanaal SerieABO' WHERE BestellingId = _orderid;
			LEAVE bakjes;
		END IF;
	
		
		-- Eboeken
		IF _ebooks_teveel > 0 THEN
			UPDATE OrderschermRegels SET Bakje = 'hand', BakjeReden = 'Eboeken > 1' WHERE BestellingId = _orderid;
			LEAVE bakjes;
		END IF;			
		
		IF _event = 1 THEN
			UPDATE OrderschermRegels SET Bakje = 'events', BakjeReden = 'Event' WHERE BestellingId = _orderid;
			LEAVE bakjes;
		END IF;
		-- Geaccepteerd EN leverbaar?      -> Auto
		-- Geaccepteerd EN deel-leverbaar  -> Back
		-- Geaccepteerd EN niets leverbaar -> Alles
		SELECT COUNT(*) INTO _wacht_op_levering FROM OrderschermRegels WHERE GenoegVoorraad = 0 AND IFNULL( AantalOnderweg, 0 ) > 0 AND IFNULL( OnderwegSinds, NOW() ) < DATE_SUB( NOW(), INTERVAL 11 HOUR ) AND Boekstatus=0 /* AND Deelleverbaar=1 */ AND BestellingId = _orderid AND ( Aantal - Geleverd ) > 0;
		select VerstuurCompleteOrder INTO _wacht_tot_compleet FROM BestellingAll WHERE BestellingID = _orderid;
		IF _geparkeerd > 0 THEN
			UPDATE OrderschermRegels SET Bakje = 'geparkeerd', BakjeReden = 'vink geparkeerd' WHERE BestellingId = _orderid;
			LEAVE bakjes;
		ELSEIF _wacht_op_klant > 0 THEN
			UPDATE OrderschermRegels SET Bakje = 'wacht', BakjeReden = 'wacht op klant' WHERE BestellingId = _orderid;
			LEAVE bakjes;
		ElseIF IFNULL(_uitvallen_naar_hand,0) = 1 THEN
			UPDATE OrderschermRegels SET Bakje = 'hand', BakjeReden = 'Classificatie -> uitval naar HAND' WHERE BestellingId = _orderid;
			LEAVE bakjes;
		ELSEIF IFNULL( _geaccepteerd, 0 ) = 1 THEN
			IF _wacht_op_levering > 0 AND _wacht_tot_compleet = 0 THEN
				UPDATE OrderschermRegels SET Bakje = 'na1500', BakjeReden = CONCAT( 'Onderweg ', DATE_FORMAT(OnderwegSinds,'%d/%m') ) WHERE BestellingId = _orderid;
			ELSEIF alles_leverbaar > 0 THEN
				-- Alles leverbaar
				UPDATE OrderschermRegels SET Bakje = 'auto', BakjeReden = CONCAT( 'Leverbaar ', alles_leverbaar, ' G: ', min_genoeg, '/', max_genoeg, '/CB:', cb_leverbaar ) WHERE BestellingId = _orderid;
			ELSEIF alle_verschenen_leverbaar > 0 AND _verstuur_compleet=1 THEN
				UPDATE OrderschermRegels SET Bakje = 'auto', BakjeReden = CONCAT( 'Leverbaar' ) WHERE BestellingId = _orderid;
			ELSEIF iets_leverbaar > 0 AND min_genoeg = 0 AND _verstuur_compleet = 0 THEN
				-- Er is wel iets leverbaar, verstuur compleet staat uit -> auto
				UPDATE OrderschermRegels SET Bakje = 'auto', BakjeReden = CONCAT( 'Deelleverbaar' ) WHERE BestellingId = _orderid;
			ELSEIF iets_leverbaar > 0 AND min_genoeg = 0 AND _verstuur_compleet = 1 THEN
				-- Er is wel iets leverbaar, verstuur compleet staat aan -> back
				UPDATE OrderschermRegels SET Bakje = 'back', BakjeReden = CONCAT( 'Deelleverbaar (VC)' ) WHERE BestellingId = _orderid;
			ELSEIF _iets_deelleverbaar > 0 aND min_genoeg = 0 THEN
				-- Er zijn orderregels waarbij wat te leveren is.
				UPDATE OrderschermRegels SET Bakje = 'back', BakjeReden = 'Deelleverbaar' WHERE BestellingId = _orderid;
				LEAVE bakjes;
			ELSE
				UPDATE OrderschermRegels SET Bakje = 'alles', BakjeReden = CONCAT( 'Niets leverbaar ', iets_leverbaar, ' ', _iets_deelleverbaar, ' ', min_genoeg ) WHERE BestellingId = _orderid;
			END IF;
		ELSE
			UPDATE OrderschermRegels SET Bakje = 'hand', BakjeReden = 'Niet geaccepteerd' WHERE BestellingId = _orderid;
		END IF;
		
		IF max_genoeg = 0 AND _geaccepteerd = 1 AND iets_leverbaar = 0 AND _iets_deelleverbaar = 0 THEN
			UPDATE OrderschermRegels SET Leverbaar=0, GenoegVoorraad=0, Bakje = 'alles', BakjeReden = 'Niets leverbaar (2)'  WHERE BestellingId = _orderid;
		END IF;
		-- Backorders
		UPDATE OrderschermRegels SET Bakje = 'alles', BakjeReden = 'Backorder' WHERE BestellingId = _orderid AND Deelleverbaar=0 AND Boekstatus != 0 AND Bakje = 'nieuw';
		
		/* Nieuw en geaccepteerd en deellevarbaar => back */
		IF _iets_deelleverbaar = 1 AND min_genoeg = 0 AND _geaccepteerd = 1 THEN
			UPDATE OrderschermRegels SET Bakje = 'back', BakjeReden = 'Deelleverbaar (2)' WHERE BestellingId = _orderid AND Bakje IN ( 'nieuw', 'rest' ) AND Deelleverbaar = 1 AND Leverbaar = 0;
		END IF;
		
		-- UPDATE OrderschermRegels SET Bakje = 'onhold', BakjeReden = 'Vink niet reserveren' WHERE Bakje != 'nieuw' AND NietReserveren=1 AND BestellingId = _orderid;
		-- niet_inpakken = 1 --> NIET in magazijn (VBM-784)
		IF _niet_inpakken = 0 THEN 
			UPDATE OrderschermRegels SET Bakje = 'magazijn', BakjeReden = 'Vink magazijn (2)' WHERE Magazijn = 1 AND BestellingId = _orderid;
		END IF;
	END bakjes;	
	
	-- Magazijn bakje
	bakje_magazijn: BEGIN
		DECLARE loop_cntr INT DEFAULT 0;
		DECLARE num_rows INT DEFAULT 0;
		DECLARE tempId INT;
		DECLARE idCursor CURSOR FOR SELECT Id FROM OrderschermRegels JOIN OrderregelStatusPlat USING ( Id ) WHERE vink_magazijn=1 AND BestellingId = _orderid;
		DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
		OPEN idCursor;
		
		the_loop: LOOP
			FETCH idCursor INTO tempId;
	
			IF no_more_rows THEN
				CLOSE idCursor;
				LEAVE the_loop;
			END IF;
	
			UPDATE OrderschermRegels SET Bakje = 'magazijn', BakjeReden = 'vink magazijn' WHERE Id = tempId;
		END LOOP the_loop;
	END bakje_magazijn;	
	
	-- Rest bakje
	bakje_rest: BEGIN
		DECLARE loop_cntr INT DEFAULT 0;
		DECLARE num_rows INT DEFAULT 0;
		DECLARE tempId INT;
		DECLARE idCursor CURSOR FOR SELECT Id FROM OrderschermRegels JOIN OrderregelStatusPlat USING ( Id ) WHERE vink_open=1 AND gefactureerd=1 AND factuur_sturen_niet_nodig=1 AND BestellingId = _orderid;
		DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
		OPEN idCursor;
		
		SET no_more_rows=FALSE;
		the_loop2: LOOP
			FETCH idCursor INTO tempId;
	
			IF no_more_rows THEN
				CLOSE idCursor;
				LEAVE the_loop2;
			END IF;
	
			UPDATE OrderschermRegels SET Bakje = 'rest', BakjeReden = 'fac.st. niet nodig?' WHERE Id = tempId;
		END LOOP the_loop2;
	END bakje_rest;		
	
	-- Al onderstaande moeite om een deadlock te voorkomen :(
	bakje_reserveren: BEGIN
		DECLARE loop_cntr INT DEFAULT 0;
		DECLARE num_rows INT DEFAULT 0;
		DECLARE tempId INT;
		DECLARE idCursor CURSOR FOR SELECT Id FROM OrderschermRegels JOIN OrderregelStatusPlat USING ( Id ) 
			WHERE vink_open=1 AND niet_reserveren=1 AND Bakje NOT IN( 'nieuw', 'wacht', 'onhold', 'events', 'abo_fac' ) AND BestellingId = _orderid;
		DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
		OPEN idCursor;
		
		SET no_more_rows=FALSE;
		the_loop2: LOOP
			FETCH idCursor INTO tempId;
	
			IF no_more_rows THEN
				CLOSE idCursor;
				LEAVE the_loop2;
			END IF;
	
			UPDATE OrderschermRegels SET BakjeReden = CONCAT( 'onverwacht on-hold; vorig bakje "', Bakje, '", vorige reden "', BakjeReden, '"' ), Bakje = 'rest' WHERE Id = tempId;
		END LOOP the_loop2;
	END bakje_reserveren;
	
	
	SELECT COUNT(*) INTO _abn_voucher FROM Bestellingen N WHERE N.Ean = 'VOUCHER' AND Omschrijving LIKE "MABN%" AND BestellingId = _orderid;
	IF _abn_voucher > 0 THEN
		UPDATE OrderschermRegels SET Bakje = 'hand', BakjeReden = 'ABN Voucher, max 2 boeken!' WHERE BestellingId = _orderid;
	END IF;
		
	-- Boekstatus 5 - nog niet verschenen, nooit voorraad [Nu weer wel: VMB-772]
	-- UPDATE OrderschermRegels SET GenoegVoorraad = 0, Leverbaar=0, CBLeverbaar=0 WHERE BestellingId = _orderid AND Boekstatus=5;	
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `orderschermregel_bereken_levering` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `orderschermregel_bereken_levering`( _orderid INT )
BEGIN
	DECLARE _kanaal VARCHAR(20);
	-- Magazijn bakje
	bepaal_levering: BEGIN
		DECLARE loop_cntr INT DEFAULT 0;
		DECLARE num_rows INT DEFAULT 0;
		DECLARE no_more_rows INT DEFAULT 0;
		DECLARE tempId INT;
		DECLARE _parent INT DEFAULT 0;
		DECLARE _alles_cb INT DEFAULT 1;
		DECLARE _alles_mb INT DEFAULT 1;
		DECLARE _alles_mb_wtf varchar(50) default "";
		DECLARE _aantal_ebooks INT DEFAULT 0;
		DECLARE _leveren_mb INT;
		DECLARE _leveren_cb INT;
		DECLARE _wacht INT;
		DECLARE _promo INT;
		DECLARE _promoregels INT DEFAULT 0;
		DECLARE _promoreden_in_backorder INT;
		DECLARE _alle_verschenen_leverbaar INT;
		DECLARE _alle_verschenen INT;
		DECLARE _t INT;
		
		DECLARE _r_ean VARCHAR(20) DEFAULT "9789089590305";
		DECLARE _r_cbleverbaar INT;
		DECLARE _r_genoegvoorraad INT;
		DECLARE _r_deelleverbaar INT;
		DECLARE _niet_inpakken INT;
		DECLARE _institutioneel INT;
		DECLARE _aantal_regels INT;
		
		
		DECLARE idCursor CURSOR FOR SELECT Id, EAN, CBLeverbaar, GenoegVoorraad, DeelLeverbaar, VerstuurCompleteOrder 
			FROM OrderschermRegels WHERE BestellingId = _orderid AND Bindwijze_voorraadartikel=1; 
			/* AND Boekstatus NOT IN ( 5 ); */
		DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
		SELECT OrigineelBestellingID INTO _parent FROM BestellingAll WHERE BestellingId = _orderid;
		IF _parent > 0 THEN
			UPDATE OrderschermRegels SET LeverenPad = 'Dit *is* een levering.' WHERE BestellingId = _orderid;
			LEAVE bepaal_levering;
		END IF;
		
		SELECT IFNULL(MAX( PromoBoek ),0) INTO _promo FROM OrderschermRegels WHERE BestellingId = _orderid;		
		SELECT niet_inpakken INTO _niet_inpakken FROM OrderkopStatusPlat WHERE BestellingId = _orderid;		
		
		SELECT Kanaal INTO _kanaal FROM BestellingHerkomst WHERE BestellingId = _orderid;
		
		IF _kanaal = 'Periodieken' THEN
			UPDATE OrderschermRegels SET LeverenPad = 'MB Abos', LeverenCB = 0, LeverenMB = Aantal, LeverenNiet = 0 WHERE BestellingId = _orderid AND Bakje in ( 'abo_fac' );
			UPDATE OrderschermRegels SET LeverenPad = 'MB Abos', LeverenCB = 0, LeverenMB = 0, LeverenNiet = Aantal WHERE BestellingId = _orderid AND Bakje IN ( 'abo_wacht' );
			LEAVE bepaal_levering;
		END IF;
		
		SELECT IFNULL( SUM(Bindwijze_download), 0 ) INTO _aantal_ebooks FROM Managementboek_Klanten.`OrderschermRegels` JOIN Manpo.`Boeken` USING ( Ean ) JOIN Manpo.`Bindwijze` USING ( Bindwijze ) WHERE BestellingId = _orderid;	
		
		-- Tel voorraad van alle verschenen titels.
		SELECT MIN( IFNULL(GenoegVoorraad,0) + IFNULL(CBLeverbaar,0) + IFNULL(Splitsbaar,0) ) AS AllesLeverbaar
			INTO _alle_verschenen_leverbaar
			FROM OrderschermRegels WHERE BestellingId = _orderid AND Bindwijze_voorraadartikel=1; 
			-- AND Boekstatus IN ( 0, 1 );		
		
		-- Tel promoregels
		SELECT COUNT(*) INTO _promoregels FROM Managementboek_Klanten.`OrderschermRegels` WHERE BestellingId = _orderid AND ( PromoBoek > 0 OR PromoReden > 0 ) 
			AND Bindwijze_voorraadartikel > 0 aND Ean NOT IN ( 'GROTIUS' );
		
		-- Tel regels
		SELECT IFNULL( COUNT(*), '\N' ) INTO _aantal_regels  FROM OrderschermRegels WHERE BestellingId = _orderid AND Bindwijze_voorraadartikel=1;			
		SELECT MIN(GenoegVoorraad) INTO _alle_verschenen FROM Managementboek_Klanten.`OrderschermRegels` WHERE Boekstatus NOT IN ( 2, 5 ) AND BestellingId = _orderid; 	
		
		OPEN idCursor;
		SELECT IF( COUNT(*) > 0, 1, 0 ) INTO _institutioneel FROM OrderschermRegels WHERE bakje IN ( 'institutioneel', 'ncoi', '_nti' ) AND BestellingId = _orderid;
		
		the_loop: LOOP
			FETCH idCursor INTO tempId, _r_ean, _r_cbleverbaar, _r_genoegvoorraad, _r_deelleverbaar, _wacht;
	
			IF _r_genoegvoorraad = 0 THEN
				SET _alles_mb = 0;
				if _r_ean = "9789085423430" THEN
					SET _alles_mb_wtf = (SELECT CONCAT("v:",FysiekeVoorraad," vf:",Voorafgaand," gp:",GeprinteVoorraad)
						FROM OrderschermRegels WHERE ID = tempId);
				END IF;
			END IF;
			
			IF _r_cbleverbaar = 0 THEN
				SET _alles_cb = 0;
			END IF;
	
			IF no_more_rows THEN
				CLOSE idCursor;
				LEAVE the_loop;
			END IF;
		END LOOP the_loop;
		
		/* IF _aantal_ebooks > 0 THEN
			SET _alles_cb = 0;
		END IF; */
		
		-- Als promo, maar niet alles is verschenen - wacht
		IF _aantal_regels < 3 AND _promoregels > 0 AND _alle_verschenen_leverbaar = 0 THEN
			SET _wacht = 1;
			SET @_wachtreden = CONCAT( "Promo2 ", _aantal_regels, ' ', _promoregels, ' ', _alle_verschenen_leverbaar, ' ', _alle_verschenen );
		ELSE 
			SET @_wachtreden = CONCAT( ">3 etc. ", _wacht, " Promo ", _promo );
		END IF;
					
		IF _niet_inpakken THEN
			UPDATE OrderschermRegels SET LeverenMB = (Aantal+AantalBackorder)-Geleverd, LeverenCB=0, LeverenNiet=0, LeverenPad = 'Niet inpakken' WHERE BestellingId = _orderid;
		ELSEIF _kanaal IN ( 'SerieABO', 'Plaza' ) THEN
			UPDATE OrderschermRegels SET LeverenMB = (Aantal+AantalBackorder)-Geleverd, LeverenCB=0, LeverenNiet=0, MagONE = 0, LeverenPad = CONCAT('Kanaal ', _kanaal) WHERE BestellingId = _orderid AND GenoegVoorraad = 1; -- >= (Aantal+AantalBackorder)-Geleverd;
			UPDATE OrderschermRegels SET LeverenNiet = ((Aantal+AantalBackorder)-Geleverd) - (LeverenMB+LeverenCB), MagONE = 0, LeverenPad = CONCAT('Kanaal ', _kanaal)  WHERE BestellingId = _orderid;
		ELSEIF _institutioneel THEN
			UPDATE OrderschermRegels SET LeverenMB = (Aantal+AantalBackorder)-Geleverd, LeverenCB=0, LeverenNiet=0, LeverenPad = 'Institutioneel' WHERE BestellingId = _orderid AND GenoegVoorraad = 1; -- >= (Aantal+AantalBackorder)-Geleverd;
			UPDATE OrderschermRegels SET LeverenNiet = ((Aantal+AantalBackorder)-Geleverd) - (LeverenMB+LeverenCB), LeverenPad = 'Institutioneel'  WHERE BestellingId = _orderid;
		/* ELSEIF _promo > 0 THEN 
			UPDATE OrderschermRegels SET LeverenMB = (Aantal+AantalBackorder)-Geleverd, LeverenCB=0, LeverenNiet=0, LeverenPad = 'Promo' WHERE BestellingId = _orderid AND GenoegVoorraad >= (Aantal+AantalBackorder)-Geleverd;
			UPDATE OrderschermRegels SET LeverenNiet = ((Aantal+AantalBackorder)-Geleverd) - (LeverenMB+LeverenCB), LeverenPad = 'Promo'  WHERE BestellingId = _orderid;		 */
		ELSEIF _alles_mb = 1 THEN
			UPDATE OrderschermRegels SET LeverenMB = (Aantal+AantalBackorder)-Geleverd, LeverenCB=0, LeverenNiet=0, LeverenPad = 'Alles MB' WHERE BestellingId = _orderid;
		ELSEIF _alles_cb = 1 THEN
			UPDATE OrderschermRegels SET LeverenCB = (Aantal+AantalBackorder)-Geleverd, LeverenMB=0, LeverenNiet=0, LeverenPad = CONCAT( _alles_mb_wtf, 'Alles CB:', _alles_cb, ' MB:', _alles_mb, ' E:', _aantal_ebooks ) WHERE BestellingId = _orderid AND CBLeverbaar = 1;			
			
			-- Het kan zo zijn dat er nog e-books zijn
			UPDATE OrderschermRegels SET LeverenMB = (Aantal+AantalBackorder)-Geleverd, LeverenCB=0, LeverenNiet=0, LeverenPad = 'MB Ebook' WHERE BestellingId = _orderid AND CBLeverbaar = 0; 			
		ELSEIF _alle_verschenen_leverbaar = 1 AND _wacht = 1 AND _promoregels = 0 THEN
			UPDATE OrderschermRegels SET LeverenMB = (Aantal+AantalBackorder)-Geleverd, LeverenCB=0, LeverenNiet=0, LeverenPad = 'MB Prio1' WHERE BestellingId = _orderid AND GenoegVoorraad =1; -- >= (Aantal+AantalBackorder)-Geleverd;
			UPDATE OrderschermRegels SET LeverenNiet = ((Aantal+AantalBackorder)-Geleverd) - (LeverenMB+LeverenCB), LeverenPad = CONCAT( 'Backorder ',(Aantal+AantalBackorder),'-',Geleverd, '>' ,(LeverenMB+LeverenCB) )  WHERE BestellingId = _orderid AND ((Aantal+AantalBackorder)-Geleverd) - (LeverenMB+LeverenCB) > 0;
		ELSEIF _wacht = 1 AND _alle_verschenen_leverbaar=0 THEN
			UPDATE OrderschermRegels SET LeverenMB = 0, LeverenCB=0, LeverenNiet=((Aantal+AantalBackorder)-Geleverd), LeverenPad = CONCAT( 'Wachten. (Promo: ', _promoregels , ' / ', _aantal_regels, ' / ', _alle_verschenen, ')'  ) WHERE BestellingId = _orderid;
			
			IF _promoregels > 0 THEN
				UPDATE OrderschermRegels SET Bakje = 'back', BakjeReden = '_promoregels > 0' WHERE BestellingId = _orderid;
			END IF;
		ELSE 
			-- Lever zo veel mogelijk via MB
			UPDATE OrderschermRegels SET LeverenMB = (Aantal+AantalBackorder)-Geleverd, LeverenCB=0, LeverenNiet=0, LeverenPad = 'MB Prio2' WHERE BestellingId = _orderid AND GenoegVoorraad = 1; --  >= (Aantal+AantalBackorder)-Geleverd;
			
			-- Dan via CB (Maar Promo niet)
			UPDATE OrderschermRegels SET LeverenCB = (Aantal+AantalBackorder)-Geleverd, LeverenMB=0, LeverenNiet=0, LeverenPad = 'CB Prio'  WHERE BestellingId = _orderid AND CBLeverbaar=1 AND GenoegVoorraad = 0 AND PromoBoek = 0; 
			
			-- Eventuele splitsing
			UPDATE Managementboek_Klanten.`OrderschermRegels` 
			SET 
			`LeverenMB`  = LEAST( (Aantal+AantalBackorder-Geleverd), (`FysiekeVoorraad`-`GeprinteVoorraad`) ),
			`LeverenCB`  = GREATEST( (Aantal+AantalBackorder-Geleverd) - LEAST( (Aantal+AantalBackorder-Geleverd), (`FysiekeVoorraad`-`GeprinteVoorraad`) ), 0 ),
			`LeverenNiet` = 0,
			`LeverenPad` = 'Gesplitst'
			WHERE BestellingId = _orderid
			AND (Aantal+AantalBackorder-Geleverd) <= ( `CB24Leverbaar` + (`FysiekeVoorraad`-`GeprinteVoorraad`) )
			AND (Aantal+AantalBackorder-Geleverd) > (`FysiekeVoorraad`-`GeprinteVoorraad`)
			AND (Aantal+AantalBackorder-Geleverd) > (`CB24Leverbaar`)
			AND MagONE=1
			AND PromoBoek=0;
			
			-- Kijk of we toch beschikbare promoboeken gaan leveren?
			SELECT COUNT(*) INTO _t FROM Managementboek_Klanten.`OrderschermRegels` WHERE BestellingId = _orderid AND LeverenMB > 0;
			IF _t > 0 THEN
				UPDATE Managementboek_Klanten.`OrderschermRegels` 
				SET 
				`LeverenMB`  = LEAST( (Aantal+AantalBackorder-Geleverd), (`FysiekeVoorraad`-`GeprinteVoorraad`) ),
				`LeverenNiet` = 0,
				`GenoegVoorraad` = 1,
				`LeverenPad` = 'Promo achteraf'
				WHERE BestellingId = _orderid
				AND (`FysiekeVoorraad`-`GeprinteVoorraad`) >= (Aantal+AantalBackorder-Geleverd)
				AND PromoBoek>0;			
			END IF;
			
			-- Dan maar backorder..
			UPDATE OrderschermRegels SET LeverenNiet = ((Aantal+AantalBackorder)-Geleverd) - (LeverenMB+LeverenCB), LeverenPad = CONCAT( 'Backorder (2) ',(Aantal+AantalBackorder),'-',Geleverd, '>' ,(LeverenMB+LeverenCB) ) 
				 WHERE BestellingId = _orderid AND ((Aantal+AantalBackorder)-Geleverd) - (LeverenMB+LeverenCB) > 0;
		END IF;
	END bepaal_levering;		
	
	-- Alles on-hold ook echt achterhouden
	-- Ook nog niet verschenen
	IF _kanaal NOT IN ( 'Periodieken' ) THEN
		UPDATE `OrderschermRegels` SET LeverenPad = 'on-hold', LeverenMB=0, LeverenCB=0, LeverenNiet=(Aantal+AantalBackorder-Geleverd) 
		WHERE BestellingId = _orderid AND ( NietReserveren=1 /* OR BoekStatus=5 */ );
	END IF;
	
	-- Alle Seminars niet van MB, niet leveren. [ALG-8058]
	UPDATE OrderschermRegels JOIN Manpo.Boeken B USING ( Ean ) SET LeverenPad = 'Niet-MB Seminar', LeverenMB=0,LeverenCB=0,LeverenNiet=(Aantal+AantalBackorder-Geleverd) 
	            WHERE BestellingId = _orderid 
	            AND UitgeverId != 433
	            AND Bindwijze_evenement=1;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `permissie_toegestane_klanten` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` PROCEDURE `permissie_toegestane_klanten`(iKlantID INT(11), iPermissienaam VARCHAR(128) CHARACTER SET ASCII)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE i INT DEFAULT 0;
	DECLARE ii INT DEFAULT 0;

	
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg;
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg_b;
	CREATE TEMPORARY TABLE tmp.grandchildorg ( OrganisatieID INT(11) PRIMARY KEY ) ENGINE=MEMORY;
	CREATE TEMPORARY TABLE tmp.grandchildorg_b ( OrganisatieID INT(11) PRIMARY KEY ) ENGINE=MEMORY;

	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID )
	SELECT DISTINCT C.OrganisatieID
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		JOIN Managementboek_Klanten.OrganisatiePermissies OP USING ( OrganisatieID )
		JOIN Managementboek_Klanten.Organisaties C ON ( C.ParentOrganisatie = OK.OrganisatieID )
	WHERE OK.KlantID = iKlantID
		AND OP.Permissienaam = iPermissienaam
		AND OP.Permissie IN ( 'all', 'child' );
	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg;
	WHILE i > ii DO
		SET ii = i;
		INSERT IGNORE INTO tmp.grandchildorg_b ( OrganisatieID )
		SELECT OrganisatieID FROM tmp.grandchildorg;
		INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID )
		SELECT DISTINCT O.OrganisatieID
		FROM Managementboek_Klanten.Organisaties O
			JOIN tmp.grandchildorg_b B ON ( B.OrganisatieID = O.ParentOrganisatie );
		SELECT COUNT(1) INTO i
		FROM tmp.grandchildorg;
	END WHILE;
	
	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID )
	SELECT DISTINCT O.OrganisatieID
	FROM Managementboek_Klanten.Organisaties O
		JOIN Managementboek_Klanten.OrganisatiePermissies PP USING ( OrganisatieID )
		JOIN Managementboek_Klanten.OrganisatieKlanten KA ON ( KA.OrganisatieID = O.OrganisatieID AND KA.KlantID = iKlantID )
	WHERE PP.Permissienaam = iPermissienaam
		AND PP.Permissie IN ( 'all', 'self' );

	
	SELECT OK.KlantID, OK.OrganisatieID
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		JOIN tmp.grandchildorg USING ( OrganisatieID )
		LEFT JOIN Managementboek_Klanten.Klanten_met_adres KMA USING ( KlantID )
	WHERE OK.KlantID != iKlantID
	ORDER BY OrganisatieID, KMA.Achternaam, KMA.Voornaam, KlantID;
	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `permissie_toegestane_klanten_dev` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` PROCEDURE `permissie_toegestane_klanten_dev`(iKlantID INT(11), iPermissienaam VARCHAR(128) CHARACTER SET ASCII)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE i INT DEFAULT 0;
	DECLARE ii INT DEFAULT 0;

	
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg;
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg_b;
	CREATE TEMPORARY TABLE tmp.grandchildorg ( OrganisatieID INT(11) PRIMARY KEY ) ENGINE=MEMORY;
	CREATE TEMPORARY TABLE tmp.grandchildorg_b ( OrganisatieID INT(11) PRIMARY KEY ) ENGINE=MEMORY;

	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID )
	SELECT DISTINCT C.OrganisatieID
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		JOIN Managementboek_Klanten.OrganisatiePermissies OP USING ( OrganisatieID )
		JOIN Managementboek_Klanten.Organisaties C ON ( C.ParentOrganisatie = OK.OrganisatieID )
	WHERE OK.KlantID = iKlantID
		AND OP.Permissienaam = iPermissienaam
		AND OP.Permissie IN ( 'all', 'child' );
	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg;
	WHILE i > ii DO
		SET ii = i;
		INSERT IGNORE INTO tmp.grandchildorg_b ( OrganisatieID )
		SELECT OrganisatieID FROM tmp.grandchildorg;
		INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID )
		SELECT DISTINCT O.OrganisatieID
		FROM Managementboek_Klanten.Organisaties O
			JOIN tmp.grandchildorg_b B ON ( B.OrganisatieID = O.ParentOrganisatie );
		SELECT COUNT(1) INTO i
		FROM tmp.grandchildorg;
	END WHILE;
	
	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID )
	SELECT DISTINCT O.OrganisatieID
	FROM Managementboek_Klanten.Organisaties O
		JOIN Managementboek_Klanten.OrganisatiePermissies PP USING ( OrganisatieID )
		JOIN Managementboek_Klanten.OrganisatieKlanten KA ON ( KA.OrganisatieID = O.OrganisatieID AND KA.KlantID = iKlantID )
	WHERE PP.Permissienaam = iPermissienaam
		AND PP.Permissie IN ( 'all', 'self' );

	
	SELECT OK.KlantID, OK.OrganisatieID
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		JOIN tmp.grandchildorg USING ( OrganisatieID )
		LEFT JOIN Managementboek_Klanten.Klanten_met_adres KMA USING ( KlantID )
	WHERE OK.KlantID != iKlantID
	ORDER BY OrganisatieID, KMA.Achternaam, KMA.Voornaam, KlantID;
	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `permissie_toegestane_klanten_k_dennis` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` PROCEDURE `permissie_toegestane_klanten_k_dennis`(iKlantID INT(11), iPermissienaam VARCHAR(128) CHARACTER SET ASCII)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE i INT DEFAULT 0;
	DECLARE ii INT DEFAULT 0;
	
	
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg;
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg_b;
	CREATE TEMPORARY TABLE tmp.grandchildorg ( OrganisatieID INT(11) PRIMARY KEY ) ENGINE=MEMORY;
	CREATE TEMPORARY TABLE tmp.grandchildorg_b ( OrganisatieID INT(11) PRIMARY KEY ) ENGINE=MEMORY;
	
	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID )
	SELECT DISTINCT C.OrganisatieID
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		JOIN Managementboek_Klanten.OrganisatiePermissies OP USING ( OrganisatieID )
		JOIN Managementboek_Klanten.Organisaties C ON ( C.ParentOrganisatie = OK.OrganisatieID )
	WHERE OK.KlantID = iKlantID
		AND OP.Permissienaam = iPermissienaam
		AND OP.Permissie IN ( 'all', 'child' );
	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg;
	WHILE i > ii DO
		SET ii = i;
		INSERT IGNORE INTO tmp.grandchildorg_b ( OrganisatieID )
		SELECT OrganisatieID FROM tmp.grandchildorg;
		INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID )
		SELECT DISTINCT O.OrganisatieID
		FROM Managementboek_Klanten.Organisaties O
			JOIN tmp.grandchildorg_b B ON ( B.OrganisatieID = O.ParentOrganisatie );
		SELECT COUNT(1) INTO i
		FROM tmp.grandchildorg;
	END WHILE;
	
	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID )
	SELECT DISTINCT O.OrganisatieID
	FROM Managementboek_Klanten.Organisaties O
		JOIN Managementboek_Klanten.OrganisatiePermissies PP USING ( OrganisatieID )
		JOIN Managementboek_Klanten.OrganisatieKlanten KA ON ( KA.OrganisatieID = O.OrganisatieID AND KA.KlantID = iKlantID )
	WHERE PP.Permissienaam = iPermissienaam
		AND PP.Permissie IN ( 'all', 'self' );
	
	
	SELECT OK.KlantID, OK.OrganisatieID
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		JOIN tmp.grandchildorg USING ( OrganisatieID )
		LEFT JOIN Managementboek_Klanten.Klanten_met_adres KMA USING ( KlantID )
	WHERE OK.KlantID != iKlantID
	ORDER BY OrganisatieID, KMA.Achternaam, KMA.Voornaam, KlantID;
	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `permissie_toegestane_klanten_k_sander` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` PROCEDURE `permissie_toegestane_klanten_k_sander`(iKlantID INT(11), iPermissienaam VARCHAR(128) CHARACTER SET ASCII)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE i INT DEFAULT 0;
	DECLARE ii INT DEFAULT 0;

	
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg;
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg_b;
	CREATE TEMPORARY TABLE tmp.grandchildorg ( OrganisatieID INT(11) PRIMARY KEY ) ENGINE=MEMORY;
	CREATE TEMPORARY TABLE tmp.grandchildorg_b ( OrganisatieID INT(11) PRIMARY KEY ) ENGINE=MEMORY;

	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID )
	SELECT DISTINCT C.OrganisatieID
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		JOIN Managementboek_Klanten.OrganisatiePermissies OP USING ( OrganisatieID )
		JOIN Managementboek_Klanten.Organisaties C ON ( C.ParentOrganisatie = OK.OrganisatieID )
	WHERE OK.KlantID = iKlantID
		AND OP.Permissienaam = iPermissienaam
		AND OP.Permissie IN ( 'all', 'child' );
	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg;
	WHILE i > ii DO
		SET ii = i;
		INSERT IGNORE INTO tmp.grandchildorg_b ( OrganisatieID )
		SELECT OrganisatieID FROM tmp.grandchildorg;
		INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID )
		SELECT DISTINCT O.OrganisatieID
		FROM Managementboek_Klanten.Organisaties O
			JOIN tmp.grandchildorg_b B ON ( B.OrganisatieID = O.ParentOrganisatie );
		SELECT COUNT(1) INTO i
		FROM tmp.grandchildorg;
	END WHILE;
	
	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID )
	SELECT DISTINCT O.OrganisatieID
	FROM Managementboek_Klanten.Organisaties O
		JOIN Managementboek_Klanten.OrganisatiePermissies PP USING ( OrganisatieID )
		JOIN Managementboek_Klanten.OrganisatieKlanten KA ON ( KA.OrganisatieID = O.OrganisatieID AND KA.KlantID = iKlantID )
	WHERE PP.Permissienaam = iPermissienaam
		AND PP.Permissie IN ( 'all', 'self' );

	
	SELECT OK.KlantID, OK.OrganisatieID
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		JOIN tmp.grandchildorg USING ( OrganisatieID )
		LEFT JOIN Managementboek_Klanten.Klanten_met_adres KMA USING ( KlantID )
	WHERE OK.KlantID != iKlantID
	ORDER BY OrganisatieID, KMA.Achternaam, KMA.Voornaam, KlantID;
	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `permissie_toegestane_klanten_k_thijs` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` PROCEDURE `permissie_toegestane_klanten_k_thijs`(iKlantID INT(11), iPermissienaam VARCHAR(128) CHARACTER SET ASCII)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE i INT DEFAULT 0;
	DECLARE ii INT DEFAULT 0;

	
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg;
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg_b;
	CREATE TEMPORARY TABLE tmp.grandchildorg ( OrganisatieID INT(11) PRIMARY KEY ) ENGINE=MEMORY;
	CREATE TEMPORARY TABLE tmp.grandchildorg_b ( OrganisatieID INT(11) PRIMARY KEY ) ENGINE=MEMORY;

	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID )
	SELECT DISTINCT C.OrganisatieID
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		JOIN Managementboek_Klanten.OrganisatiePermissies OP USING ( OrganisatieID )
		JOIN Managementboek_Klanten.Organisaties C ON ( C.ParentOrganisatie = OK.OrganisatieID )
	WHERE OK.KlantID = iKlantID
		AND OP.Permissienaam = iPermissienaam
		AND OP.Permissie IN ( 'all', 'child' );
	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg;
	WHILE i > ii DO
		SET ii = i;
		INSERT IGNORE INTO tmp.grandchildorg_b ( OrganisatieID )
		SELECT OrganisatieID FROM tmp.grandchildorg;
		INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID )
		SELECT DISTINCT O.OrganisatieID
		FROM Managementboek_Klanten.Organisaties O
			JOIN tmp.grandchildorg_b B ON ( B.OrganisatieID = O.ParentOrganisatie );
		SELECT COUNT(1) INTO i
		FROM tmp.grandchildorg;
	END WHILE;
	
	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID )
	SELECT DISTINCT O.OrganisatieID
	FROM Managementboek_Klanten.Organisaties O
		JOIN Managementboek_Klanten.OrganisatiePermissies PP USING ( OrganisatieID )
		JOIN Managementboek_Klanten.OrganisatieKlanten KA ON ( KA.OrganisatieID = O.OrganisatieID AND KA.KlantID = iKlantID )
	WHERE PP.Permissienaam = iPermissienaam
		AND PP.Permissie IN ( 'all', 'self' );

	
	SELECT OK.KlantID, OK.OrganisatieID
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		JOIN tmp.grandchildorg USING ( OrganisatieID )
		LEFT JOIN Managementboek_Klanten.Klanten_met_adres KMA USING ( KlantID )
	WHERE OK.KlantID != iKlantID
	ORDER BY OrganisatieID, KMA.Achternaam, KMA.Voornaam, KlantID;
	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `permissie_toegestane_organisaties` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` PROCEDURE `permissie_toegestane_organisaties`(iKlantID INT(11), iPermissienaam VARCHAR(128) CHARACTER SET ASCII)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE i INT DEFAULT 0;
	DECLARE ii INT DEFAULT 0;

	
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg;
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg_b;
	CREATE TEMPORARY TABLE tmp.grandchildorg ( OrganisatieID INT(11) PRIMARY KEY, ParentOrganisatie INT(11) ) ENGINE=MEMORY;
	CREATE TEMPORARY TABLE tmp.grandchildorg_b ( OrganisatieID INT(11) PRIMARY KEY, ParentOrganisatie INT(11) ) ENGINE=MEMORY;

	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID, ParentOrganisatie )
	SELECT DISTINCT C.OrganisatieID, C.ParentOrganisatie
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		JOIN Managementboek_Klanten.OrganisatiePermissies OP USING ( OrganisatieID )
		JOIN Managementboek_Klanten.Organisaties C ON ( C.ParentOrganisatie = OK.OrganisatieID )
	WHERE OK.KlantID = iKlantID
		AND OP.Permissienaam = iPermissienaam
		AND OP.Permissie IN ( 'all', 'child' );
	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg;
	WHILE i > ii DO
		SET ii = i;
		INSERT IGNORE INTO tmp.grandchildorg_b ( OrganisatieID, ParentOrganisatie )
		SELECT OrganisatieID, ParentOrganisatie FROM tmp.grandchildorg;
		INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID, ParentOrganisatie )
		SELECT DISTINCT O.OrganisatieID, O.ParentOrganisatie
		FROM Managementboek_Klanten.Organisaties O
			JOIN tmp.grandchildorg_b B ON ( B.OrganisatieID = O.ParentOrganisatie );
		SELECT COUNT(1) INTO i
		FROM tmp.grandchildorg;
	END WHILE;
	
	
	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID, ParentOrganisatie )
	SELECT DISTINCT O.OrganisatieID, NULL
	FROM Managementboek_Klanten.Organisaties O
		JOIN Managementboek_Klanten.OrganisatiePermissies PP USING ( OrganisatieID )
		JOIN Managementboek_Klanten.OrganisatieKlanten KA ON ( KA.OrganisatieID = O.OrganisatieID AND KA.KlantID = iKlantID )
	WHERE PP.Permissienaam = iPermissienaam
		AND PP.Permissie IN ( 'all', 'self', 'child' );

	
	SELECT G.OrganisatieID, G.ParentOrganisatie, O.Label, Managementboek_Klanten.organisatie_naam( G.OrganisatieID ) AS Naam
	FROM tmp.grandchildorg G
		JOIN Managementboek_Klanten.Organisaties O USING ( OrganisatieID )
	ORDER BY O.Label;
	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `permissie_toegestane_organisaties_dev` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` PROCEDURE `permissie_toegestane_organisaties_dev`(iKlantID INT(11), iPermissienaam VARCHAR(128) CHARACTER SET ASCII)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE i INT DEFAULT 0;
	DECLARE ii INT DEFAULT 0;

	
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg;
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg_b;
	CREATE TEMPORARY TABLE tmp.grandchildorg ( OrganisatieID INT(11) PRIMARY KEY, ParentOrganisatie INT(11) ) ENGINE=MEMORY;
	CREATE TEMPORARY TABLE tmp.grandchildorg_b ( OrganisatieID INT(11) PRIMARY KEY, ParentOrganisatie INT(11) ) ENGINE=MEMORY;

	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID, ParentOrganisatie )
	SELECT DISTINCT C.OrganisatieID, C.ParentOrganisatie
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		JOIN Managementboek_Klanten.OrganisatiePermissies OP USING ( OrganisatieID )
		JOIN Managementboek_Klanten.Organisaties C ON ( C.ParentOrganisatie = OK.OrganisatieID )
	WHERE OK.KlantID = iKlantID
		AND OP.Permissienaam = iPermissienaam
		AND OP.Permissie IN ( 'all', 'child' );
	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg;
	WHILE i > ii DO
		SET ii = i;
		INSERT IGNORE INTO tmp.grandchildorg_b ( OrganisatieID, ParentOrganisatie )
		SELECT OrganisatieID, ParentOrganisatie FROM tmp.grandchildorg;
		INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID, ParentOrganisatie )
		SELECT DISTINCT O.OrganisatieID, O.ParentOrganisatie
		FROM Managementboek_Klanten.Organisaties O
			JOIN tmp.grandchildorg_b B ON ( B.OrganisatieID = O.ParentOrganisatie );
		SELECT COUNT(1) INTO i
		FROM tmp.grandchildorg;
	END WHILE;
	
	
	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID, ParentOrganisatie )
	SELECT DISTINCT O.OrganisatieID, NULL
	FROM Managementboek_Klanten.Organisaties O
		JOIN Managementboek_Klanten.OrganisatiePermissies PP USING ( OrganisatieID )
		JOIN Managementboek_Klanten.OrganisatieKlanten KA ON ( KA.OrganisatieID = O.OrganisatieID AND KA.KlantID = iKlantID )
	WHERE PP.Permissienaam = iPermissienaam
		AND PP.Permissie IN ( 'all', 'self', 'child' );

	
	SELECT G.OrganisatieID, G.ParentOrganisatie, O.Label, Managementboek_Klanten.organisatie_naam( G.OrganisatieID ) AS Naam
	FROM tmp.grandchildorg G
		JOIN Managementboek_Klanten.Organisaties O USING ( OrganisatieID )
	ORDER BY O.Label;
	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `permissie_toegestane_organisaties_k_dennis` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` PROCEDURE `permissie_toegestane_organisaties_k_dennis`(iKlantID INT(11), iPermissienaam VARCHAR(128) CHARACTER SET ASCII)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE i INT DEFAULT 0;
	DECLARE ii INT DEFAULT 0;
	
	
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg;
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg_b;
	CREATE TEMPORARY TABLE tmp.grandchildorg ( OrganisatieID INT(11) PRIMARY KEY, ParentOrganisatie INT(11) ) ENGINE=MEMORY;
	CREATE TEMPORARY TABLE tmp.grandchildorg_b ( OrganisatieID INT(11) PRIMARY KEY, ParentOrganisatie INT(11) ) ENGINE=MEMORY;
	
	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID, ParentOrganisatie )
	SELECT DISTINCT C.OrganisatieID, C.ParentOrganisatie
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		JOIN Managementboek_Klanten.OrganisatiePermissies OP USING ( OrganisatieID )
		JOIN Managementboek_Klanten.Organisaties C ON ( C.ParentOrganisatie = OK.OrganisatieID )
	WHERE OK.KlantID = iKlantID
		AND OP.Permissienaam = iPermissienaam
		AND OP.Permissie IN ( 'all', 'child' );
	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg;
	WHILE i > ii DO
		SET ii = i;
		INSERT IGNORE INTO tmp.grandchildorg_b ( OrganisatieID, ParentOrganisatie )
		SELECT OrganisatieID, ParentOrganisatie FROM tmp.grandchildorg;
		INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID, ParentOrganisatie )
		SELECT DISTINCT O.OrganisatieID, O.ParentOrganisatie
		FROM Managementboek_Klanten.Organisaties O
			JOIN tmp.grandchildorg_b B ON ( B.OrganisatieID = O.ParentOrganisatie );
		SELECT COUNT(1) INTO i
		FROM tmp.grandchildorg;
	END WHILE;
	
	
	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID, ParentOrganisatie )
	SELECT DISTINCT O.OrganisatieID, NULL
	FROM Managementboek_Klanten.Organisaties O
		JOIN Managementboek_Klanten.OrganisatiePermissies PP USING ( OrganisatieID )
		JOIN Managementboek_Klanten.OrganisatieKlanten KA ON ( KA.OrganisatieID = O.OrganisatieID AND KA.KlantID = iKlantID )
	WHERE PP.Permissienaam = iPermissienaam
		AND PP.Permissie IN ( 'all', 'self', 'child' );
	
	
	SELECT G.OrganisatieID, G.ParentOrganisatie, O.Label, Managementboek_Klanten.organisatie_naam( G.OrganisatieID ) AS Naam
	FROM tmp.grandchildorg G
		JOIN Managementboek_Klanten.Organisaties O USING ( OrganisatieID )
	ORDER BY O.Label;
	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `permissie_toegestane_organisaties_k_sander` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` PROCEDURE `permissie_toegestane_organisaties_k_sander`(iKlantID INT(11), iPermissienaam VARCHAR(128) CHARACTER SET ASCII)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE i INT DEFAULT 0;
	DECLARE ii INT DEFAULT 0;

	
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg;
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg_b;
	CREATE TEMPORARY TABLE tmp.grandchildorg ( OrganisatieID INT(11) PRIMARY KEY, ParentOrganisatie INT(11) ) ENGINE=MEMORY;
	CREATE TEMPORARY TABLE tmp.grandchildorg_b ( OrganisatieID INT(11) PRIMARY KEY, ParentOrganisatie INT(11) ) ENGINE=MEMORY;

	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID, ParentOrganisatie )
	SELECT DISTINCT C.OrganisatieID, C.ParentOrganisatie
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		JOIN Managementboek_Klanten.OrganisatiePermissies OP USING ( OrganisatieID )
		JOIN Managementboek_Klanten.Organisaties C ON ( C.ParentOrganisatie = OK.OrganisatieID )
	WHERE OK.KlantID = iKlantID
		AND OP.Permissienaam = iPermissienaam
		AND OP.Permissie IN ( 'all', 'child' );
	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg;
	WHILE i > ii DO
		SET ii = i;
		INSERT IGNORE INTO tmp.grandchildorg_b ( OrganisatieID, ParentOrganisatie )
		SELECT OrganisatieID, ParentOrganisatie FROM tmp.grandchildorg;
		INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID, ParentOrganisatie )
		SELECT DISTINCT O.OrganisatieID, O.ParentOrganisatie
		FROM Managementboek_Klanten.Organisaties O
			JOIN tmp.grandchildorg_b B ON ( B.OrganisatieID = O.ParentOrganisatie );
		SELECT COUNT(1) INTO i
		FROM tmp.grandchildorg;
	END WHILE;
	
	
	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID, ParentOrganisatie )
	SELECT DISTINCT O.OrganisatieID, NULL
	FROM Managementboek_Klanten.Organisaties O
		JOIN Managementboek_Klanten.OrganisatiePermissies PP USING ( OrganisatieID )
		JOIN Managementboek_Klanten.OrganisatieKlanten KA ON ( KA.OrganisatieID = O.OrganisatieID AND KA.KlantID = iKlantID )
	WHERE PP.Permissienaam = iPermissienaam
		AND PP.Permissie IN ( 'all', 'self', 'child' );

	
	SELECT G.OrganisatieID, G.ParentOrganisatie, O.Label, Managementboek_Klanten.organisatie_naam( G.OrganisatieID ) AS Naam
	FROM tmp.grandchildorg G
		JOIN Managementboek_Klanten.Organisaties O USING ( OrganisatieID )
	ORDER BY O.Label;
	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `permissie_toegestane_organisaties_k_thijs` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` PROCEDURE `permissie_toegestane_organisaties_k_thijs`(iKlantID INT(11), iPermissienaam VARCHAR(128) CHARACTER SET ASCII)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE i INT DEFAULT 0;
	DECLARE ii INT DEFAULT 0;

	
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg;
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg_b;
	CREATE TEMPORARY TABLE tmp.grandchildorg ( OrganisatieID INT(11) PRIMARY KEY, ParentOrganisatie INT(11) ) ENGINE=MEMORY;
	CREATE TEMPORARY TABLE tmp.grandchildorg_b ( OrganisatieID INT(11) PRIMARY KEY, ParentOrganisatie INT(11) ) ENGINE=MEMORY;

	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID, ParentOrganisatie )
	SELECT DISTINCT C.OrganisatieID, C.ParentOrganisatie
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		JOIN Managementboek_Klanten.OrganisatiePermissies OP USING ( OrganisatieID )
		JOIN Managementboek_Klanten.Organisaties C ON ( C.ParentOrganisatie = OK.OrganisatieID )
	WHERE OK.KlantID = iKlantID
		AND OP.Permissienaam = iPermissienaam
		AND OP.Permissie IN ( 'all', 'child' );
	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg;
	WHILE i > ii DO
		SET ii = i;
		INSERT IGNORE INTO tmp.grandchildorg_b ( OrganisatieID, ParentOrganisatie )
		SELECT OrganisatieID, ParentOrganisatie FROM tmp.grandchildorg;
		INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID, ParentOrganisatie )
		SELECT DISTINCT O.OrganisatieID, O.ParentOrganisatie
		FROM Managementboek_Klanten.Organisaties O
			JOIN tmp.grandchildorg_b B ON ( B.OrganisatieID = O.ParentOrganisatie );
		SELECT COUNT(1) INTO i
		FROM tmp.grandchildorg;
	END WHILE;
	
	
	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID, ParentOrganisatie )
	SELECT DISTINCT O.OrganisatieID, NULL
	FROM Managementboek_Klanten.Organisaties O
		JOIN Managementboek_Klanten.OrganisatiePermissies PP USING ( OrganisatieID )
		JOIN Managementboek_Klanten.OrganisatieKlanten KA ON ( KA.OrganisatieID = O.OrganisatieID AND KA.KlantID = iKlantID )
	WHERE PP.Permissienaam = iPermissienaam
		AND PP.Permissie IN ( 'all', 'self', 'child' );

	
	SELECT G.OrganisatieID, G.ParentOrganisatie, O.Label, Managementboek_Klanten.organisatie_naam( G.OrganisatieID ) AS Naam
	FROM tmp.grandchildorg G
		JOIN Managementboek_Klanten.Organisaties O USING ( OrganisatieID )
	ORDER BY O.Label;
	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `politieboeken` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` PROCEDURE `politieboeken`()
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE i INT DEFAULT 0;
	DECLARE ii INT DEFAULT 0;
	REPLACE INTO Manpo.`PolitieBoeken` SELECT Ean FROM Managementboek_Klanten.`BestelLijsten` JOIN Managementboek_Klanten.`BestelLijstEANs` USING ( naam ) WHERE naam LIKE "%politie%";
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg;
	DROP TEMPORARY TABLE IF EXISTS tmp.grandchildorg_b;
	CREATE TEMPORARY TABLE tmp.grandchildorg ( OrganisatieID INT(11) PRIMARY KEY ) ENGINE=MEMORY;
	CREATE TEMPORARY TABLE tmp.grandchildorg_b ( OrganisatieID INT(11) PRIMARY KEY ) ENGINE=MEMORY;
	INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID ) 
		SELECT OrganisatieId FROM Managementboek_Klanten.`Organisaties` WHERE Label LIKE "%olitie%";
	
	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg;
	WHILE i > ii DO
		SET ii = i;
		INSERT IGNORE INTO tmp.grandchildorg_b ( OrganisatieID )
			SELECT OrganisatieID FROM tmp.grandchildorg;
		INSERT IGNORE INTO tmp.grandchildorg ( OrganisatieID )
			SELECT DISTINCT O.OrganisatieID
			FROM Managementboek_Klanten.Organisaties O
				JOIN tmp.grandchildorg_b B ON ( B.OrganisatieID = O.ParentOrganisatie );
		SELECT COUNT(1) INTO i
		FROM tmp.grandchildorg;
	END WHILE;
	
	REPLACE INTO Manpo.`PolitieBoeken`
	SELECT `Ean`
		FROM Managementboek_Klanten.OrganisatieKlanten OK
			JOIN tmp.grandchildorg USING ( OrganisatieID )
			JOIN Managementboek_Klanten.Bestelling USING ( Klantid )
			JOIN Managementboek_Klanten.`Bestellingen` USING ( BestellingId );
			
	REPLACE INTO Manpo.`PolitieBoeken` SELECT Ean FROM Manpo.`BoekVervangtEAN` WHERE Vervangt IN ( SELECT Ean FROM Manpo.`PolitieBoeken` );
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `resyncOrderregelStatus` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
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 ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP PROCEDURE IF EXISTS `select_nieuwe_regel` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `select_nieuwe_regel`(
  _orderid INT,
  _ean CHAR(13),
  _aantal INT
)
BEGIN
  DECLARE _id INT ;
  SELECT 
    nieuwe_orderregel (_orderid, _ean, _aantal) INTO _id ;
  IF _id > 0 
  THEN 
	SELECT * FROM Managementboek_Klanten.MARI_Regels  WHERE Id = _id;
  else
	SELECT * FROM Managementboek_Klanten.MARI_Regels  WHERE 0;
  END IF ;
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `sync_exactartikel` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `sync_exactartikel`( _ean CHAR(13) )
BEGIN
DECLARE cr_stack_depth INTEGER DEFAULT cr_debug.ENTER_MODULE2('sync_exactartikel', 'Managementboek_Klanten', 7, 100631)/*[cr_debug.1]*/;
	--
	-- Tijdelijke tabel met exact-achtige gevens uit de boekentabel, 
	-- maar alleen van die boeken die nog niet in de exactartikelen tabel staan
	--
	CALL cr_debug.UPDATE_WATCH3('_ean', _ean, 'CHAR(13)', cr_stack_depth)/*[cr_debug.2]*/;
CALL cr_debug.TRACE(2, 2, 0, 5, cr_stack_depth)/*[cr_debug.2]*/;
CALL cr_debug.TRACE(7, 97, 1, 25, cr_stack_depth)/*[cr_debug.2]*/;
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,
		    IFNULL(Achternaam,'') 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,
		  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,
		      0
		    )
		    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
		      ) 
		    LEFT 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;
CALL cr_debug.UPDATE_SYSTEM_CALLS(101)/*[cr_debug.1]*/;
  
	-- INSERT NU DIE BOEKEN
	CALL cr_debug.TRACE(100, 117, 1, 41, cr_stack_depth)/*[cr_debug.2]*/;
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);
CALL cr_debug.UPDATE_SYSTEM_CALLS(102)/*[cr_debug.1]*/;
	CALL cr_debug.TRACE(118, 118, 1, 36, cr_stack_depth)/*[cr_debug.2]*/;
DROP TEMPORARY TABLE Tmp.ExactTemp;
		 
    CALL cr_debug.TRACE(120, 120, 4, 7, cr_stack_depth)/*[cr_debug.2]*/;
CALL cr_debug.LEAVE_MODULE(cr_stack_depth - 1)/*[cr_debug.2]*/;
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
	--
	UPDATE Mainpress_Globals.`LastRun` SET `start`=NOW() WHERE Script = 'sync_exactartikelen' AND Db = 'Managementboek';	
	
	DROP TABLE IF EXISTS Tmp.ExactTemp;
	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,
		    IFNULL( Achternaam, '' ) 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,
		      Manpo.calc_prijs (B.Prijs, Valuta)
		    ) AS Prijs,
		    Managementboek_Boeken.calc_prijs (B.Prijs, Valuta) AS VastePrijs,
		    IFNULL(Aanbiedingsprijs,0) 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
		      ) 
		    LEFT 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 WHERE NOT Artikelgroep IS NULL AND NOT BTWCode IS NULL
	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, EA.Magazijnlocatienummer 
					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;
	 
	UPDATE Mainpress_Globals.`LastRun` SET `DT`=NOW() WHERE Script = 'sync_exactartikelen' AND Db = 'Managementboek';	
    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 Mnr CHAR(4);
	DECLARE no_more_rows INT DEFAULT 0;
	DECLARE cur CURSOR FOR SELECT `Code`, Titel, Bindwijze, Prijs, Boekstatus, Magazijnlocatienummer 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, Mnr;
		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, Magazijnlocatienummer = Mnr, 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,
                  (SELECT StatusId FROM Managementboek_Klanten.`OrderregelStatus` XX JOIN Managementboek_Klanten.`BestellingStatussen` V USING ( StatusId ) WHERE XX.Id = BS.Id ORDER BY V.Volgorde DESC LIMIT 1 ) AS StatusId,
                  (SELECT V.Naam FROM Managementboek_Klanten.`OrderregelStatus` XX JOIN Managementboek_Klanten.`BestellingStatussen` V USING ( StatusId ) WHERE XX.Id = BS.Id ORDER BY V.Volgorde DESC LIMIT 1 ) AS 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` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
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 ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP PROCEDURE IF EXISTS `undo_annulering` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
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 ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!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;
	DECLARE _kanaal VARCHAR( 20 );
	
	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;	
	
	-- Oud kanaal?
	SELECT Kanaal INTO _kanaal FROM Managementboek_Klanten.`BestellingHerkomst` WHERE BestellingId = _id;
	
	-- 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 _klantid = 2668969 THEN
		UPDATE BestellingHerkomst SET Kanaal = 'Plaza' WHERE BestellingId  = _id;
		SET _oudeherkomst = 'Plaza';
	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 IFNULL(_kanaal,'') NOT IN ( 'Periodieken' ) THEN
		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,'') NOT IN ( 'Mobile', 'SerieABO', 'Periodieken' );
		END IF;
	END IF;
	-- Nieuwe periodieken
	/*
	CREATE TEMPORARY TABLE TT
		SELECT BestellingId FROM Managementboek_Klanten.Bestellingen N JOIN Manpo.Boeken USING ( Ean ) 
		JOIN BestellingAll A USING ( BestellingId ) 
		JOIN Managementboek_Klanten.`BestellingHerkomst` USING ( BestellingId ) 
		JOIN Manpo.`Bindwijze` W USING ( Bindwijze ) 
		WHERE W.`Bindwijze_periodiek`=1
		AND DT > DATE_SUB( NOW(), INTERVAL 2 DAY )
		AND N.Prijs > 1
		AND Kanaal NOT IN ( 'Periodieken', 'Verzamelfactuur' );
	UPDATE BestellingHerkomst JOIN TT USING ( BestellingId ) SET Kanaal = 'Periodieken';
	DROP TEMPORARY TABLE TT; */
	
	-- 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;
	-- NTI Klant? Kanaal NTI
	SELECT COUNT(*) INTO _isNCOI FROM NCOI.KlantenNTI WHERE Klantid = _klantid;
	IF _isNCOI=1 THEN
		UPDATE BestellingHerkomst SET Kanaal = 'NTI'  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_klantZoekenTabel` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` PROCEDURE `update_klantZoekenTabel`(adm INT,kid INT)
BEGIN
	-- TODO: Remove.
	-- INSERT INTO mysql_real_escape_string VALUES ( '$foobar', utf8_encode($baz) )
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 DECIMAL(10,2);
	DECLARE Bong DOUBLE;
	DECLARE AantalInpakken INT;
	DECLARE AlleenDownloads INT;
	DECLARE AantalRegels INT;
	DECLARE FirstID INT;
	DECLARE GedeeldeKosten DECIMAL( 10, 2 );
	DECLARE Verschil DECIMAL( 10, 2 );
	DECLARE R INT;
	DECLARE _Klantid INT;
	
	SET VasteKosten = 5.5;
	
	-- PLAZA
	SELECT KlantId INTO _KlantId FROM Managementboek_Klanten.BestellingAll WHERE BestellingId = id;
	IF _Klantid = 2668969 THEN
		SELECT ROUND( 4.5 + SUM(OmzetIncBtwIncKorting)*0.15, 2 ) INTO VasteKosten FROM Bestellingen WHERE BestellingId = id;
	END IF;
	
	-- 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 AantalInpakken 
	FROM Bestellingen
		JOIN OrderregelStatusPlat USING ( Id )
	WHERE Bestellingid = id
		AND EAN NOT IN ( 'PORTO', 'BONG', 'IDEAL', 'VOUCHER' )
		AND niet_inpakken = 0;
	
	-- VasteKosten voor alleen downloads = 1.50
	SELECT MIN(IFNULL(Bindwijze_download,0)), SUM(Bindwijze_download) INTO AlleenDownloads, AantalRegels
	FROM Bestellingen N
		LEFT JOIN Manpo.Boeken USING ( Ean ) 
		LEFT JOIN Manpo.`Bindwijze` USING ( Bindwijze )
	WHERE N.Bestellingid = id
		AND EAN NOT IN ( 'PORTO', 'BONG', 'IDEAL', 'VOUCHER' );
	
	IF AlleenDownloads = 1 THEN
		SET VasteKosten = 1.5;
		SET Porto = 0;
	END IF;
	
	IF AantalInpakken > 0 THEN
		SET GedeeldeKosten = ( VasteKosten - Porto ) / AantalInpakken;
		SET @gedeeldekosten = GedeeldeKosten;
		SET @aantalinpakken = AantalInpakken;
		
		-- 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(Bestellingen.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 Bestellingen.Id = R;
		END IF;
	ELSEIF AlleenDownloads = 1 THEN
		SET GedeeldeKosten = VasteKosten / AantalRegels;
		SET @gedeeldekosten = GedeeldeKosten;
		-- Reset alle kosten in deze bestelling
		UPDATE Bestellingen SET KostenMP = 0 WHERE Bestellingid = id;
		UPDATE Bestellingen 
		JOIN Manpo.Boeken USING ( Ean ) 
		JOIN Manpo.`Bindwijze` USING ( Bindwijze )
		SET KostenMP = GedeeldeKosten 
		WHERE BestellingId = id AND Bindwijze_download=1;
		-- Afrondingsverschil wegwerken
		SELECT
			ROUND( ( VasteKosten ) - SUM( KostenMP ), 2 ),
			IFNULL( MIN(Bestellingen.Id), 0 )
		INTO Verschil, R
		FROM Bestellingen JOIN OrderregelStatusPlat USING ( Id ) 
		WHERE Bestellingid = id
			AND KostenMP = GedeeldeKosten
			AND EAN NOT IN ( 'PORTO', 'BONG', 'IDEAL', 'VOUCHER' );
			
		SET @verschil = Verschil;
		SET @vastekosten = Vastekosten;
		SET @aantalregels = AantalRegels;
		SET @r = R;
		
		IF Verschil > 0 AND R > 0 THEN
			UPDATE Bestellingen SET KostenMP = KostenMP + Verschil
			WHERE BestellingId = id AND Bestellingen.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 `update_kosten_mp_test` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `update_kosten_mp_test`( id INT )
    MODIFIES SQL DATA
BEGIN
	DECLARE Porto DOUBLE;
	DECLARE VasteKosten DECIMAL(10,2);
	DECLARE Bong DOUBLE;
	DECLARE AantalInpakken INT;
	DECLARE AlleenDownloads INT;
	DECLARE AantalRegels INT;
	DECLARE FirstID INT;
	DECLARE GedeeldeKosten DECIMAL( 10, 2 );
	DECLARE Verschil DECIMAL( 10, 2 );
	DECLARE R INT;
	DECLARE _Klantid INT;
	
	SET VasteKosten = 5.5;
	
	-- PLAZA
	SELECT KlantId INTO _KlantId FROM Managementboek_Klanten.BestellingAll WHERE BestellingId = id;
	IF _Klantid = 2668969 THEN
		SELECT ROUND( 4.5 + SUM(OmzetIncBtwIncKorting)*0.15, 2 ) INTO VasteKosten FROM Bestellingen WHERE BestellingId = id;
	END IF;
	
	-- 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 AantalInpakken 
	FROM Bestellingen
		JOIN OrderregelStatusPlat USING ( Id )
	WHERE Bestellingid = id
		AND EAN NOT IN ( 'PORTO', 'BONG', 'IDEAL', 'VOUCHER' )
		AND niet_inpakken = 0;
	
	SET @aantalinpakken=AantalInpakken;
	
	-- VasteKosten voor alleen downloads = 1.50
	SELECT MIN(IFNULL(Bindwijze_download,0)), SUM(Bindwijze_download) INTO AlleenDownloads, AantalRegels
	FROM Bestellingen N
		LEFT JOIN Manpo.Boeken USING ( Ean ) 
		LEFT JOIN Manpo.`Bindwijze` USING ( Bindwijze )
	WHERE N.Bestellingid = id
		
		AND EAN NOT IN ( 'PORTO', 'BONG', 'IDEAL', 'VOUCHER' );
	
	IF AlleenDownloads = 1 THEN
		SET VasteKosten = 1.5;
		SET Porto = 0;
	END IF;
	
	IF AantalInpakken > 0 THEN
		SET GedeeldeKosten = ( VasteKosten - Porto ) / AantalInpakken;
		SET @gedeeldekosten = GedeeldeKosten;
		
		-- 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;
	ELSEIF AlleenDownloads = 1 THEN
		SET GedeeldeKosten = VasteKosten / AantalRegels;
		SET @gedeeldekosten = GedeeldeKosten;
		-- Reset alle kosten in deze bestelling
		UPDATE Bestellingen SET KostenMP = 0 WHERE Bestellingid = id;
		UPDATE Bestellingen 
		JOIN Manpo.Boeken USING ( Ean ) 
		JOIN Manpo.`Bindwijze` USING ( Bindwijze )
		SET KostenMP = GedeeldeKosten 
		WHERE BestellingId = id AND Bindwijze_download=1;
		-- Afrondingsverschil wegwerken
		SELECT
			ROUND( ( VasteKosten ) - SUM( KostenMP ), 2 ),
			IFNULL( MIN(Bestellingen.Id), 0 )
		INTO Verschil, R
		FROM Bestellingen JOIN OrderregelStatusPlat USING ( Id ) 
		WHERE Bestellingid = id
			AND KostenMP = GedeeldeKosten
			AND EAN NOT IN ( 'PORTO', 'BONG', 'IDEAL', 'VOUCHER' );
			
		SET @verschil = Verschil;
		SET @vastekosten = Vastekosten;
		SET @aantalregels = AantalRegels;
		SET @r = R;
		
		IF Verschil > 0 AND R > 0 THEN
			UPDATE Bestellingen SET KostenMP = KostenMP + Verschil
			WHERE BestellingId = id AND Bestellingen.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 `update_omzet` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `update_omzet`( _bestellingid INT )
    MODIFIES SQL DATA
BEGIN
	DECLARE no_more_rows BOOLEAN;
	DECLARE loop_cntr INT DEFAULT 0;
	DECLARE _id INT;
	DECLARE _real_bestellingid INT;
	DECLARE _aantal INT;
	DECLARE myCursor CURSOR FOR SELECT Id, IF( N.Aantal <= 0, N.Aantal, N.`Aantal` - LEAST( N.Aantal, IFNULL( A.`Aantal`, 0 ) ) ) 
					FROM  Bestellingen N LEFT JOIN Klantannuleringen A USING ( Id ) 
					JOIN BestellingAll B USING ( BestellingId ) WHERE  N.`Bestellingid` = _real_bestellingid;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
	SELECT IF( OrigineelBestellingId > 0, OrigineelBestellingId, BestellingId ) INTO _real_bestellingid FROM BestellingAll WHERE BestellingId = _bestellingid;
	OPEN myCursor;
	the_loop: LOOP
		FETCH myCursor INTO _id, _aantal;
		
		IF no_more_rows THEN
			CLOSE myCursor;
			LEAVE the_loop;
		END IF;
		
		UPDATE Bestellingen SET OmzetAantal = _aantal WHERE Id = _id;
	END LOOP;
    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 IGNORE 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;
	UPDATE IGNORE Series_Abonnementen
		SET Actief_tot = CURDATE()
		WHERE Actief_tot IS NULL AND KlantID = _klantid;
	UPDATE IGNORE Periodieken_Abonnementen
		SET DTOpzegging = NOW()
		WHERE DTOpzegging IS NULL AND KlantID = _klantid;
END ;;
DELIMITER ;

--
-- Current Database: `Managementboek_Nieuwsbrieven`
--

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

USE `Managementboek_Nieuwsbrieven`;

--
