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

--
-- Table structure for table `TmpRanking`
--

CREATE TABLE `TmpRanking` (
  `Klantid` int(11) NOT NULL DEFAULT '0',
  `Saldo` double DEFAULT NULL,
  `LastOrder` date DEFAULT NULL,
  PRIMARY KEY (`Klantid`),
  KEY `i1` (`Saldo`,`LastOrder`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Temporary table structure for view `TrackingCodes`
--

/*!50001 DROP VIEW IF EXISTS `TrackingCodes`*/;
/*!50001 CREATE TABLE `TrackingCodes` (
  `BestellingID` tinyint NOT NULL,
  `Barcode` tinyint NOT NULL
) ENGINE=MyISAM */;

--
-- Table structure for table `Tracktrace`
--

CREATE TABLE `Tracktrace` (
  `FactuurID` int(11) DEFAULT NULL,
  `Trackingcode` char(15) NOT NULL,
  `Zip` char(6) DEFAULT NULL,
  `Trackstatus` char(3) DEFAULT NULL,
  `CreateDT` datetime DEFAULT NULL,
  PRIMARY KEY (`Trackingcode`),
  KEY `NewIndex1` (`FactuurID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;

--
-- Table structure for table `Trefwoorden`
--

CREATE TABLE `Trefwoorden` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Trefwoord` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`Id`),
  KEY `Trefwoord` (`Trefwoord`)
) ENGINE=InnoDB AUTO_INCREMENT=339 DEFAULT CHARSET=latin1;

--
-- Table structure for table `UitgeverProfiel`
--

CREATE TABLE `UitgeverProfiel` (
  `uitgeverid` int(11) NOT NULL,
  `displaynaam` varchar(100) NOT NULL DEFAULT '',
  `video` varchar(100) NOT NULL DEFAULT '',
  `stapel_url` varchar(100) NOT NULL DEFAULT '',
  `tekst_lang` text,
  `tekst_kort` text,
  PRIMARY KEY (`uitgeverid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `UitgeverTopboeken`
--

CREATE TABLE `UitgeverTopboeken` (
  `uitgeverid` int(11) NOT NULL,
  `volgorde` int(11) unsigned NOT NULL,
  `ean` char(13) CHARACTER SET latin1 NOT NULL,
  PRIMARY KEY (`uitgeverid`,`volgorde`),
  UNIQUE KEY `Topboeken_uniek_ean` (`uitgeverid`,`ean`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `VBMIHAfwijkend`
--

CREATE TABLE `VBMIHAfwijkend` (
  `DT` date NOT NULL,
  `Voor` varchar(255) DEFAULT NULL,
  `Na` varchar(255) DEFAULT NULL,
  `Feestdag` tinyint(4) DEFAULT '0',
  PRIMARY KEY (`DT`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `VBMIHConfig`
--

CREATE TABLE `VBMIHConfig` (
  `Key` char(20) NOT NULL,
  `Val` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`Key`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `VKBanenKlanten`
--

CREATE TABLE `VKBanenKlanten` (
  `Klantid` int(11) NOT NULL,
  `VKBanenOptIn` tinyint(4) NOT NULL,
  `VKBanenOptInDT` datetime NOT NULL,
  PRIMARY KEY (`Klantid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;

--
-- Table structure for table `Verlanglijst`
--

CREATE TABLE `Verlanglijst` (
  `Klantid` int(11) NOT NULL,
  `Ean` char(13) NOT NULL,
  `DT` datetime DEFAULT NULL,
  `Prospectid` int(11) DEFAULT NULL,
  PRIMARY KEY (`Klantid`,`Ean`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;

--
-- Temporary table structure for view `VerzamelFactuurRegels`
--

/*!50001 DROP VIEW IF EXISTS `VerzamelFactuurRegels`*/;
/*!50001 CREATE TABLE `VerzamelFactuurRegels` (
  `Klantid` tinyint NOT NULL,
  `FactuurKlantid` tinyint NOT NULL,
  `Id` tinyint NOT NULL,
  `BestellingId` tinyint NOT NULL,
  `Aantal` tinyint NOT NULL,
  `Ean` tinyint NOT NULL,
  `Omschrijving` tinyint NOT NULL,
  `Auteurnaam` tinyint NOT NULL,
  `Prijs` tinyint NOT NULL,
  `KortingPercentage` tinyint NOT NULL,
  `ingepakt` tinyint NOT NULL,
  `niet_inpakken` tinyint NOT NULL
) ENGINE=MyISAM */;

--
-- Table structure for table `ViewLog`
--

CREATE TABLE `ViewLog` (
  `mpt` int(11) NOT NULL,
  `klantid` int(11) DEFAULT NULL,
  `ean` char(13) NOT NULL,
  `DT` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  KEY `mpt` (`mpt`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `ViewLogRatio`
--

CREATE TABLE `ViewLogRatio` (
  `Tellingtype` int(1) NOT NULL DEFAULT '0',
  `Ean` char(13) NOT NULL,
  `HP_ext_view` decimal(30,0) NOT NULL,
  `HP_ext_info` decimal(30,0) NOT NULL,
  `HP_ext_buy` decimal(30,0) NOT NULL,
  `HP_int_view` decimal(30,0) NOT NULL,
  `HP_int_info` decimal(30,0) NOT NULL,
  `HP_int_buy` decimal(30,0) NOT NULL,
  `NHP_ext_view` decimal(30,0) NOT NULL,
  `NHP_ext_info` decimal(30,0) NOT NULL,
  `NHP_ext_buy` decimal(30,0) NOT NULL,
  `NHP_int_view` decimal(30,0) NOT NULL,
  `NHP_int_info` decimal(30,0) NOT NULL,
  `NHP_int_buy` decimal(30,0) NOT NULL,
  `BI_ext_view` decimal(30,0) NOT NULL,
  `BI_ext_buy` decimal(30,0) NOT NULL,
  `BI_int_view` decimal(30,0) NOT NULL,
  `BI_int_buy` decimal(30,0) NOT NULL,
  `HP_view` decimal(31,0) NOT NULL,
  `HP_info` decimal(31,0) NOT NULL,
  `HP_buy` decimal(31,0) NOT NULL,
  `NHP_view` decimal(31,0) NOT NULL,
  `NHP_info` decimal(31,0) NOT NULL,
  `NHP_buy` decimal(31,0) NOT NULL,
  `BI_view` decimal(31,0) NOT NULL,
  `BI_buy` decimal(31,0) NOT NULL,
  `HP_ext_info_ratio` decimal(34,4) NOT NULL,
  `HP_ext_buy_ratio` decimal(34,4) NOT NULL,
  `HP_int_info_ratio` decimal(34,4) NOT NULL,
  `HP_int_buy_ratio` decimal(34,4) NOT NULL,
  `HP_info_ratio` decimal(35,4) NOT NULL,
  `HP_buy_ratio` decimal(35,4) NOT NULL,
  `NHP_ext_info_ratio` decimal(34,4) NOT NULL,
  `NHP_ext_buy_ratio` decimal(34,4) NOT NULL,
  `NHP_int_info_ratio` decimal(34,4) NOT NULL,
  `NHP_int_buy_ratio` decimal(34,4) NOT NULL,
  `NHP_info_ratio` decimal(35,4) NOT NULL,
  `NHP_buy_ratio` decimal(35,4) NOT NULL,
  `BI_int_buy_ratio` decimal(34,4) NOT NULL,
  `BI_ext_buy_ratio` decimal(34,4) NOT NULL,
  `BI_buy_ratio` decimal(35,4) NOT NULL,
  PRIMARY KEY (`Tellingtype`,`Ean`),
  KEY `HP_info` (`HP_info`),
  KEY `HP_view` (`HP_view`),
  KEY `Tellingtype2` (`Tellingtype`,`HP_view`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=FIXED;

--
-- Table structure for table `VogooAvg`
--

CREATE TABLE `VogooAvg` (
  `Ean` char(13) NOT NULL,
  `Stemmen` int(11) unsigned NOT NULL DEFAULT '0',
  `Gemiddeld` float NOT NULL DEFAULT '0',
  `Stemmen_rank` int(6) unsigned NOT NULL DEFAULT '0',
  `Gemiddeld_rank` int(6) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`Ean`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `VogooStemmen`
--

CREATE TABLE `VogooStemmen` (
  `Ean` char(13) NOT NULL,
  `Gemiddeld` decimal(4,2) DEFAULT NULL,
  `Waardering` decimal(4,1) DEFAULT NULL,
  `Ranking` int(11) DEFAULT NULL,
  `Aantal` int(11) DEFAULT NULL,
  PRIMARY KEY (`Ean`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

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

CREATE TABLE `Voorraadmutaties` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Ean` varchar(13) DEFAULT NULL,
  `Mutatie` int(11) DEFAULT NULL,
  `DT` datetime DEFAULT NULL,
  `Orderregelid` int(11) DEFAULT NULL,
  `Type` enum('ingepakt','ingeklaard','gecorrigeerd') DEFAULT NULL,
  `Voorraad` int(11) DEFAULT NULL,
  `Gebruiker` char(5) DEFAULT NULL,
  `PlankVoorraad` int(11) DEFAULT NULL,
  `GereserveerdeVoorraad` int(11) DEFAULT NULL,
  `VoorraadOud` int(11) DEFAULT NULL,
  `BeschikbareVoorraad` int(11) DEFAULT NULL,
  `Bestellingid` int(11) DEFAULT NULL,
  PRIMARY KEY (`Id`),
  KEY `ean` (`Ean`),
  KEY `orderregelid` (`Orderregelid`)
) ENGINE=InnoDB AUTO_INCREMENT=4697 DEFAULT CHARSET=latin1;

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

CREATE TABLE `Voorraadreserveringen` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Ean` varchar(13) DEFAULT NULL,
  `Mutatie` int(11) DEFAULT NULL,
  `DT` datetime DEFAULT NULL,
  `Orderregelid` int(11) DEFAULT NULL,
  `Gebruiker` char(5) DEFAULT NULL,
  `Voorraad` int(11) DEFAULT NULL,
  `Debug` varchar(255) DEFAULT NULL,
  `Klantid` int(11) DEFAULT NULL,
  `Type` enum('besteld','geannuleerd','gecorrigeerd','ingepakt','uit backorder','toegevoegd','gecrediteerd','verwijderd') DEFAULT NULL,
  `Bestellingid` int(11) DEFAULT NULL,
  `VoorraadOud` int(11) DEFAULT NULL,
  `FysiekeVoorraad` int(11) DEFAULT NULL,
  `BeschikbareVoorraad` int(11) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=10229 DEFAULT CHARSET=latin1;

--
-- Table structure for table `Voucher2`
--

CREATE TABLE `Voucher2` (
  `VoucherCode` varchar(30) NOT NULL,
  `Gebruikt` int(11) NOT NULL,
  `VoucherType` int(11) NOT NULL,
  `VerstrektAan` int(11) DEFAULT NULL,
  `VerstrektKorting` decimal(6,2) NOT NULL,
  `DTAanmaak` timestamp NULL DEFAULT NULL,
  `DTVanaf` date NOT NULL DEFAULT '2010-01-01',
  `DTVerval` date NOT NULL DEFAULT '2020-01-01',
  `Gefactureerd` tinyint(4) NOT NULL DEFAULT '0',
  `VerzamelBestellingId` int(10) unsigned DEFAULT NULL,
  `Referentie` varchar(100) NOT NULL,
  `Gebruiker` varchar(50) NOT NULL,
  PRIMARY KEY (`VoucherCode`),
  KEY `NewIndex1` (`VoucherType`),
  KEY `VerstrektAan` (`VerstrektAan`),
  CONSTRAINT `FK_Voucher2` FOREIGN KEY (`VoucherType`) REFERENCES `Voucher2Types` (`VoucherType`),
  CONSTRAINT `Voucher2_ibfk_1` FOREIGN KEY (`VerstrektAan`) REFERENCES `Klanten` (`Klantid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `Voucher2Bestelregels`
--

CREATE TABLE `Voucher2Bestelregels` (
  `VoucherCode` varchar(40) NOT NULL,
  `Id` int(11) NOT NULL,
  PRIMARY KEY (`VoucherCode`,`Id`),
  KEY `FK_Voucher2Bestelregels` (`Id`),
  CONSTRAINT `FK_Voucher2Bestelregels` FOREIGN KEY (`Id`) REFERENCES `Bestellingen` (`Id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `FK_Voucher2Bestelregels3` FOREIGN KEY (`VoucherCode`) REFERENCES `Voucher2` (`VoucherCode`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `Voucher2TypeEans`
--

CREATE TABLE `Voucher2TypeEans` (
  `VoucherType` int(11) NOT NULL,
  `Ean` char(13) NOT NULL,
  `OptioneelProduct` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`VoucherType`,`Ean`),
  CONSTRAINT `FK_Voucher2TypeEans` FOREIGN KEY (`VoucherType`) REFERENCES `Voucher2Types` (`VoucherType`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `Voucher2Types`
--

CREATE TABLE `Voucher2Types` (
  `VoucherType` int(11) NOT NULL AUTO_INCREMENT,
  `VoucherNaam` varchar(255) NOT NULL,
  `BeginDatum` date NOT NULL,
  `VervalDatum` date NOT NULL,
  `AantalOptioneleProducten` int(11) NOT NULL,
  `CustomURL` varchar(100) DEFAULT NULL,
  `CustomHTML` mediumtext,
  `VerstrektAan` int(10) unsigned DEFAULT NULL COMMENT 'De klant aan wie de voucher gefactureerd word',
  `VoorafFactureren` tinyint(4) NOT NULL DEFAULT '0',
  `Gebruiker` varchar(50) NOT NULL,
  PRIMARY KEY (`VoucherType`),
  KEY `CustomURL` (`CustomURL`),
  KEY `VerstrektAan` (`VerstrektAan`)
) ENGINE=InnoDB AUTO_INCREMENT=672 DEFAULT CHARSET=latin1;

--
-- Table structure for table `VoucherTypeEans`
--

CREATE TABLE `VoucherTypeEans` (
  `VoucherType` int(11) NOT NULL,
  `Ean` char(13) NOT NULL,
  PRIMARY KEY (`VoucherType`,`Ean`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `VoucherTypes`
--

CREATE TABLE `VoucherTypes` (
  `VoucherType` int(11) NOT NULL AUTO_INCREMENT,
  `Omschrijving` varchar(255) NOT NULL,
  PRIMARY KEY (`VoucherType`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1;

--
-- Table structure for table `Vouchers`
--

CREATE TABLE `Vouchers` (
  `VoucherCode` char(8) NOT NULL,
  `VoucherType` int(11) NOT NULL,
  `VervalDatum` date NOT NULL DEFAULT '2011-01-01',
  `GebruiktInBestellingRegel` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`VoucherCode`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `WachtwoordAlternatief`
--

CREATE TABLE `WachtwoordAlternatief` (
  `KlantID` int(11) NOT NULL,
  `soort` enum('comcol','jongbloed') NOT NULL DEFAULT 'comcol',
  `WachtwoordZout` char(16) CHARACTER SET ascii NOT NULL,
  `WachtwoordAlgo` char(8) CHARACTER SET ascii NOT NULL,
  `WachtwoordAantal` int(11) NOT NULL,
  `WachtwoordEncrypted` varchar(64) CHARACTER SET ascii NOT NULL,
  PRIMARY KEY (`KlantID`,`soort`),
  CONSTRAINT `infk_klantid` FOREIGN KEY (`KlantID`) REFERENCES `Klanten` (`Klantid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `WelkomstActieCSV`
--

CREATE TABLE `WelkomstActieCSV` (
  `ActieId` int(11) DEFAULT NULL,
  `DT` datetime DEFAULT NULL,
  `Filename` varchar(255) DEFAULT NULL,
  `CSV` longtext,
  KEY `DT` (`DT`,`Filename`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `WelkomstActieKlanten`
--

CREATE TABLE `WelkomstActieKlanten` (
  `Klantid` int(11) NOT NULL,
  `Actieid` int(11) NOT NULL,
  `DT` datetime DEFAULT NULL,
  PRIMARY KEY (`Klantid`,`Actieid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `WelkomstActieKlanten_backup_1502`
--

CREATE TABLE `WelkomstActieKlanten_backup_1502` (
  `Klantid` int(11) NOT NULL,
  `Actieid` int(11) NOT NULL,
  `DT` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `WelkomstActies`
--

CREATE TABLE `WelkomstActies` (
  `Actieid` int(11) NOT NULL AUTO_INCREMENT,
  `Actienaam` varchar(255) DEFAULT NULL,
  `SQLQuery` mediumtext,
  PRIMARY KEY (`Actieid`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

--
-- Table structure for table `WelkomstGroepen`
--

CREATE TABLE `WelkomstGroepen` (
  `Welkomstgroepid` int(11) NOT NULL,
  `Naam` varchar(255) NOT NULL,
  `SQLQuery` text NOT NULL,
  PRIMARY KEY (`Welkomstgroepid`,`Naam`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `WelkomstKlanten`
--

CREATE TABLE `WelkomstKlanten` (
  `Klantid` int(11) NOT NULL,
  `Welkomstgroepid` int(11) NOT NULL,
  PRIMARY KEY (`Klantid`,`Welkomstgroepid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `YearRanking`
--

CREATE TABLE `YearRanking` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Klantid` int(11) NOT NULL DEFAULT '0',
  `Saldo` int(11) DEFAULT NULL,
  `LastOrder` date DEFAULT NULL,
  PRIMARY KEY (`Id`),
  KEY `i1` (`Klantid`)
) ENGINE=InnoDB AUTO_INCREMENT=131071 DEFAULT CHARSET=latin1;

--
-- Table structure for table `ZoekLog`
--

CREATE TABLE `ZoekLog` (
  `DT` datetime DEFAULT NULL,
  `Query` varchar(255) DEFAULT NULL,
  `Results` int(11) DEFAULT NULL,
  `URI` mediumtext,
  KEY `DT` (`DT`),
  KEY `Results` (`Results`),
  KEY `Query` (`Query`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED;

--
-- Table structure for table `ZoekSuggesties`
--

CREATE TABLE `ZoekSuggesties` (
  `Query` varchar(200) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `Resultaten` int(11) NOT NULL,
  `Gebruik` int(11) NOT NULL,
  PRIMARY KEY (`Query`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `ZoekTerms`
--

CREATE TABLE `ZoekTerms` (
  `Query` varchar(30) NOT NULL,
  `Results` int(11) DEFAULT NULL,
  `Len` int(11) DEFAULT NULL,
  PRIMARY KEY (`Query`),
  KEY `Results` (`Results`),
  KEY `Len` (`Len`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;

--
-- Table structure for table `Zoektermen`
--

CREATE TABLE `Zoektermen` (
  `Zoektermid` int(11) NOT NULL AUTO_INCREMENT,
  `Zoekterm` varchar(50) NOT NULL,
  PRIMARY KEY (`Zoektermid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

--
-- Table structure for table `abo_artikelen`
--

CREATE TABLE `abo_artikelen` (
  `naam` varchar(255) DEFAULT NULL,
  `artikelcode` char(15) NOT NULL,
  `verlengingsartikel` char(15) DEFAULT NULL,
  `kenmerken_uitsluiten` varchar(255) DEFAULT NULL,
  `mailcodes_uitsluiten` varchar(255) DEFAULT NULL,
  `laatst_gefactureerd` datetime DEFAULT NULL,
  `kenmerk_bij_opzeggen` char(20) DEFAULT NULL,
  `kenmerk_bij_direct_opzeggen` char(20) DEFAULT NULL,
  `verlengen_na` int(11) DEFAULT NULL,
  PRIMARY KEY (`artikelcode`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;

--
-- Table structure for table `abo_data`
--

CREATE TABLE `abo_data` (
  `exactid` int(11) DEFAULT NULL,
  `artikelcode` char(13) DEFAULT NULL,
  `aantal` int(11) DEFAULT NULL,
  `orig_datum` date DEFAULT NULL,
  `verlengingsdatum` date DEFAULT NULL,
  `opgezegd_per` date DEFAULT NULL,
  `opzegreden` text,
  `factuurnr` int(11) DEFAULT NULL,
  `is_actief` tinyint(4) DEFAULT NULL,
  `versturen_aan_derden` tinyint(4) DEFAULT '0',
  KEY `exactid` (`exactid`),
  KEY `NewIndex1` (`artikelcode`,`verlengingsdatum`),
  KEY `artikelcode` (`artikelcode`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;

--
-- Table structure for table `abo_factuurhistorie`
--

CREATE TABLE `abo_factuurhistorie` (
  `exactid` int(11) DEFAULT NULL,
  `factuurnr` int(11) NOT NULL,
  `dt` datetime DEFAULT NULL,
  `artikelcode` char(15) DEFAULT NULL,
  `aantal` int(11) DEFAULT NULL,
  `prijs` decimal(6,2) DEFAULT NULL,
  KEY `exactid` (`exactid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;

--
-- Table structure for table `innodb_lock_monitor`
--

CREATE TABLE `innodb_lock_monitor` (
  `a` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `lego_blok`
--

CREATE TABLE `lego_blok` (
  `lego_id` int(13) unsigned NOT NULL AUTO_INCREMENT,
  `naam` varchar(128) NOT NULL,
  `titel` varchar(128) NOT NULL,
  `template` varchar(128) NOT NULL,
  `min_items` int(13) unsigned NOT NULL DEFAULT '4',
  `max_items` int(13) unsigned NOT NULL DEFAULT '8',
  `nom_items` int(13) unsigned NOT NULL DEFAULT '5',
  `ttl` int(13) unsigned NOT NULL DEFAULT '0',
  `misc_parameters` text NOT NULL,
  PRIMARY KEY (`lego_id`),
  UNIQUE KEY `unieke_namen` (`naam`)
) ENGINE=InnoDB AUTO_INCREMENT=111 DEFAULT CHARSET=utf8;

--
-- Table structure for table `lego_blok_filters`
--

CREATE TABLE `lego_blok_filters` (
  `lego_id` int(13) unsigned NOT NULL,
  `filter` enum('producttype','rubriek') NOT NULL DEFAULT 'rubriek',
  PRIMARY KEY (`lego_id`,`filter`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `lego_fallback`
--

CREATE TABLE `lego_fallback` (
  `lego_id` int(13) unsigned NOT NULL,
  `volgorde` int(13) NOT NULL DEFAULT '0',
  `opslaan` tinyint(1) NOT NULL DEFAULT '0',
  `type` char(128) NOT NULL DEFAULT 'dontshow',
  `data` text,
  PRIMARY KEY (`lego_id`,`volgorde`),
  CONSTRAINT `FK_lego_fallback` FOREIGN KEY (`lego_id`) REFERENCES `lego_blok` (`lego_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `lego_item`
--

CREATE TABLE `lego_item` (
  `lego_id` int(13) unsigned NOT NULL,
  `datum` date NOT NULL,
  `index` int(13) unsigned NOT NULL,
  `type` enum('ean','image','auteur','spreker','html','boekblog','video','null') NOT NULL DEFAULT 'null',
  `fallback` tinyint(2) NOT NULL DEFAULT '3',
  `data` text NOT NULL,
  PRIMARY KEY (`lego_id`,`datum`,`index`),
  CONSTRAINT `FK_lego_item` FOREIGN KEY (`lego_id`) REFERENCES `lego_blok` (`lego_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `lego_item_tags`
--

CREATE TABLE `lego_item_tags` (
  `id` int(13) unsigned NOT NULL AUTO_INCREMENT,
  `lego_id` int(13) unsigned NOT NULL DEFAULT '0',
  `datum` date NOT NULL DEFAULT '0000-00-00',
  `index` int(13) unsigned NOT NULL DEFAULT '0',
  `key` varchar(35) NOT NULL,
  `value` varchar(64) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `tagindex` (`id`),
  UNIQUE KEY `NewIndex1` (`datum`,`lego_id`,`index`,`key`),
  KEY `FK_lego_item_tags` (`lego_id`,`datum`,`index`),
  CONSTRAINT `FK_lego_item_tags` FOREIGN KEY (`lego_id`, `datum`, `index`) REFERENCES `lego_item` (`lego_id`, `datum`, `index`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=169692 DEFAULT CHARSET=utf8;

--
-- Temporary table structure for view `open_orderregels`
--

/*!50001 DROP VIEW IF EXISTS `open_orderregels`*/;
/*!50001 CREATE TABLE `open_orderregels` (
  `Id` tinyint NOT NULL,
  `aangemaakt` tinyint NOT NULL,
  `bevestigd` tinyint NOT NULL,
  `gefactureerd` tinyint NOT NULL,
  `is_geparkeerd` tinyint NOT NULL,
  `factuurnummer_toegewezen` tinyint NOT NULL,
  `exact_export` tinyint NOT NULL,
  `exact_controle` tinyint NOT NULL,
  `exact_factuur_verwerkt` tinyint NOT NULL,
  `etiket_geprint` tinyint NOT NULL,
  `ingepakt` tinyint NOT NULL,
  `geannuleerd` tinyint NOT NULL,
  `factuur_geprint` tinyint NOT NULL,
  `pakketlabel_geprint` tinyint NOT NULL,
  `brieflabel_geprint` tinyint NOT NULL,
  `betaald_via_ideal` tinyint NOT NULL,
  `betaald` tinyint NOT NULL,
  `openstaande_post_aangemaakt` tinyint NOT NULL,
  `in_backorder_gezet` tinyint NOT NULL,
  `oud_handmatig_verwerkt` tinyint NOT NULL,
  `automatisch_geclassificeerd` tinyint NOT NULL,
  `handmatig_geclassificeerd` tinyint NOT NULL,
  `gecrediteerd` tinyint NOT NULL,
  `volledig_geleverd_backorder` tinyint NOT NULL,
  `samengevoegd_met_eerdere_order` tinyint NOT NULL,
  `niet_inpakken` tinyint NOT NULL,
  `afgesloten` tinyint NOT NULL,
  `factuur_per_mail_verzonden` tinyint NOT NULL,
  `pdf_factuur_gecontroleerd` tinyint NOT NULL,
  `voorgemeld_bij_postnl` tinyint NOT NULL,
  `pakket_afgeleverd_volgens_postnl` tinyint NOT NULL,
  `kan_gedownload_worden` tinyint NOT NULL,
  `pakbon_geprint` tinyint NOT NULL,
  `uit_backorder_gehaald` tinyint NOT NULL,
  `factuur_sturen_niet_nodig` tinyint NOT NULL,
  `hoeft_niet_betaald_te_worden` tinyint NOT NULL,
  `uitgevoerd_naar_exact_via_mari` tinyint NOT NULL,
  `wacht_op_compleet` tinyint NOT NULL,
  `inpakbevestiging_verzonden` tinyint NOT NULL,
  `niet_reserveren` tinyint NOT NULL,
  `vink_open` tinyint NOT NULL,
  `vink_magazijn` tinyint NOT NULL,
  `vink_klantenservice` tinyint NOT NULL,
  `levering` tinyint NOT NULL,
  `Omschrijving` tinyint NOT NULL,
  `BestellingId` tinyint NOT NULL,
  `Ean` tinyint NOT NULL,
  `OpenAantal` tinyint NOT NULL
) ENGINE=MyISAM */;

--
-- Temporary table structure for view `open_orderregels_query`
--

/*!50001 DROP VIEW IF EXISTS `open_orderregels_query`*/;
/*!50001 CREATE TABLE `open_orderregels_query` (
  `Id` tinyint NOT NULL,
  `Omschrijving` tinyint NOT NULL,
  `BestellingId` tinyint NOT NULL,
  `Ean` tinyint NOT NULL,
  `OpenAantal` tinyint NOT NULL
) ENGINE=MyISAM */;

--
-- Table structure for table `sale_recommendation`
--

CREATE TABLE `sale_recommendation` (
  `product1` int(5) unsigned NOT NULL,
  `product2` int(5) unsigned NOT NULL,
  `overlap` smallint(5) unsigned NOT NULL,
  PRIMARY KEY (`product1`,`product2`),
  KEY `overlap` (`overlap`),
  KEY `product2` (`product2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED;

--
-- Table structure for table `sale_recommendation_eans`
--

CREATE TABLE `sale_recommendation_eans` (
  `Ean` char(13) NOT NULL DEFAULT '0',
  `RecommendedEan` char(13) NOT NULL DEFAULT '0',
  `Percentage` double DEFAULT NULL,
  `Positie` int(11) DEFAULT NULL,
  PRIMARY KEY (`Ean`,`RecommendedEan`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Temporary table structure for view `uit_backorder_regels`
--

/*!50001 DROP VIEW IF EXISTS `uit_backorder_regels`*/;
/*!50001 CREATE TABLE `uit_backorder_regels` (
  `BackorderOrigineel` tinyint NOT NULL,
  `Geleverd` tinyint NOT NULL
) ENGINE=MyISAM */;

--
-- Table structure for table `wachtwoord-backup`
--

CREATE TABLE `wachtwoord-backup` (
  `klantid` int(11) NOT NULL,
  `wachtwoord` varchar(255) DEFAULT NULL,
  `emailadres` varchar(255) DEFAULT NULL,
  `datuminvoer` datetime DEFAULT NULL,
  `initialen` char(5) DEFAULT NULL,
  PRIMARY KEY (`klantid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Dumping routines for database 'Managementboek_Klanten'
--
/*!50003 DROP FUNCTION IF EXISTS `aantal_geparkeerde_orderregels` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `aantal_geparkeerde_orderregels`(myEan CHAR(13) CHARACTER SET latin1) RETURNS int(11)
    READS SQL DATA
BEGIN
		DECLARE aantal INT(11);
		
		SELECT COUNT(*) INTO aantal FROM open_orderregels WHERE Ean = myEan;
				
		return aantal;
	END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `aantal_stemmen` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `aantal_stemmen`( iEAN char(13) CHARACTER SET latin1 ) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE RV INT;
	
	SELECT SUM( Stemmen ) INTO RV
	FROM VogooAvg VA
		JOIN (
			SELECT V.Vervangtean AS Ean FROM Managementboek_Boeken.Boekanderebindwijzen A JOIN Managementboek_Boeken.Boekvervangtean V ON ( V.Ean = A.Eangekoppeld ) WHERE A.Ean = iEAN
			UNION
			SELECT V.Vervangtean AS Ean FROM Managementboek_Boeken.Boekvervangtean V WHERE V.Ean = iEAN
		) A USING ( Ean );
	RETURN IFNULL(RV,0);
	END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `alle_backorders_uitvoerbaar` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `alle_backorders_uitvoerbaar`( myId INT ) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE VerstuurCompleteOrder, RV INT;
	DECLARE aantalRegelsWaaropWeWachten, aantalBackorders INT;
	
	SET RV = 0;
	
	SELECT VerstuurCompleteOrder INTO VerstuurCompleteOrder FROM BestellingAll WHERE BestellingId = myId;
	
	SELECT COUNT(*) INTO aantalBackorders FROM Bestellingen WHERE AantalBackorder > 0 AND Geannuleerd = 0;
	
	IF VerstuurCompleteOrder = 1 THEN
		SELECT COUNT(*) INTO aantalRegelsWaaropWeWachten FROM Bestellingen WHERE BestellingId = myId AND orderregel_op_wachten( Id )=1 AND AantalBackorder>0;
		
		IF aantalRegelsWaaropWeWachten = 0 THEN
			SET RV = 1;
		END IF;
	ELSE
		-- Niet wachten op hele order, dus... uitvoerbaar.
		SET RV = 1;
	END IF;
	RETURN RV;
    END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `alle_backorders_uitvoerbaar_backorderregels` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `alle_backorders_uitvoerbaar_backorderregels`( myId INT ) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE VerstuurCompleteOrder, RV INT;
	DECLARE aantalRegelsWaaropWeWachten, aantalBackorders INT;
	
	SET RV = 0;
	
	SELECT VerstuurCompleteOrder INTO VerstuurCompleteOrder FROM BestellingAll WHERE BestellingId = myId;
	
	SELECT COUNT(*) INTO aantalBackorders FROM tmp.BackorderRegels WHERE BestellingId = myId;
	
	IF VerstuurCompleteOrder = 1 THEN
		SELECT COUNT(*) INTO aantalRegelsWaaropWeWachten FROM tmp.BackorderRegels WHERE BestellingId = myId AND Wacht = 1 AND AantalBackorder>0 AND BeschikbareVoorraad > 0;
		
		IF aantalRegelsWaaropWeWachten = 0 THEN
			SET RV = 1;
		END IF;
	ELSE
		-- Niet wachten op hele order, dus... uitvoerbaar.
		SET RV = 1;
	END IF;
	RETURN RV;
    END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `backorder_afgesloten` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `backorder_afgesloten`(OrigineelID INT) RETURNS int(11)
    READS SQL DATA
BEGIN
    DECLARE RV INT ;
    SELECT 
        IF(
            SUM(IF(Afgesloten, NietGeleverd, 1)) > 0,
            0,
            1
        ) AS Geleverd INTO RV 
    FROM
        (SELECT 
            BNO.BestellingId AS BNOID,
            BNO.AantalBackorder != IFNULL(SUM(BNGEL.Aantal), 0) AS NietGeleverd,
            IF(
                BNO.AantalBackorder = 0,
                1,
                IFNULL(BNGELS.StatusId, 0)
            ) != 0 AS Afgesloten 
        FROM
            Bestellingen BNO 
            LEFT JOIN Bestellingen BNGEL 
                ON (
                    BNGEL.BackorderOrigineel = BNO.Id
                ) 
            LEFT JOIN BestellingStatus BNGELS 
                ON (
                    BNGELS.StatusId = 33 
                    AND BNGEL.BestellingId = BNGELS.BestellingId
                ) 
            LEFT JOIN BestellingAll BGEL 
                ON (
                    BGEL.BestellingId = BNGEL.Bestellingid
                ) 
        WHERE BNO.BestellingId = OrigineelID 
            AND BNO.Ean NOT IN ('BONG', 'PORTO', 'IDEAL') 
            AND BGEL.IsCredit = 0 AND BGEL.Geannuleerd = 0
        GROUP BY BNO.Id) A 
    GROUP BY BNOId ;
    RETURN RV ;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `BestellingStatus` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `BestellingStatus`( Id INT ) RETURNS varchar(255) CHARSET latin1
    READS SQL DATA
BEGIN
	DECLARE	 RV varchar(255);
	DECLARE  S INT;
	
	SELECT Geannuleerd INTO S FROM BestellingAll BA WHERE BestellingId = Id;
	IF S > 0 THEN
		SET RV = CONCAT( 'Geannuleerd' );
	ELSE
		SELECT SamengevoegdMet INTO S FROM BestellingAll BA WHERE BestellingId = Id AND Geannuleerd = 0;
		if S > 0 THEN
			SET RV = CONCAT( 'Samengevoegd met bestelling ', S );
		ELSE
			SELECT Naam INTO RV
			FROM BestellingAll BA
				JOIN BestellingStatus USING ( BestellingId )
				JOIN BestellingStatussen BSS USING ( StatusId )
			WHERE BA.BestellingId = Id
			AND BSS.Volgorde > 0
			ORDER BY BSS.Volgorde DESC LIMIT 1;	
		END IF;
	END IF;
	
	RETURN RV;
	END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `BestellingStatusId` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `BestellingStatusId`( Id INT ) RETURNS varchar(255) CHARSET latin1
    READS SQL DATA
BEGIN
	DECLARE	RV INT(11);
	
	SELECT
	   StatusId INTO RV
	FROM BestellingAll BA
	  JOIN BestellingStatus
	    USING ( BestellingId )
	  JOIN BestellingStatussen BSS
	    USING ( StatusId )
	WHERE BA.BestellingId = Id
	ORDER BY BSS.Volgorde DESC LIMIT 1;	
	RETURN RV;
    END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `BestellingStatusMetExtra` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `BestellingStatusMetExtra`( Id INT ) RETURNS varchar(255) CHARSET latin1
    READS SQL DATA
BEGIN
	DECLARE  ST VARCHAR(255);
	DECLARE  GEBR VARCHAR(10);
	DECLARE  DT VARCHAR(10);
	DECLARE	 RV varchar(255);
	DECLARE  S INT;
	
	SELECT Geannuleerd INTO S FROM BestellingAll BA WHERE BestellingId = Id;
	IF S > 0 THEN
		SET RV = CONCAT( 'Geannuleerd' );
	ELSE
		SELECT SamengevoegdMet INTO S FROM BestellingAll BA WHERE BestellingId = Id AND Geannuleerd = 0;
		if S > 0 THEN
			SET RV = CONCAT( 'Samengevoegd met bestelling ', S );
		ELSE
			SELECT Naam, S.Gebruiker, DATE_FORMAT( S.DT, '%d-%m-%Y' ) INTO ST, GEBR, DT
			FROM BestellingAll BA
				JOIN BestellingStatus S USING ( BestellingId )
				JOIN BestellingStatussen BSS USING ( StatusId )
			WHERE BA.BestellingId = Id
			AND BSS.Volgorde > 0
			ORDER BY BSS.Volgorde DESC LIMIT 1;	
		END IF;
	END IF;
	
	RETURN CONCAT( IFNULL(ST,''), '|', IFNULL(GEBR,''), '|', IFNULL(DT,'') );
	END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `BestellingStatusOpen` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `BestellingStatusOpen`( Id INT ) RETURNS int(1)
    READS SQL DATA
BEGIN
	DECLARE	RV INT(1);
	
	SELECT
	   BSS.ToonAlsOpenOrder INTO RV
	FROM BestellingAll BA
	  JOIN BestellingStatus
	    USING ( BestellingId )
	  JOIN BestellingStatussen BSS
	    USING ( StatusId )
	WHERE BA.BestellingId = Id
	ORDER BY BSS.Volgorde DESC LIMIT 1;	
	RETURN RV;
    END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `bestelling_aantal` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`rutger`@`%` FUNCTION `bestelling_aantal`( bid INT ) RETURNS int(11)
    DETERMINISTIC
BEGIN                                                                                                               
        DECLARE rv INT;                             
	SELECT SUM( Aantal ) INTO rv FROM Bestellingen WHERE Ean <> 'porto' AND Bestellingid = bid;                                                                                                                                                 
        RETURN rv;        
END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `bestelling_bijdrage` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `bestelling_bijdrage`( id INT ) RETURNS double
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE rv DOUBLE;
	-- SELECT IFNULL( ROUND( SUM( ( Prijs / ( ( 100 + BTWTarief ) / 100 ) ) * ( 100 - KortingPercentage ) * ( Aantal + AantalBackorder ) / ( 100 * 100 ) ) - SUM( ( Aantal + AantalBackorder ) * ( Prijs / ( ( 100 + BTWTarief ) / 100 ) ) * ( 100 - KortingMP ) / ( 100 * 100 ) ) - SUM( KostenMP ), 2 ), 0 ) INTO rv 
	-- FROM Bestellingen WHERE Bestellingid = id AND Geannuleerd = 0 AND ( BackorderOrigineel = 0 OR BackorderOrigineel IS NULL );
	
	SELECT SUM(Bijdrage) INTO rv FROM Bestellingen_voor_omzet WHERE BestellingId = id;
	
	RETURN rv;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `bestelling_hulp` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `bestelling_hulp`( ean NUMERIC(13), begin DATETIME, eind DATETIME ) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE cutoff INT;
	DECLARE rv INT;
	SELECT CEIL( AVG( Aantal ) ) INTO cutoff FROM Bestelling B LEFT JOIN Bestellingen Bn ON ( Bn.Bestellingid = B.Id ) WHERE Bn.Ean = ean AND DT BETWEEN begin AND eind;
	SET cutoff = cutoff * 2;
	SELECT CEIL( AVG( Aantal ) * COUNT( Aantal ) ) INTO rv FROM Bestelling B LEFT JOIN Bestellingen Bn ON ( Bn.Bestellingid = B.Id ) WHERE Aantal <= cutoff AND Bn.Ean = ean AND DT BETWEEN begin AND eind;
	
	RETURN rv;
    END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `bestelling_ingepakt` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `bestelling_ingepakt`( bid INT ) RETURNS tinyint(1)
    READS SQL DATA
BEGIN
	DECLARE ingepaktStatussen INT(4);
	
	SELECT
	   COUNT(*) INTO ingepaktStatussen 
	FROM BestellingStatus 
	WHERE 
	   BestellingId=bid AND
	   (StatusId = 18 OR StatusId = 19);
	IF ingepaktStatussen = 0 THEN
		RETURN false;
	else
		RETURN TRUE;
	END IF;
END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `bestelling_kop_opnieuw` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `bestelling_kop_opnieuw`( OrigBestelling INT, Gebruiker CHAR(2)) RETURNS int(11)
    MODIFIES SQL DATA
    DETERMINISTIC
BEGIN
 DECLARE NewBestellingid INT; 
 
 /* Maak een nieuwe order aan van de originele order */
 INSERT INTO BestellingAll SELECT NULL /*Bestellingid*/,`Klantid` /*Klantid*/,`Siteid` /*Siteid*/,NULL /*Opmerkingen*/,`Achternaam` /*Achternaam*/,`Bedrijfsnaam` /*Bedrijfsnaam*/,NOW() /*DT*/,NULL /*Afleverid*/,NULL /*IP*/,
 'nieuw'/*ProcessStatus*/,0 /*BatchID*/,AffiliateId /*AffiliateId*/,NULL /*ReferrerDomain*/,0 /*IsClubOrder*/,`Betaalmethode` /*Betaalmethode*/,
 0 /*Rekeningnummer*/,`Uwreferentie` /*Uwreferentie*/,0 /*Afgerond*/,0 /*Herinnering*/,NULL /*HASH*/,0 /*MailedTracktrace*/,
 NULL /*SessionId*/,0 /*EersteBestelling*/,0 /*StemMailVerzonden*/,NULL /*DTStemMail*/,0 /*SamengevoegdMet*/,
 0 /*Factuurid*/,Gebruiker /*Gebruiker*/,0 /*OpmerkingNegeren*/,'nieuw'/*AutoClassificatie*/,'' /*ClassificatieRedenKort*/,
 '' /*ClassificatieReden*/,0 /*Geexporteerd*/,OrigBestelling/*OrigineelBestellingId*/,0 /*ProspectId*/,
 0 /*GeenPortoBerekenen*/,0 /*IdealOpen*/, NULL /*IdealTimeout*/,
 BetalingsTermijn /*BetalingsTermijn*/,0 /*Geannuleerd*/, 0/*UitBackorder*/, 0/*SiteBestelling*/,0/*DeelLevering*/, NULL /*DTFactuur*/, NULL /*DTVerval*/, TeltAls, IsOmzet, IsCorrectie, 0 /*IsCredit*/, 1 /*IsOpnieuw */,
 0 /* ToonBestelling */, Herkomst,VerstuurCompleteOrder, ICBestelling, KopKostenplaats FROM BestellingAll WHERE BestellingId = OrigBestelling;
 
 SELECT LAST_INSERT_ID() INTO NewBestellingid;
 
 INSERT INTO BestellingAdressen ( BestellingId, Klantid, AfwijkendFactuurAdres, FactuurKlantId, FactuurBedrijfsnaam, FactuurBedrijfsnaam2, FactuurAfdeling, FactuurGeslacht, FactuurInitialen, FactuurAchternaam, FactuurStraatnaam, FactuurHuisnummer, FactuurHuisnummerToevoeging, FactuurPostcode, FactuurPlaatsnaam, AfwijkendVerzendAdres, VerzendKlantId, VerzendBedrijfsnaam, VerzendBedrijfsnaam2, VerzendAfdeling, VerzendGeslacht, VerzendInitialen, VerzendAchternaam, VerzendStraatnaam, VerzendHuisnummer, VerzendHuisnummerToevoeging, VerzendPostcode, VerzendPlaatsnaam )
	SELECT NewBestellingid /*BestellingId*/,`Klantid` /*Klantid*/,`AfwijkendFactuurAdres` /*AfwijkendFactuurAdres*/,`FactuurKlantId` /*FactuurKlantId*/,`FactuurBedrijfsnaam` /*FactuurBedrijfsnaam*/,`FactuurBedrijfsnaam2` /*FactuurBedrijfsnaam2*/,`FactuurAfdeling` /*FactuurAfdeling*/,`FactuurGeslacht` /*FactuurGeslacht*/,`FactuurInitialen` /*FactuurInitialen*/,`FactuurAchternaam` /*FactuurAchternaam*/,`FactuurStraatnaam` /*FactuurStraatnaam*/,`FactuurHuisnummer` /*FactuurHuisnummer*/,`FactuurHuisnummerToevoeging` /*FactuurHuisnummerToevoeging*/,`FactuurPostcode` /*FactuurPostcode*/,`FactuurPlaatsnaam` /*FactuurPlaatsnaam*/,`AfwijkendVerzendAdres` /*AfwijkendVerzendAdres*/,`VerzendKlantId` /*VerzendKlantId*/,`VerzendBedrijfsnaam` /*VerzendBedrijfsnaam*/,`VerzendBedrijfsnaam2` /*VerzendBedrijfsnaam2*/,`VerzendAfdeling` /*VerzendAfdeling*/,`VerzendGeslacht` /*VerzendGeslacht*/,`VerzendInitialen` /*VerzendInitialen*/,`VerzendAchternaam` /*VerzendAchternaam*/,`VerzendStraatnaam` /*VerzendStraatnaam*/,`VerzendHuisnummer` /*VerzendHuisnummer*/,`VerzendHuisnummerToevoeging` /*VerzendHuisnummerToevoeging*/,`VerzendPostcode` /*VerzendPostcode*/,`VerzendPlaatsnaam` /*VerzendPlaatsnaam*/ FROM BestellingAdressen WHERE BestellingId = OrigBestelling; 
 
 RETURN NewBestellingid;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `bestelling_opnieuw` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `bestelling_opnieuw`( OrigBestelling INT, Gebruiker CHAR(2)) RETURNS int(11)
    MODIFIES SQL DATA
    DETERMINISTIC
BEGIN
 DECLARE NewBestellingid INT; 
 
 /* Maak een nieuwe order aan van de originele order */
 INSERT INTO BestellingAll ( Bestellingid, Klantid, Siteid, Opmerkingen, Achternaam, Bedrijfsnaam, DT, Afleverid, IP, ProcessStatus, BatchID, AffiliateId, ReferrerDomain, IsClubOrder, Betaalmethode, Rekeningnummer, Uwreferentie, Afgerond, Herinnering, `Hash`, MailedTracktrace, SessionId, EersteBestelling, StemMailVerzonden, DTStemMail, SamengevoegdMet, Factuurid, Gebruiker, OpmerkingNegeren, AutoClassificatie, ClassificatieRedenKort, ClassificatieReden, Geexporteerd, OrigineelBestellingId, ProspectId, GeenPortoBerekenen, IdealOpen, IdealTimeout, BetalingsTermijn, Geannuleerd, UitBackorder, SiteBestelling, DeelLevering, DTFactuur, DTVerval, TeltAls, IsOmzet, IsCorrectie, IsCredit, IsOpnieuw, ToonBestelling, Herkomst, VerstuurCompleteOrder, ICBestelling, KopKostenplaats, KopKostenplaatsId, api_identity )
	 SELECT NULL /*Bestellingid*/,`Klantid` /*Klantid*/,`Siteid` /*Siteid*/,NULL /*Opmerkingen*/,`Achternaam` /*Achternaam*/,`Bedrijfsnaam` /*Bedrijfsnaam*/,NOW() /*DT*/,NULL /*Afleverid*/,NULL /*IP*/,
		'nieuw'/*ProcessStatus*/,0 /*BatchID*/,AffiliateId /*AffiliateId*/,NULL /*ReferrerDomain*/,0 /*IsClubOrder*/,`Betaalmethode` /*Betaalmethode*/,
		`Rekeningnummer` /*Rekeningnummer*/,CONCAT( 'nazending ', IFNULL( order_volgnummer(BestellingID), '' ), '  ', Uwreferentie ) /*Uwreferentie*/,0 /*Afgerond*/,0 /*Herinnering*/,NULL /*HASH*/,0 /*MailedTracktrace*/,
		NULL /*SessionId*/,0 /*EersteBestelling*/,0 /*StemMailVerzonden*/,NULL /*DTStemMail*/,0 /*SamengevoegdMet*/,
		0 /*Factuurid*/,Gebruiker /*Gebruiker*/,0 /*OpmerkingNegeren*/,'nieuw'/*AutoClassificatie*/,'' /*ClassificatieRedenKort*/,
		'' /*ClassificatieReden*/,0 /*Geexporteerd*/, 0 /* OrigineelBestellingId*/,0 /*ProspectId*/,
		0 /*GeenPortoBerekenen*/,0 /*IdealOpen*/, NULL /*IdealTimeout*/,
		BetalingsTermijn /*BetalingsTermijn*/,0 /*Geannuleerd*/, 0/*UitBackorder*/, 0/*SiteBestelling*/,0/*DeelLevering*/, NULL /*DTFactuur*/, NULL /*DTVerval*/, TeltAls, IsOmzet, IsCorrectie, 0 /*IsCredit*/, 1 /*IsOpnieuw */,
		0 /* ToonBestelling */, Herkomst,VerstuurCompleteOrder, ICBestelling, KopKostenplaats, KopKostenplaatsId, api_identity
	FROM BestellingAll
	WHERE BestellingId = OrigBestelling;
 
 SELECT LAST_INSERT_ID() INTO NewBestellingid;
 
 INSERT  INTO Bestellingen ( Id, Auteurnaam, Aantal, Prijs, Bestellingid, Ean, Omschrijving, Geexporteerd, KortingPercentage, KortingForce, IsPromo, KortingReden, KortingMP, KostenMP, DTOrderregel, VastePrijs, ActiePrijs, BTWTarief, BTWCode, AantalBackorder, BackorderOrigineel, BackorderReden, BriefCode, DTExactExport, KortingBedrag, KortingBedragExBtw, PrijsExBtwExKorting, PrijsExBtwIncKorting, BedragExBtwExKorting, BedragIncBtwExKorting, BedragIncBtwIncKorting, BedragExBtwIncKorting, BedragBTW, LineNr, Geannuleerd, Bijdrage, OmzetExBtwExKorting, OmzetExBtwIncKorting, OmzetIncBtwExKorting, OmzetIncBtwIncKorting, StatusId, FactuurId, RegelReferentie, RegelKostenplaats, RegelKostenplaatsId, RegelOrganisatieID, BoekStatusBijBestelling, PrijsInkoop, ICL, AantalGeleverd )
	SELECT NULL /*Id*/,`Auteurnaam` /*Auteurnaam*/,`Aantal` /*Aantal*/,`Prijs` /*Prijs*/,NewBestellingid /*Bestellingid*/,`Ean` /*Ean*/,`Omschrijving` /*Omschrijving*/,0 /*Geexporteerd*/,`KortingPercentage` /*KortingPercentage*/, KortingForce,`IsPromo` /*IsPromo*/,`KortingReden` /*KortingReden*/,`KortingMP` /*KortingMP*/,`KostenMP` /*KostenMP*/,NOW() /*DTOrderregel*/,`VastePrijs` /*VastePrijs*/,`ActiePrijs` /*ActiePrijs*/,`BTWTarief` /*BTWTarief*/,`BTWCode` /*BTWCode*/,`AantalBackorder` /*AantalBackorder*/, 0 /*BackorderOrigineel*/,`BackorderReden` /*BackorderReden*/,`BriefCode` /*BriefCode*/,NULL /*DTExactExport*/,`KortingBedrag` /*KortingBedrag*/,`KortingBedragExBtw` /*KortingBedragExBtw*/,`PrijsExBtwExKorting` /*PrijsExBtwExKorting*/,`PrijsExBtwIncKorting` /*PrijsExBtwIncKorting*/,`BedragExBtwExKorting` /*BedragExBtwExKorting*/,`BedragIncBtwExKorting` /*BedragIncBtwExKorting*/,`BedragIncBtwIncKorting` /*BedragIncBtwIncKorting*/,`BedragExBtwIncKorting` /*BedragExBtwIncKorting*/,`BedragBTW` /*BedragBTW*/,`LineNr` /*LineNr*/,0 /*Geannuleerd*/,0 /* bijdrage */, 0,0,0,0 /* Omzet */, 0 /* Statusid */, 0 /* FactuurId */, RegelReferentie, RegelKostenplaats, RegelKostenplaatsId, RegelOrganisatieID, BoekStatusBijBestelling, PrijsInkoop, ICL, /* Geleverd */ 0 FROM Bestellingen WHERE BestellingId = OrigBestelling AND Geannuleerd = 0;
 REPLACE INTO BestellingAdressen ( BestellingId, Klantid, AfwijkendFactuurAdres, FactuurKlantId, 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 NewBestellingid /*BestellingId*/,`Klantid` /*Klantid*/,`AfwijkendFactuurAdres` /*AfwijkendFactuurAdres*/,`FactuurKlantId` /*FactuurKlantId*/,`FactuurBedrijfsnaam` /*FactuurBedrijfsnaam*/,`FactuurBedrijfsnaam2` /*FactuurBedrijfsnaam2*/,`FactuurAfdeling` /*FactuurAfdeling*/,`FactuurGeslacht` /*FactuurGeslacht*/,`FactuurInitialen` /*FactuurInitialen*/,`FactuurAchternaam` /*FactuurAchternaam*/,`FactuurStraatnaam` /*FactuurStraatnaam*/,`FactuurHuisnummer` /*FactuurHuisnummer*/,`FactuurHuisnummerToevoeging` /*FactuurHuisnummerToevoeging*/,`FactuurPostcode` /*FactuurPostcode*/,`FactuurPlaatsnaam` /*FactuurPlaatsnaam*/, FactuurLand, `AfwijkendVerzendAdres` /*AfwijkendVerzendAdres*/,`VerzendKlantId` /*VerzendKlantId*/,`VerzendBedrijfsnaam` /*VerzendBedrijfsnaam*/,`VerzendBedrijfsnaam2` /*VerzendBedrijfsnaam2*/,`VerzendAfdeling` /*VerzendAfdeling*/,`VerzendGeslacht` /*VerzendGeslacht*/,`VerzendInitialen` /*VerzendInitialen*/,`VerzendAchternaam` /*VerzendAchternaam*/,`VerzendStraatnaam` /*VerzendStraatnaam*/,`VerzendHuisnummer` /*VerzendHuisnummer*/,`VerzendHuisnummerToevoeging` /*VerzendHuisnummerToevoeging*/,`VerzendPostcode` /*VerzendPostcode*/,`VerzendPlaatsnaam` /*VerzendPlaatsnaam*/, VerzendLand FROM BestellingAdressen WHERE BestellingId = OrigBestelling; 
 
 REPLACE INTO BestellingHerkomst ( BestellingID, BestellingHerkomst, Kanaal, Keyword, Gclid, NieuwsbriefID )
	SELECT NewBestellingid AS BestellingID, BestellingHerkomst, Kanaal, Keyword, Gclid, NieuwsbriefID
	FROM BestellingHerkomst
	WHERE BestellingID = OrigBestelling;
/* Status 'Niet inpakken' op nieuwe order 
	INSERT IGNORE INTO BestellingStatus SET StatusId = 32, BestellingId = NewBestellingid, Resultaat = 'gelukt', Gebruiker = @initials, DT = NOW();				
	CALL orderregel_status_op_orderid( 32, NewBestellingid, 'gelukt' );
*/
 
 /**
  * Annuleer de backorderregels op de oorspronkelijke order
  * want die zijn in de opnieuw, niet aangemaakt
  * @deprecated
  */
  -- UPDATE Bestellingen SET Geannuleerd = 1 WHERE Bestellingid=OrigBestelling AND AantalBackorder > 0;
 
  REPLACE INTO BestellingAllOpmerkingen SET BestellingId = NewBestellingid, Initialen = 'CR', KlantenServiceOpmerking = CONCAT ( 'Opnieuw van O', order_volgnummer( OrigBestelling ) ), DT = NOW(); 
 
 RETURN NewBestellingid;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `bestelling_totaal` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `bestelling_totaal`( bid INT ) RETURNS int(11)
    DETERMINISTIC
BEGIN                                                                                                               
        DECLARE rv INT;       
        -- INSERT INTO tmp.`TotaalCounter` VALUES ( NULL, @context );                      
	SELECT SUM( BedragIncBtwIncKorting ) * 100 INTO rv FROM Bestellingen WHERE Ean NOT IN ( 'porto', 'IDEAL' ) AND Geannuleerd = 0 AND Ean != '' AND Bestellingid = bid;                                                                                                                                                 
        RETURN rv;        
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `bestelling_totaal_met_porto` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `bestelling_totaal_met_porto`( bid INT ) RETURNS int(11)
    DETERMINISTIC
BEGIN                                                                                                               
        DECLARE rv INT;                             
	SELECT IFNULL( SUM( BedragIncBtwIncKorting ), 0 ) * 100 INTO rv FROM Bestellingen_zonder_backorders WHERE Bestellingid = bid;                                                                                                                                                 
        RETURN rv;        
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `bestelling_totaal_met_porto_bevestigd` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `bestelling_totaal_met_porto_bevestigd`( bid INT ) RETURNS int(11)
    DETERMINISTIC
BEGIN
	-- Het antwoord op je volgende vraag is "Ja, precies één keer. In MARI."
        DECLARE rv INT;                             
	SELECT IFNULL( SUM( BedragIncBtwIncKorting ) * 100, 0 ) INTO rv FROM BestellingenLog WHERE Bestellingid = bid AND Bevestigd=1;
        RETURN rv;        
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `bestelling_totaal_met_porto_origineel` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `bestelling_totaal_met_porto_origineel`( bid INT ) RETURNS int(11)
    DETERMINISTIC
BEGIN                                                                                                               
        DECLARE rv INT;                             
        SELECT SUM( BL.BedragIncBtwIncKorting ) * 100 INTO rv FROM BestellingenLog BL RIGHT JOIN Bestellingen B USING (Id) WHERE B.Bestellingid = bid AND Eerste = 1;	
        RETURN rv;        
END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `bestelling_totaal_op_factuur` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `bestelling_totaal_op_factuur`( bid INT ) RETURNS int(11)
    DETERMINISTIC
BEGIN                                                                                                               
        DECLARE rv INT;                             
	SELECT IFNULL( SUM( BedragIncBtwIncKorting ), 0 ) * 100 INTO rv FROM Bestellingen WHERE Bestellingid = bid;                                                                                                                                                 
        RETURN rv;        
END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `bestelling_vbmih_backorders` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `bestelling_vbmih_backorders`( _bestellingId INT ) RETURNS int(11)
    DETERMINISTIC
BEGIN
	DECLARE _herkomst CHAR(10);
	
	SELECT Herkomst INTO _herkomst FROM BestellingAll WHERE BestellingId = _bestellingId;
	
	IF _herkomst NOT IN ( 'MARI' ) THEN
		/* Bestelling komt niet uit MARI */
		UPDATE Bestellingen_met_voorraad SET AantalBackorder = AantalBackorder;
	END IF;
	RETURN 0;
    END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `bestelling_verschillendetitels` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `bestelling_verschillendetitels`( bid INT ) RETURNS int(11)
    DETERMINISTIC
BEGIN                                                                                                               
        DECLARE rv INT;                             
	SELECT COUNT( 1 ) INTO rv FROM Bestellingen WHERE Ean <> 'porto' AND Bestellingid = bid;                                                                                                                                                 
        RETURN rv;        
END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `boek_besteld_door` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `boek_besteld_door`( iEan CHAR(13) CHARACTER SET latin1 ) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE rv INT;
	SELECT COUNT( DISTINCT Klantid ) INTO rv
	FROM Bestellingen Bn
		JOIN Bestelling USING ( BestellingId )
	WHERE Bn.Ean = iEan;
	RETURN rv;
	END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `boek_dagen_in_top` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `boek_dagen_in_top`( IEan char( 13 ) CHARACTER SET latin1, ITop INT ) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE rv INT;
	/*
	DECLARE h INT;
	
	CREATE TEMPORARY TABLE Temp SELECT IEan AS OrigineelEan, IEan AS Ean;
	SELECT COUNT(*) INTO h FROM Manpo.Boeken WHERE Ean = IEan AND Historieovernemen = 1;
	IF h = 1 THEN
		REPLACE INTO Temp SELECT 
			B.`L1` AS OrigineelEan, IEan AS Ean
			FROM Manpo.`BoekVervangtEAN` A JOIN Manpo.`Mapped_EAN` B ON (B.`U8` = A.`Vervangt`)
			WHERE Ean = IEan;
	END IF;	
	
	
	SELECT COUNT(DISTINCT DT) INTO rv FROM Boekranking_Datum D 
	WHERE Ranking <= ITop AND D.`Ean` IN ( SELECT M.`L1` FROM Temp T JOIN Manpo.`Mapped_EAN` M ON ( T.OrigineelEan = M.U8 ) );
	
	DROP TEMPORARY TABLE Temp;
	*/
	
	/*
	SELECT COUNT(*) INTO rv
	FROM Boekranking_Datum
	WHERE Ean IN ( IEan )
		AND Ranking <= ITop; */
	
	SELECT COUNT(DISTINCT DT) INTO RV
	FROM Boekranking_Datum D
		JOIN Manpo.Mapped_EAN M ON ( D.EAN = M.L1 )
		JOIN Manpo.GAEVB ON ( GAEVB.EAN = M.U8 )
	WHERE GAEVB.OrigineelEAN = IEan
		AND D.Ranking <= ITop;
	
	RETURN rv;
	END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `boek_in_top_sinds` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `boek_in_top_sinds`( IEAN CHAR( 13 ) CHARACTER SET latin1, ITOP INT ) RETURNS date
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE h INT;
	DROP TEMPORARY TABLE IF EXISTS Temp;
	CREATE TEMPORARY TABLE Temp SELECT IEan AS OrigineelEan, IEan AS Ean;
	SELECT COUNT(*) INTO h FROM Manpo.Boeken WHERE Ean = IEan AND Historieovernemen = 1;
	IF h = 1 THEN
		REPLACE INTO Temp SELECT 
			B.`L1` AS OrigineelEan, IEan AS Ean
			FROM Manpo.`BoekVervangtEAN` A JOIN Manpo.`Mapped_EAN` B ON (B.`U8` = A.`Vervangt`)
			WHERE Ean = IEan;
	END IF;	
	BEGIN
		DECLARE cdt,rdt DATE;
		DECLARE crank, rrank,lp INT DEFAULT 0;
		DECLARE done INT DEFAULT 0;
		DECLARE cur CURSOR FOR SELECT DT, MIN(Ranking) AS Ranking FROM Managementboek_Klanten.Boekranking_Datum WHERE Ean IN ( SELECT M.`L1` FROM Temp T JOIN Manpo.`Mapped_EAN` M ON ( T.OrigineelEan = M.U8 ) ) GROUP BY DT ORDER BY DT DESC;
		DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
		
		OPEN cur;
		
		REPEAT 
			FETCH cur INTO cdt, crank;
			IF NOT done THEN
				IF crank > 0 AND crank <= ITOP THEN
					SET rdt = cdt;
				ELSE
					SET done = 2;
				END IF;
			END IF;
			SET lp = lp + 1;
		UNTIL done END REPEAT;
		CLOSE cur;
		
		RETURN rdt;
	END;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `create_credit` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `create_credit`( OrigBestelling INT ) RETURNS int(11)
    MODIFIES SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE NewBestelling INT;
	DECLARE GebruikerInitialen CHAR(5);
	
	/* Alleen bestellingen met een factuurid kunnen gecrediteerd worden */
	SET @factuurid := (SELECT Factuurid FROM `BestellingAll` WHERE `Bestellingid` = OrigBestelling);
	IF @factuurid = 0 THEN
		RETURN 0;
	ELSE
		IF @initials <> '' THEN
			SET GebruikerInitialen = @initials;
		ELSE
			SET GebruikerInitialen = 'CR';
		END IF;
		
		INSERT INTO BestellingAll ( Bestellingid, Klantid, Siteid, Opmerkingen, Achternaam, Bedrijfsnaam, DT, Afleverid, IP, ProcessStatus, BatchID, AffiliateId, ReferrerDomain, IsClubOrder, Betaalmethode, Rekeningnummer, Uwreferentie, Afgerond, Herinnering, `Hash`, MailedTracktrace, SessionId, EersteBestelling, StemMailVerzonden, DTStemMail, SamengevoegdMet, Factuurid, Gebruiker, OpmerkingNegeren, AutoClassificatie, ClassificatieRedenKort, ClassificatieReden, Geexporteerd, OrigineelBestellingId, ProspectId, GeenPortoBerekenen, IdealOpen, IdealTimeout, BetalingsTermijn, Geannuleerd, UitBackorder, SiteBestelling, DeelLevering, DTFactuur, DTVerval, TeltAls, IsOmzet, IsCorrectie, IsCredit, IsOpnieuw, ToonBestelling, Herkomst, VerstuurCompleteOrder, ICBestelling, KopKostenplaats, KopKostenplaatsId, api_identity )
			SELECT NULL /*Bestellingid*/,`Klantid` /*Klantid*/,`Siteid` /*Siteid*/,'' /*Opmerkingen*/,`Achternaam` /*Achternaam*/,`Bedrijfsnaam` /*Bedrijfsnaam*/,NOW() /*DT*/,`Afleverid` /*Afleverid*/,`IP` /*IP*/,
				'nieuw' /*ProcessStatus*/,0 /*BatchID*/,`AffiliateId` /*AffiliateId*/,'' /*ReferrerDomain*/,0 /*IsClubOrder*/,'A' /*Betaalmethode*/,
				`Rekeningnummer` /*Rekeningnummer*/, CONCAT( 'credit ', IFNULL( order_volgnummer(BestellingID), '' ), '  ', Uwreferentie ) /*Uwreferentie*/,1 /*Afgerond*/,`Herinnering` /*Herinnering*/,'' /*HASH*/,0 /*MailedTracktrace*/,
				`SessionId` /*SessionId*/,`EersteBestelling` /*EersteBestelling*/,`StemMailVerzonden` /*StemMailVerzonden*/,`DTStemMail` /*DTStemMail*/,`SamengevoegdMet` /*SamengevoegdMet*/,
				0 /*Factuurid*/,'' /*Gebruiker*/,`OpmerkingNegeren` /*OpmerkingNegeren*/,'nieuw' /*AutoClassificatie*/,'' /*ClassificatieRedenKort*/,
				'' /*ClassificatieReden*/,0 /*Geexporteerd*/,0 /* OrigineelBestellingId*/,`ProspectId` /*ProspectId*/,
				`GeenPortoBerekenen` /*GeenPortoBerekenen*/,0 /*IdealOpen*/,0 /*IdealTimeout*/,
				`BetalingsTermijn` /*BetalingsTermijn*/,0 /*Geannuleerd*/, 0 /*UitBackorder*/, SiteBestelling, 0/*DeelLevering*/, NULL/*DTFactuur*/, NULL/*DTVerval*/, 0 /*TeltAls*/, IsOmzet /*Omzet*/, 0 /*Corr*/, 1 /*Credit*/, 0 /*Opnieuw*/, 0 /*Toon*/, Herkomst, 0/*VerstuurCompleteOrder*/, ICBestelling, KopKostenplaats, KopKostenplaatsId, api_identity
			FROM BestellingAll WHERE BestellingId = OrigBestelling;
			SELECT LAST_INSERT_ID() INTO NewBestelling;
		/* 
		 * Insert orderregels & Adressen 
		 * sluit orderregels die in backorder staan uit
		 * die worden namelijk geannuleerd
		 */
		INSERT INTO Bestellingen ( Id, Auteurnaam, Aantal, Prijs, Bestellingid, Ean, Omschrijving, Geexporteerd, KortingPercentage, KortingForce, IsPromo, KortingReden, KortingMP, KostenMP, DTOrderregel, VastePrijs, ActiePrijs, BTWTarief, BTWCode, AantalBackorder, BackorderOrigineel, BackorderReden, BriefCode, DTExactExport, KortingBedrag, KortingBedragExBtw, PrijsExBtwExKorting, PrijsExBtwIncKorting, BedragExBtwExKorting, BedragIncBtwExKorting, BedragIncBtwIncKorting, BedragExBtwIncKorting, BedragBTW, LineNr, Geannuleerd, Bijdrage, OmzetExBtwExKorting, OmzetExBtwIncKorting, OmzetIncBtwExKorting, OmzetIncBtwIncKorting, StatusId, FactuurId, RegelReferentie, RegelKostenplaats, RegelOrganisatieID, BoekStatusBijBestelling, PrijsInkoop, ICL, AantalGeleverd )
			SELECT NULL /*Id*/,`Auteurnaam` /*Auteurnaam*/,-1 * `Aantal` /*Aantal*/,`Prijs` /*Prijs*/,NewBestelling /*Bestellingid*/,`Ean` /*Ean*/,`Omschrijving` /*Omschrijving*/,0 /*Geexporteerd*/,`KortingPercentage` /*KortingPercentage*/, KortingForce,`IsPromo` /*IsPromo*/,`KortingReden` /*KortingReden*/,`KortingMP` /*KortingMP*/,`KostenMP` /*KostenMP*/,NOW() /*DTOrderregel*/,`VastePrijs` /*VastePrijs*/,`ActiePrijs` /*ActiePrijs*/,`BTWTarief` /*BTWTarief*/,`BTWCode` /*BTWCode*/,0 /*AantalBackorder*/, 0/*BackorderOrigineel*/,NULL /*BackorderReden*/,NULL /*BriefCode*/,NULL /*DTExactExport*/,`KortingBedrag` /*KortingBedrag*/,`KortingBedragExBtw` /*KortingBedragExBtw*/,`PrijsExBtwExKorting` /*PrijsExBtwExKorting*/,`PrijsExBtwIncKorting` /*PrijsExBtwIncKorting*/,`BedragExBtwExKorting` /*BedragExBtwExKorting*/,`BedragIncBtwExKorting` /*BedragIncBtwExKorting*/,`BedragIncBtwIncKorting` /*BedragIncBtwIncKorting*/,`BedragExBtwIncKorting` /*BedragExBtwIncKorting*/,`BedragBTW` /*BedragBTW*/,`LineNr` /*LineNr*/,0 /*Geannuleerd*/,0 /* Bijdrage*/,0,0,0,0 /*Omzet*/, 0 /* Statusid */, 0 /* FactuurId */, RegelReferentie, RegelKostenplaats, RegelOrganisatieID, 0 /* BoekStatus */, 0 /* Inkoop */, ICL, /* Geleverd */ 0 FROM Bestellingen WHERE BestellingId = OrigBestelling AND Geannuleerd = 0 AND Geexporteerd = 1 AND Aantal <> 0;
		INSERT INTO BestellingAdressen ( BestellingId, Klantid, AfwijkendFactuurAdres, FactuurKlantId, FactuurBedrijfsnaam, FactuurBedrijfsnaam2, FactuurAfdeling, FactuurGeslacht, FactuurInitialen, FactuurAchternaam, FactuurStraatnaam, FactuurHuisnummer, FactuurHuisnummerToevoeging, FactuurPostcode, FactuurPlaatsnaam, AfwijkendVerzendAdres, VerzendKlantId, VerzendBedrijfsnaam, VerzendBedrijfsnaam2, VerzendAfdeling, VerzendGeslacht, VerzendInitialen, VerzendAchternaam, VerzendStraatnaam, VerzendHuisnummer, VerzendHuisnummerToevoeging, VerzendPostcode, VerzendPlaatsnaam )
			SELECT NewBestelling /*BestellingId*/,`Klantid` /*Klantid*/,`AfwijkendFactuurAdres` /*AfwijkendFactuurAdres*/,`FactuurKlantId` /*FactuurKlantId*/,`FactuurBedrijfsnaam` /*FactuurBedrijfsnaam*/,`FactuurBedrijfsnaam2` /*FactuurBedrijfsnaam2*/,`FactuurAfdeling` /*FactuurAfdeling*/,`FactuurGeslacht` /*FactuurGeslacht*/,`FactuurInitialen` /*FactuurInitialen*/,`FactuurAchternaam` /*FactuurAchternaam*/,`FactuurStraatnaam` /*FactuurStraatnaam*/,`FactuurHuisnummer` /*FactuurHuisnummer*/,`FactuurHuisnummerToevoeging` /*FactuurHuisnummerToevoeging*/,`FactuurPostcode` /*FactuurPostcode*/,`FactuurPlaatsnaam` /*FactuurPlaatsnaam*/,`AfwijkendVerzendAdres` /*AfwijkendVerzendAdres*/,`VerzendKlantId` /*VerzendKlantId*/,`VerzendBedrijfsnaam` /*VerzendBedrijfsnaam*/,`VerzendBedrijfsnaam2` /*VerzendBedrijfsnaam2*/,`VerzendAfdeling` /*VerzendAfdeling*/,`VerzendGeslacht` /*VerzendGeslacht*/,`VerzendInitialen` /*VerzendInitialen*/,`VerzendAchternaam` /*VerzendAchternaam*/,`VerzendStraatnaam` /*VerzendStraatnaam*/,`VerzendHuisnummer` /*VerzendHuisnummer*/,`VerzendHuisnummerToevoeging` /*VerzendHuisnummerToevoeging*/,`VerzendPostcode` /*VerzendPostcode*/,`VerzendPlaatsnaam` /*VerzendPlaatsnaam*/ FROM BestellingAdressen WHERE BestellingId = OrigBestelling;
		REPLACE INTO BestellingHerkomst ( BestellingID, BestellingHerkomst, Kanaal, Keyword, Gclid, NieuwsbriefID )
			SELECT NewBestelling AS BestellingID, BestellingHerkomst, Kanaal, Keyword, Gclid, NieuwsbriefID
			FROM BestellingHerkomst
			WHERE BestellingID = OrigBestelling;
		
		/*
		 * Annuleer orderregels van de oorspronkelijke order
		 * die in backorder staan of in backorder gestaan hebben.
		 * Als een deel van de backorderregel eventueel al 
		 * geleverd is dan hoort daar een andere factuur bij.
		 */
		/**
		 * @deprecated
		 * UPDATE Bestellingen SET Geannuleerd=1 WHERE BestellingId=OrigBestelling AND AantalBackorder > 0;
		 */
		
		/* Rond nieuwe credit af */
		UPDATE BestellingAll SET DT = NOW(), Gebruiker = GebruikerInitialen, Afgerond=1, Geannuleerd=0 WHERE BestellingId = NewBestelling;
		/* Werk datum bij 
		SPN - Waarom!?!?
		UPDATE Bestellingen  SET DTOrderregel = NOW() WHERE BestellingId = OrigBestelling;
		*/
		REPLACE INTO BestellingAllOpmerkingen SET BestellingId = NewBestelling, Initialen = 'CR', KlantenServiceOpmerking = CONCAT ( 'Credit van O', order_volgnummer( OrigBestelling ) ), DT = NOW();
		/* Werk status bij: Gecrediteerd */
		INSERT IGNORE INTO BestellingStatus SET StatusId = 29, BestellingId = OrigBestelling, Resultaat = 'gelukt', Gebruiker = @initials, DT = NOW();
		CALL orderregel_status_op_orderid_zonder_backorders( 29, OrigBestelling, 'gelukt' );
		/* Status 'Afgerond' op nieuwe order */
		INSERT IGNORE INTO BestellingStatus SET StatusId = 2, BestellingId = NewBestelling, Resultaat = 'gelukt', Gebruiker = @initials, DT = NOW();				
		CALL orderregel_status_op_orderid( 2, NewBestelling, 'gelukt' );		
		/* Status 'Niet inpakken' op credit-order. */
		INSERT IGNORE INTO BestellingStatus SET StatusId = 32, BestellingId = NewBestelling, Resultaat = 'gelukt', Gebruiker = @initials, DT = NOW();				
		UPDATE OrderkopStatusPlat SET niet_inpakken = 1 WHERE BestellingId = NewBestelling;
		CALL orderregel_status_op_orderid( 32, NewBestelling, 'gelukt' );
		/** Credits nooit Achteraf Factureren  [VBM-1046] **/
		UPDATE OrderkopStatusPlat SET achteraf_factureren = 0 WHERE BestellingId = NewBestelling;
		UPDATE OrderregelStatusPlat JOIN Bestellingen USING ( ID )
			SET achteraf_factureren = 0 WHERE BestellingId = NewBestelling;
		RETURN NewBestelling;
	END IF;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `credit_en_opnieuw` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `credit_en_opnieuw`( OrigBestelling INT, Gebruiker CHAR(2)) RETURNS int(11)
    MODIFIES SQL DATA
    DETERMINISTIC
BEGIN
	/* Roep create_credit aan om de credit te maken*/
	DECLARE NewBestelling INT;	
	DECLARE CreditBestelling INT;
	
	/* Zet globale variabele @initials voor de functie credit_direct */
	SET @initials = Gebruiker;
	SELECT create_credit(OrigBestelling) INTO CreditBestelling;
	
	/* Zet 'Opnieuw' Vlag bij deze credit */
	UPDATE BestellingAll SET IsOpnieuw = 1 WHERE BestellingId = CreditBestelling;
	
	/* Doe de bestelling opnieuw */
	SELECT bestelling_opnieuw(OrigBestelling, Gebruiker) INTO NewBestelling;
	
	SET @credit = CreditBestelling;
	
	RETURN NewBestelling;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `domain_of_url` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `domain_of_url`(url TEXT) RETURNS varchar(255) CHARSET latin1
    NO SQL
    DETERMINISTIC
RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(TRIM(LEADING "https://" FROM TRIM(LEADING "http://" FROM TRIM(url))), "/", 1), ":", 1), ".", if(url LIKE "%.org.__%" OR url LIKE "%.net.__%" OR url LIKE "%.com.__%" OR url LIKE "%.__.us%" OR url LIKE "%.co.__%" OR url LIKE "%.__.uk%", -3, -2) ) ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `factuur_totaal` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `factuur_totaal`( bid INT ) RETURNS decimal(11,2)
    DETERMINISTIC
BEGIN                                                                                                               
        DECLARE rv DECIMAL( 11, 2 );                             
	SELECT IFNULL( SUM( BedragIncBtwIncKorting ), 0 ) INTO rv FROM Bestellingen WHERE Factuurid = bid AND Aantal <> 0;                                                                                                                                                 
        RETURN rv;        
END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `geen_voorraad_artikelen` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `geen_voorraad_artikelen`() RETURNS varchar(255) CHARSET latin1
    DETERMINISTIC
BEGIN
	SET @r = 'bong,porto,ideal';
	RETURN @r;
END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `gemiddeld_stemmen` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `gemiddeld_stemmen`( iEAN char(13) CHARACTER SET latin1 ) RETURNS float
    READS SQL DATA
BEGIN
	DECLARE RV FLOAT;
	
	SELECT SUM( Stemmen * Gemiddeld ) / SUM( Stemmen )  INTO RV
	FROM 
	Managementboek_Klanten.VogooAvg VA JOIN  
	(
	SELECT V.Vervangtean AS Ean FROM Managementboek_Boeken.Boekanderebindwijzen A JOIN Managementboek_Boeken.Boekvervangtean V ON ( V.Ean = A.Eangekoppeld ) WHERE A.Ean = iEAN
	UNION
	SELECT V.Vervangtean AS Ean FROM Managementboek_Boeken.Boekvervangtean V WHERE V.Ean = iEAN
	) A
	USING ( Ean );
	RETURN IFNULL(RV,0);
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `gereserveerdeVoorraad` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `gereserveerdeVoorraad`(EanInput VARCHAR(13) CHARACTER SET latin1) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE huidigeGereserveerdeVoorraad INT(11) DEFAULT 0;	
	SELECT IFNULL(Voorraad,0) INTO huidigeGereserveerdeVoorraad FROM Voorraadreserveringen WHERE `Ean`=EanInput ORDER BY DT DESC LIMIT 0,1;
	RETURN huidigeGereserveerdeVoorraad;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `get_administratie` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `get_administratie`() RETURNS varchar(20) CHARSET latin1
    READS SQL DATA
    DETERMINISTIC
BEGIN
	SET @db = REPLACE(DATABASE(),'_Klanten','');
	RETURN @db;
    END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `gmt_now` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `gmt_now`() RETURNS datetime
    NO SQL
BEGIN
	DECLARE GMT DATETIME;
	SET @OLD_TZ = @@TIME_ZONE;
	SET @@TIME_ZONE = "+00:00";
	SELECT NOW() INTO GMT;
	SET @@TIME_ZONE = "SYSTEM";
	RETURN GMT; 
    END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `heeft_orderregelStatus` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `heeft_orderregelStatus`(myId INT,myStatusId INT) RETURNS tinyint(1)
    READS SQL DATA
BEGIN
		DECLARE returnValue TINYINT(1);
		SELECT IF (count(*) = 0,0,1) into returnValue FROM OrderregelStatus 
			WHERE Id=myId AND StatusId=myStatusId;			
		return returnValue;
	END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `ingepakt_datum` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `ingepakt_datum`( _id INT ) RETURNS datetime
BEGIN
	DECLARE rv DATETIME;
	SELECT MAX( DTIngepakt ) INTO rv FROM Bestellingen B1 JOIN BestellingenBelofte B2 USING( Id ) WHERE B1.BackorderOrigineel = _id OR B1.Id = _id;
	RETURN rv;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `is_transaction` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `is_transaction`() RETURNS int(11)
    NO SQL
begin
declare old_level text default @@tx_isolation;
declare exit handler for 1568 begin return 1; end;
set transaction isolation level repeatable read;
set tx_isolation = old_level;
return 0;
end ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `klant_aantal_bestellingen` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `klant_aantal_bestellingen`( id INT ) RETURNS int(11)
    DETERMINISTIC
BEGIN
	DECLARE rv INT;	
	SELECT IFNULL( SUM(TeltAls), 0 ) INTO rv FROM BestellingAll WHERE Afgerond = 1 AND Klantid = id;
	RETURN rv;
    END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `klant_aantal_openfacturen` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `klant_aantal_openfacturen`( klantid INT ) RETURNS int(11)
    DETERMINISTIC
BEGIN
	DECLARE rv INT;
	DECLARE eid INT;
		
		SELECT COUNT(*) INTO rv FROM BestellingAll B 
		JOIN `BestellingAdressen` BA USING ( BestellingId )
		JOIN Facturen FF ON ( FF.`OrderID` = B.BestellingId )
		WHERE ( BA.KlantId = klantid OR BA.`FactuurKlantId` = klantid )
		AND B.Factuurid > 0
		AND B.`Afgerond` = 1
		AND FF.`Status` IN ( 'open', 'nieuw' );
	RETURN rv;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `klant_bedrag_open` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `klant_bedrag_open`( klantid INT ) RETURNS decimal(10,2)
    DETERMINISTIC
BEGIN
	DECLARE rv DECIMAL( 10,2 );
			
		SELECT SUM( FF.OpenBedrag ) INTO rv FROM BestellingAll B 
		JOIN `BestellingAdressen` BA USING ( BestellingId )
		JOIN Facturen FF ON ( FF.`OrderID` = B.BestellingId )
		WHERE ( BA.KlantId = klantid OR BA.`FactuurKlantId` = klantid )
		AND B.Factuurid > 0
		AND B.`Afgerond` = 1
		AND FF.`Status` IN ( 'open', 'nieuw' );
	RETURN rv;
END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `klant_bedrag_openfacturen` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `klant_bedrag_openfacturen`( id INT ) RETURNS decimal(10,2)
    DETERMINISTIC
BEGIN
	DECLARE rv DECIMAL(10,2);
	DECLARE eid INT;
		
	SELECT `ExactId` INTO eid FROM Managementboek_Klanten.Klanten WHERE Klantid = 2127265;
	
	SELECT SUM(Bedrag) INTO rv FROM ExactKoppeling.Facturen WHERE Admnr = 709 AND `Status` IN ( 'open', 'nieuw' ) AND Debtor = eid;
	
	/* SELECT COUNT(*) INTO rv FROM ExactKoppeling.Facturen LEFT JOIN Bestelling ON ( OrderID = Bestellingid ) WHERE Afgerond = 1 AND KlantID = id AND `Status` = 'open' AND OpenBedrag > 0; */
	RETURN IFNULL(rv,0);
END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `klant_laatste_ipadres` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `klant_laatste_ipadres`( id INT ) RETURNS char(16) CHARSET latin1
    DETERMINISTIC
BEGIN
	DECLARE rv CHAR(16);
	SELECT IPAdres INTO rv FROM IPHistorie WHERE Klantid = id ORDER BY DTLaatsteBezoek DESC LIMIT 1;
	IF rv IS NULL THEN
		SELECT IPlaatstebezoek INTO rv FROM Klanten WHERE Klantid = id;
	END IF;
	IF rv IS NULL THEN
		SELECT IP INTO rv FROM Klanten WHERE Klantid = id;
	END IF;
	IF rv IS NULL THEN
		SET rv = '0.0.0.0';
	END IF;
	RETURN rv;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `klant_oudsteopenfactuur_datum` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `klant_oudsteopenfactuur_datum`( id INT ) RETURNS date
    DETERMINISTIC
BEGIN
	DECLARE rv DATE;
	
	SELECT IFNULL( MIN( Facturen.DT ), '0000-00-00' ) INTO rv FROM ExactKoppeling.Facturen LEFT JOIN Bestelling ON ( OrderID = Bestellingid ) WHERE Facturen.Admnr = 709 AND Afgerond = 1 AND KlantID = id AND `Status` = 'open' AND OpenBedrag > 0;
	RETURN rv;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `klant_oudste_factuur` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `klant_oudste_factuur`( klantid INT ) RETURNS int(11)
    DETERMINISTIC
BEGIN
	DECLARE rv DATE;
			
		SELECT TO_DAYS( NOW() ) - TO_DAYS( MIN( FF.`DT` ) ) INTO rv FROM BestellingAll B 
		JOIN `BestellingAdressen` BA USING ( BestellingId )
		JOIN Facturen FF ON ( FF.`OrderID` = B.BestellingId )
		WHERE ( BA.KlantId = klantid OR BA.`FactuurKlantId` = klantid )
		AND B.Factuurid > 0
		AND B.`Afgerond` = 1
		AND FF.`Status` IN ( 'open', 'nieuw' );
	RETURN rv;
END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `klant_policy_int` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `klant_policy_int`(iKlantID INT(11), iPolicy VARCHAR(25) CHARACTER SET ASCII) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
BEGIN

	RETURN ( SELECT
		COALESCE(
			OP.IntValue,
			PP1.IntValue,
			PP2.IntValue,
			PP3.IntValue,
			PP4.IntValue,
			PP5.IntValue,
			PP6.IntValue )
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies OP ON ( OP.Policy = iPolicy AND OP.OrganisatieID = OK.OrganisatieID )
		LEFT JOIN Managementboek_Klanten.Organisaties OO1 ON ( OO1.OrganisatieID = OK.OrganisatieID )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP1 ON ( PP1.Policy = iPolicy AND PP1.OrganisatieID = OO1.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO2 ON ( OO2.OrganisatieID = OO1.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP2 ON ( PP2.Policy = iPolicy AND PP2.OrganisatieID = OO2.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO3 ON ( OO3.OrganisatieID = OO2.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP3 ON ( PP3.Policy = iPolicy AND PP3.OrganisatieID = OO3.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO4 ON ( OO4.OrganisatieID = OO3.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP4 ON ( PP4.Policy = iPolicy AND PP4.OrganisatieID = OO4.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO5 ON ( OO5.OrganisatieID = OO4.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP5 ON ( PP5.Policy = iPolicy AND PP5.OrganisatieID = OO5.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO6 ON ( OO6.OrganisatieID = OO5.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP6 ON ( PP6.Policy = iPolicy AND PP6.OrganisatieID = OO6.ParentOrganisatie )
	WHERE OK.KlantID = iKlantID
	ORDER BY OP.OrganisatieID, PP1.OrganisatieID, PP2.OrganisatieID, PP3.OrganisatieID, PP4.OrganisatieID, PP5.OrganisatieID, PP6.OrganisatieID
	LIMIT 1 );

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `klant_policy_int_dev` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `klant_policy_int_dev`(iKlantID INT(11), iPolicy VARCHAR(25) CHARACTER SET ASCII) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
BEGIN

	RETURN ( SELECT
		COALESCE(
			OP.IntValue,
			PP1.IntValue,
			PP2.IntValue,
			PP3.IntValue,
			PP4.IntValue,
			PP5.IntValue,
			PP6.IntValue )
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies OP ON ( OP.Policy = iPolicy AND OP.OrganisatieID = OK.OrganisatieID )
		LEFT JOIN Managementboek_Klanten.Organisaties OO1 ON ( OO1.OrganisatieID = OK.OrganisatieID )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP1 ON ( PP1.Policy = iPolicy AND PP1.OrganisatieID = OO1.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO2 ON ( OO2.OrganisatieID = OO1.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP2 ON ( PP2.Policy = iPolicy AND PP2.OrganisatieID = OO2.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO3 ON ( OO3.OrganisatieID = OO2.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP3 ON ( PP3.Policy = iPolicy AND PP3.OrganisatieID = OO3.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO4 ON ( OO4.OrganisatieID = OO3.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP4 ON ( PP4.Policy = iPolicy AND PP4.OrganisatieID = OO4.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO5 ON ( OO5.OrganisatieID = OO4.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP5 ON ( PP5.Policy = iPolicy AND PP5.OrganisatieID = OO5.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO6 ON ( OO6.OrganisatieID = OO5.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP6 ON ( PP6.Policy = iPolicy AND PP6.OrganisatieID = OO6.ParentOrganisatie )
	WHERE OK.KlantID = iKlantID
	ORDER BY OP.OrganisatieID, PP1.OrganisatieID, PP2.OrganisatieID, PP3.OrganisatieID, PP4.OrganisatieID, PP5.OrganisatieID, PP6.OrganisatieID
	LIMIT 1 );

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `klant_policy_int_k_dennis` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `klant_policy_int_k_dennis`(iKlantID INT(11), iPolicy VARCHAR(25) CHARACTER SET ASCII) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
BEGIN

	RETURN ( SELECT
		COALESCE(
			OP.IntValue,
			PP1.IntValue,
			PP2.IntValue,
			PP3.IntValue,
			PP4.IntValue,
			PP5.IntValue,
			PP6.IntValue )
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies OP ON ( OP.Policy = iPolicy AND OP.OrganisatieID = OK.OrganisatieID )
		LEFT JOIN Managementboek_Klanten.Organisaties OO1 ON ( OO1.OrganisatieID = OK.OrganisatieID )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP1 ON ( PP1.Policy = iPolicy AND PP1.OrganisatieID = OO1.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO2 ON ( OO2.OrganisatieID = OO1.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP2 ON ( PP2.Policy = iPolicy AND PP2.OrganisatieID = OO2.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO3 ON ( OO3.OrganisatieID = OO2.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP3 ON ( PP3.Policy = iPolicy AND PP3.OrganisatieID = OO3.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO4 ON ( OO4.OrganisatieID = OO3.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP4 ON ( PP4.Policy = iPolicy AND PP4.OrganisatieID = OO4.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO5 ON ( OO5.OrganisatieID = OO4.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP5 ON ( PP5.Policy = iPolicy AND PP5.OrganisatieID = OO5.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO6 ON ( OO6.OrganisatieID = OO5.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP6 ON ( PP6.Policy = iPolicy AND PP6.OrganisatieID = OO6.ParentOrganisatie )
	WHERE OK.KlantID = iKlantID
	ORDER BY OP.OrganisatieID, PP1.OrganisatieID, PP2.OrganisatieID, PP3.OrganisatieID, PP4.OrganisatieID, PP5.OrganisatieID, PP6.OrganisatieID
	LIMIT 1 );

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `klant_policy_int_k_sander` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `klant_policy_int_k_sander`(iKlantID INT(11), iPolicy VARCHAR(25) CHARACTER SET ASCII) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
BEGIN

	RETURN ( SELECT
		COALESCE(
			OP.IntValue,
			PP1.IntValue,
			PP2.IntValue,
			PP3.IntValue,
			PP4.IntValue,
			PP5.IntValue,
			PP6.IntValue )
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies OP ON ( OP.Policy = iPolicy AND OP.OrganisatieID = OK.OrganisatieID )
		LEFT JOIN Managementboek_Klanten.Organisaties OO1 ON ( OO1.OrganisatieID = OK.OrganisatieID )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP1 ON ( PP1.Policy = iPolicy AND PP1.OrganisatieID = OO1.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO2 ON ( OO2.OrganisatieID = OO1.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP2 ON ( PP2.Policy = iPolicy AND PP2.OrganisatieID = OO2.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO3 ON ( OO3.OrganisatieID = OO2.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP3 ON ( PP3.Policy = iPolicy AND PP3.OrganisatieID = OO3.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO4 ON ( OO4.OrganisatieID = OO3.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP4 ON ( PP4.Policy = iPolicy AND PP4.OrganisatieID = OO4.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO5 ON ( OO5.OrganisatieID = OO4.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP5 ON ( PP5.Policy = iPolicy AND PP5.OrganisatieID = OO5.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO6 ON ( OO6.OrganisatieID = OO5.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP6 ON ( PP6.Policy = iPolicy AND PP6.OrganisatieID = OO6.ParentOrganisatie )
	WHERE OK.KlantID = iKlantID
	ORDER BY OP.OrganisatieID, PP1.OrganisatieID, PP2.OrganisatieID, PP3.OrganisatieID, PP4.OrganisatieID, PP5.OrganisatieID, PP6.OrganisatieID
	LIMIT 1 );

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `klant_policy_int_k_thijs` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `klant_policy_int_k_thijs`(iKlantID INT(11), iPolicy VARCHAR(25) CHARACTER SET ASCII) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
BEGIN

	RETURN ( SELECT
		COALESCE(
			OP.IntValue,
			PP1.IntValue,
			PP2.IntValue,
			PP3.IntValue,
			PP4.IntValue,
			PP5.IntValue,
			PP6.IntValue )
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies OP ON ( OP.Policy = iPolicy AND OP.OrganisatieID = OK.OrganisatieID )
		LEFT JOIN Managementboek_Klanten.Organisaties OO1 ON ( OO1.OrganisatieID = OK.OrganisatieID )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP1 ON ( PP1.Policy = iPolicy AND PP1.OrganisatieID = OO1.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO2 ON ( OO2.OrganisatieID = OO1.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP2 ON ( PP2.Policy = iPolicy AND PP2.OrganisatieID = OO2.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO3 ON ( OO3.OrganisatieID = OO2.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP3 ON ( PP3.Policy = iPolicy AND PP3.OrganisatieID = OO3.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO4 ON ( OO4.OrganisatieID = OO3.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP4 ON ( PP4.Policy = iPolicy AND PP4.OrganisatieID = OO4.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO5 ON ( OO5.OrganisatieID = OO4.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP5 ON ( PP5.Policy = iPolicy AND PP5.OrganisatieID = OO5.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO6 ON ( OO6.OrganisatieID = OO5.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP6 ON ( PP6.Policy = iPolicy AND PP6.OrganisatieID = OO6.ParentOrganisatie )
	WHERE OK.KlantID = iKlantID
	ORDER BY OP.OrganisatieID, PP1.OrganisatieID, PP2.OrganisatieID, PP3.OrganisatieID, PP4.OrganisatieID, PP5.OrganisatieID, PP6.OrganisatieID
	LIMIT 1 );

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `klant_policy_string` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `klant_policy_string`(iKlantID INT(11), iPolicy VARCHAR(25) CHARACTER SET ASCII) RETURNS char(128) CHARSET utf8
    READS SQL DATA
    DETERMINISTIC
BEGIN

	RETURN ( SELECT
		COALESCE(
			OP.StringValue,
			PP1.StringValue,
			PP2.StringValue,
			PP3.StringValue,
			PP4.StringValue,
			PP5.StringValue,
			PP6.StringValue )
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies OP ON ( OP.Policy = iPolicy AND OP.OrganisatieID = OK.OrganisatieID )
		LEFT JOIN Managementboek_Klanten.Organisaties OO1 ON ( OO1.OrganisatieID = OK.OrganisatieID )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP1 ON ( PP1.Policy = iPolicy AND PP1.OrganisatieID = OO1.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO2 ON ( OO2.OrganisatieID = OO1.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP2 ON ( PP2.Policy = iPolicy AND PP2.OrganisatieID = OO2.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO3 ON ( OO3.OrganisatieID = OO2.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP3 ON ( PP3.Policy = iPolicy AND PP3.OrganisatieID = OO3.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO4 ON ( OO4.OrganisatieID = OO3.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP4 ON ( PP4.Policy = iPolicy AND PP4.OrganisatieID = OO4.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO5 ON ( OO5.OrganisatieID = OO4.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP5 ON ( PP5.Policy = iPolicy AND PP5.OrganisatieID = OO5.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO6 ON ( OO6.OrganisatieID = OO5.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP6 ON ( PP6.Policy = iPolicy AND PP6.OrganisatieID = OO6.ParentOrganisatie )
	WHERE OK.KlantID = iKlantID
	ORDER BY OP.OrganisatieID, PP1.OrganisatieID, PP2.OrganisatieID, PP3.OrganisatieID, PP4.OrganisatieID, PP5.OrganisatieID, PP6.OrganisatieID
	LIMIT 1 );

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `klant_policy_string_dev` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `klant_policy_string_dev`(iKlantID INT(11), iPolicy VARCHAR(25) CHARACTER SET ASCII) RETURNS char(128) CHARSET utf8
    READS SQL DATA
    DETERMINISTIC
BEGIN

	RETURN ( SELECT
		COALESCE(
			OP.StringValue,
			PP1.StringValue,
			PP2.StringValue,
			PP3.StringValue,
			PP4.StringValue,
			PP5.StringValue,
			PP6.StringValue )
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies OP ON ( OP.Policy = iPolicy AND OP.OrganisatieID = OK.OrganisatieID )
		LEFT JOIN Managementboek_Klanten.Organisaties OO1 ON ( OO1.OrganisatieID = OK.OrganisatieID )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP1 ON ( PP1.Policy = iPolicy AND PP1.OrganisatieID = OO1.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO2 ON ( OO2.OrganisatieID = OO1.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP2 ON ( PP2.Policy = iPolicy AND PP2.OrganisatieID = OO2.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO3 ON ( OO3.OrganisatieID = OO2.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP3 ON ( PP3.Policy = iPolicy AND PP3.OrganisatieID = OO3.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO4 ON ( OO4.OrganisatieID = OO3.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP4 ON ( PP4.Policy = iPolicy AND PP4.OrganisatieID = OO4.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO5 ON ( OO5.OrganisatieID = OO4.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP5 ON ( PP5.Policy = iPolicy AND PP5.OrganisatieID = OO5.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO6 ON ( OO6.OrganisatieID = OO5.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP6 ON ( PP6.Policy = iPolicy AND PP6.OrganisatieID = OO6.ParentOrganisatie )
	WHERE OK.KlantID = iKlantID
	ORDER BY OP.OrganisatieID, PP1.OrganisatieID, PP2.OrganisatieID, PP3.OrganisatieID, PP4.OrganisatieID, PP5.OrganisatieID, PP6.OrganisatieID
	LIMIT 1 );

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `klant_policy_string_k_dennis` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `klant_policy_string_k_dennis`(iKlantID INT(11), iPolicy VARCHAR(25) CHARACTER SET ASCII) RETURNS char(128) CHARSET utf8
    READS SQL DATA
    DETERMINISTIC
BEGIN

	RETURN ( SELECT
		COALESCE(
			OP.StringValue,
			PP1.StringValue,
			PP2.StringValue,
			PP3.StringValue,
			PP4.StringValue,
			PP5.StringValue,
			PP6.StringValue )
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies OP ON ( OP.Policy = iPolicy AND OP.OrganisatieID = OK.OrganisatieID )
		LEFT JOIN Managementboek_Klanten.Organisaties OO1 ON ( OO1.OrganisatieID = OK.OrganisatieID )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP1 ON ( PP1.Policy = iPolicy AND PP1.OrganisatieID = OO1.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO2 ON ( OO2.OrganisatieID = OO1.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP2 ON ( PP2.Policy = iPolicy AND PP2.OrganisatieID = OO2.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO3 ON ( OO3.OrganisatieID = OO2.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP3 ON ( PP3.Policy = iPolicy AND PP3.OrganisatieID = OO3.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO4 ON ( OO4.OrganisatieID = OO3.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP4 ON ( PP4.Policy = iPolicy AND PP4.OrganisatieID = OO4.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO5 ON ( OO5.OrganisatieID = OO4.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP5 ON ( PP5.Policy = iPolicy AND PP5.OrganisatieID = OO5.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO6 ON ( OO6.OrganisatieID = OO5.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP6 ON ( PP6.Policy = iPolicy AND PP6.OrganisatieID = OO6.ParentOrganisatie )
	WHERE OK.KlantID = iKlantID
	ORDER BY OP.OrganisatieID, PP1.OrganisatieID, PP2.OrganisatieID, PP3.OrganisatieID, PP4.OrganisatieID, PP5.OrganisatieID, PP6.OrganisatieID
	LIMIT 1 );

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `klant_policy_string_k_sander` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `klant_policy_string_k_sander`(iKlantID INT(11), iPolicy VARCHAR(25) CHARACTER SET ASCII) RETURNS char(128) CHARSET utf8
    READS SQL DATA
    DETERMINISTIC
BEGIN

	RETURN ( SELECT
		COALESCE(
			OP.StringValue,
			PP1.StringValue,
			PP2.StringValue,
			PP3.StringValue,
			PP4.StringValue,
			PP5.StringValue,
			PP6.StringValue )
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies OP ON ( OP.Policy = iPolicy AND OP.OrganisatieID = OK.OrganisatieID )
		LEFT JOIN Managementboek_Klanten.Organisaties OO1 ON ( OO1.OrganisatieID = OK.OrganisatieID )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP1 ON ( PP1.Policy = iPolicy AND PP1.OrganisatieID = OO1.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO2 ON ( OO2.OrganisatieID = OO1.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP2 ON ( PP2.Policy = iPolicy AND PP2.OrganisatieID = OO2.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO3 ON ( OO3.OrganisatieID = OO2.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP3 ON ( PP3.Policy = iPolicy AND PP3.OrganisatieID = OO3.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO4 ON ( OO4.OrganisatieID = OO3.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP4 ON ( PP4.Policy = iPolicy AND PP4.OrganisatieID = OO4.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO5 ON ( OO5.OrganisatieID = OO4.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP5 ON ( PP5.Policy = iPolicy AND PP5.OrganisatieID = OO5.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO6 ON ( OO6.OrganisatieID = OO5.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP6 ON ( PP6.Policy = iPolicy AND PP6.OrganisatieID = OO6.ParentOrganisatie )
	WHERE OK.KlantID = iKlantID
	ORDER BY OP.OrganisatieID, PP1.OrganisatieID, PP2.OrganisatieID, PP3.OrganisatieID, PP4.OrganisatieID, PP5.OrganisatieID, PP6.OrganisatieID
	LIMIT 1 );

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `klant_policy_string_k_thijs` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `klant_policy_string_k_thijs`(iKlantID INT(11), iPolicy VARCHAR(25) CHARACTER SET ASCII) RETURNS char(128) CHARSET utf8
    READS SQL DATA
    DETERMINISTIC
BEGIN

	RETURN ( SELECT
		COALESCE(
			OP.StringValue,
			PP1.StringValue,
			PP2.StringValue,
			PP3.StringValue,
			PP4.StringValue,
			PP5.StringValue,
			PP6.StringValue )
	FROM Managementboek_Klanten.OrganisatieKlanten OK
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies OP ON ( OP.Policy = iPolicy AND OP.OrganisatieID = OK.OrganisatieID )
		LEFT JOIN Managementboek_Klanten.Organisaties OO1 ON ( OO1.OrganisatieID = OK.OrganisatieID )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP1 ON ( PP1.Policy = iPolicy AND PP1.OrganisatieID = OO1.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO2 ON ( OO2.OrganisatieID = OO1.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP2 ON ( PP2.Policy = iPolicy AND PP2.OrganisatieID = OO2.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO3 ON ( OO3.OrganisatieID = OO2.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP3 ON ( PP3.Policy = iPolicy AND PP3.OrganisatieID = OO3.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO4 ON ( OO4.OrganisatieID = OO3.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP4 ON ( PP4.Policy = iPolicy AND PP4.OrganisatieID = OO4.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO5 ON ( OO5.OrganisatieID = OO4.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP5 ON ( PP5.Policy = iPolicy AND PP5.OrganisatieID = OO5.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.Organisaties OO6 ON ( OO6.OrganisatieID = OO5.ParentOrganisatie )
		LEFT JOIN Managementboek_Klanten.OrganisatiePolicies PP6 ON ( PP6.Policy = iPolicy AND PP6.OrganisatieID = OO6.ParentOrganisatie )
	WHERE OK.KlantID = iKlantID
	ORDER BY OP.OrganisatieID, PP1.OrganisatieID, PP2.OrganisatieID, PP3.OrganisatieID, PP4.OrganisatieID, PP5.OrganisatieID, PP6.OrganisatieID
	LIMIT 1 );

END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `korting_voor_ean` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `korting_voor_ean`( _klantid INT, _ean CHAR(13) CHARACTER SET utf8, _aantal INT ) RETURNS decimal(4,2)
    READS SQL DATA
BEGIN
	DECLARE _Percentage DECIMAL(4,2);
	DECLARE _AangepastPercentage DECIMAL(4,2);
	DECLARE _inCB INT;
	DECLARE _inMB INT;
	DECLARE _inFF INT;
	DECLARE _taal VARCHAR(20);
	DECLARE _min5 INT DEFAULT 0;
	DECLARE _periodiek INT DEFAULT 0;
	DECLARE _taalboek VARCHAR(10);
	DECLARE _buitp DECIMAL(4,2);
	DECLARE _kortingsregeling VARCHAR(128);

	IF _ean IN ( 'BONG', 'PORTO', 'VOUCHER' ) THEN
		RETURN 0;
	END IF;


	SELECT COUNT(EAN) > 0 INTO _inMB FROM Manpo.Boeken WHERE Ean = _ean;
	SELECT COUNT(EAN) > 0 INTO _inCB FROM CbBoeken.Boeken_gefilterd WHERE Ean = _ean;
	SELECT COUNT(EAN) > 0 INTO _inFF FROM Feeds.Boeken_gefilterd WHERE EAN = _ean;
	IF _inMB = 1 THEN
		SELECT IFNULL(Bindwijze_periodiek,0), Taalvermelding INTO _periodiek, _taalboek FROM Manpo.Boeken JOIN Manpo.Bindwijze USING ( Bindwijze ) WHERE Ean = _ean;
	ELSEIF _inCB = 1 THEN
		SELECT Taalvermelding INTO _taalboek FROM CbBoeken.Boeken WHERE EAN = _ean;
	ELSEIF _inFF = 1 THEN
		SELECT Taalvermelding INTO _taalboek FROM Feeds.Boeken_gefilterd WHERE EAN = _ean LIMIT 1;
	END IF;

	IF _periodiek = 1 THEN
		RETURN 0;
	END IF;


	
	IF _klantid > 0 THEN
		SET _kortingsregeling = Managementboek_Klanten.klant_policy_string( _klantid, "kortingsregeling" );

		IF _kortingsregeling = "100ex-15p" THEN
			SET _Percentage = IF( ABS(_aantal) < 100, 0.0, 15.0 );
		ELSEIF _kortingsregeling = "// TODO: meer kortingsregelingen" THEN
			SET _Percentage = 12.34;
		END IF;
	END IF;

	
	IF _Percentage IS NULL THEN
		SELECT Percentage INTO _Percentage FROM Managementboek_Klanten.Korting_Klanten_Ean WHERE Ean = _ean AND Klantid = _klantid;
	END IF;

	
	IF _Percentage IS NULL THEN
		SELECT
		  MAX(Percentage) INTO _Percentage
		FROM
		  Managementboek_Klanten.Korting_Klanten_Uitgever_Boeksoort K JOIN Managementboek_Boeken.Boeken B
		    ON (UitgeverId = Uitgever AND K.Boeksoort = B.Boeksoort )
	   WHERE Ean = _ean AND Klantid = _klantid;
	END IF;

	
	IF _Percentage IS NULL THEN
		SELECT MAX(Percentage) INTO _Percentage FROM Managementboek_Klanten.Korting_Klanten_Uitgever JOIN Managementboek_Boeken.Boeken ON ( UitgeverId = Uitgever ) WHERE Ean = _ean AND Klantid = _klantid;
	END IF;

	
	SET @_debug_taalboek = _taalboek;
	IF _taalboek <> 'NL' THEN
		SELECT Percentage INTO _buitp FROM Managementboek_Klanten.Korting_Klanten_Taal WHERE Taalvermelding = 'EN' AND Klantid = _klantid;
		SET @_debug_buitp = _buitp;
		IF _buitp > 0 && _buitp > IFNULL(_Percentage,0) THEN
			SET _Percentage = _buitp;
			SET @path = 'buitenland';
		END IF;
	END IF;

	
	IF _Percentage IS NULL THEN
		SELECT MAX(Percentage) INTO _Percentage FROM Managementboek_Klanten.Korting_Klanten WHERE Klantid = _klantid;
	END IF;

	IF _Percentage IS NULL THEN
		
		
		
		IF _inCB = 1 AND _inMB = 0 THEN
			
			IF _aantal >= 10 AND _aantal <= 29 THEN
				SET _Percentage = 5;
			ELSEIF _aantal >= 30 AND _aantal <= 99 THEN
				SET _Percentage = 10;
			ELSEIF _aantal >= 100 THEN
				SET _Percentage = 15;
			END IF;
		ELSE
			
			IF _aantal <= 9 AND _aantal >= 0 THEN
				SELECT Korting_0_9, Aangepastekorting_0_9 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1) LIMIT 1;
			ELSEIF _aantal > 9 AND _aantal <= 29 THEN
				SELECT Korting_10_29, Aangepastekorting_10_29 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1)  LIMIT 1;
			ELSEIF _aantal > 29 AND _aantal <= 99 THEN
				SELECT Korting_30_99, Aangepastekorting_30_99 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1)  LIMIT 1;
			ELSEIF _aantal > 90 AND _aantal <= 249 THEN
				SELECT Korting_100_249, Aangepastekorting_100_249 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1)  LIMIT 1;
			ELSEIF _aantal > 249 AND _aantal <= 449 THEN
				SELECT Korting_250_499, Aangepastekorting_250_499 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1) LIMIT 1;
			ELSEIF _aantal >= 500 THEN
				SELECT Korting_500_999, Aangepastekorting_500_999 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1) LIMIT 1;
			ELSE
				SET _Percentage = 0;
				SET _AangepastPercentage = 0;
			END IF;

			IF IFNULL( _AangepastPercentage, 0 ) > 0 THEN
				SET _Percentage = _AangepastPercentage;
			END IF;
		END IF;
	END IF;

	
	IF _aantal >= 2 AND _kortingsregeling IS NULL THEN
		SELECT Min5Bij2Ex INTO _min5 FROM Managementboek_Klanten.KlantVinken WHERE Klantid = _klantid;
		IF _min5 = 0 THEN
			SELECT Min5Bij2Ex INTO _min5 FROM Managementboek_Klanten.KlantVinken KV
				JOIN Managementboek_Klanten.Klanten K ON ( K.FactuurKlantid = KV.Klantid ) WHERE K.Klantid = _klantid;
		END IF;
		

		IF _min5 = 1 THEN
			SET _Percentage = GREATEST( _Percentage, 5 );
		END IF;
	END IF;

	RETURN IFNULL(_Percentage,0);
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `korting_voor_ean_dev` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `korting_voor_ean_dev`( _klantid INT, _ean CHAR(13) CHARACTER SET utf8, _aantal INT ) RETURNS decimal(4,2)
    READS SQL DATA
BEGIN
	DECLARE _Percentage DECIMAL(4,2);
	DECLARE _AangepastPercentage DECIMAL(4,2);
	DECLARE _inCB INT;
	DECLARE _inMB INT;
	DECLARE _inFF INT;
	DECLARE _taal VARCHAR(20);
	DECLARE _min5 INT DEFAULT 0;
	DECLARE _periodiek INT DEFAULT 0;
	DECLARE _taalboek VARCHAR(10);
	DECLARE _buitp DECIMAL(4,2);
	DECLARE _kortingsregeling VARCHAR(128);

	IF _ean IN ( 'BONG', 'PORTO', 'VOUCHER' ) THEN
		RETURN 0;
	END IF;


	SELECT COUNT(EAN) > 0 INTO _inMB FROM Manpo.Boeken WHERE Ean = _ean;
	SELECT COUNT(EAN) > 0 INTO _inCB FROM CbBoeken.Boeken_gefilterd WHERE Ean = _ean;
	SELECT COUNT(EAN) > 0 INTO _inFF FROM Feeds.Boeken_gefilterd WHERE EAN = _ean;
	IF _inMB = 1 THEN
		SELECT IFNULL(Bindwijze_periodiek,0), Taalvermelding INTO _periodiek, _taalboek FROM Manpo.Boeken JOIN Manpo.Bindwijze USING ( Bindwijze ) WHERE Ean = _ean;
	ELSEIF _inCB = 1 THEN
		SELECT Taalvermelding INTO _taalboek FROM CbBoeken.Boeken WHERE EAN = _ean;
	ELSEIF _inFF = 1 THEN
		SELECT Taalvermelding INTO _taalboek FROM Feeds.Boeken_gefilterd WHERE EAN = _ean LIMIT 1;
	END IF;

	IF _periodiek = 1 THEN
		RETURN 0;
	END IF;


	
	IF _klantid > 0 THEN
		SET _kortingsregeling = Managementboek_Klanten.klant_policy_string_dev( _klantid, "kortingsregeling" );

		IF _kortingsregeling = "100ex-15p" THEN
			SET _Percentage = IF( ABS(_aantal) < 100, 0.0, 15.0 );
		ELSEIF _kortingsregeling = "// TODO: meer kortingsregelingen" THEN
			SET _Percentage = 12.34;
		END IF;
	END IF;

	
	IF _Percentage IS NULL THEN
		SELECT Percentage INTO _Percentage FROM Managementboek_Klanten.Korting_Klanten_Ean WHERE Ean = _ean AND Klantid = _klantid;
	END IF;

	
	IF _Percentage IS NULL THEN
		SELECT
		  MAX(Percentage) INTO _Percentage
		FROM
		  Managementboek_Klanten.Korting_Klanten_Uitgever_Boeksoort K JOIN Managementboek_Boeken.Boeken B
		    ON (UitgeverId = Uitgever AND K.Boeksoort = B.Boeksoort )
	   WHERE Ean = _ean AND Klantid = _klantid;
	END IF;

	
	IF _Percentage IS NULL THEN
		SELECT MAX(Percentage) INTO _Percentage FROM Managementboek_Klanten.Korting_Klanten_Uitgever JOIN Managementboek_Boeken.Boeken ON ( UitgeverId = Uitgever ) WHERE Ean = _ean AND Klantid = _klantid;
	END IF;

	
	SET @_debug_taalboek = _taalboek;
	IF _taalboek <> 'NL' THEN
		SELECT Percentage INTO _buitp FROM Managementboek_Klanten.Korting_Klanten_Taal WHERE Taalvermelding = 'EN' AND Klantid = _klantid;
		SET @_debug_buitp = _buitp;
		IF _buitp > 0 && _buitp > IFNULL(_Percentage,0) THEN
			SET _Percentage = _buitp;
			SET @path = 'buitenland';
		END IF;
	END IF;

	
	IF _Percentage IS NULL THEN
		SELECT MAX(Percentage) INTO _Percentage FROM Managementboek_Klanten.Korting_Klanten WHERE Klantid = _klantid;
	END IF;

	IF _Percentage IS NULL THEN
		
		
		
		IF _inCB = 1 AND _inMB = 0 THEN
			
			IF _aantal >= 10 AND _aantal <= 29 THEN
				SET _Percentage = 5;
			ELSEIF _aantal >= 30 AND _aantal <= 99 THEN
				SET _Percentage = 10;
			ELSEIF _aantal >= 100 THEN
				SET _Percentage = 15;
			END IF;
		ELSE
			
			IF _aantal <= 9 AND _aantal >= 0 THEN
				SELECT Korting_0_9, Aangepastekorting_0_9 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1) LIMIT 1;
			ELSEIF _aantal > 9 AND _aantal <= 29 THEN
				SELECT Korting_10_29, Aangepastekorting_10_29 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1)  LIMIT 1;
			ELSEIF _aantal > 29 AND _aantal <= 99 THEN
				SELECT Korting_30_99, Aangepastekorting_30_99 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1)  LIMIT 1;
			ELSEIF _aantal > 90 AND _aantal <= 249 THEN
				SELECT Korting_100_249, Aangepastekorting_100_249 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1)  LIMIT 1;
			ELSEIF _aantal > 249 AND _aantal <= 449 THEN
				SELECT Korting_250_499, Aangepastekorting_250_499 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1) LIMIT 1;
			ELSEIF _aantal >= 500 THEN
				SELECT Korting_500_999, Aangepastekorting_500_999 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1) LIMIT 1;
			ELSE
				SET _Percentage = 0;
				SET _AangepastPercentage = 0;
			END IF;

			IF IFNULL( _AangepastPercentage, 0 ) > 0 THEN
				SET _Percentage = _AangepastPercentage;
			END IF;
		END IF;
	END IF;

	
	IF _aantal >= 2 AND _kortingsregeling IS NULL THEN
		SELECT Min5Bij2Ex INTO _min5 FROM Managementboek_Klanten.KlantVinken WHERE Klantid = _klantid;
		IF _min5 = 0 THEN
			SELECT Min5Bij2Ex INTO _min5 FROM Managementboek_Klanten.KlantVinken KV
				JOIN Managementboek_Klanten.Klanten K ON ( K.FactuurKlantid = KV.Klantid ) WHERE K.Klantid = _klantid;
		END IF;
		

		IF _min5 = 1 THEN
			SET _Percentage = GREATEST( _Percentage, 5 );
		END IF;
	END IF;

	RETURN IFNULL(_Percentage,0);
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `korting_voor_ean_k_dennis` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `korting_voor_ean_k_dennis`( _klantid INT, _ean CHAR(13) CHARACTER SET utf8, _aantal INT ) RETURNS decimal(4,2)
    READS SQL DATA
BEGIN
	DECLARE _Percentage DECIMAL(4,2);
	DECLARE _AangepastPercentage DECIMAL(4,2);
	DECLARE _inCB INT;
	DECLARE _inMB INT;
	DECLARE _inFF INT;
	DECLARE _taal VARCHAR(20);
	DECLARE _min5 INT DEFAULT 0;
	DECLARE _periodiek INT DEFAULT 0;
	DECLARE _taalboek VARCHAR(10);
	DECLARE _buitp DECIMAL(4,2);
	DECLARE _kortingsregeling VARCHAR(128);

	IF _ean IN ( 'BONG', 'PORTO', 'VOUCHER' ) THEN
		RETURN 0;
	END IF;


	SELECT COUNT(EAN) > 0 INTO _inMB FROM Manpo.Boeken WHERE Ean = _ean;
	SELECT COUNT(EAN) > 0 INTO _inCB FROM CbBoeken.Boeken_gefilterd WHERE Ean = _ean;
	SELECT COUNT(EAN) > 0 INTO _inFF FROM Feeds.Boeken_gefilterd WHERE EAN = _ean;
	IF _inMB = 1 THEN
		SELECT IFNULL(Bindwijze_periodiek,0), Taalvermelding INTO _periodiek, _taalboek FROM Manpo.Boeken JOIN Manpo.Bindwijze USING ( Bindwijze ) WHERE Ean = _ean;
	ELSEIF _inCB = 1 THEN
		SELECT Taalvermelding INTO _taalboek FROM CbBoeken.Boeken WHERE EAN = _ean;
	ELSEIF _inFF = 1 THEN
		SELECT Taalvermelding INTO _taalboek FROM Feeds.Boeken_gefilterd WHERE EAN = _ean LIMIT 1;
	END IF;

	IF _periodiek = 1 THEN
		RETURN 0;
	END IF;


	
	IF _klantid > 0 THEN
		SET _kortingsregeling = Managementboek_Klanten.klant_policy_string_k_dennis( _klantid, "kortingsregeling" );

		IF _kortingsregeling = "100ex-15p" THEN
			SET _Percentage = IF( ABS(_aantal) < 100, 0.0, 15.0 );
		ELSEIF _kortingsregeling = "// TODO: meer kortingsregelingen" THEN
			SET _Percentage = 12.34;
		END IF;
	END IF;

	
	IF _Percentage IS NULL THEN
		SELECT Percentage INTO _Percentage FROM Managementboek_Klanten.Korting_Klanten_Ean WHERE Ean = _ean AND Klantid = _klantid;
	END IF;

	
	IF _Percentage IS NULL THEN
		SELECT MAX(Percentage) INTO _Percentage FROM Managementboek_Klanten.Korting_Klanten_Uitgever JOIN Managementboek_Boeken.Boeken ON ( UitgeverId = Uitgever ) WHERE Ean = _ean AND Klantid = _klantid;
	END IF;

	
	SET @_debug_taalboek = _taalboek;
	IF _taalboek <> 'NL' THEN
		SELECT Percentage INTO _buitp FROM Managementboek_Klanten.Korting_Klanten_Taal WHERE Taalvermelding = 'EN' AND Klantid = _klantid;
		SET @_debug_buitp = _buitp;
		IF _buitp > 0 && _buitp > IFNULL(_Percentage,0) THEN
			SET _Percentage = _buitp;
			SET @path = 'buitenland';
		END IF;
	END IF;

	
	IF _Percentage IS NULL THEN
		SELECT MAX(Percentage) INTO _Percentage FROM Managementboek_Klanten.Korting_Klanten WHERE Klantid = _klantid;
	END IF;

	IF _Percentage IS NULL THEN
		
		
		
		IF _inCB = 1 AND _inMB = 0 THEN
			
			IF _aantal >= 10 AND _aantal <= 29 THEN
				SET _Percentage = 5;
			ELSEIF _aantal >= 30 AND _aantal <= 99 THEN
				SET _Percentage = 10;
			ELSEIF _aantal >= 100 THEN
				SET _Percentage = 15;
			END IF;
		ELSE
			
			IF _aantal <= 9 AND _aantal >= 0 THEN
				SELECT Korting_0_9, Aangepastekorting_0_9 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = _ean LIMIT 1;
			ELSEIF _aantal > 9 AND _aantal <= 29 THEN
				SELECT Korting_10_29, Aangepastekorting_10_29 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = _ean  LIMIT 1;
			ELSEIF _aantal > 29 AND _aantal <= 99 THEN
				SELECT Korting_30_99, Aangepastekorting_30_99 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = _ean  LIMIT 1;
			ELSEIF _aantal > 90 AND _aantal <= 249 THEN
				SELECT Korting_100_249, Aangepastekorting_100_249 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = _ean  LIMIT 1;
			ELSEIF _aantal > 249 AND _aantal <= 449 THEN
				SELECT Korting_250_499, Aangepastekorting_250_499 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = _ean LIMIT 1;
			ELSEIF _aantal >= 500 THEN
				SELECT Korting_500_999, Aangepastekorting_500_999 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = _ean LIMIT 1;
			ELSE
				SET _Percentage = 0;
				SET _AangepastPercentage = 0;
			END IF;

			IF IFNULL( _AangepastPercentage, 0 ) > 0 THEN
				SET _Percentage = _AangepastPercentage;
			END IF;
		END IF;
	END IF;

	
	IF _aantal >= 2 AND _kortingsregeling IS NULL THEN
		SELECT Min5Bij2Ex INTO _min5 FROM Managementboek_Klanten.KlantVinken WHERE Klantid = _klantid;
		IF _min5 = 0 THEN
			SELECT Min5Bij2Ex INTO _min5 FROM Managementboek_Klanten.KlantVinken KV
				JOIN Managementboek_Klanten.Klanten K ON ( K.FactuurKlantid = KV.Klantid ) WHERE K.Klantid = _klantid;
		END IF;
		

		IF _min5 = 1 THEN
			SET _Percentage = GREATEST( _Percentage, 5 );
		END IF;
	END IF;

	RETURN IFNULL(_Percentage,0);
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `korting_voor_ean_k_sander` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `korting_voor_ean_k_sander`( _klantid INT, _ean CHAR(13) CHARACTER SET utf8, _aantal INT ) RETURNS decimal(4,2)
    READS SQL DATA
BEGIN
	DECLARE _Percentage DECIMAL(4,2);
	DECLARE _AangepastPercentage DECIMAL(4,2);
	DECLARE _inCB INT;
	DECLARE _inMB INT;
	DECLARE _inFF INT;
	DECLARE _taal VARCHAR(20);
	DECLARE _min5 INT DEFAULT 0;
	DECLARE _periodiek INT DEFAULT 0;
	DECLARE _taalboek VARCHAR(10);
	DECLARE _buitp DECIMAL(4,2);
	DECLARE _kortingsregeling VARCHAR(128);

	IF _ean IN ( 'BONG', 'PORTO', 'VOUCHER' ) THEN
		RETURN 0;
	END IF;


	SELECT COUNT(EAN) > 0 INTO _inMB FROM Manpo.Boeken WHERE Ean = _ean;
	SELECT COUNT(EAN) > 0 INTO _inCB FROM CbBoeken.Boeken_gefilterd WHERE Ean = _ean;
	SELECT COUNT(EAN) > 0 INTO _inFF FROM Feeds.Boeken_gefilterd WHERE EAN = _ean;
	IF _inMB = 1 THEN
		SELECT IFNULL(Bindwijze_periodiek,0), Taalvermelding INTO _periodiek, _taalboek FROM Manpo.Boeken JOIN Manpo.Bindwijze USING ( Bindwijze ) WHERE Ean = _ean;
	ELSEIF _inCB = 1 THEN
		SELECT Taalvermelding INTO _taalboek FROM CbBoeken.Boeken WHERE EAN = _ean;
	ELSEIF _inFF = 1 THEN
		SELECT Taalvermelding INTO _taalboek FROM Feeds.Boeken_gefilterd WHERE EAN = _ean LIMIT 1;
	END IF;

	IF _periodiek = 1 THEN
		RETURN 0;
	END IF;


	
	IF _klantid > 0 THEN
		SET _kortingsregeling = Managementboek_Klanten.klant_policy_string_k_sander( _klantid, "kortingsregeling" );

		IF _kortingsregeling = "100ex-15p" THEN
			SET _Percentage = IF( ABS(_aantal) < 100, 0.0, 15.0 );
		ELSEIF _kortingsregeling = "// TODO: meer kortingsregelingen" THEN
			SET _Percentage = 12.34;
		END IF;
	END IF;

	
	IF _Percentage IS NULL THEN
		SELECT Percentage INTO _Percentage FROM Managementboek_Klanten.Korting_Klanten_Ean WHERE Ean = _ean AND Klantid = _klantid;
	END IF;

	
	IF _Percentage IS NULL THEN
		SELECT
		  MAX(Percentage) INTO _Percentage
		FROM
		  Managementboek_Klanten.Korting_Klanten_Uitgever_Boeksoort K JOIN Managementboek_Boeken.Boeken B
		    ON (UitgeverId = Uitgever AND K.Boeksoort = B.Boeksoort )
	   WHERE Ean = _ean AND Klantid = _klantid;
	END IF;

	
	IF _Percentage IS NULL THEN
		SELECT MAX(Percentage) INTO _Percentage FROM Managementboek_Klanten.Korting_Klanten_Uitgever JOIN Managementboek_Boeken.Boeken ON ( UitgeverId = Uitgever ) WHERE Ean = _ean AND Klantid = _klantid;
	END IF;

	
	SET @_debug_taalboek = _taalboek;
	IF _taalboek <> 'NL' THEN
		SELECT Percentage INTO _buitp FROM Managementboek_Klanten.Korting_Klanten_Taal WHERE Taalvermelding = 'EN' AND Klantid = _klantid;
		SET @_debug_buitp = _buitp;
		IF _buitp > 0 && _buitp > IFNULL(_Percentage,0) THEN
			SET _Percentage = _buitp;
			SET @path = 'buitenland';
		END IF;
	END IF;

	
	IF _Percentage IS NULL THEN
		SELECT MAX(Percentage) INTO _Percentage FROM Managementboek_Klanten.Korting_Klanten WHERE Klantid = _klantid;
	END IF;

	IF _Percentage IS NULL THEN
		
		
		
		IF _inCB = 1 AND _inMB = 0 THEN
			
			IF _aantal >= 10 AND _aantal <= 29 THEN
				SET _Percentage = 5;
			ELSEIF _aantal >= 30 AND _aantal <= 99 THEN
				SET _Percentage = 10;
			ELSEIF _aantal >= 100 THEN
				SET _Percentage = 15;
			END IF;
		ELSE
			
			IF _aantal <= 9 AND _aantal >= 0 THEN
				SELECT Korting_0_9, Aangepastekorting_0_9 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1) LIMIT 1;
			ELSEIF _aantal > 9 AND _aantal <= 29 THEN
				SELECT Korting_10_29, Aangepastekorting_10_29 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1)  LIMIT 1;
			ELSEIF _aantal > 29 AND _aantal <= 99 THEN
				SELECT Korting_30_99, Aangepastekorting_30_99 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1)  LIMIT 1;
			ELSEIF _aantal > 90 AND _aantal <= 249 THEN
				SELECT Korting_100_249, Aangepastekorting_100_249 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1)  LIMIT 1;
			ELSEIF _aantal > 249 AND _aantal <= 449 THEN
				SELECT Korting_250_499, Aangepastekorting_250_499 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1) LIMIT 1;
			ELSEIF _aantal >= 500 THEN
				SELECT Korting_500_999, Aangepastekorting_500_999 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1) LIMIT 1;
			ELSE
				SET _Percentage = 0;
				SET _AangepastPercentage = 0;
			END IF;

			IF IFNULL( _AangepastPercentage, 0 ) > 0 THEN
				SET _Percentage = _AangepastPercentage;
			END IF;
		END IF;
	END IF;

	
	IF _aantal >= 2 AND _kortingsregeling IS NULL THEN
		SELECT Min5Bij2Ex INTO _min5 FROM Managementboek_Klanten.KlantVinken WHERE Klantid = _klantid;
		IF _min5 = 0 THEN
			SELECT Min5Bij2Ex INTO _min5 FROM Managementboek_Klanten.KlantVinken KV
				JOIN Managementboek_Klanten.Klanten K ON ( K.FactuurKlantid = KV.Klantid ) WHERE K.Klantid = _klantid;
		END IF;
		

		IF _min5 = 1 THEN
			SET _Percentage = GREATEST( _Percentage, 5 );
		END IF;
	END IF;

	RETURN IFNULL(_Percentage,0);
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `korting_voor_ean_k_thijs` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `korting_voor_ean_k_thijs`( _klantid INT, _ean CHAR(13) CHARACTER SET utf8, _aantal INT ) RETURNS decimal(4,2)
    READS SQL DATA
BEGIN
	DECLARE _Percentage DECIMAL(4,2);
	DECLARE _AangepastPercentage DECIMAL(4,2);
	DECLARE _inCB INT;
	DECLARE _inMB INT;
	DECLARE _inFF INT;
	DECLARE _taal VARCHAR(20);
	DECLARE _min5 INT DEFAULT 0;
	DECLARE _periodiek INT DEFAULT 0;
	DECLARE _taalboek VARCHAR(10);
	DECLARE _buitp DECIMAL(4,2);
	DECLARE _kortingsregeling VARCHAR(128);

	IF _ean IN ( 'BONG', 'PORTO', 'VOUCHER' ) THEN
		RETURN 0;
	END IF;


	SELECT COUNT(EAN) > 0 INTO _inMB FROM Manpo.Boeken WHERE Ean = _ean;
	SELECT COUNT(EAN) > 0 INTO _inCB FROM CbBoeken.Boeken_gefilterd WHERE Ean = _ean;
	SELECT COUNT(EAN) > 0 INTO _inFF FROM Feeds.Boeken_gefilterd WHERE EAN = _ean;
	IF _inMB = 1 THEN
		SELECT IFNULL(Bindwijze_periodiek,0), Taalvermelding INTO _periodiek, _taalboek FROM Manpo.Boeken JOIN Manpo.Bindwijze USING ( Bindwijze ) WHERE Ean = _ean;
	ELSEIF _inCB = 1 THEN
		SELECT Taalvermelding INTO _taalboek FROM CbBoeken.Boeken WHERE EAN = _ean;
	ELSEIF _inFF = 1 THEN
		SELECT Taalvermelding INTO _taalboek FROM Feeds.Boeken_gefilterd WHERE EAN = _ean LIMIT 1;
	END IF;

	IF _periodiek = 1 THEN
		RETURN 0;
	END IF;


	
	IF _klantid > 0 THEN
		SET _kortingsregeling = Managementboek_Klanten.klant_policy_string_k_thijs( _klantid, "kortingsregeling" );

		IF _kortingsregeling = "100ex-15p" THEN
			SET _Percentage = IF( ABS(_aantal) < 100, 0.0, 15.0 );
		ELSEIF _kortingsregeling = "// TODO: meer kortingsregelingen" THEN
			SET _Percentage = 12.34;
		END IF;
	END IF;

	
	IF _Percentage IS NULL THEN
		SELECT Percentage INTO _Percentage FROM Managementboek_Klanten.Korting_Klanten_Ean WHERE Ean = _ean AND Klantid = _klantid;
	END IF;

	
	IF _Percentage IS NULL THEN
		SELECT
		  MAX(Percentage) INTO _Percentage
		FROM
		  Managementboek_Klanten.Korting_Klanten_Uitgever_Boeksoort K JOIN Managementboek_Boeken.Boeken B
		    ON (UitgeverId = Uitgever AND K.Boeksoort = B.Boeksoort )
	   WHERE Ean = _ean AND Klantid = _klantid;
	END IF;

	
	IF _Percentage IS NULL THEN
		SELECT MAX(Percentage) INTO _Percentage FROM Managementboek_Klanten.Korting_Klanten_Uitgever JOIN Managementboek_Boeken.Boeken ON ( UitgeverId = Uitgever ) WHERE Ean = _ean AND Klantid = _klantid;
	END IF;

	
	SET @_debug_taalboek = _taalboek;
	IF _taalboek <> 'NL' THEN
		SELECT Percentage INTO _buitp FROM Managementboek_Klanten.Korting_Klanten_Taal WHERE Taalvermelding = 'EN' AND Klantid = _klantid;
		SET @_debug_buitp = _buitp;
		IF _buitp > 0 && _buitp > IFNULL(_Percentage,0) THEN
			SET _Percentage = _buitp;
			SET @path = 'buitenland';
		END IF;
	END IF;

	
	IF _Percentage IS NULL THEN
		SELECT MAX(Percentage) INTO _Percentage FROM Managementboek_Klanten.Korting_Klanten WHERE Klantid = _klantid;
	END IF;

	IF _Percentage IS NULL THEN
		
		
		
		IF _inCB = 1 AND _inMB = 0 THEN
			
			IF _aantal >= 10 AND _aantal <= 29 THEN
				SET _Percentage = 5;
			ELSEIF _aantal >= 30 AND _aantal <= 99 THEN
				SET _Percentage = 10;
			ELSEIF _aantal >= 100 THEN
				SET _Percentage = 15;
			END IF;
		ELSE
			
			IF _aantal <= 9 AND _aantal >= 0 THEN
				SELECT Korting_0_9, Aangepastekorting_0_9 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1) LIMIT 1;
			ELSEIF _aantal > 9 AND _aantal <= 29 THEN
				SELECT Korting_10_29, Aangepastekorting_10_29 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1)  LIMIT 1;
			ELSEIF _aantal > 29 AND _aantal <= 99 THEN
				SELECT Korting_30_99, Aangepastekorting_30_99 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1)  LIMIT 1;
			ELSEIF _aantal > 90 AND _aantal <= 249 THEN
				SELECT Korting_100_249, Aangepastekorting_100_249 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1)  LIMIT 1;
			ELSEIF _aantal > 249 AND _aantal <= 449 THEN
				SELECT Korting_250_499, Aangepastekorting_250_499 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1) LIMIT 1;
			ELSEIF _aantal >= 500 THEN
				SELECT Korting_500_999, Aangepastekorting_500_999 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1) LIMIT 1;
			ELSE
				SET _Percentage = 0;
				SET _AangepastPercentage = 0;
			END IF;

			IF IFNULL( _AangepastPercentage, 0 ) > 0 THEN
				SET _Percentage = _AangepastPercentage;
			END IF;
		END IF;
	END IF;

	
	IF _aantal >= 2 AND _kortingsregeling IS NULL THEN
		SELECT Min5Bij2Ex INTO _min5 FROM Managementboek_Klanten.KlantVinken WHERE Klantid = _klantid;
		IF _min5 = 0 THEN
			SELECT Min5Bij2Ex INTO _min5 FROM Managementboek_Klanten.KlantVinken KV
				JOIN Managementboek_Klanten.Klanten K ON ( K.FactuurKlantid = KV.Klantid ) WHERE K.Klantid = _klantid;
		END IF;
		

		IF _min5 = 1 THEN
			SET _Percentage = GREATEST( _Percentage, 5 );
		END IF;
	END IF;

	RETURN IFNULL(_Percentage,0);
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `korting_voor_ean_sander` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `korting_voor_ean_sander`( _klantid INT, _ean CHAR(13) CHARACTER SET utf8, _aantal INT ) RETURNS decimal(4,2)
    READS SQL DATA
BEGIN
	DECLARE _Percentage DECIMAL(4,2);
	DECLARE _AangepastPercentage DECIMAL(4,2);
	DECLARE _inCB INT;
	DECLARE _inMB INT;
	DECLARE _inFF INT;
	DECLARE _taal VARCHAR(20);
	DECLARE _min5 INT DEFAULT 0;
	DECLARE _periodiek INT DEFAULT 0;
	DECLARE _taalboek VARCHAR(10);
	DECLARE _buitp DECIMAL(4,2);
	DECLARE _kortingsregeling VARCHAR(128);
	IF _ean IN ( 'BONG', 'PORTO', 'VOUCHER' ) THEN
		RETURN 0;
	END IF;
	SELECT COUNT(EAN) > 0 INTO _inMB FROM Manpo.Boeken WHERE Ean = _ean;
	SELECT COUNT(EAN) > 0 INTO _inCB FROM CbBoeken.Boeken_gefilterd WHERE Ean = _ean;
	SELECT COUNT(EAN) > 0 INTO _inFF FROM Feeds.Boeken_gefilterd WHERE EAN = _ean;
	IF _inMB = 1 THEN
		SELECT IFNULL(Bindwijze_periodiek,0), Taalvermelding INTO _periodiek, _taalboek FROM Manpo.Boeken JOIN Manpo.Bindwijze USING ( Bindwijze ) WHERE Ean = _ean;
	ELSEIF _inCB = 1 THEN
		SELECT Taalvermelding INTO _taalboek FROM CbBoeken.Boeken WHERE EAN = _ean;
	ELSEIF _inFF = 1 THEN
		SELECT Taalvermelding INTO _taalboek FROM Feeds.Boeken_gefilterd WHERE EAN = _ean LIMIT 1;
	END IF;
	IF _periodiek = 1 THEN
		RETURN 0;
	END IF;
	IF _klantid > 0 THEN
		SET _kortingsregeling = Managementboek_Klanten.klant_policy_string( _klantid, "kortingsregeling" );
		IF _kortingsregeling = "100ex-15p" THEN
			SET _Percentage = IF( ABS(_aantal) < 100, 0.0, 15.0 );
		ELSEIF _kortingsregeling = "// TODO: meer kortingsregelingen" THEN
			SET _Percentage = 12.34;
		END IF;
	END IF;
	IF _Percentage IS NULL THEN
		SELECT Percentage INTO _Percentage FROM Managementboek_Klanten.Korting_Klanten_Ean WHERE Ean = _ean AND Klantid = _klantid;
	END IF;
	
	IF _Percentage IS NULL THEN
		SELECT MAX(Percentage) INTO _Percentage FROM Managementboek_Klanten.Korting_Klanten_Uitgever JOIN Managementboek_Boeken.Boeken ON ( UitgeverId = Uitgever ) WHERE Ean = _ean AND Klantid = _klantid;
	END IF;
	
	SET @_debug_taalboek = _taalboek;
	IF _taalboek <> 'NL' THEN
		SELECT Percentage INTO _buitp FROM Managementboek_Klanten.Korting_Klanten_Taal WHERE Taalvermelding = 'EN' AND Klantid = _klantid;
		SET @_debug_buitp = _buitp;
		IF _buitp > 0 && _buitp > IFNULL(_Percentage,0) THEN
			SET _Percentage = _buitp;
			SET @path = 'buitenland';
		END IF;
	END IF;
	
	IF _Percentage IS NULL THEN
		SELECT MAX(Percentage) INTO _Percentage FROM Managementboek_Klanten.Korting_Klanten WHERE Klantid = _klantid;
	END IF;
	IF _Percentage IS NULL THEN
				
		IF _inCB = 1 AND _inMB = 0 THEN
			
			IF _aantal >= 10 AND _aantal <= 29 THEN
				SET _Percentage = 5;
			ELSEIF _aantal >= 30 AND _aantal <= 99 THEN
				SET _Percentage = 10;
			ELSEIF _aantal >= 100 THEN
				SET _Percentage = 15;
			END IF;
		ELSE
			
			IF _aantal <= 9 AND _aantal >= 0 THEN
				SELECT Korting_0_9, Aangepastekorting_0_9 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1) LIMIT 1;
			ELSEIF _aantal > 9 AND _aantal <= 29 THEN
				SELECT Korting_10_29, Aangepastekorting_10_29 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1)  LIMIT 1;
			ELSEIF _aantal > 29 AND _aantal <= 99 THEN
				SELECT Korting_30_99, Aangepastekorting_30_99 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1)  LIMIT 1;
			ELSEIF _aantal > 90 AND _aantal <= 249 THEN
				SELECT Korting_100_249, Aangepastekorting_100_249 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1)  LIMIT 1;
			ELSEIF _aantal > 249 AND _aantal <= 449 THEN
				SELECT Korting_250_499, Aangepastekorting_250_499 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1) LIMIT 1;
			ELSEIF _aantal >= 500 THEN
				SELECT Korting_500_999, Aangepastekorting_500_999 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = CONVERT(_ean USING latin1) LIMIT 1;
			ELSE
				SET _Percentage = 0;
				SET _AangepastPercentage = 0;
			END IF;
			IF IFNULL( _AangepastPercentage, 0 ) > 0 THEN
				SET _Percentage = _AangepastPercentage;
			END IF;
		END IF;
	END IF;
	
	RETURN 0;	
	
	IF _aantal >= 2 AND _kortingsregeling IS NULL THEN
		SELECT Min5Bij2Ex INTO _min5 FROM Managementboek_Klanten.KlantVinken WHERE Klantid = _klantid;
		IF _min5 = 0 THEN
			SELECT Min5Bij2Ex INTO _min5 FROM Managementboek_Klanten.KlantVinken KV
				JOIN Managementboek_Klanten.Klanten K ON ( K.FactuurKlantid = KV.Klantid ) WHERE K.Klantid = _klantid;
		END IF;
		
		IF _min5 = 1 THEN
			SET _Percentage = GREATEST( _Percentage, 5 );
		END IF;
	END IF;
	RETURN IFNULL(_Percentage,0);
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `korting_voor_ean_test` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `korting_voor_ean_test`( _klantid INT, _ean CHAR(13) CHARACTER SET utf8, _aantal INT ) RETURNS decimal(4,2)
    READS SQL DATA
BEGIN
	DECLARE _Percentage DECIMAL(4,2);
	DECLARE _AangepastPercentage DECIMAL(4,2);
	DECLARE _inCB INT;
	DECLARE _inMB INT;
	DECLARE _inFF INT;
	DECLARE _taal VARCHAR(20);
	DECLARE _min5 INT DEFAULT 0;
	DECLARE _periodiek INT DEFAULT 0;
	DECLARE _taalboek VARCHAR(10);	
	DECLARE _buitp DECIMAL(4,2);
	
	IF _ean IN ( 'BONG', 'PORTO', 'VOUCHER' ) THEN
		SET _Percentage = 0;
	ELSE
		SELECT COUNT(EAN) > 0 INTO _inMB FROM Manpo.Boeken WHERE Ean = _ean;
		SELECT COUNT(EAN) > 0 INTO _inCB FROM CbBoeken.Boeken_gefilterd WHERE Ean = _ean;
		SELECT COUNT(EAN) > 0 INTO _inFF FROM Feeds.Boeken_gefilterd WHERE EAN = _ean;
		if _inMB = 1 THEN
			SELECT IFNULL(Bindwijze_periodiek,0), Taalvermelding INTO _periodiek, _taalboek FROM Manpo.`Boeken` JOIN Manpo.`Bindwijze` USING ( Bindwijze ) WHERE Ean = _ean;
		ELSEIF _inCB = 1 THEN
			SELECT Taalvermelding INTO _taalboek FROM CbBoeken.Boeken WHERE EAN = _ean;
		ELSEIF _inFF = 1 THEN
			SELECT Taalvermelding INTO _taalboek FROM Feeds.Boeken_gefilterd WHERE EAN = _ean LIMIT 1;
		END IF;
		
		IF _periodiek = 1 THEN
			SET _Percentage = 0;
		ELSE
			-- Korting per ean
			SELECT Percentage INTO _Percentage FROM Managementboek_Klanten.`Korting_Klanten_Ean` WHERE Ean = _ean AND Klantid = _klantid;
		
			-- Korting per uitgever
			IF _Percentage IS NULL THEN
				SELECT MAX(Percentage) INTO _Percentage FROM Managementboek_Klanten.`Korting_Klanten_Uitgever` JOIN Managementboek_Boeken.Boeken ON ( UitgeverId = Uitgever ) WHERE Ean = _ean AND Klantid = _klantid;
			END IF; 
			
			-- Korting per Taal
			SET @_debug_taalboek = _taalboek;
			IF _taalboek <> 'NL' THEN
				SELECT Percentage INTO _buitp FROM Managementboek_Klanten.`Korting_Klanten_Taal` WHERE Taalvermelding = 'EN' AND Klantid = _klantid;
				SET @_debug_buitp = _buitp;
				IF _buitp > 0 && _buitp > IFNULL(_Percentage,0) THEN
					SET _Percentage = _buitp;
					SET @path = 'buitenland';
				END IF;
			END IF;
			
			-- Korting per klant
			IF _Percentage IS NULL THEN
				SELECT MAX(Percentage) INTO _Percentage FROM Managementboek_Klanten.`Korting_Klanten` WHERE Klantid = _klantid;
			END IF; 
			
			IF _Percentage IS NULL THEN 
				-- 10-29 > 5
				-- 30-99 > 10
				-- 100+ > 15
				IF _inCB = 1 AND _inMB = 0 THEN
					-- CB-tak
					IF _aantal >= 10 AND _aantal <= 29 THEN
						SET _Percentage = 5;
					ELSEIF _aantal >= 30 AND _aantal <= 99 THEN
						SET _Percentage = 10;
					ELSEIF _aantal >= 100 THEN
						SET _Percentage = 15;
					END IF;
				ELSE
					-- Managementboek-assortiment-tak
					IF _aantal <= 9 AND _aantal >= 0 THEN
						SELECT Korting_0_9, Aangepastekorting_0_9 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = _ean LIMIT 1;
					ELSEIF _aantal > 9 AND _aantal <= 29 THEN
						SELECT Korting_10_29, Aangepastekorting_10_29 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = _ean  LIMIT 1;
					ELSEIF _aantal > 29 AND _aantal <= 99 THEN
						SELECT Korting_30_99, Aangepastekorting_30_99 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = _ean  LIMIT 1;
					ELSEIF _aantal > 90 AND _aantal <= 249 THEN
						SELECT Korting_100_249, Aangepastekorting_100_249 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = _ean  LIMIT 1;
					ELSEIF _aantal > 249 AND _aantal <= 449 THEN
						SELECT Korting_250_499, Aangepastekorting_250_499 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = _ean LIMIT 1;
					ELSEIF _aantal >= 500 THEN
						SELECT Korting_500_999, Aangepastekorting_500_999 INTO _Percentage, _AangepastPercentage FROM Managementboek_Boeken.Boeken WHERE Ean = _ean LIMIT 1;
					ELSE
						SET _Percentage = 0;
						SET _AangepastPercentage = 0;
					END IF;
				END IF;
			END IF;
		END IF;
		
		IF IFNULL( _AangepastPercentage, 0 ) > 0 THEN
			SET _Percentage = _AangepastPercentage;
		END IF;
	END IF;
	
	-- JON-95
	IF _aantal >= 2 THEN
		SELECT Min5Bij2Ex INTO _min5 FROM Managementboek_Klanten.`KlantVinken` WHERE Klantid = _klantid;
		IF _min5 = 0 THEN
			SELECT Min5Bij2Ex INTO _min5 FROM Managementboek_Klanten.KlantVinken KV 
				JOIN Managementboek_Klanten.Klanten K ON ( K.`FactuurKlantid` = KV.`Klantid` ) WHERE K.Klantid = _klantid;
		END IF;
		
		IF _min5 = 1 THEN
			SET _Percentage = GREATEST( _Percentage, 5 );
		END IF;
	END IF;
	
	RETURN IFNULL(_Percentage,0);
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `kosten_per_regel` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `kosten_per_regel`( id INT ) RETURNS decimal(10,2)
    READS SQL DATA
BEGIN
	DECLARE Porto DECIMAL( 10, 2 );
	DECLARE VKosten DECIMAL( 10, 2 );
	DECLARE Bong DECIMAL( 10, 2 );
	DECLARE Aantal INT;
	
	SET Aantal = 0;
	SET VKosten = ROUND( 5.50, 2 );
	SELECT ROUND( IFNULL( SUM( Prijs / 100 ), 0 ), 2 ) INTO Bong
		FROM Bestellingen
		WHERE Bestellingid = id
			AND EAN = 'BONG' LIMIT 1;
	
	SET VKosten = ROUND( VKosten - Bong, 2 );
	
	SELECT ROUND( IFNULL( Prijs/100, 0 ), 2 ) INTO Porto
		FROM Bestellingen
		WHERE Bestellingid = id
			AND EAN = 'porto' LIMIT 1;
	
	
	SELECT ROUND( IFNULL( COUNT(*), 0 ), 2 ) INTO Aantal
		FROM Bestellingen
		WHERE Bestellingid = id
			AND EAN NOT IN ('porto', 'BONG', 'IDEAL');
	
	IF Aantal > 0 THEN
		SET VKosten = Round( ( VKosten - Porto ) / Aantal, 2 );
	END IF;
	RETURN IFNULL( VKosten, 0 );
	END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `MagICL` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `MagICL`( _id INT ) RETURNS int(11)
    DETERMINISTIC
BEGIN
	DECLARE RV INT;
	
	SELECT IF( IFNULL(FactuurLand,'') = '', 0, ( FactuurLand NOT REGEXP 'ederlan' ) ) AND ( LENGTH( IFNULL( K.BtwNr, '' ) ) > 5 ) INTO RV 
		FROM Managementboek_Klanten.`BestellingAdressen` A
		LEFT JOIN Managementboek_Klanten.Klanten_met_adres K ON ( A.`FactuurKlantId` = K.`Klantid` )
		WHERE BestellingId = _id;
	
	RETURN RV;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `maximum` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `maximum`( a int, b int ) RETURNS int(11)
    NO SQL
    DETERMINISTIC
BEGIN
	RETURN IF( a > b, a, b );
    END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `moet_factuur_geprint_worden` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `moet_factuur_geprint_worden`( id INT) RETURNS int(11)
    READS SQL DATA
BEGIN
  DECLARE RV INT;
  DECLARE CR INT;
  DECLARE _geen_downloads INT;
  DECLARE _factuurklantid INT;
  DECLARE _factuurvoorkeur CHAR(10);
	
	/* Geen credit */
	SELECT SUM( Bindwijze_download = 0 ) INTO _geen_downloads FROM 
	Bestellingen JOIN ExactArtikelen ON ( Ean = `Code` ) 
	JOIN Managementboek_Boeken.`Bindwijze` USING ( Bindwijze )
	WHERE BestellingId = id
	AND Ean NOT IN ( 'BONG', 'VOUCHER', 'PORTO', 'P' )
	AND Geannuleerd = 0;  
	
	SELECT IF( FactuurKlantid = 0, Klantid, FactuurKlantId ) INTO _factuurklantid FROM Klanten JOIN BestellingAll USING ( Klantid ) WHERE BestellingId = id;
	SELECT FactuurVoorkeur INTO _factuurvoorkeur FROM Managementboek_Klanten.Klanten WHERE Klantid = _factuurklantid;
	
	SET @factuurklantid = _factuurklantid;
	SET @factuurvoorkeur = _factuurvoorkeur;
	
	IF _factuurvoorkeur = "email"  THEN
		-- Nooit printen als voorkeur is email
		RETURN FALSE;
	END IF;
	
	SET RV = ( _geen_downloads > 0 );
	    
    RETURN RV;
  END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `moet_factuur_geprint_worden_test` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `moet_factuur_geprint_worden_test`( id INT) RETURNS int(11)
    READS SQL DATA
BEGIN
  DECLARE RV INT;
  DECLARE CR INT;
  DECLARE _geen_downloads INT;
  DECLARE _factuurklantid INT;
  DECLARE _factuurvoorkeur CHAR(10);
	
	/* Geen credit */
	SELECT SUM( Bindwijze_download = 0 ) INTO _geen_downloads FROM 
	Bestellingen JOIN ExactArtikelen ON ( Ean = `Code` ) 
	JOIN Managementboek_Boeken.`Bindwijze` USING ( Bindwijze )
	WHERE BestellingId = id
	AND Ean NOT IN ( 'BONG', 'VOUCHER', 'PORTO', 'P' )
	AND Geannuleerd = 0;  
	
	SELECT IF( FactuurKlantid = 0, Klantid, FactuurKlantId ) INTO _factuurklantid FROM Klanten JOIN BestellingAll USING ( Klantid ) WHERE BestellingId = id;
	SELECT FactuurVoorkeur INTO _factuurvoorkeur FROM Managementboek_Klanten.Klanten WHERE Klantid = _factuurklantid;
	
	SET @factuurklantid = _factuurklantid;
	SET @factuurvoorkeur = _factuurvoorkeur;
	
	IF _factuurvoorkeur = "email"  THEN
		-- Nooit printen als voorkeur is email
		RETURN FALSE;
	END IF;
	
	SET RV = ( _geen_downloads > 0 );
	    
    RETURN RV;
  END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `moet_factuur_of_pakbon_geprint_worden` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `moet_factuur_of_pakbon_geprint_worden`( id INT) RETURNS int(11)
    READS SQL DATA
BEGIN
  DECLARE RV INT;
  DECLARE CR INT;
	
	/* Geen credit */
	SELECT SUM( Bindwijze_download = 0 ) INTO RV FROM 
	Bestellingen JOIN ExactArtikelen ON ( Ean = `Code` ) 
	JOIN Managementboek_Boeken.`Bindwijze` USING ( Bindwijze )
	WHERE BestellingId = id
	AND Ean NOT IN ( 'BONG', 'VOUCHER', 'PORTO', 'P' )
	AND Geannuleerd = 0;  
	    
    RETURN RV;
  END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `moet_ingepakt_worden` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `moet_ingepakt_worden`( id INT) RETURNS int(11)
    READS SQL DATA
BEGIN
  DECLARE RV INT;
  DECLARE CR INT;
  DECLARE CB INT;
  
	
	-- SELECT O.leveren_via_cb INTO CB FROM OrderkopStatusPlat O WHERE O.BestellingId = id;
	SELECT IsCredit INTO CR FROM BestellingAll WHERE BestellingId = id;
	
	/* 	IF CB = 1 THEN
			SET RV = 0;	
		ELSE */
	
	IF CR = 0 THEN
		/* Geen credit */
		SELECT SUM( Bindwijze_inpakken ) > 0 INTO RV
		FROM Bestellingen
			JOIN ExactArtikelen ON ( Ean = `Code` ) 
			JOIN Managementboek_Boeken.Bindwijze USING ( Bindwijze )
		WHERE BestellingId = id
		AND Ean NOT IN ( 'BONG', 'VOUCHER', 'PORTO', 'P' )
		AND Geannuleerd = 0;  
	ELSE
		/* Wel een credit */
		SET RV = 0;
	END IF;
    
    RETURN RV;
  END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `nieuwe_orderregel` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `nieuwe_orderregel`( _orderid INT, _ean CHAR(13), _aantal INT ) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE _prijs DECIMAL(10,2);
	DECLARE _omschrijving VARCHAR(255);
	DECLARE _auteur VARCHAR(255);
	DECLARE _korting DECIMAL(5,2);
	DECLARE _klantid INT;
	DECLARE rv INT;
	DECLARE _ni INT DEFAULT 0;
	SET rv = 0;
	SET _korting = 0;
	
	IF _ean IS NULL THEN
		INSERT INTO Bestellingen SET BestellingId = _orderid, Ean = NULL, Aantal = _aantal, Prijs = 0, Omschrijving = NULL, Auteurnaam = NULL, KortingPercentage = 0;
		SELECT LAST_INSERT_ID() INTO rv;	
	ELSE
		SELECT Klantid INTO _klantid FROM BestellingAll WHERE BestellingId = _orderid;
		SELECT korting_voor_ean( _klantid, _ean, _aantal ) INTO _korting;
		
		SELECT IF( (IFNULL(Boeken_inramsj,0)=1 OR IFNULL(B.IsAanbieding,0)=1) AND B.AanbiedingsEuroPrijs > 0, B.AanbiedingsEuroPrijs*100,  COALESCE( B.Prijs, NULLIF(DP.Aanbiedingsprijs_Verkoop,0), DP.VastePrijs_Verkoop, E.Prijs ) * 100 )
			,E.Titel, E.Auteur INTO _prijs, _omschrijving, _auteur FROM ExactArtikelen E
			LEFT JOIN Manpo.Boeken B ON ( `Code` = Ean )
			LEFT JOIN Feeds.`DagPrijzenExtended` DP ON ( `Code` = DP.Ean )
		WHERE `Code` = CONVERT( _ean USING latin1 );
		
		if NOT _prijs IS NULL THEN
			INSERT INTO Bestellingen SET BestellingId = _orderid, Ean = _ean, Aantal = _aantal, Prijs = _prijs, Omschrijving = _omschrijving, Auteurnaam = _auteur, KortingPercentage = _korting;
			SELECT LAST_INSERT_ID() INTO rv;
		END IF;
	END IF;
	
	SELECT niet_inpakken INTO _ni FROM Managementboek_Klanten.`OrderkopStatusPlat` WHERE BestellingId = _orderid;
	IF _ni = 1 THEN
		UPDATE OrderregelStatusPlat SET niet_inpakken = 1 WHERE Id = rv;
	END IF;
	
	RETURN rv;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `omzet_op_datum_hele_dag` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `omzet_op_datum_hele_dag`( _dt DATETIME ) RETURNS decimal(10,2)
    READS SQL DATA
BEGIN
	RETURN omzet_tussen( DATE(_dt), DATE_ADD(DATE(_dt),INTERVAL 1 DAY) );
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `omzet_op_datum_tot_tijdstip` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `omzet_op_datum_tot_tijdstip`( _dt DATETIME ) RETURNS decimal(10,2)
    READS SQL DATA
BEGIN
	RETURN omzet_tussen( DATE(_dt), _dt );
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `omzet_tussen` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `omzet_tussen`( _dts DATETIME, _dte DATETIME ) RETURNS decimal(10,2)
    READS SQL DATA
BEGIN
	DECLARE _rv DECIMAL(10,2);
	
	SELECT 
	SUM(OmzetExBtwIncKorting) INTO _rv
	FROM Bestellingen_voor_omzet
	WHERE Kanaal IN ( 'Website', 'Mobile', 'ios App', 'android app' )
	AND DT BETWEEN _dts AND _dte;
	
	RETURN _rv;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `OrderregelTekst` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `OrderregelTekst`( _id INT ) RETURNS varchar(255) CHARSET utf8
    READS SQL DATA
BEGIN
	DECLARE _rv VARCHAR(255) DEFAULT '';
	DECLARE _kan_gedownload_worden INT;
	DECLARE _ingepakt INT;
	DECLARE _afgesloten INT;
	DECLARE _gefactureerd INT;
	DECLARE _DTIngepakt DATETIME;
	DECLARE _Boekstatus INT;
	DECLARE _geannuleerd INT;
	DECLARE _geparkeerd INT;
	DECLARE _genoeg INT;
	DECLARE _DTHerdruk DATE;
	DECLARE _DTVerschijning DATE;
	DECLARE _DTBelofte DATE;
	DECLARE _DTBevestigd DATE;
	DECLARE _BackorderReden INT;
	DECLARE _in_backorder INT;
	DECLARE _niet_inpakken INT;
	DECLARE _gecrediteerd INT;
	DECLARE _afgerond INT;
	DECLARE _leveren_via_cb INT;
	DECLARE _bestellingid INT;
	DECLARE _barcode CHAR(255);
	DECLARE _DTaflevering DATE;
	DECLARE _VerzameldIn INT;
	--
	
	SELECT BestellingId INTO _VerzameldIn FROM BestellingenVerzameld V JOIN Bestellingen N ON ( V.VerzameldIn = N.Id ) WHERE V.Id = _id;
	
	SELECT 
		kan_gedownload_worden, 
		niet_inpakken,
		afgesloten,
		gecrediteerd,
		ingepakt,
		gefactureerd,
		is_geparkeerd,
		DTingepakt,
		BK.Boekstatus,
		BN.Geannuleerd OR OSP.geannuleerd,
		VoorraadBijBevestiging >= ( Aantal + AantalBackorder ),
		Herdrukdatum, 
		Verschijningsdatum,
		DTBelofte,
		BackorderReden,
		in_backorder_gezet=1 AND uit_backorder_gehaald=0,
		BA.Afgerond,
		BA.DT,
		BA.BestellingId
		
	INTO 	_kan_gedownload_worden,
		_niet_inpakken,
		_afgesloten,
		_gecrediteerd,
		_ingepakt,
		_gefactureerd,
		_geparkeerd,
		_DTIngepakt,
		_Boekstatus,
		_geannuleerd,
		_genoeg,
		_DTHerdruk,
		_DTVerschijning,
		_DTBelofte,
		_BackorderReden,
		_in_backorder,
		_afgerond,
		_DTBevestigd,
		_bestellingid
	
	FROM Bestellingen BN JOIN BestellingenBelofte BB USING ( Id ) 
	JOIN OrderregelStatusPlat OSP USING ( Id )
	JOIN BestellingAll BA USING ( BestellingId )
	LEFT JOIN Zendingen.`Zendingen` Z ON ( BA.BestellingId = Z.`BestellingId` AND Z.`Database` = 'Managementboek_Klanten' )
	JOIN Managementboek_Boeken.Boeken BK USING ( Ean )
	WHERE BN.Id = _id
	GROUP BY BN.Id;
	
	-- CB
	SELECT COUNT(*) INTO _leveren_via_cb FROM OrderkopStatusPlat WHERE BestellingId = _bestellingid AND leveren_via_cb=1;	
	
	IF _geannuleerd = 1 OR _BackorderReden = 8 THEN
		SET _rv = "Geannuleerd";
	ELSEIF _afgerond = 0 THEN
		SET _rv = "Bestelling nog niet bevestigd";
		
	ELSEIF _gecrediteerd = 1 THEN
		SET _rv = "Gecrediteerd";
	
	ELSEIF _kan_gedownload_worden THEN
		SET _rv = "Kan gedownload worden";
		
	ELSEIF _ingepakt = 1 THEN
		IF _DTIngepakt IS NULL THEN
			SELECT MAX(DT) INTO _DTIngepakt FROM OrderregelStatus WHERE Id = _id AND StatusId = 15;
		END IF;
		
		SELECT Barcode, DTaflevering
			INTO _barcode, _DTaflevering FROM Zendingen.`Zendingen` WHERE `Database` = 'Managementboek_Klanten' AND BestellingId = _bestellingid LIMIT 1;
				
		SET _rv = CONCAT( IF( _barcode IS NULL, 'Brief', CONCAT( 'Pakket ', _barcode) ), ' verzonden op ', DATE_FORMAT( _DTIngepakt, '%e-%c-%Y' ));
		
		IF NOT _barcode IS NULL THEN		
			IF _DTaflevering > _DTIngepakt THEN
				SET _rv = CONCAT( _rv, ". Afgeleverd ", DATE_FORMAT( _DTaflevering, '%e-%c-%Y' ) );
			END IF;
		ELSE
			SET _rv = CONCAT( _rv, '. ' );
		END IF;
		
	ELSEIF _afgesloten > 0 THEN
		SET _rv = "Afgesloten";	
		
	ELSEIF ( _Boekstatus = 2 AND _genoeg = 0 ) OR ( _in_backorder = 1 AND _BackorderReden = 7 ) THEN
		-- Herdruk
		IF _DTHerdruk > '0000-00-00' THEN 
			SET _rv = CONCAT( "In herdruk, verwacht op ", DATE_FORMAT( _DTHerdruk, '%e-%c-%Y' ));
		ELSE
			SET _rv = "In herduk, verschijningsdatum onbekend";
		END IF;
	ELSEIF ( _Boekstatus = 5 AND _genoeg = 0 ) OR ( _in_backorder = 1 AND _BackorderReden = 6 ) THEN
		-- Nog niet verschenen
		IF _DTVerschijning > '0000-00-00' THEN 
			SET _rv = CONCAT( "NNV, verwacht op ", DATE_FORMAT( _DTVerschijning, '%e-%c-%Y' ));
		ELSE
			SET _rv = "Nog niet verschenen, datum onbekend";
		END IF;
				
	ELSEIF _geparkeerd = 1 THEN
		SET _rv = "In behandeling, neem contact met ons op voor meer informatie";
	
	ELSEIF _leveren_via_cb=1 THEN
		SET _rv = "Levering door extern magazijn";
		
	ELSEIF ( _in_backorder = 1 or _genoeg = 0 ) THEN
		SET _rv = "Besteld bij uitgever";		
		IF _DTBelofte > '0000-00-00' AND _DTBelofte > NOW() THEN
			SET _rv = CONCAT( _rv, ", verwachte leverdatum ", DATE_FORMAT( _DTBelofte, '%e-%c-%Y' ) );
		END IF;
	
	ELSEIF _genoeg = 0 AND _DTBelofte > '0000-00-00' THEN
		SET _rv = CONCAT( "Verwachte leverdatum ", DATE_FORMAT( _DTBelofte, '%e-%c-%Y' ));
		
	ELSEIF _genoeg = 0 AND _DTBelofte IS NULL THEN
		SET _rv = CONCAT( "Besteld bij uitgever" );
	
	ELSEIF _BackorderReden = 9 THEN
			SET _rv = "Besteld bij uitgever";	
		
	ELSEIF _gefactureerd = 0 THEN
		SET _rv = CONCAT( "Bestelling bevestigd op ", DATE_FORMAT( _DTBevestigd, '%e-%c-%Y' ));
	
	ELSEIF _gefactureerd = 0 THEN
		SET _rv = "Bestelling bevestigd";
	
	ELSEIF _niet_inpakken > 0 THEN
		SET _rv = "Wordt niet uitgeleverd";	
	
	ELSEIF _gefactureerd = 1 THEN
		SET _rv = "Klaar om ingepakt te worden";
		
	ELSE 
		SET _rv = "Status onbekend";
		
	END IF;
	
	IF NOT _VerzameldIn IS NULL THEN
		SET _rv = CONCAT( _rv, ". Verzameld in O", _VerzameldIn, "." );
	END IF;
	
	RETURN _rv;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `orderregel_geannuleerd` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `orderregel_geannuleerd`( myId INT ) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE RV INT;
	DECLARE ORG INT;
	DECLARE _aantal INT;
	DECLARE _gefactureerd INT;
	
	/**
	 * Haal de som van het aantal klantannuleringen op; plus alles indien de parent de status 'geannuleerd' heeft.
	 **/
	
	SELECT
		AantalBackorder + Aantal, 
		IF( B.geannuleerd OR P.geannuleerd, Aantal + AantalBackorder, 0 )
	INTO ORG, RV
	FROM Bestellingen B
		JOIN OrderregelStatusPlat P USING ( Id )
	WHERE Id = myId;
	
	if ORG != RV THEN
		SELECT IFNULL( SUM( Aantal ), 0 ) INTO _aantal
		FROM Bestellingen N
			JOIN OrderkopStatusPlat KP USING ( BestellingID )
		WHERE N.BackorderOrigineel = myId
			AND KP.klantannulering = 1;
		SET RV = RV + _aantal;
	END IF;
	
	-- Geef nooit een hoger aantal terug dan oorspronkelijk besteld; of het laagste geval in geval van een credit.
	IF ORG < 0 THEN
		SET RV = GREATEST( RV, ORG );
	ELSE
		SET RV = LEAST(RV,ORG);
	END IF;
	
	RETURN RV;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `orderregel_geleverd` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `orderregel_geleverd`( myId INT ) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE RV INT;
	DECLARE ORG INT;
	SELECT AantalBackorder INTO ORG FROM Bestellingen WHERE Id = myId;
	
	SELECT IFNULL( SUM( Aantal ), 0 ) INTO RV FROM Bestellingen WHERE BackorderOrigineel = myId AND Geannuleerd = 0 AND Aantal > 0;
	-- Geef nooit een hoger aantal terug dan het aantal in backorder
	RETURN LEAST(RV,ORG);
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `orderregel_geleverd_nieuw` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `orderregel_geleverd_nieuw`( myId INT ) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE RV INT;
	DECLARE ORG INT;
	DECLARE _aantal INT;
	DECLARE _gefactureerd INT;
	
	/**
	 * UPDATE 12-aug-'15 16:30
	 *
	 * Na overleg met KV, besloten dat ALLE childs van een parent worden afgetrokken - BEHALVE diegene die ingetrokken zijn.
	 *
	 **/
	
	SELECT AantalBackorder+Aantal, 
		IF( gefactureerd, Aantal, IF( achteraf_factureren AND pakbon_geprint, Aantal, 0 ) ) 
			INTO ORG, _aantal FROM Bestellingen JOIN OrderregelStatusPlat USING ( Id ) WHERE Id = myId;
	
	SELECT IFNULL( SUM( Aantal ), 0 ) INTO RV FROM Bestellingen N 
		WHERE BackorderOrigineel = myId AND N.Geannuleerd = 0 AND Aantal <> 0;
	
	SET RV = RV + _aantal;	
	
	-- Geef nooit een hoger aantal terug dan het aantal in backorder; of het laagste geval in geval van een credit.
	IF ORG < 0 THEN
		SET RV = GREATEST( RV, ORG );
	ELSE
		SET RV = LEAST(RV,ORG);
	END IF;
	
	RETURN RV;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `orderregel_geleverd_voorraadsysteem` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `orderregel_geleverd_voorraadsysteem`( myId INT ) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE RV INT;
	DECLARE ORG INT;
	DECLARE _aantal INT;
	DECLARE _gefactureerd INT;
	SELECT AantalBackorder+Aantal, IF( ingepakt OR niet_inpakken, Aantal, IF( achteraf_factureren AND pakbon_geprint, Aantal, 0 ) ) INTO ORG, _aantal FROM Bestellingen JOIN OrderregelStatusPlat USING ( Id ) WHERE Id = myId;
	
	SELECT IFNULL( SUM( Aantal ), 0 ) INTO RV FROM Bestellingen WHERE BackorderOrigineel = myId AND Geannuleerd = 0 AND Aantal > 0;
	
	SET RV = RV + _aantal;	
	
	-- Geef nooit een hoger aantal terug dan het aantal in backorder
	RETURN LEAST(RV,ORG);
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `orderregel_op_wachten` */;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `orderregel_op_wachten`( myId INT ) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE Aantal, AantalBackorder, Boekstatus, BeschikbareVoorraad, VoorraadBijBevestiging, VoorraadArtikel INT;
	DECLARE RV INT;
	
	SET RV = 0;
	
	SELECT IFNULL( C.Boekstatus, 98 ), Aantal, AantalBackorder, IFNULL( Bindwijze_voorraadartikel, 0 ) INTO Boekstatus,  Aantal, AantalBackorder, VoorraadArtikel
	   FROM Managementboek_Klanten.Bestellingen B 
	   LEFT JOIN Managementboek_Boeken.`Boeken` C USING ( Ean ) 
	   LEFT JOIN Managementboek_Boeken.`Bindwijze` W USING ( Bindwijze )
	   WHERE B.Id = myId;
	
	IF VoorraadArtikel = 1 AND AantalBackorder > 0 AND BoekStatus IN ( 99,1,2,5 ) THEN
		-- Niet wachten op nog niet verschenen boeken
		SET RV = 0;
	ELSEIF VoorraadArtikel = 0 THEN
		SET RV = 0;
	ELSEIF AantalBackorder <= 0 THEN
		-- Niet wachten op negatieve backorders (?wtf)
		SET RV = 0;	
	ELSE
		SET RV = 1;
	END IF;
	
	RETURN RV;
    END ;;
DELIMITER ;
ALTER DATABASE `Managementboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `orderregel_voorafgaand` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `orderregel_voorafgaand`( _id INT ) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE _Ean CHAR(13) CHARACTER SET latin1;
	DECLARE _DT DATETIME;
	DECLARE RV INT;
	
	SELECT Ean, A.DT INTO _Ean, _DT FROM Bestellingen JOIN BestellingAll A USING( BestellingId ) WHERE Id = _id;
	
	SELECT SUM( Aantal + AantalBackorder ) INTO RV FROM Bestellingen JOIN OrderregelStatusPlat USING ( Id ) JOIN BestellingAll A USING ( BestellingId )
	   WHERE vink_open = 1 
	   AND A.DT <= _DT 
	   AND Ean = _Ean
	   AND Id != _id;
	   
	RETURN IFNULL( RV, 0 );
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `OrderTekst` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `OrderTekst`( _id INT ) RETURNS varchar(255) CHARSET utf8
    READS SQL DATA
BEGIN
	DECLARE _rv VARCHAR(255);
	DECLARE _geannuleerd INT;
	DECLARE _gecrediteerd INT;
	DECLARE _kopgeannuleerd INT;
	DECLARE _backorders INT;
	DECLARE _geleverd INT;
	DECLARE _ingepakt INT;
	DECLARE _totaal INT;
	DECLARE _gefactureerd INT;
	DECLARE _geparkeerd INT;
	DECLARE _downloads INT;
	DECLARE _DTIngepakt DATE;
	DECLARE _bevestigd INT;
	DECLARE _regel INT;
	DECLARE _nietinpakken INT;
	DECLARE _afgesloten INT;
	DECLARE _totaal_nietgeannuleerd INT;
	DECLARE _levering_via_cb INT;
	DECLARE _DTlevering_via_cb DATE;
	
	SELECT COUNT(*) INTO _totaal FROM Bestellingen WHERE BestellingId = _id AND Ean NOT IN('bong','porto','ideal');
	SELECT COUNT(*) INTO _totaal_nietgeannuleerd FROM Bestellingen WHERE BestellingId = _id AND Geannuleerd=0;
	SELECT Geannuleerd, Afgerond INTO _kopgeannuleerd, _bevestigd FROM BestellingAll WHERE BestellingId = _id;
	SELECT COUNT(*) INTO _geannuleerd FROM Bestellingen A JOIN OrderregelStatusPlat B USING ( Id ) WHERE BestellingId = _id AND ( A.Geannuleerd = 1 OR B.geannuleerd = 1 );	
	SELECT COUNT(*) INTO _downloads FROM Bestellingen B JOIN OrderregelStatusPlat USING ( Id ) WHERE BestellingId = _id AND B.Geannuleerd = 0 AND kan_gedownload_worden = 1;
	SELECT COUNT(*) INTO _ingepakt  FROM Bestellingen B JOIN OrderregelStatusPlat USING ( Id ) WHERE BestellingId = _id AND B.Geannuleerd = 0 AND ingepakt = 1;
	SELECT COUNT(*) INTO _gefactureerd  FROM Bestellingen B JOIN OrderregelStatusPlat USING ( Id ) WHERE BestellingId = _id AND B.Geannuleerd = 0 AND gefactureerd = 1;
	SELECT COUNT(*) INTO _backorders FROM Bestellingen B JOIN OrderregelStatusPlat USING ( Id ) WHERE BestellingId = _id AND B.Geannuleerd = 0 AND ( ( in_backorder_gezet=1 AND uit_backorder_gehaald=0) OR AantalBackorder>0 ) AND _ingepakt = 0;
	SELECT MAX(DT)  INTO _DTIngepakt FROM BestellingStatus WHERE StatusId IN ( 15, 30 ) AND BestellingId = _id GROUP BY BestellingId;
	SELECT COUNT(*) INTO _gecrediteerd FROM BestellingStatus WHERE StatusId IN ( 29 ) AND BestellingId = _id GROUP BY BestellingId;
	SELECT COUNT(*) INTO _geparkeerd FROM BestellingStatus WHERE StatusId = 6 AND BestellingId = _id GROUP BY BestellingId;
	SELECT COUNT(*) INTO _nietinpakken FROM BestellingStatus WHERE StatusId = 32 AND BestellingId = _id GROUP BY BestellingId;
	SELECT COUNT(*) INTO _afgesloten FROM BestellingStatus WHERE StatusId = 33 AND BestellingId = _id GROUP BY BestellingId;
	SELECT COUNT(*) INTO _levering_via_cb FROM OrderkopStatusPlat WHERE BestellingId = _id AND leveren_via_cb=1;
		
	IF _bevestigd = 0 THEN
		SET _rv = "Order nog niet bevestigd";
	ELSEIF ( _totaal > 0 AND _geannuleerd = _totaal ) OR _kopgeannuleerd = 1 THEN
		SET _rv = "Geannuleerd";
	ELSEIF _gecrediteerd > 0 THEN
		SET _rv = "Gecrediteerd";		
	ELSEIF _ingepakt >= _totaal_nietgeannuleerd THEN
		SET _rv = CONCAT( "Volledig verzonden op ", IFNULL( DATE_FORMAT( _DTIngepakt, '%e-%c-%Y' ), 'onbekende datum' ) );
	ELSEIF _levering_via_cb = 1 THEN
		SELECT IF( CC.`VerzondenDoorCb`, CONCAT( 'Verzonden op ', DATE_FORMAT(DTVerzonden,'%d-%m-%Y') ), 
			CONCAT( 'Verwachte uitlevering op ', DATE_FORMAT( DATE_ADD( `DTPoging1`, INTERVAL 1 DAY ), '%d-%m-%Y') )
			) INTO _rv FROM CbOne.`Bestellingen` CC WHERE BestellingId = _id;		
	ELSEIF _geparkeerd = 1	THEN
		SET _rv = "In behandeling, neem contact met ons op voor meer informatie.";
	ELSEIF _downloads = _totaal THEN
		SET _rv = "Kan gedownload worden";
	ELSEIF _backorders = 0 AND _ingepakt = _totaal THEN
		SET _rv = CONCAT( "Volledig verzonden op ", DATE_FORMAT( _DTIngepakt, '%e-%c-%Y' ) );
	ELSEIF ( _backorders > 0 AND _ingepakt > 0 ) OR ( _ingepakt < _totaal AND _ingepakt > 0 ) THEN
		SET _rv = CONCAT( "Gedeeltelijk verzonden op ", DATE_FORMAT( _DTIngepakt, '%e-%c-%Y' ) );
	ELSEIF _afgesloten > 0 THEN
		SET _rv = "Afgesloten";
	ELSEIF _gefactureerd = 0 THEN
		SET _rv = "Bestelling bevestigd";		
	ELSEIF _nietinpakken > 0 THEN
		SET _rv = "Wordt niet uitgeleverd";
	ELSEIF _gefactureerd = _totaal THEN
		SET _rv = "Gereed om ingepakt te worden";		
	ELSEIF _totaal = 1 THEN
		SELECT Id INTO _regel FROM Bestellingen WHERE BestellingId = _id AND Geannuleerd = 0 AND Ean NOT IN('bong','porto','ideal');
		SET _rv = OrderregelTekst( _regel );
	ELSE
		SET _rv = "Status onbekend";
		
	END IF;
	RETURN _rv;
   END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `order_afwijkend_adres` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `order_afwijkend_adres`( _orderid INT ) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
BEGIN
    return IF( IFNULL( ( SELECT
			IF( FactuurBedrijfsnaam          != VerzendBedrijfsnaam, 1, 0 ) +
			IF( FactuurBedrijfsnaam2         != VerzendBedrijfsnaam2, 1, 0 ) +
			IF( FactuurAfdeling              != VerzendAfdeling, 1, 0 ) +
			IF( FactuurInitialen             != VerzendInitialen, 1, 0 ) +
			IF( FactuurAchternaam            != VerzendAchternaam, 1, 0 ) +
			IF( FactuurStraatnaam            != VerzendStraatnaam, 1, 0 ) +
			IF( FactuurHuisnummer            != VerzendHuisnummer, 1, 0 ) +
			IF( FactuurHuisnummerToevoeging  != VerzendHuisnummerToevoeging, 1, 0 ) +
			IF( FactuurPostcode              != VerzendPostcode, 1, 0 ) +
			IF( FactuurPlaatsnaam            != VerzendPlaatsnaam, 1, 0 ) +
			IF( FactuurLand                  != VerzendLand, 1, 0 )
		FROM Managementboek_Klanten.BestellingAdressen
		WHERE BestellingID = _orderid ), 0 ) > 0, 1, 0 );
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `order_volgnummer` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `order_volgnummer`( _orderid INT ) RETURNS char(100) CHARSET ascii
    READS SQL DATA
    DETERMINISTIC
BEGIN
	declare rv varchar(100) default '';
	declare p int default _orderid;
	DECLARE pp INT;
	DECLARE i INT;
	
	while p > 0 DO
		-- Sla het oudste ordernummer tijdelijk op
		SET pp = p;
		SET p = 0;
		SELECT OrigineelBestellingID INTO p
			FROM Managementboek_Klanten.BestellingAll
			WHERE BestellingID = pp;
		if IFNULL(p,0) = 0 THEN
			return CONCAT( pp, rv );
		END IF;
		-- Bereken het aantal jongere siblings
		SELECT COUNT(BestellingID) INTO i
			FROM Managementboek_Klanten.BestellingAll
			WHERE OrigineelBestellingID = p
				AND BestellingID <= pp;
		
		SET rv = CONCAT( '_', i, rv );
	END WHILE;
	return CONCAT( Managementboek_Klanten.order_volgnummer( p ), '_', i );
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `organisatie_naam` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `organisatie_naam`(iOrganisatieID INT) RETURNS varchar(300) CHARSET utf8
    READS SQL DATA
BEGIN
	DECLARE rv VARCHAR(300) DEFAULT '';
	DECLARE p INT DEFAULT iOrganisatieID;
	DECLARE pp INT;
	DECLARE i varchar(100);
	
	WHILE p > 0 DO
		-- Sla het oudste ordernummer tijdelijk op
		SET pp = p;
		SET p = 0;
		SELECT ParentOrganisatie, Label INTO p, i
			FROM Managementboek_Klanten.Organisaties
			WHERE OrganisatieID = pp;
		if pp = iOrganisatieID
		THEN
			if rv = '' THEN
				SET rv = i;
			else
				return rv;
			end if;
		ELSE
			SET rv = CONCAT( i, ' > ', rv );
		END IF;
	END WHILE;
	RETURN rv;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `organisatie_toplevel` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `organisatie_toplevel`( _oid INT ) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE rv INT DEFAULT NULL;
	DECLARE parent INT;
	
	IF NOT _oid IS NULL THEN
		SELECT OrganisatieId, ParentOrganisatie INTO rv, parent FROM Organisaties WHERE OrganisatieId = _oid;
		
		WHILE parent > 0 DO
			SET rv = parent;
			SELECT OrganisatieId, ParentOrganisatie INTO rv, parent FROM Organisaties WHERE OrganisatieId = rv;
		END WHILE;
	END IF;
	
	RETURN rv;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `organisatie_toplevel_naam` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `organisatie_toplevel_naam`( _oid INT ) RETURNS varchar(255) CHARSET utf8
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE rv INT DEFAULT NULL;
	DECLARE parent INT;
	DECLARE naam VARCHAR(255);
	
	IF NOT _oid IS NULL THEN
		SELECT OrganisatieId, ParentOrganisatie,Label INTO rv, parent,naam FROM Organisaties WHERE OrganisatieId = _oid;
		
		WHILE parent > 0 DO
			SET rv = parent;
			SELECT OrganisatieId, ParentOrganisatie,Label INTO rv, parent,naam FROM Organisaties WHERE OrganisatieId = rv;
		END WHILE;
	END IF;
	
	RETURN naam;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `origineel_bestellingid` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `origineel_bestellingid`( iBestelling INT ) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE orig INT;
	DECLARE pre INT;
	SELECT OrigineelBestellingid INTO orig FROM BestellingAll WHERE BestellingId = iBestelling;
	
	IF orig is not null and orig > 0 THEN
		-- We hebben een gevuld bestellingId
		WHILE orig IS NOT NULL AND orig > 0 DO
			SET pre = orig;
			SET orig = 0;
			SELECT OrigineelBestellingid INTO orig FROM BestellingAll WHERE BestellingId = orig;
		END WHILE;
	
		SET orig = pre;	
	ELSE
		SET orig = iBestelling;
	END IF;
	
	RETURN orig;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `permissie_klant_mag` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `permissie_klant_mag`(iKlantID INT(11), iPermissienaam VARCHAR(128) CHARACTER SET ASCII, iTargetKlant INT(11)) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
    COMMENT 'Last updated at 2016-03-31 15:50:58'
BEGIN
	DECLARE i INT;
	DECLARE ii INT;

	if iKlantID <= 0 OR iTargetKlant <= 0 THEN
		RETURN 0;
	END IF;

	
	IF iKlantID = iTargetKlant THEN
		RETURN 1;
	END IF;

	
	
	SELECT COUNT(O.OrganisatieID) INTO i
	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 )
		JOIN Managementboek_Klanten.OrganisatieKlanten KB ON ( KB.OrganisatieID = O.OrganisatieID AND KB.KlantID = iTargetKlant )
	WHERE PP.Permissienaam = iPermissienaam
		AND PP.Permissie IN ( 'all', 'self' );

	if i > 0 THEN
		RETURN 1;
	END IF;

	SET i = 0;
	SET ii = 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;

	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg
		JOIN Managementboek_Klanten.OrganisatieKlanten USING ( OrganisatieID )
	WHERE KlantID = iTargetKlant;

	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;

	if i > 0 THEN
		RETURN 1;
	END IF;

	RETURN 0;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `permissie_klant_mag_dev` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `permissie_klant_mag_dev`(iKlantID INT(11), iPermissienaam VARCHAR(128) CHARACTER SET ASCII, iTargetKlant INT(11)) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
    COMMENT 'Last updated at 2016-05-30 12:22:44'
BEGIN
	DECLARE i INT;
	DECLARE ii INT;

	if iKlantID <= 0 OR iTargetKlant <= 0 THEN
		RETURN 0;
	END IF;

	
	IF iKlantID = iTargetKlant THEN
		RETURN 1;
	END IF;

	
	
	SELECT COUNT(O.OrganisatieID) INTO i
	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 )
		JOIN Managementboek_Klanten.OrganisatieKlanten KB ON ( KB.OrganisatieID = O.OrganisatieID AND KB.KlantID = iTargetKlant )
	WHERE PP.Permissienaam = iPermissienaam
		AND PP.Permissie IN ( 'all', 'self' );

	if i > 0 THEN
		RETURN 1;
	END IF;

	SET i = 0;
	SET ii = 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;

	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg
		JOIN Managementboek_Klanten.OrganisatieKlanten USING ( OrganisatieID )
	WHERE KlantID = iTargetKlant;

	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;

	if i > 0 THEN
		RETURN 1;
	END IF;

	RETURN 0;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `permissie_klant_mag_k_dennis` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `permissie_klant_mag_k_dennis`(iKlantID INT(11), iPermissienaam VARCHAR(128) CHARACTER SET ASCII, iTargetKlant INT(11)) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
    COMMENT 'Last updated at 2016-02-15 15:01:35'
BEGIN
	DECLARE i INT;
	DECLARE ii INT;
	
	if iKlantID <= 0 OR iTargetKlant <= 0 THEN
		RETURN 0;
	END IF;

	
	IF iKlantID = iTargetKlant THEN
		RETURN 1;
	END IF;

	
	
	SELECT COUNT(O.OrganisatieID) INTO i
	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 )
		JOIN Managementboek_Klanten.OrganisatieKlanten KB ON ( KB.OrganisatieID = O.OrganisatieID AND KB.KlantID = iTargetKlant )
	WHERE PP.Permissienaam = iPermissienaam
		AND PP.Permissie IN ( 'all', 'self' );

	if i > 0 THEN
		RETURN 1;
	END IF;

	SET i = 0;
	SET ii = 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;
	
	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg
		JOIN Managementboek_Klanten.OrganisatieKlanten USING ( OrganisatieID )
	WHERE KlantID = iTargetKlant;
	
	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;
	
	if i > 0 THEN
		RETURN 1;
	END IF;
	
	RETURN 0;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `permissie_klant_mag_k_sander` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `permissie_klant_mag_k_sander`(iKlantID INT(11), iPermissienaam VARCHAR(128) CHARACTER SET ASCII, iTargetKlant INT(11)) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
    COMMENT 'Last updated at 2016-05-30 13:59:40'
BEGIN
	DECLARE i INT;
	DECLARE ii INT;

	if iKlantID <= 0 OR iTargetKlant <= 0 THEN
		RETURN 0;
	END IF;

	
	IF iKlantID = iTargetKlant THEN
		RETURN 1;
	END IF;

	
	
	SELECT COUNT(O.OrganisatieID) INTO i
	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 )
		JOIN Managementboek_Klanten.OrganisatieKlanten KB ON ( KB.OrganisatieID = O.OrganisatieID AND KB.KlantID = iTargetKlant )
	WHERE PP.Permissienaam = iPermissienaam
		AND PP.Permissie IN ( 'all', 'self' );

	if i > 0 THEN
		RETURN 1;
	END IF;

	SET i = 0;
	SET ii = 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;

	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg
		JOIN Managementboek_Klanten.OrganisatieKlanten USING ( OrganisatieID )
	WHERE KlantID = iTargetKlant;

	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;

	if i > 0 THEN
		RETURN 1;
	END IF;

	RETURN 0;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `permissie_klant_mag_k_thijs` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `permissie_klant_mag_k_thijs`(iKlantID INT(11), iPermissienaam VARCHAR(128) CHARACTER SET ASCII, iTargetKlant INT(11)) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
    COMMENT 'Last updated at 2016-05-30 12:20:40'
BEGIN
	DECLARE i INT;
	DECLARE ii INT;

	if iKlantID <= 0 OR iTargetKlant <= 0 THEN
		RETURN 0;
	END IF;

	
	IF iKlantID = iTargetKlant THEN
		RETURN 1;
	END IF;

	
	
	SELECT COUNT(O.OrganisatieID) INTO i
	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 )
		JOIN Managementboek_Klanten.OrganisatieKlanten KB ON ( KB.OrganisatieID = O.OrganisatieID AND KB.KlantID = iTargetKlant )
	WHERE PP.Permissienaam = iPermissienaam
		AND PP.Permissie IN ( 'all', 'self' );

	if i > 0 THEN
		RETURN 1;
	END IF;

	SET i = 0;
	SET ii = 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;

	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg
		JOIN Managementboek_Klanten.OrganisatieKlanten USING ( OrganisatieID )
	WHERE KlantID = iTargetKlant;

	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;

	if i > 0 THEN
		RETURN 1;
	END IF;

	RETURN 0;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `permissie_klant_mag_organisatie` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `permissie_klant_mag_organisatie`(iKlantID INT(11), iPermissienaam VARCHAR(128) CHARACTER SET ASCII, iOrganisatieID INT(11)) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
    COMMENT 'Last updated at 2016-03-31 15:50:58'
BEGIN
 	DECLARE i INT;
	DECLARE ii INT;

	IF iKlantID <= 0 OR iOrganisatieID <= 0 THEN
		RETURN 0;
	END IF;

	
	SELECT COUNT(O.OrganisatieID) INTO i
	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 O.OrganisatieID = iOrganisatieID
		AND PP.Permissienaam = iPermissienaam
		AND PP.Permissie IN ( 'all', 'self' );

	IF i > 0 THEN
		RETURN 1;
	END IF;

	SET i = 0;
	SET ii = 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;

	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg
	WHERE OrganisatieID = iOrganisatieID;

	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;

	IF i > 0 THEN
		RETURN 1;
	END IF;

	RETURN 0;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `permissie_klant_mag_organisatie_dev` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `permissie_klant_mag_organisatie_dev`(iKlantID INT(11), iPermissienaam VARCHAR(128) CHARACTER SET ASCII, iOrganisatieID INT(11)) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
    COMMENT 'Last updated at 2016-05-30 12:22:44'
BEGIN
 	DECLARE i INT;
	DECLARE ii INT;

	IF iKlantID <= 0 OR iOrganisatieID <= 0 THEN
		RETURN 0;
	END IF;

	
	SELECT COUNT(O.OrganisatieID) INTO i
	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 O.OrganisatieID = iOrganisatieID
		AND PP.Permissienaam = iPermissienaam
		AND PP.Permissie IN ( 'all', 'self' );

	IF i > 0 THEN
		RETURN 1;
	END IF;

	SET i = 0;
	SET ii = 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;

	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg
	WHERE OrganisatieID = iOrganisatieID;

	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;

	IF i > 0 THEN
		RETURN 1;
	END IF;

	RETURN 0;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `permissie_klant_mag_organisatie_k_dennis` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `permissie_klant_mag_organisatie_k_dennis`(iKlantID INT(11), iPermissienaam VARCHAR(128) CHARACTER SET ASCII, iOrganisatieID INT(11)) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
    COMMENT 'Last updated at 2016-02-15 15:01:35'
BEGIN
 	DECLARE i INT;
	DECLARE ii INT;
	
	IF iKlantID <= 0 OR iOrganisatieID <= 0 THEN
		RETURN 0;
	END IF;
	
	
	SELECT COUNT(O.OrganisatieID) INTO i
	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 O.OrganisatieID = iOrganisatieID
		AND PP.Permissienaam = iPermissienaam
		AND PP.Permissie IN ( 'all', 'self' );
	
	IF i > 0 THEN
		RETURN 1;
	END IF;
	
	SET i = 0;
	SET ii = 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;
	
	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg
	WHERE OrganisatieID = iOrganisatieID;
	
	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;
	
	IF i > 0 THEN
		RETURN 1;
	END IF;
	
	RETURN 0;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `permissie_klant_mag_organisatie_k_sander` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `permissie_klant_mag_organisatie_k_sander`(iKlantID INT(11), iPermissienaam VARCHAR(128) CHARACTER SET ASCII, iOrganisatieID INT(11)) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
    COMMENT 'Last updated at 2016-05-30 13:59:40'
BEGIN
 	DECLARE i INT;
	DECLARE ii INT;

	IF iKlantID <= 0 OR iOrganisatieID <= 0 THEN
		RETURN 0;
	END IF;

	
	SELECT COUNT(O.OrganisatieID) INTO i
	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 O.OrganisatieID = iOrganisatieID
		AND PP.Permissienaam = iPermissienaam
		AND PP.Permissie IN ( 'all', 'self' );

	IF i > 0 THEN
		RETURN 1;
	END IF;

	SET i = 0;
	SET ii = 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;

	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg
	WHERE OrganisatieID = iOrganisatieID;

	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;

	IF i > 0 THEN
		RETURN 1;
	END IF;

	RETURN 0;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `permissie_klant_mag_organisatie_k_thijs` */;
DELIMITER ;;
CREATE DEFINER=`percona`@`localhost` FUNCTION `permissie_klant_mag_organisatie_k_thijs`(iKlantID INT(11), iPermissienaam VARCHAR(128) CHARACTER SET ASCII, iOrganisatieID INT(11)) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
    COMMENT 'Last updated at 2016-05-30 12:20:40'
BEGIN
 	DECLARE i INT;
	DECLARE ii INT;

	IF iKlantID <= 0 OR iOrganisatieID <= 0 THEN
		RETURN 0;
	END IF;

	
	SELECT COUNT(O.OrganisatieID) INTO i
	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 O.OrganisatieID = iOrganisatieID
		AND PP.Permissienaam = iPermissienaam
		AND PP.Permissie IN ( 'all', 'self' );

	IF i > 0 THEN
		RETURN 1;
	END IF;

	SET i = 0;
	SET ii = 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;

	SELECT COUNT(1) INTO i
	FROM tmp.grandchildorg
	WHERE OrganisatieID = iOrganisatieID;

	DROP TEMPORARY TABLE tmp.grandchildorg;
	DROP TEMPORARY TABLE tmp.grandchildorg_b;

	IF i > 0 THEN
		RETURN 1;
	END IF;

	RETURN 0;
END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `vbmih_value` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `vbmih_value`( _key CHAR(20) ) RETURNS varchar(255) CHARSET utf8
    READS SQL DATA
BEGIN
	DECLARE RV VARCHAR(255);
	SELECT Val INTO RV FROM VBMIHConfig WHERE `Key` = _key;
	RETURN RV;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `verkochtsinds` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `verkochtsinds`( iEan char(13) CHARACTER SET latin1, iDT datetime ) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE rv INT;
	SELECT SUM( Aantal ) INTO rv FROM Bestellingen_zonder_backorders JOIN Bestelling USING ( BestellingId ) WHERE DT > iDT AND Ean = iEan;
	RETURN IFNULL( rv, 0 );
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `verkochtsinds_kk` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `verkochtsinds_kk`( iEan char(13) CHARACTER SET latin1, iDT datetime ) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE rv INT;
	SELECT SUM( Aantal ) INTO rv FROM Bestellingen_zonder_backorders JOIN Bestelling USING ( BestellingId ) JOIN BestellingenExtra USING ( Id ) WHERE DT > iDT AND Tag = 'kk' AND Ean = iEan;
	RETURN IFNULL( rv, 0 );
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `verzamelfactuurnummer` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `verzamelfactuurnummer`( _id INT ) RETURNS varchar(20) CHARSET utf8
    READS SQL DATA
BEGIN
	DECLARE rv VARCHAR(20) DEFAULT NULL;
    
	    SELECT IFNULL( CONCAT( 'V', VERZ.FactuurId ), NULL ) INTO rv FROM Managementboek_Klanten.BestellingAll KOP JOIN Managementboek_Klanten.`OrderkopStatusPlat` KOPS USING ( BestellingId ) 
		JOIN Managementboek_Klanten.`BestellingAll` CHILD ON ( CHILD.`OrigineelBestellingId` = KOP.`Bestellingid` ) 
		JOIN Managementboek_Klanten.`OrderkopStatusPlat` CHILDS ON ( CHILD.`Bestellingid` = CHILDS.`BestellingId` )
		JOIN Managementboek_Klanten.`Bestellingen` N ON ( CHILD.`Bestellingid` = N.`Bestellingid` )
		JOIN Managementboek_Klanten.`BestellingenVerzameld` BZ ON ( BZ.`Id` = N.Id )
		JOIN Managementboek_Klanten.Bestellingen NV ON ( BZ.`VerzameldIn` = NV.Id )
		JOIN Managementboek_Klanten.BestellingAll VERZ ON ( NV.`Bestellingid` = VERZ.`Bestellingid` )
		JOIN Managementboek_Klanten.`OrderkopStatusPlat` VK ON ( VK.`BestellingId` = NV.`Bestellingid` )
		WHERE KOP.BestellingId = _id
		AND VK.`verzamelfactuur`=1 AND VK.`gefactureerd`=1 ORDER BY VERZ.FactuurId limit 1;
	RETURN rv;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `voorraad` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `voorraad`(EanInput VARCHAR(13) CHARACTER SET latin1) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE huidigeVoorraad INT(11) DEFAULT 0;
	DECLARE aantalVoorraadRegels INT(11) DEFAULT 0;
    
	/* ophalen van de voorraad in laatste geregistreerde voorraadmutatie */	
	SELECT COUNT(*) INTO aantalVoorraadRegels FROM Voorraadmutaties WHERE `Ean`=EanInput;
	IF aantalVoorraadRegels > 0 THEN	 
		SELECT Voorraad INTO huidigeVoorraad FROM Voorraadmutaties WHERE `Ean`=EanInput ORDER BY DT DESC LIMIT 0,1;
	ELSE
		SET huidigeVoorraad = 0;
	END IF;
	
	RETURN huidigeVoorraad;	
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `add_bestellingadressen` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` PROCEDURE `add_bestellingadressen`( _BestellingID INT )
    MODIFIES SQL DATA
BEGIN
	INSERT INTO Managementboek_Klanten.BestellingAdressen ( BestellingId, Klantid, AfwijkendFactuurAdres, FactuurKlantId, FactuurBedrijfsnaam, FactuurBedrijfsnaam2, FactuurAfdeling, FactuurGeslacht, FactuurInitialen, FactuurAchternaam, FactuurStraatnaam, FactuurHuisnummer, FactuurHuisnummerToevoeging, FactuurPostcode, FactuurPlaatsnaam, AfwijkendVerzendAdres, VerzendKlantId, VerzendBedrijfsnaam, VerzendBedrijfsnaam2, VerzendAfdeling, VerzendGeslacht, VerzendInitialen, VerzendAchternaam, VerzendStraatnaam, VerzendHuisnummer, VerzendHuisnummerToevoeging, VerzendPostcode, VerzendPlaatsnaam )
		SELECT B.BestellingId,
			B.Klantid,
			0,
			B.Klantid,
			A1.Bedrijfsnaam,
			A1.Bedrijfsnaam2,
			A1.Afdeling,
			A1.Geslacht,
			A1.Voornaam,
			A1.Achternaam,
			A1.Straatnaam,
			A1.Huisnummer,
			A1.Huisnummertoevoeging,
			A1.Postcode,
			A1.Plaats,
			0,
			B.Klantid,
			A2.Bedrijfsnaam,
			A2.Bedrijfsnaam2,
			A2.Afdeling,
			A2.Geslacht,
			A2.Voornaam,
			A2.Achternaam,
			A2.Straatnaam,
			A2.Huisnummer,
			A2.Huisnummertoevoeging,
			A2.Postcode,
			A2.Plaats
		FROM Managementboek_Klanten.BestellingAll B JOIN Managementboek_Klanten.Klanten K ON ( B.Klantid = K.Klantid )
			JOIN Managementboek_Klanten.Adres A1 ON ( K.Klantid = A1.Klantid )
			LEFT JOIN Managementboek_Klanten.Adres A2 ON ( IF( K.FactuurKlantid = 0, K.Klantid, K.FactuurKlantid ) = A2.Klantid )
		WHERE B.BestellingId = _BestellingID
			AND B.Afgerond = 0 AND B.Geannuleerd = 0
		ON DUPLICATE KEY UPDATE Klantid = VALUES(Klantid),
			AfwijkendFactuurAdres = VALUES(AfwijkendFactuurAdres),
			FactuurKlantId = VALUES(FactuurKlantId),
			FactuurBedrijfsnaam = VALUES(FactuurBedrijfsnaam),
			FactuurBedrijfsnaam2 = VALUES(FactuurBedrijfsnaam2),
			FactuurAfdeling = VALUES(FactuurAfdeling),
			FactuurGeslacht = VALUES(FactuurGeslacht),
			FactuurInitialen = VALUES(FactuurInitialen),
			FactuurAchternaam = VALUES(FactuurAchternaam),
			FactuurStraatnaam = VALUES(FactuurStraatnaam),
			FactuurHuisnummer = VALUES(FactuurHuisnummer),
			FactuurHuisnummerToevoeging = VALUES(FactuurHuisnummerToevoeging),
			FactuurPostcode = VALUES(FactuurPostcode),
			FactuurPlaatsnaam = VALUES(FactuurPlaatsnaam),
			AfwijkendVerzendAdres = VALUES(AfwijkendVerzendAdres),
			VerzendKlantId = VALUES(VerzendKlantId),
			VerzendBedrijfsnaam = VALUES(VerzendBedrijfsnaam),
			VerzendBedrijfsnaam2 = VALUES(VerzendBedrijfsnaam2),
			VerzendAfdeling = VALUES(VerzendAfdeling),
			VerzendGeslacht = VALUES(VerzendGeslacht),
			VerzendInitialen = VALUES(VerzendInitialen),
			VerzendAchternaam = VALUES(VerzendAchternaam),
			VerzendStraatnaam = VALUES(VerzendStraatnaam),
			VerzendHuisnummer = VALUES(VerzendHuisnummer),
			VerzendHuisnummerToevoeging = VALUES(VerzendHuisnummerToevoeging),
			VerzendPostcode = VALUES(VerzendPostcode),
			VerzendPlaatsnaam = VALUES(VerzendPlaatsnaam);
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `backorderregels` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` PROCEDURE `backorderregels`()
    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;
	
