-- Table structure for table `Tellingen`
--

CREATE TABLE `Tellingen` (
  `Ean` char(13) NOT NULL,
  `Tellingtypeid` smallint(6) NOT NULL DEFAULT '0',
  `Aantal` smallint(6) NOT NULL DEFAULT '0',
  PRIMARY KEY (`Ean`,`Tellingtypeid`),
  KEY `i2` (`Tellingtypeid`),
  KEY `i4` (`Aantal`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `Tellingen_Plat`
--

CREATE TABLE `Tellingen_Plat` (
  `Ean` char(13) NOT NULL,
  `Auteur1` int(11) NOT NULL DEFAULT '0',
  `Auteur2` int(11) NOT NULL DEFAULT '0',
  `Auteur3` int(11) NOT NULL DEFAULT '0',
  `Titel` char(255) NOT NULL,
  `Aanmaakdatum` date NOT NULL,
  `1d` int(10) NOT NULL DEFAULT '0',
  `5d` int(10) NOT NULL DEFAULT '0',
  `7d` int(10) NOT NULL DEFAULT '0',
  `10d` int(10) NOT NULL DEFAULT '0',
  `14d` int(10) NOT NULL DEFAULT '0',
  `30d` int(10) NOT NULL DEFAULT '0',
  `60d` int(10) NOT NULL DEFAULT '0',
  `90d` int(10) NOT NULL DEFAULT '0',
  `week` int(10) NOT NULL DEFAULT '0',
  `lastweek` int(10) NOT NULL DEFAULT '0',
  `month` int(10) NOT NULL DEFAULT '0',
  `lastmonth` int(10) NOT NULL DEFAULT '0',
  `year` int(10) NOT NULL DEFAULT '0',
  `lastyear` int(10) NOT NULL DEFAULT '0',
  `beforelastweek` int(10) NOT NULL DEFAULT '0',
  `ever` int(10) NOT NULL DEFAULT '0',
  PRIMARY KEY (`Ean`),
  KEY `Auteur1` (`Auteur1`),
  KEY `Auteur2` (`Auteur2`),
  KEY `Auteur3` (`Auteur3`),
  KEY `Titel` (`Titel`),
  KEY `Aanmaakdatum` (`Aanmaakdatum`),
  KEY `1d` (`1d`),
  KEY `5d` (`5d`),
  KEY `7d` (`7d`),
  KEY `10d` (`10d`),
  KEY `14d` (`14d`),
  KEY `30d` (`30d`),
  KEY `60d` (`60d`),
  KEY `90d` (`90d`),
  KEY `week` (`week`),
  KEY `lastweek` (`lastweek`),
  KEY `month` (`month`),
  KEY `lastmonth` (`lastmonth`),
  KEY `year` (`year`),
  KEY `lastyear` (`lastyear`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;

--
-- Table structure for table `Tellingen_Plat_copy`
--

CREATE TABLE `Tellingen_Plat_copy` (
  `Ean` varchar(13) NOT NULL,
  `Auteur1` int(11) NOT NULL DEFAULT '0',
  `Auteur2` int(11) NOT NULL DEFAULT '0',
  `Auteur3` int(11) NOT NULL DEFAULT '0',
  `Titel` varchar(255) NOT NULL,
  `Aanmaakdatum` date NOT NULL,
  `1d` int(10) unsigned NOT NULL DEFAULT '0',
  `5d` int(10) unsigned NOT NULL DEFAULT '0',
  `7d` int(10) unsigned NOT NULL DEFAULT '0',
  `10d` int(10) unsigned NOT NULL DEFAULT '0',
  `14d` int(10) unsigned NOT NULL DEFAULT '0',
  `30d` int(10) unsigned NOT NULL DEFAULT '0',
  `60d` int(10) unsigned NOT NULL DEFAULT '0',
  `90d` int(10) unsigned NOT NULL DEFAULT '0',
  `week` int(10) unsigned NOT NULL DEFAULT '0',
  `lastweek` int(10) unsigned NOT NULL DEFAULT '0',
  `month` int(10) unsigned NOT NULL DEFAULT '0',
  `lastmonth` int(10) unsigned NOT NULL DEFAULT '0',
  `year` int(10) unsigned NOT NULL DEFAULT '0',
  `lastyear` int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`Ean`),
  KEY `Auteur1` (`Auteur1`),
  KEY `Auteur2` (`Auteur2`),
  KEY `Auteur3` (`Auteur3`),
  KEY `Titel` (`Titel`),
  KEY `Aanmaakdatum` (`Aanmaakdatum`),
  KEY `1d` (`1d`),
  KEY `5d` (`5d`),
  KEY `7d` (`7d`),
  KEY `10d` (`10d`),
  KEY `14d` (`14d`),
  KEY `30d` (`30d`),
  KEY `60d` (`60d`),
  KEY `90d` (`90d`),
  KEY `week` (`week`),
  KEY `lastweek` (`lastweek`),
  KEY `month` (`month`),
  KEY `lastmonth` (`lastmonth`),
  KEY `year` (`year`),
  KEY `lastyear` (`lastyear`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `Tellingen_Top`
--

CREATE TABLE `Tellingen_Top` (
  `Ean` char(13) NOT NULL,
  `1d` int(11) NOT NULL,
  `5d` int(11) NOT NULL,
  `7d` int(11) NOT NULL,
  `30d` int(11) NOT NULL,
  `90d` int(11) NOT NULL,
  PRIMARY KEY (`Ean`),
  KEY `NewIndex1` (`30d`),
  KEY `NewIndex2` (`90d`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `Tellingtypen`
--

CREATE TABLE `Tellingtypen` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Omschrijving` varchar(150) DEFAULT NULL,
  `Startdt` varchar(255) DEFAULT NULL,
  `Einddt` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`Id`),
  KEY `i1` (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=latin1;

--
-- Table structure for table `TestKlanten`
--

CREATE TABLE `TestKlanten` (
  `Klantid` int(11) NOT NULL,
  PRIMARY KEY (`Klantid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `TmpBesteld`
--

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;

--
-- 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`),
  CONSTRAINT `FK_Tracktrace` FOREIGN KEY (`FactuurID`) REFERENCES `Facturen` (`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 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(10) 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;

--
-- 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;

--
-- 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;

--
-- 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 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;

--
-- 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 DEFAULT CHARSET=latin1;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`pieter`@`%`*/ /*!50003 TRIGGER `before_insert_voorraadmutaties` BEFORE INSERT ON `Voorraadmutaties` 
    FOR EACH ROW BEGIN
	
    END */;;
DELIMITER ;

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

CREATE TABLE `Voorraadreserveringen` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Ean` varchar(13) DEFAULT NULL,
  `Mutatie` int(11) DEFAULT NULL,
  `DT` datetime DEFAULT NULL,
  `Orderregelid` int(11) DEFAULT NULL,
  `Gebruiker` char(5) DEFAULT NULL,
  `Voorraad` int(11) DEFAULT NULL,
  `Debug` varchar(255) DEFAULT NULL,
  `Klantid` int(11) DEFAULT NULL,
  `Type` enum('besteld','geannuleerd','gecorrigeerd','ingepakt','uit backorder','toegevoegd','gecrediteerd','verwijderd') 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 DEFAULT CHARSET=latin1;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`pieter`@`%`*/ /*!50003 TRIGGER `before_insert_voorraadreserveringen` BEFORE INSERT ON `Voorraadreserveringen` 
    FOR EACH ROW BEGIN
	
    END */;;
DELIMITER ;

--
-- 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,
  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,
  PRIMARY KEY (`VoucherType`),
  KEY `CustomURL` (`CustomURL`)
) ENGINE=InnoDB 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 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 `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 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 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 `Query` (`Query`),
  KEY `Results` (`Results`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- 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;

--
-- 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 DEFAULT CHARSET=latin1;

--
-- Table structure for table `_ZoekwoordLog`
--

CREATE TABLE `_ZoekwoordLog` (
  `DT` datetime DEFAULT NULL,
  `Query` varchar(255) DEFAULT NULL,
  `URI` varchar(255) DEFAULT NULL,
  `Ean` char(13) DEFAULT NULL,
  `IP` varchar(16) DEFAULT NULL,
  KEY `DT2` (`DT`),
  KEY `Ean` (`Ean`)
) ENGINE=InnoDB 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;

--
-- 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;

--
-- 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;

--
-- 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 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(35) 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 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,
  `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` smallint(5) unsigned NOT NULL,
  `product2` smallint(5) unsigned NOT NULL,
  `overlap` smallint(5) unsigned NOT NULL,
  PRIMARY KEY (`product1`,`product2`),
  KEY `product2` (`product2`),
  KEY `overlap` (`overlap`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- 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 'Computerboek_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 Computerboek_Boeken.Boekanderebindwijzen A JOIN Computerboek_Boeken.Boekvervangtean V ON ( V.Ean = A.Eangekoppeld ) WHERE A.Ean = iEAN
			UNION
			SELECT V.Vervangtean AS Ean FROM Computerboek_Boeken.Boekvervangtean V WHERE V.Ean = iEAN
		) A USING ( Ean );
	RETURN IFNULL(RV,0);
	END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `alle_backorders_uitvoerbaar` */;
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 ;
/*!50003 DROP FUNCTION IF EXISTS `alle_backorders_uitvoerbaar_backorderregels` */;
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 ;
/*!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
			ORDER BY BSS.Volgorde DESC LIMIT 1;	
		END IF;
	END IF;
	
	RETURN RV;
	END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `BestellingStatusId` */;
ALTER DATABASE `Computerboek_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 `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `BestellingStatusOpen` */;
ALTER DATABASE `Computerboek_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 `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `bestelling_aantal` */;
ALTER DATABASE `Computerboek_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 `Computerboek_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 );
	
	RETURN rv;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `bestelling_hulp` */;
ALTER DATABASE `Computerboek_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 `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `bestelling_ingepakt` */;
ALTER DATABASE `Computerboek_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 `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `bestelling_opnieuw` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` 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 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  FROM BestellingAll WHERE BestellingId = OrigBestelling;
 
 SELECT LAST_INSERT_ID() INTO NewBestellingid;
 
 INSERT INTO Bestellingen SELECT NULL /*Id*/,`Auteurnaam` /*Auteurnaam*/,`Aantal` /*Aantal*/,`Prijs` /*Prijs*/,NewBestellingid /*Bestellingid*/,`Ean` /*Ean*/,`Omschrijving` /*Omschrijving*/,0 /*Geexporteerd*/,`KortingPercentage` /*KortingPercentage*/,`IsPromo` /*IsPromo*/,`KortingReden` /*KortingReden*/,`KortingMP` /*KortingMP*/,`KostenMP` /*KostenMP*/,NOW() /*DTOrderregel*/,`VastePrijs` /*VastePrijs*/,`ActiePrijs` /*ActiePrijs*/,`BTWTarief` /*BTWTarief*/,`BTWCode` /*BTWCode*/,`AantalBackorder` /*AantalBackorder*/,`BackorderOrigineel` /*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 */, '', 0 /* BoekStatus */ FROM Bestellingen WHERE BestellingId = OrigBestelling AND Geannuleerd = 0;
 INSERT INTO BestellingAdressen 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; 
 
 /**
  * Annuleer de backorderregels op de oorspronkelijke order
  * want die zijn in de opnieuw, niet aangemaakt
  */
  UPDATE Bestellingen SET Geannuleerd = 1 WHERE Bestellingid=OrigBestelling AND AantalBackorder > 0;
 
 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 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` */;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` FUNCTION `bestelling_totaal_met_porto_bevestigd`( bid INT ) RETURNS int(11)
    DETERMINISTIC
BEGIN                                                                                                               
        DECLARE rv INT;                             
	SELECT SUM( BedragIncBtwIncKorting ) * 100 INTO rv FROM BestellingenLog WHERE Bestellingid = bid AND Bevestigd=1;
        RETURN rv;        
END ;;
DELIMITER ;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `bestelling_totaal_met_porto_origineel` */;
ALTER DATABASE `Computerboek_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 `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `bestelling_totaal_op_factuur` */;
ALTER DATABASE `Computerboek_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 `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `bestelling_vbmih_backorders` */;
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 ;
/*!50003 DROP FUNCTION IF EXISTS `bestelling_verschillendetitels` */;
ALTER DATABASE `Computerboek_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 `Computerboek_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
    DETERMINISTIC
BEGIN
	DECLARE rv INT;
	
	SELECT COUNT(*) INTO rv
	FROM Boekranking_Datum
	WHERE Ean = IEan
		AND 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 cdt,rdt DATE;
	DECLARE crank, rrank,lp INT DEFAULT 0;
	DECLARE done INT DEFAULT 0;
	DECLARE cur CURSOR FOR SELECT DT, Ranking FROM Computerboek_Klanten.Boekranking_Datum WHERE Ean = IEAN 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 ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `create_credit` */;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` 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 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( Factuurid, '' ) ) /*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*/,OrigBestelling /*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*/
		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 SELECT NULL /*Id*/,`Auteurnaam` /*Auteurnaam*/,-1 * `Aantal` /*Aantal*/,`Prijs` /*Prijs*/,NewBestelling /*Bestellingid*/,`Ean` /*Ean*/,`Omschrijving` /*Omschrijving*/,0 /*Geexporteerd*/,`KortingPercentage` /*KortingPercentage*/,`IsPromo` /*IsPromo*/,`KortingReden` /*KortingReden*/,`KortingMP` /*KortingMP*/,`KostenMP` /*KostenMP*/,NOW() /*DTOrderregel*/,`VastePrijs` /*VastePrijs*/,`ActiePrijs` /*ActiePrijs*/,`BTWTarief` /*BTWTarief*/,`BTWCode` /*BTWCode*/,0 /*AantalBackorder*/,NULL /*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 */, '', 0 /* BoekStatus */ FROM Bestellingen WHERE BestellingId = OrigBestelling AND Geannuleerd = 0 AND Geexporteerd = 1 AND Aantal <> 0;
		INSERT INTO BestellingAdressen 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;
		
		/*
		 * 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 */
		UPDATE Bestellingen  SET DTOrderregel = NOW() WHERE BestellingId = OrigBestelling;
		
		/* 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 nieuwe order */
		INSERT IGNORE INTO BestellingStatus SET StatusId = 32, BestellingId = NewBestelling, Resultaat = 'gelukt', Gebruiker = @initials, DT = NOW();				
		CALL orderregel_status_op_orderid( 32, NewBestelling, 'gelukt' );
		
		RETURN NewBestelling;
	END IF;
    END ;;
DELIMITER ;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `credit_en_opnieuw` */;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
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;
		
	RETURN NewBestelling;
    END ;;
DELIMITER ;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `domain_of_url` */;
ALTER DATABASE `Computerboek_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 `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `factuur_totaal` */;
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 ;
/*!50003 DROP FUNCTION IF EXISTS `geen_voorraad_artikelen` */;
ALTER DATABASE `Computerboek_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 `Computerboek_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 
	Computerboek_Klanten.VogooAvg VA JOIN  
	(
	SELECT V.Vervangtean AS Ean FROM Computerboek_Boeken.Boekanderebindwijzen A JOIN Computerboek_Boeken.Boekvervangtean V ON ( V.Ean = A.Eangekoppeld ) WHERE A.Ean = iEAN
	UNION
	SELECT V.Vervangtean AS Ean FROM Computerboek_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 `Computerboek_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 `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `gmt_now` */;
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 ;
/*!50003 DROP FUNCTION IF EXISTS `heeft_orderregelStatus` */;
ALTER DATABASE `Computerboek_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 `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `klant_aantal_bestellingen` */;
ALTER DATABASE `Computerboek_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 `Computerboek_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 `Computerboek_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 `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `klant_bedrag_openfacturen` */;
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 Computerboek_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 ;
/*!50003 DROP FUNCTION IF EXISTS `klant_laatste_ipadres` */;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
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 ;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!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 `Computerboek_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 `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `korting_voor_ean` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `korting_voor_ean`( _klantid INT, _ean CHAR(13) CHARACTER SET latin1, _aantal INT ) RETURNS decimal(4,2)
    READS SQL DATA
BEGIN
	DECLARE _Percentage DECIMAL(4,2);
	DECLARE _AangepastPercentage DECIMAL(4,2);
	
	IF _ean IN ( 'BONG', 'PORTO', 'VOUCHER' ) THEN
		SET _Percentage = 0;
	ELSE
		SELECT Percentage INTO _Percentage FROM Computerboek_Klanten.`Korting_Klanten_Ean` WHERE Ean = _ean AND Klantid = _klantid;
	
		IF _Percentage IS NULL THEN
			SELECT MAX(Percentage) INTO _Percentage FROM Computerboek_Klanten.`Korting_Klanten_Uitgever` JOIN Computerboek_Boeken.Boeken ON ( UitgeverId = Uitgever ) WHERE Ean = _ean AND Klantid = _klantid;
		END IF; 
		
		IF _Percentage IS NULL THEN
			SELECT MAX(Percentage) INTO _Percentage FROM Computerboek_Klanten.`Korting_Klanten` WHERE Klantid = _klantid;
		END IF; 
		IF _Percentage IS NULL THEN 
			IF _aantal <= 9 AND _aantal >= 0 THEN
				SELECT Korting_0_9, Aangepastekorting_0_9 INTO _Percentage, _AangepastPercentage FROM Computerboek_Boeken.Boeken WHERE Ean = _ean LIMIT 1;
			ELSEIF _aantal <= 29 THEN
				SELECT Korting_10_29, Aangepastekorting_10_29 INTO _Percentage, _AangepastPercentage FROM Computerboek_Boeken.Boeken WHERE Ean = _ean  LIMIT 1;
			ELSEIF _aantal <= 99 THEN
				SELECT Korting_30_99, Aangepastekorting_30_99 INTO _Percentage, _AangepastPercentage FROM Computerboek_Boeken.Boeken WHERE Ean = _ean  LIMIT 1;
			ELSEIF _aantal <= 249 THEN
				SELECT Korting_100_249, Aangepastekorting_100_249 INTO _Percentage, _AangepastPercentage FROM Computerboek_Boeken.Boeken WHERE Ean = _ean  LIMIT 1;
			ELSEIF _aantal <= 449 THEN
				SELECT Korting_250_499, Aangepastekorting_250_499 INTO _Percentage, _AangepastPercentage FROM Computerboek_Boeken.Boeken WHERE Ean = _ean LIMIT 1;
			ELSEIF _aantal >= 500 THEN
				SELECT Korting_500_999, Aangepastekorting_500_999 INTO _Percentage, _AangepastPercentage FROM Computerboek_Boeken.Boeken WHERE Ean = _ean LIMIT 1;
			ELSE
				SET _Percentage = 0;
				SET _AangepastPercentage = 0;
			END IF;
		END IF;
		
		IF IFNULL( _AangepastPercentage, 0 ) > 0 THEN
			SET _Percentage = _AangepastPercentage;
		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 `maximum` */;
ALTER DATABASE `Computerboek_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 `Computerboek_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;
	
	/* Geen credit */
	SELECT SUM( Bindwijze_download = 0 ) INTO RV FROM 
	Bestellingen JOIN ExactArtikelen ON ( Ean = `Code` ) 
	JOIN Computerboek_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;
  
	SELECT IsCredit INTO CR FROM BestellingAll WHERE BestellingId = id;
	
	IF CR = 0 THEN
		/* Geen credit */
		SELECT SUM( Bindwijze_inpakken ) > 0 INTO RV FROM 
		Bestellingen JOIN ExactArtikelen ON ( Ean = `Code` ) 
		JOIN Computerboek_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;
	  
  /* SELECT 
    IFNULL(SUM(Aantal), 0) INTO RV
  FROM
    Computerboek_Klanten.Bestellingen N
    JOIN Computerboek_Klanten.`ExactArtikelen` B ON ( N.`Ean` = B.`Code` )
    JOIN Computerboek_Boeken.Bindwijze BW 
      ON (B.`Bindwijze` = BW.`Bindwijze`) 
  WHERE BestellingId = id 
    AND Aantal > 0 
    AND Productsoort IN (
      'software',
      'cadeaubon',
      'boekevent',
      'Seminar',
      'boek',
      'cd-rom',
      'Losbladige uitgave',
      'Ringband',
      'Schriftelijke cursus',
      'Spel',
      'Luisterboek',
      'Scheurkalender',
      'Agenda',
      'Waaier',
      'Magazine',
      'Luisterboek',
      'Dvd',
      'Onderzoeksrapport',
      'USB-Stick',
      'magazine'
    ); */
    
    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;
	--
	
	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.DT
		
	INTO 	_kan_gedownload_worden,
		_niet_inpakken,
		_afgesloten,
		_gecrediteerd,
		_ingepakt,
		_gefactureerd,
		_geparkeerd,
		_DTIngepakt,
		_Boekstatus,
		_geannuleerd,
		_genoeg,
		_DTHerdruk,
		_DTVerschijning,
		_DTBelofte,
		_BackorderReden,
		_in_backorder,
		_DTBevestigd
	
	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` = 'Computerboek_Klanten' )
	JOIN Computerboek_Boeken.Boeken BK USING ( Ean )
	WHERE BN.Id = _id
	GROUP BY BN.Id;
	
	IF _geannuleerd = 1 OR _BackorderReden = 8 THEN
		SET _rv = "Geannuleerd";
	
	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;
		SET _rv = CONCAT( 'Verzonden op ', DATE_FORMAT( _DTIngepakt, '%e-%c-%Y' ));
		
	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( "Nog niet verschenen, verwacht op ", DATE_FORMAT( _DTVerschijning, '%e-%c-%Y' ));
		ELSE
			SET _rv = "Nog niet verschenen, verschijningsdatum onbekend";
		END IF;
				
	ELSEIF _geparkeerd = 1 THEN
		SET _rv = "In behandeling, neem contact met ons op voor meer informatie";
	
	ELSEIF ( _in_backorder = 1 or _genoeg = 0 ) THEN
			SET _rv = "Besteld bij uitgever";		
	
	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;
	
	RETURN _rv;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `orderregel_geleverd` */;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `orderregel_geleverd`( myId INT ) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE RV INT;
	SELECT IFNULL( SUM( Aantal ), 0 ) INTO RV FROM Bestellingen WHERE BackorderOrigineel = myId AND Geannuleerd = 0 AND Aantal > 0;
	RETURN RV;
    END ;;
DELIMITER ;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP FUNCTION IF EXISTS `orderregel_op_wachten` */;
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 Computerboek_Klanten.Bestellingen B 
	   LEFT JOIN Computerboek_Boeken.`Boeken` C USING ( Ean ) 
	   LEFT JOIN Computerboek_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 ;
/*!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;
	
	SELECT COUNT(*) INTO _totaal FROM Bestellingen WHERE BestellingId = _id;
	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;
	
	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 _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;
		SET _rv = OrderregelTekst( _regel );
	ELSE
		SET _rv = "Status onbekend";
		
	END IF;
	RETURN _rv;
   END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `origineel_bestellingid` */;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `origineel_bestellingid`( iBestelling INT ) RETURNS int(11)
    READS SQL DATA
BEGIN
	DECLARE orig INT;
	DECLARE pre INT;
	SELECT OrigineelBestellingid INTO orig FROM BestellingAll WHERE BestellingId = iBestelling;
	
	IF orig > 0 THEN
		-- We hebben een gevuld bestellingId
		WHILE orig > 0 DO
			SET pre = orig;
			SELECT OrigineelBestellingid INTO orig FROM BestellingAll WHERE BestellingId = orig;
		END WHILE;
	
		SET orig = pre;	
	ELSE
		SET orig = iBestelling;
	END IF;
	
	RETURN orig;
    END ;;
DELIMITER ;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!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 `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 `backorderregels` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` PROCEDURE `backorderregels`()
    READS SQL DATA
BEGIN
	DROP TEMPORARY TABLE IF EXISTS tmp.Backorders;
	CREATE TEMPORARY TABLE tmp.Backorders ( BackorderOrigineel INT PRIMARY KEY, Geleverd INT ) ENGINE=MEMORY;
	INSERT INTO tmp.Backorders
		SELECT BackorderOrigineel, SUM( Aantal ) AS Geleverd
		FROM Bestellingen
		WHERE BackorderOrigineel > 0
			AND Aantal > 0
			AND Geannuleerd = 0
		GROUP BY BackorderOrigineel;
	
	DROP TABLE IF EXISTS tmp.BackorderRegels;
	DROP TEMPORARY TABLE IF EXISTS tmp.BackorderRegels;
	CREATE TEMPORARY TABLE tmp.BackorderRegels (
		Id INT PRIMARY KEY, BestellingId INT, DT DATETIME, Ean CHAR(13) CHARACTER SET latin1,
		BoekStatus INT, Aantal INT, AantalBackorder INT, Geleverd INT,
		Gereserveerd INT, Leverbaar INT, DeelLeverbaar INT, Wacht INT,
		VerstuurCompleteOrder INT,
		
		BeschikbareVoorraad INT, GereserveerdeVoorraad INT, FysiekeVoorraad INT,
		GeprinteVoorraad INT, NogNietGeprint INT,
		
		Bindwijze_voorraadartikel INT, Bindwijze_evenement INT,
		Voorafgaand INT, GenoegVoorraad INT,
		KEY( BestellingId )
	) ENGINE=MEMORY;
	
	CALL Voorraadbeheer.berekenGeprinteVoorraad();
	
	INSERT INTO tmp.BackorderRegels
		SELECT
			A.Id, A.BestellingId, BA.DT, A.Ean, BK.BoekStatus, A.Aantal, A.AantalBackorder,
			IFNULL( B.Geleverd, 0 ) AS Geleverd,
			IF( OP.niet_reserveren, 0, 1 ) AS Gereserveerd, /* Gereserveerd */
			IF( Bindwijze_voorraadartikel, 0, IF( BK.BoekStatus = 5, 0, 1 ) ) AS Leverbaar, /* Leverbaar */
			0, /* DeelLeverbaar */ 0, /* Wacht */ VerstuurCompleteOrder,
			
			IFNULL( BeschikbareVoorraad, 0 ), IFNULL( GereserveerdeVoorraad, 0 ),
			IFNULL( FysiekeVoorraad, 0 ), IFNULL( GP.GeprintAantal, 0), 
			IFNULL( GP.NogNietGeprint, 0),
			
			IFNULL( Bindwijze_voorraadartikel, 0 ), IFNULL( Bindwijze_evenement, 0 ),
			0, /* Voorafgaand */ IF( Bindwijze_voorraadartikel, 0 , 1 ) /* GenoegVoorraad */
		FROM Bestellingen A 
			JOIN OrderregelStatusPlat OP USING ( Id )                           -- Niet reserveren
			JOIN BestellingAll BA USING ( BestellingId )                        -- Datum
			LEFT JOIN Voorraadbeheer.Voorraad V ON ( A.Ean = V.Ean )            -- Voorraadstanden
			LEFT JOIN tmp.GeprinteVoorraad GP ON ( A.Ean = GP.Ean )             -- Geprinte Voorraad
			LEFT JOIN Computerboek_Boeken.Boeken BK ON ( A.Ean = BK.Ean )     -- Boekstatus
			LEFT JOIN Computerboek_Boeken.Bindwijze USING ( Bindwijze )       -- Bindwijzes
			LEFT JOIN tmp.Backorders B ON ( A.Id = B.BackorderOrigineel )       -- Voor geleverd aantal
			LEFT JOIN BestellingStatus ST
				ON ( ST.Bestellingid = A.BestellingId
					AND ST.StatusId IN ( 33 /* Afgesloten */, 24 /* Geannuleerd */, 16 /* Geannuleerd */ ) )		
		WHERE A.AantalBackorder > 0 
			AND ST.StatusId IS NULL
			AND IFNULL( Geleverd, 0 ) < AantalBackorder
			AND A.Ean NOT IN ( 'IDEAL' )
			AND OP.vink_open = 1;
			-- AND A.Geannuleerd = 0;
	
	
	-- Voor alles dat NIET gereserveerd is geldt: Het is leverbaar als er genoeg BESCHIKBARE voorraad is.
	/*
	DROP TEMPORARY TABLE IF EXISTS tmp.LeverbareEans;
	CREATE TEMPORARY TABLE tmp.LeverbareEans ENGINE=MEMORY
		SELECT Ean, SUM( AantalBackorder ) AS Totaal, Bindwijze_voorraadartikel, Boekstatus, T.BeschikbareVoorraad  
			FROM tmp.BackorderRegels T WHERE Gereserveerd = 0 AND Bindwijze_voorraadartikel = 1 
			GROUP BY Ean HAVING BeschikbareVoorraad >= Totaal;
	
	UPDATE tmp.BackorderRegels JOIN tmp.LeverbareEans USING ( Ean ) SET GenoegVoorraad = 1, Leverbaar = 1;
	*/
	
	CALL bereken_voorrang_backorderregels();
	
	-- Niet genoeg voorraad -> Dan niet leverbaar.
	UPDATE tmp.BackorderRegels SET Leverbaar = 0 WHERE GenoegVoorraad = 0;
	
	-- Nog niet verschenen? Dan niet leverbaar.
	UPDATE tmp.BackorderRegels SET Leverbaar = 0 WHERE Boekstatus = 5;
	
	-- Bereken leverbaar; Alles is leverbaar BEHALVE:
	-- a) Orders met ten minste 1 regel waarvoor geldt: VerstuurCompleteOrder = 1 AND Niet genoeg voorraad AND boekstatus != 1, 2, 5
	DROP TEMPORARY TABLE IF EXISTS tmp.NietLeverbareOrders;
	
	CREATE TEMPORARY TABLE tmp.NietLeverbareOrders ENGINE=MEMORY
		SELECT DISTINCT BestellingId
		FROM tmp.BackorderRegels 
		WHERE VerstuurCompleteOrder = 1 AND GenoegVoorraad = 0 AND BoekStatus NOT IN ( 1, 2, 5 );
	
	-- Porto's, Bong's & Ideal's.
	DROP TEMPORARY TABLE IF EXISTS tmp.AlleLeverbareOrders;
	CREATE TEMPORARY TABLE tmp.AlleLeverbareOrders ENGINE=MEMORY
		SELECT DISTINCT BestellingId
		FROM tmp.BackorderRegels
		WHERE Leverbaar = 1 AND Ean NOT IN ( 'VOUCHER', 'PORTO', 'BONG', 'IDEAL' );
	
	UPDATE tmp.BackorderRegels
	SET Leverbaar = 0
	WHERE Ean IN ( 'VOUCHER', 'PORTO', 'BONG', 'IDEAL' )
		AND BestellingId NOT IN ( SELECT BestellingId FROM tmp.AlleLeverbareOrders );
	
	-- Zet op niet leveren, behalve die orderregels waarvan boekstatus 5,2,1  is -> 
	UPDATE tmp.BackorderRegels JOIN tmp.NietLeverbareOrders USING ( BestellingId )	SET Leverbaar = 0, Wacht = 1;
	
	END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `BerekenStemmen` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `BerekenStemmen`()
BEGIN
	DROP TEMPORARY TABLE IF EXISTS BoekVervangingen;	
	CREATE TEMPORARY TABLE BoekVervangingen ( Ean CHAR(13), EanOut CHAR(13), PRIMARY KEY(Ean,EanOut), KEY( EanOut ) );
	
	INSERT IGNORE INTO BoekVervangingen SELECT A.Ean, V.Vervangtean AS EanOut FROM Computerboek_Boeken.Boekanderebindwijzen A JOIN Computerboek_Boeken.Boekvervangtean V ON ( V.Ean = A.Eangekoppeld );
	INSERT IGNORE INTO BoekVervangingen SELECT V.Ean, V.Vervangtean AS Ean FROM Computerboek_Boeken.Boekvervangtean V;
	CREATE TABLE IF NOT EXISTS VogooStemmen ( Ean CHAR(13) PRIMARY KEY, Gemiddeld DECIMAL(4,2), Waardering DECIMAL( 4,1 ), Ranking INT, Aantal INT ) ENGINE=INNODB;
	DELETE FROM VogooStemmen;
	INSERT INTO VogooStemmen 	SELECT B.Ean,
	ROUND(IFNULL(SUM( Stemmen * Gemiddeld ) / SUM( Stemmen ),0),2) AS Gemiddeld, 
	ROUND(IFNULL(ROUND(10*SUM( Stemmen * Gemiddeld ) / SUM( Stemmen )),0)/2,1) AS Waardering, 
	-- Zie: http://stackoverflow.com/questions/1411199/what-is-a-better-way-to-sort-by-a-5-star-rating?lq=1
	IFNULL( 100000 * ( ( ( SUM(Stemmen) / ( SUM(Stemmen) + 5 ) ) * ( SUM( Stemmen * Gemiddeld ) / SUM( Stemmen ) ) ) + ( ( 1 / ( SUM(Stemmen) + 5 ) ) * 0.75 ) ), 0) AS Ranking,
	SUM(Stemmen) 
	FROM 
	BoekVervangingen B 
	JOIN Computerboek_Klanten.`VogooAvg` A  ON ( A.Ean = B.EanOut )
	WHERE B.Ean != ''
	GROUP BY B.Ean;
	
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `BerekenStemmenEan` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `BerekenStemmenEan`( _ean CHAR(13) CHARSET latin1 )
BEGIN
	DROP TEMPORARY TABLE IF EXISTS BoekVervangingen;	
	CREATE TEMPORARY TABLE BoekVervangingen ( Ean CHAR(13), EanOut CHAR(13), PRIMARY KEY(Ean,EanOut), KEY( EanOut ) );
	
	INSERT IGNORE INTO BoekVervangingen SELECT A.Ean, V.Vervangtean AS EanOut FROM Computerboek_Boeken.Boekanderebindwijzen A 
		JOIN Computerboek_Boeken.Boekvervangtean V ON ( V.Ean = A.Eangekoppeld )
		WHERE V.Ean = _ean;
		
	INSERT IGNORE INTO BoekVervangingen SELECT V.Ean, V.Vervangtean AS Ean FROM Computerboek_Boeken.Boekvervangtean V WHERE V.Ean = _ean;
	
	REPLACE INTO VogooStemmen 	SELECT B.Ean,
	ROUND(IFNULL(SUM( Stemmen * Gemiddeld ) / SUM( Stemmen ),0),2) AS Gemiddeld, 
	ROUND(IFNULL(ROUND(10*SUM( Stemmen * Gemiddeld ) / SUM( Stemmen )),0)/2,1) AS Waardering, 
	-- Zie: http://stackoverflow.com/questions/1411199/what-is-a-better-way-to-sort-by-a-5-star-rating?lq=1
	IFNULL( 100000 * ( ( ( SUM(Stemmen) / ( SUM(Stemmen) + 5 ) ) * ( SUM( Stemmen * Gemiddeld ) / SUM( Stemmen ) ) ) + ( ( 1 / ( SUM(Stemmen) + 5 ) ) * 0.75 ) ), 0) AS Ranking,
	SUM(Stemmen) 
	FROM 
	BoekVervangingen B 
	JOIN Computerboek_Klanten.`VogooAvg` A  ON ( A.Ean = B.EanOut )
	WHERE B.Ean != ''
	GROUP BY B.Ean;
	
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `bereken_voorrang` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `bereken_voorrang`()
    READS SQL DATA
BEGIN
	-- Declare variables used just for cursor and loop control
	DECLARE curEan CHAR( 13 ) character set LATIN1;
	DECLARE no_more_rows BOOLEAN;
	DECLARE loop_cntr INT DEFAULT 0;
	DECLARE num_rows INT DEFAULT 0;
	DECLARE v INT;
	
	DECLARE eanCursor CURSOR FOR SELECT DISTINCT Ean FROM OrderregelStatusPlat JOIN Bestellingen USING ( Id ) WHERE vink_open = 1;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
	
	DROP TEMPORARY TABLE IF EXISTS tmp.Voorafgaand;
	CREATE TEMPORARY TABLE tmp.Voorafgaand ( Id INT PRIMARY KEY, Voorafgaand INT ) ENGINE=MEMORY;
	
	OPEN eanCursor;
	the_loop: LOOP
		FETCH eanCursor INTO curEan;
		
		IF no_more_rows THEN
			CLOSE eanCursor;
			LEAVE the_loop;
		END IF;
		
		BLOCK2: BEGIN
			DECLARE v INT DEFAULT 0;
			DECLARE lId INT;
			DECLARE lAantal INT;
			DECLARE no_more_rows2 BOOLEAN;			
			DECLARE loopCursor CURSOR FOR SELECT Id, Aantal + AantalBackorder  FROM Bestellingen JOIN OrderregelStatusPlat USING ( Id ) JOIN BestellingAll A USING ( BestellingId ) 
					WHERE vink_open = 1 AND gefactureerd = 0 AND Ean = curEan ORDER BY A.DT;		
			DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows2 = TRUE;
			
			OPEN loopCursor;
			the_loop2: LOOP
				FETCH loopCursor INTO lId, lAantal;
				
				IF no_more_rows2 THEN
					CLOSE loopCursor;
					LEAVE the_loop2;
				END IF;
				
				INSERT INTO tmp.Voorafgaand SET Voorafgaand = v, Id = lId;
				SET v = v + lAantal;				
			END LOOP the_loop2;
		END BLOCK2;
	END LOOP the_loop;		
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `bereken_voorrang_backorderregels` */;
DELIMITER ;;
CREATE DEFINER=`main`@`%` PROCEDURE `bereken_voorrang_backorderregels`()
BEGIN
	-- Declare variables used just for cursor and loop control
	DECLARE curEan CHAR( 13 ) CHARACTER SET latin1;
	DECLARE no_more_rows BOOLEAN;
	DECLARE loop_cntr INT DEFAULT 0;
	DECLARE num_rows INT DEFAULT 0;
	DECLARE v INT;
	
	DECLARE eanCursor CURSOR FOR SELECT DISTINCT Ean FROM tmp.BackorderRegels;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
	
	/*
	-- Niet gereserveerde voorraad
	DECLARE cur CURSOR FOR SELECT DISTINCT Ean FROM tmp.BackorderRegels WHERE Gereserveerd = 0 AND Bindwijze_voorraadartikel = 1  AND BeschikbareVoorraad > 0 AND NOT( Bindwijze_evenement = 1 && BoekStatus = 5);
	-- Wel gereserveerde voorraad
	DECLARE cur2 CURSOR FOR SELECT DISTINCT Ean FROM tmp.BackorderRegels WHERE Gereserveerd = 1 AND Bindwijze_voorraadartikel = 1 AND FysiekeVoorraad > 0 AND NOT( Bindwijze_evenement = 1 && BoekStatus = 5);
	-- Declare 'handlers' for exceptions
	
	
	-- Eerst wel gereserveerde voorraad
	OPEN cur2;
	the_loop2: LOOP
		FETCH  cur2  INTO  curEan;
		
		IF no_more_rows THEN
			CLOSE cur2;
			LEAVE the_loop2;
		END IF;
		SET @c = 0;
		UPDATE tmp.BackorderRegels 
		  SET Voorafgaand = ( @c := @c + ( AantalBackorder - Geleverd ) ) - ( AantalBackorder - Geleverd ) 
		  WHERE Ean = curEan AND Gereserveerd = 1 ORDER BY DT;
	END LOOP the_loop2;	
	
	UPDATE tmp.BackorderRegels SET GenoegVoorraad = 1, Leverbaar = NOT( Bindwijze_evenement = 1 && BoekStatus = 5 ) 
	   WHERE Gereserveerd = 1 AND ( Voorafgaand + ( AantalBackorder - Geleverd ) ) <= ( FysiekeVoorraad - GeprinteVoorraad ) AND Bindwijze_voorraadartikel = 1 AND FysiekeVoorraad > 0;
	
	UPDATE tmp.BackorderRegels SET DeelLeverbaar = LEAST( AantalBackorder - Geleverd, FysiekeVoorraad - Voorafgaand ) 
	   WHERE Gereserveerd = 1 AND ( FysiekeVoorraad - GeprinteVoorraad ) - Voorafgaand > 0 AND Bindwijze_voorraadartikel = 1 AND FysiekeVoorraad > 0;	 
	
	-- Dan niet gereserveerde voorraad
	OPEN cur;
	the_loop: LOOP
		FETCH  cur  INTO  curEan;
		
		IF no_more_rows THEN
			CLOSE cur;
			LEAVE the_loop;
		END IF;
		SET @c = 0;
		UPDATE tmp.BackorderRegels 
		  SET Voorafgaand = ( @c := @c + ( AantalBackorder - Geleverd ) ) - ( AantalBackorder - Geleverd ) 
		  WHERE Ean = curEan AND Gereserveerd = 0 ORDER BY DT;
	END LOOP the_loop;	
	*/
	
	-- UPDATE tmp.BackorderRegels SET Voorafgaand = orderregel_voorafgaand( Id );
	
	OPEN eanCursor;
	the_loop: LOOP
		FETCH eanCursor INTO curEan;
		
		IF no_more_rows THEN
			CLOSE eanCursor;
			LEAVE the_loop;
		END IF;
		
		BLOCK2: BEGIN
			DECLARE v INT DEFAULT 0;
			DECLARE lId INT;
			DECLARE lAantal INT;
			DECLARE no_more_rows2 BOOLEAN;			
			DECLARE loopCursor CURSOR FOR SELECT Id, Aantal + AantalBackorder
                FROM Bestellingen
                    JOIN OrderregelStatusPlat USING ( Id )
                    JOIN BestellingAll A USING ( BestellingId ) 
				WHERE vink_open = 1 AND gefactureerd = 0
                    AND Ean = curEan ORDER BY A.DT;
			DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows2 = TRUE;
			
			OPEN loopCursor;
			the_loop2: LOOP
				FETCH loopCursor INTO lId, lAantal;
				
				IF no_more_rows2 THEN
					CLOSE loopCursor;
					LEAVE the_loop2;
				END IF;
				
				UPDATE tmp.BackorderRegels SET Voorafgaand = v WHERE Id = lId;
				SET v = v + lAantal;				
			END LOOP the_loop2;
		END BLOCK2;
	END LOOP the_loop;		
			
	
	UPDATE tmp.BackorderRegels SET GenoegVoorraad = 0 WHERE ( AantalBackorder - Geleverd ) > ( FysiekeVoorraad - GeprinteVoorraad );
	
	UPDATE tmp.BackorderRegels SET GenoegVoorraad = 1, Leverbaar = NOT( Bindwijze_evenement = 1 && BoekStatus = 5 ) 
	   WHERE ( Voorafgaand + ( AantalBackorder - Geleverd ) ) <= ( FysiekeVoorraad - GeprinteVoorraad ) AND Bindwijze_voorraadartikel = 1 AND FysiekeVoorraad > 0;
	
	UPDATE tmp.BackorderRegels SET DeelLeverbaar = LEAST( AantalBackorder - Geleverd, FysiekeVoorraad - Voorafgaand ) 
	   WHERE ( FysiekeVoorraad - GeprinteVoorraad ) - Voorafgaand > 0 AND Bindwijze_voorraadartikel = 1 AND FysiekeVoorraad > 0; 
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `bestelling_getoond` */;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `bestelling_getoond`( BId INT )
BEGIN
	UPDATE BestellingAll SET ToonBestelling =  IF( Herkomst IN ( 'Website', 'iOS' ) AND IsCredit = 0 AND IsOpnieuw = 0, 1, 0 )
	WHERE BestellingId = BId;
    END ;;
DELIMITER ;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP PROCEDURE IF EXISTS `cascade_bestellingenstatus` */;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `cascade_bestellingenstatus`( OrderId INT )
BEGIN
	DECLARE BO INT;
	SELECT IFNULL( BackorderOrigineel, 0) INTO BO FROM Bestellingen WHERE Id = OrderId;
	IF BO > 0 THEN
		UPDATE BestellingenStatus SET VerzondenOp = NEW.VerzondenOp, GereedOp = NEW.GereedOp, BetaaldOp = NEW.BetaaldOp, GeannuleerdOp = NEW.GeannuleerdOp WHERE Id = BO;
	END IF;
    END ;;
DELIMITER ;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP PROCEDURE IF EXISTS `Daily` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `Daily`()
    MODIFIES SQL DATA
BEGIN
	-- 
	--    UPDATE Statussen
	--
	/* Credit: Hoeft niet ingepakt te worden... */
	INSERT INTO BestellingStatus
	SELECT 32, BA.BestellingId, 'gelukt', '~1', BA.DT
	FROM BestellingAll BA
	LEFT JOIN BestellingStatus BS ON ( BA.Bestellingid = BS.BestellingId AND BS.StatusId = 32 )
	WHERE BS.StatusId IS NULL
	AND BA.Afgerond = 1
	AND BA.IsCredit = 1;
	
	/* Credits van 0 euro -> Betaald 
	INSERT INTO BestellingStatus
	SELECT 21, BA.BestellingId, 'gelukt', '~4', BA.DT
	FROM BestellingAll BA
	LEFT JOIN BestellingStatus BS ON ( BA.Bestellingid = BS.BestellingId AND BS.StatusId = 21 )
	WHERE BS.StatusId IS NULL
	AND BA.Afgerond = 1
	AND BA.IsCredit = 1
	AND bestelling_totaal( BA.BestellingID ) = 0; */
	
	/* Credits van 0 euro -> Afgerond 
	INSERT INTO BestellingStatus
	SELECT 33, BA.BestellingId, 'gelukt', '~4', BA.DT
	FROM BestellingAll BA
	LEFT JOIN BestellingStatus BS ON ( BA.Bestellingid = BS.BestellingId AND BS.StatusId = 33 )
	WHERE BS.StatusId IS NULL
	AND BA.Afgerond = 1
	AND BA.IsCredit = 1
	AND bestelling_totaal( BA.BestellingID ) = 0; */
	
		
	/* Hoeft niet ingepakt te worden; ABO */
	INSERT INTO BestellingStatus
	SELECT 32, BA.BestellingId, 'gelukt', '~1', NOW()
	FROM BestellingAll BA
	LEFT JOIN BestellingStatus BS ON ( BA.Bestellingid = BS.BestellingId AND BS.StatusId = 32 )
	WHERE BS.StatusId IS NULL
	AND BA.Afgerond = 1
	AND BA.BestellingId IN ( SELECT BestellingId FROM Bestellingen WHERE Ean IN ( 'VER_ABO', 'VER_SLOW', 'VER_TOPICS' ) );
	
	/* Sluit geleverde backorders */
	INSERT INTO BestellingStatus
	SELECT 33, BA.BestellingId, 'gelukt', '~3', NOW()
	FROM BestellingAll BA
	LEFT JOIN BestellingStatus BBackorder ON (BA.Bestellingid = BBackorder.BestellingId AND BBackorder.StatusId IN ( 30, 25 ) )
	LEFT JOIN BestellingStatus BAfgerond ON (BA.Bestellingid = BAfgerond.BestellingId AND BAfgerond.StatusId = 33 )
	LEFT JOIN Bestellingen X ON ( BA.Bestellingid = X.Bestellingid )
	WHERE BA.Afgerond = 1
	AND BBackorder.Resultaat = 'gelukt'
	AND X.AantalBackorder > 0
	AND BA.DT BETWEEN DATE_SUB( NOW(), INTERVAL 2 YEAR ) AND DATE_SUB( NOW(), INTERVAL 4 DAY ) 
	AND BAfgerond.StatusId IS NULL
	GROUP BY BA.BestellingId
	HAVING backorder_afgesloten( BA.Bestellingid ) = 1;
	/* Orders zonder orderregels; Maar nog niet afgerond / geannuleerd */
	INSERT INTO BestellingStatus
	SELECT 16, BA.BestellingId, 'gelukt', 'SP', NOW() FROM Computerboek_Klanten.BestellingAll BA LEFT JOIN Computerboek_Klanten.Klanten USING ( Klantid )
	LEFT JOIN Computerboek_Klanten.Bestellingen BN ON ( BA.BestellingId = BN.Bestellingid AND BN.Ean NOT IN ( 'BONG', 'IDEAL', 'PORTO' ) )
	LEFT JOIN BestellingStatus BAfgerond ON ( BA.BestellingId = BAfgerond.BestellingId AND BAfgerond.StatusId IN ( 33 ) )
	LEFT JOIN BestellingStatus BAnn ON ( BA.BestellingId = BAnn.BestellingId AND BAnn.StatusId IN ( 16 ) )
	WHERE BA.Afgerond = 1
	AND BN.Id IS NULL
	AND BAfgerond.StatusId IS NULL
	AND BAnn.StatusId IS NULL;
	/* Orders zonder orderregels; Maar nog niet afgerond / geannuleerd (2e annuleer-status) */
	INSERT INTO BestellingStatus
	SELECT 24, BA.BestellingId, 'gelukt', 'SP', NOW() FROM Computerboek_Klanten.BestellingAll BA LEFT JOIN Computerboek_Klanten.Klanten USING ( Klantid )
	LEFT JOIN Computerboek_Klanten.Bestellingen BN ON ( BA.BestellingId = BN.Bestellingid AND BN.Ean NOT IN ( 'BONG', 'IDEAL', 'PORTO' ) )
	LEFT JOIN BestellingStatus BAfgerond ON ( BA.BestellingId = BAfgerond.BestellingId AND BAfgerond.StatusId IN ( 33 ) )
	LEFT JOIN BestellingStatus BAnn ON ( BA.BestellingId = BAnn.BestellingId AND BAnn.StatusId IN ( 24 ) )
	WHERE BA.Afgerond = 1
	AND BN.Id IS NULL
	AND BAfgerond.StatusId IS NULL
	AND BAnn.StatusId IS NULL;
	
	/* Afgesloten orders 
	INSERT INTO BestellingStatus
	SELECT 33, BA.BestellingId, 'gelukt', '~2', BA.DT 
	FROM
	BestellingAll   BA 
	LEFT JOIN BestellingStatus BOud ON ( BA.BestellingId = BOud.BestellingId AND BOud.StatusId IN ( 26, 16, 24 ) )
	LEFT JOIN BestellingStatus BIngepakt ON ( BA.BestellingId = BIngepakt.BestellingId AND BIngepakt.StatusId IN ( 15, 18, 19, 32 ) )
	LEFT JOIN BestellingStatus BAfgesloten ON ( BA.BestellingId = BAfgesloten.BestellingId AND BAfgesloten.StatusId IN ( 33 ) )
	LEFT JOIN BestellingStatus BBetaald ON ( BA.BestellingId = BBetaald.BestellingId AND BBetaald.StatusId IN ( 21 ) )
	LEFT JOIN Bestellingen BN ON ( BA.BestellingId = BN.BestellingId )
	WHERE ( ( BOud.Resultaat = 'gelukt' ) OR ( BIngepakt.Resultaat = 'gelukt' AND BBetaald.Resultaat = 'gelukt' ) )
	AND BAfgesloten.Resultaat IS NULL
	AND BA.Afgerond = 1
	AND BA.Geannuleerd = 0
	AND BA.DT > DATE_SUB( NOW(), INTERVAL 120 DAY )
	GROUP BY BestellingId
	HAVING ( SUM( Aantal ) <> 0 OR MAX(BOud.Resultaat) = 'gelukt' ); */	
	
	/* Werk daadwerkelijk de annuleringen bij */
	-- CREATE TEMPORARY TABLE tmp.GeannuleerdeBestellingen SELECT BestellingId FROM Computerboek_Klanten.BestellingStatus JOIN Computerboek_Klanten.BestellingAll USING ( BestellingId ) WHERE StatusId IN ( 16, 24 ) AND Geannuleerd = 0;
	-- UPDATE tmp.GeannuleerdeBestellingen JOIN Computerboek_Klanten.BestellingAll USING ( BestellingId ) SET Geannuleerd = 1;
	
	--
	--    UPDATE BACKORDERS
	--
	 
	/* Update betalingen */
	UPDATE
	Computerboek_Klanten.Bestellingen BN1 JOIN Computerboek_Klanten.BestellingenStatus BS1 USING ( Id ) 
	JOIN Computerboek_Klanten.BestellingenStatus BS2 ON ( BN1.BackorderOrigineel = BS2.Id )
	SET BS2.BetaaldOp = BS1.BetaaldOp
	WHERE BS1.BetaaldOp > 0
	AND BN1.BackorderOrigineel > 0
	AND BS2.BetaaldOp IS NULL;
	
	/* Update verzendingen */
	UPDATE
	Computerboek_Klanten.Bestellingen BN1 JOIN Computerboek_Klanten.BestellingenStatus BS1 USING ( Id ) 
	JOIN Computerboek_Klanten.BestellingenStatus BS2 ON ( BN1.BackorderOrigineel = BS2.Id )
	SET BS2.VerzondenOp = BS1.VerzondenOp
	WHERE BS1.VerzondenOp > 0
	AND BN1.BackorderOrigineel > 0
	AND BS2.VerzondenOp IS NULL;
	
	
	/* Niet inpakken niet gezet? Dan alsnog! */
	INSERT INTO OrderregelStatus
	SELECT 32, Bestellingen.Id, 'gelukt', '~1', NOW() FROM Computerboek_Boeken.Boeken JOIN Computerboek_Boeken.`Bindwijze` USING ( Bindwijze ) JOIN Computerboek_Klanten.Bestellingen USING ( Ean ) JOIN Computerboek_Klanten.BestellingAll USING ( BestellingId )
	LEFT JOIN Computerboek_Klanten.`OrderregelStatus` ON ( Bestellingen.Id = OrderregelStatus.Id AND OrderregelStatus.`StatusId` = 32 )
	WHERE Bindwijze_inpakken = 0
	AND OrderregelStatus.Id IS NULL
	AND Afgerond = 1
	AND DTOrderregel > DATE_SUB( NOW(), INTERVAL 1 DAY )
	LIMIT 1000;
	
	CALL Computerboek_Klanten.`herbereken_alle_reserveringen`();
	CALL Computerboek_Klanten.`herbereken_alle_reserveringen`();
	CALL Juridischboek_Klanten.`herbereken_alle_reserveringen`();	
	
	/* We hebben gedraaid */
	REPLACE INTO Mainpress_Globals.LastRun VALUES ( 210, 'Daily Stored Procedure', 'Computerboek', NOW(), NOW(), '' );	
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `delete_orderregel_status` */;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` PROCEDURE `delete_orderregel_status`( iStatus INT(11), iOrderRegel INT(11))
BEGIN
	DECLARE LStatusId INT;
	
	DELETE FROM OrderregelStatus WHERE StatusId = iStatus AND Id = iOrderRegel;
		
	/* Zet 'actuele status' op orderregel */
	SELECT StatusId INTO LStatusId FROM OrderregelStatus JOIN BestellingStatussen USING ( StatusId ) WHERE  Volgorde < 10000 AND Id = iOrderRegel ORDER BY Volgorde DESC LIMIT 1;
	UPDATE Bestellingen BN SET BN.StatusId = LStatusId WHERE BN.Id = iOrderRegel;
END ;;
DELIMITER ;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP PROCEDURE IF EXISTS `herbereken_alle_herkomsten` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `herbereken_alle_herkomsten`()
BEGIN
	DECLARE no_more_rows INT DEFAULT 0;
	DECLARE loopBestellingid INT;
	DECLARE cur CURSOR FOR SELECT Bestellingid FROM Bestelling WHERE DT BETWEEN '2011-01-01' AND '2013-1-1' ORDER BY BestellingId dESC;
	
	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET no_more_rows = 1;	
		
	OPEN cur;
				
	the_loop: LOOP
		FETCH cur INTO
			loopBestellingid;
		IF no_more_rows THEN
			CLOSE cur;
			LEAVE the_loop;
		END IF;		
		
		/* opnieuw aanroepen om te bepalen of er nog meer afgeleide orders zijn */
		CALL update_bestelling_herkomst(loopBestellingid);			
	END LOOP the_loop;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `herbereken_alle_reserveringen` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `herbereken_alle_reserveringen`()
BEGIN
	-- START TRANSACTION;
	-- Wis alles
	SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
	
	DELETE FROM Voorraadbeheer.`ReserveringenPerEan` WHERE Administratie = get_administratie();
	
	-- Insert alles
	INSERT IGNORE INTO Voorraadbeheer.`ReserveringenPerEan` SELECT get_administratie(), Ean, SUM( OpenAantal ) FROM open_orderregels WHERE niet_reserveren = 0 GROUP BY Ean;
	
	SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
	
	-- COMMIT;	
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `herbereken_kosten` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `herbereken_kosten`()
    MODIFIES SQL DATA
BEGIN
	DECLARE bid INT;
	DECLARE no_more_rows BOOLEAN;
	DECLARE loop_cntr INT DEFAULT 0;
	DECLARE num_rows INT DEFAULT 0;
	
	DECLARE C1 CURSOR FOR 
			SELECT DISTINCT BestellingId FROM Bestelling 
				JOIN Bestellingen USING ( BestellingId )
				JOIN OrderregelStatusPlat USING ( Id ) 
			WHERE DT > '2013-04-01'
			AND ( ( Ean NOT IN ( 'porto' )
			AND niet_inpakken = 1 ) OR ( Ean = 'BONG' ) );
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
	OPEN C1;
	
	the_loop: LOOP
		FETCH C1 INTO bid;
		
		IF no_more_rows THEN
			CLOSE C1;
			LEAVE the_loop;
		END IF;
		
		CALL `update_kosten_mp`( bid );
	END LOOP the_loop;
	END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `herbereken_lege_herkomsten` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `herbereken_lege_herkomsten`()
BEGIN
	DECLARE no_more_rows INT DEFAULT 0;
	DECLARE loopBestellingid INT;
	DECLARE cur CURSOR FOR SELECT Bestellingid FROM BestellingAll LEFT JOIN BestellingHerkomst USING ( BestellingId ) 
	                                           WHERE DT > '2012-01-01' AND ( BestellingHerkomst iS NULL OR Kanaal IS NULL OR BestellingHerkomst IN ('AdWords','AdWordsDirect') ) AND Afgerond = 1;
	
	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET no_more_rows = 1;	
		
	OPEN cur;
				
	the_loop: LOOP
		FETCH cur INTO
			loopBestellingid;
		IF no_more_rows THEN
			CLOSE cur;
			LEAVE the_loop;
		END IF;		
		
		/* opnieuw aanroepen om te bepalen of er nog meer afgeleide orders zijn */
		CALL update_bestelling_herkomst(loopBestellingid);			
	END LOOP the_loop;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `herbereken_ranking` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `herbereken_ranking`()
BEGIN
	DECLARE curEan CHAR( 13 ) CHARACTER SET LATIN1;	
	DECLARE no_more_rows BOOLEAN;
	DECLARE loop_cntr INT DEFAULT 0;
	DECLARE num_rows INT DEFAULT 0;
	DECLARE rank INT DEFAULT 1;
	
	DECLARE cursor1 CURSOR FOR 
		SELECT Ean FROM Computerboek_Boeken.Boeken JOIN Computerboek_Boeken.`Uitgevers` ON ( Uitgever = Uitgeverid ) LEFT JOIN Tellingen_Plat USING ( Ean )
			WHERE BoekStatus NOT IN ( 99 ) 
			AND Prijs BETWEEN 0 AND 9999 AND Boeken_verborgenboek=0
			ORDER BY GREATEST(IFNULL(`30d`,0),0) DESC, 
			GREATEST(IFNULL(`year`,0),0) DESC, 
			GREATEST(IFNULL(`ever`,0),0) DESC, 
			Boeken.Aanmaakdatum DESC, Ean;
	
	DECLARE cursor2 CURSOR FOR 
		SELECT Ean FROM Computerboek_Boeken.Boeken JOIN Computerboek_Boeken.`Uitgevers` ON ( Uitgever = Uitgeverid ) LEFT JOIN Tellingen_Plat USING ( Ean )
			WHERE BoekStatus NOT IN ( 99 ) 
			AND Prijs BETWEEN 0 AND 9999 AND Boeken_verborgenboek=0
			ORDER BY GREATEST(IFNULL(`60d`,0),0) DESC, 
			GREATEST(IFNULL(`year`,0),0) DESC, 
			GREATEST(IFNULL(`ever`,0),0) DESC,
			Boeken.Aanmaakdatum DESC, Ean;
	
	DECLARE cursor3 CURSOR FOR 
		SELECT Ean FROM Computerboek_Boeken.Boeken JOIN Computerboek_Boeken.`Uitgevers` ON ( Uitgever = Uitgeverid ) LEFT JOIN Tellingen_Plat USING ( Ean )
			WHERE BoekStatus NOT IN ( 99 ) 
			AND Prijs BETWEEN 0 AND 9999 AND Boeken_verborgenboek=0
			ORDER BY GREATEST(IFNULL(`90d`,0),0) DESC, 
			GREATEST(IFNULL(`year`,0),0) DESC, 
			GREATEST(IFNULL(`ever`,0),0) DESC,
			Boeken.Aanmaakdatum DESC, Ean;
	
	DECLARE cursor4 CURSOR FOR 
		SELECT Ean FROM Computerboek_Boeken.Boeken JOIN Computerboek_Boeken.`Uitgevers` ON ( Uitgever = Uitgeverid ) LEFT JOIN Tellingen_Plat USING ( Ean )
			WHERE BoekStatus NOT IN ( 99 ) 
			AND Prijs BETWEEN 0 AND 9999 AND Boeken_verborgenboek=0
			ORDER BY GREATEST(IFNULL(`7d`,0),0) DESC, 
			GREATEST(IFNULL(`year`,0),0) DESC, 
			GREATEST(IFNULL(`ever`,0),0) DESC,
			Boeken.Aanmaakdatum DESC, Ean;
		
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
	
	--
	-- 30d
	START TRANSACTION;	
	UPDATE Boekranking_Plat SET `30d` = 9999999;
	SET no_more_rows = FALSE;
	OPEN cursor1;
	the_loop1: LOOP
		FETCH cursor1 INTO curEan;
		
		IF no_more_rows THEN
			CLOSE cursor1;
			LEAVE the_loop1;
		END IF;
		
		INSERT INTO Boekranking_Plat ( Ean, `30d` ) VALUES ( curEan, rank ) ON DUPLICATE KEY UPDATE `30d` = VALUES(`30d`);
		SET rank = rank + 1;
	END LOOP the_loop1;
	COMMIT;
	
	--
	-- 60d
	START TRANSACTION;
	SET rank = 1;
	SET no_more_rows = FALSE;
	UPDATE Boekranking_Plat SET `60d` = 9999999;
	OPEN cursor2;
	the_loop2: LOOP
		FETCH cursor2 INTO curEan;
		
		IF no_more_rows THEN
			CLOSE cursor2;
			LEAVE the_loop2;
		END IF;
		
		INSERT INTO Boekranking_Plat ( Ean, `60d` ) VALUES ( curEan, rank ) ON DUPLICATE KEY UPDATE `60d` = VALUES(`60d`);
		SET rank = rank + 1;
	END LOOP the_loop2;
	COMMIT;
	--
	-- 90d
	START TRANSACTION;
	SET rank = 1;
	SET no_more_rows = FALSE;
	UPDATE Boekranking_Plat SET `90d` = 9999999;
	OPEN cursor3;
	the_loop3: LOOP
		FETCH cursor3 INTO curEan;
		
		IF no_more_rows THEN
			CLOSE cursor3;
			LEAVE the_loop3;
		END IF;
		
		INSERT INTO Boekranking_Plat ( Ean, `90d` ) VALUES ( curEan, rank ) ON DUPLICATE KEY UPDATE `90d` = VALUES(`90d`);
		SET rank = rank + 1;
	END LOOP the_loop3;
	COMMIT;
	--
	-- 7d
	START TRANSACTION;
	SET rank = 1;
	SET no_more_rows = FALSE;
	UPDATE Boekranking_Plat SET `7d` = 9999999;
	OPEN cursor4;
	the_loop4: LOOP
		FETCH cursor4 INTO curEan;
		
		IF no_more_rows THEN
			CLOSE cursor4;
			LEAVE the_loop4;
		END IF;
		
		INSERT INTO Boekranking_Plat ( Ean, `7d` ) VALUES ( curEan, rank ) ON DUPLICATE KEY UPDATE `7d` = VALUES(`7d`);
		SET rank = rank + 1;
	END LOOP the_loop4;
	COMMIT;
	
	-- Ranking TOP
	INSERT IGNORE INTO Ranking_Top SELECT Ean, `1d`, `5d`, `7d`, `30d`, `90d` FROM Boekranking_Plat B;
	
	-- Ranking TOP #2
	UPDATE Ranking_Top T JOIN Boekranking_Plat P USING ( Ean )
		SET
			T.`1d` = IF( T.`1d` < P.`1d`, T.`1d`, P.`1d` ),
			T.`7d` = IF( T.`7d` < P.`7d`, T.`7d`, P.`7d` ),
			T.`30d` = IF( T.`30d` < P.`30d`, T.`30d`, P.`30d` ),
			T.`90d` = IF( T.`90d` < P.`90d`, T.`90d`, P.`90d` )
		WHERE  P.`30d` > 0 AND ( P.1d < T.1d OR P.5d < T.5d OR P.7d < T.7d OR P.30d < T.30d OR P.90d < T.90d );
		
	-- Ranking DATUM
	REPLACE INTO Boekranking_Datum SELECT Ean, CURDATE(), `30d` FROM Boekranking_Plat ORDER BY `30d` LIMIT 1000;
	
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `herbereken_reserveringen` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `herbereken_reserveringen`( myId INT )
BEGIN
DECLARE localEan CHAR(13) CHARACTER SET latin1;
DECLARE localReserveringen INT;

SELECT Ean INTO localEan FROM Bestellingen WHERE Id = myId;

CALL herbereken_reserveringen_ean( localEan );
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `herbereken_reserveringen_ean` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `herbereken_reserveringen_ean`( localEan CHAR(13) CHARACTER SET latin1 )
BEGIN
	DECLARE localReserveringen INT;
	IF localEan NOT IN ( 'PORTO', 'IDEAL', 'BONG', 'VOUCHER' ) THEN
		SELECT IFNULL( SUM( OpenAantal ), 0 ) INTO localReserveringen 
		   FROM open_orderregels
		   WHERE Ean = localEan AND niet_reserveren = 0;
		
		INSERT INTO Voorraadbeheer.`ReserveringenPerEan` SET Administratie = get_administratie(), Ean = localEan, Aantal = localReserveringen ON DUPLICATE KEY UPDATE Aantal = localReserveringen;
	END IF;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `herbereken_uur_reserveringen` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `herbereken_uur_reserveringen`()
BEGIN
	DECLARE localEan CHAR(13) character set latin1;
	DECLARE no_more_rows BOOLEAN;
	DECLARE loop_cntr INT DEFAULT 0;
	DECLARE num_rows INT DEFAULT 0;
	
	DECLARE C1 CURSOR FOR SELECT DISTINCT Ean FROM Computerboek_Klanten.Bestellingen JOIN Computerboek_Klanten.Bestelling USING ( BestellingId ) WHERE DT > DATE_SUB( NOW(), INTERVAL 1 HOUR ) AND Ean LIKE "978%";
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
	OPEN C1;
	
	the_loop: LOOP
		FETCH C1 INTO localEan;
		
		IF no_more_rows THEN
			CLOSE C1;
			LEAVE the_loop;
		END IF;
		
		CALL `herbereken_reserveringen_ean`( localEan );
	END LOOP the_loop;	
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `herbereken_week_reserveringen` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `herbereken_week_reserveringen`()
BEGIN
	DECLARE localEan CHAR(13) character set latin1;
	DECLARE no_more_rows BOOLEAN;
	DECLARE loop_cntr INT DEFAULT 0;
	DECLARE num_rows INT DEFAULT 0;
	
	DECLARE C1 CURSOR FOR SELECT DISTINCT Ean FROM Computerboek_Klanten.Bestellingen WHERE DTOrderregel > DATE_SUB( NOW(), INTERVAL 1 DAY ) AND Ean LIKE "978%";
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
	OPEN C1;
	
	the_loop: LOOP
		FETCH C1 INTO localEan;
		
		IF no_more_rows THEN
			CLOSE C1;
			LEAVE the_loop;
		END IF;
		
		CALL `herbereken_reserveringen_ean`( localEan );
	END LOOP the_loop;	
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `log_klanten_wijziging` */;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `log_klanten_wijziging`( iklantid INT, iveldnaam VARCHAR(255), ioud VARCHAR(255), inieuw VARCHAR(255), iomschrijving VARCHAR(255), iwie VARCHAR(255) )
    MODIFIES SQL DATA
BEGIN
	IF NOT ioud = inieuw THEN
		INSERT INTO Computerboek_Klanten.KlantenWijzigingen ( Klantid, DT, Veldnaam, Voor, Na, Omschrijving, Gebruiker ) VALUES ( iklantid, NOW(), iveldnaam, ioud, inieuw, IFNULL(iomschrijving,''), IFNULL(iwie,'') );	
	END IF;
    END ;;
DELIMITER ;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP PROCEDURE IF EXISTS `migratieBackorderReserveringenVrijgeven` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` PROCEDURE `migratieBackorderReserveringenVrijgeven`()
BEGIN
	DECLARE myId INT(11);
	DECLARE myEan VARCHAR(20) CHARACTER SET latin1;
	DECLARE myOmschrijving VARCHAR(255);
	DECLARE myAantal INT(11);
	DECLARE myBestellingid INT(11);
	DECLARE myKlantid INT(11);
	
	DECLARE no_more_rows INT DEFAULT 0;
	DECLARE cur CURSOR FOR 
		SELECT V.Id,V.Ean,V.Omschrijving,V.AantalBackorder-V.Geleverd,V.Bestellingid,B.Klantid
		FROM Bestellingen_met_backorders V
		JOIN BestellingAll B USING (Bestellingid)
		WHERE Ean REGEXP '[0-9]{13}'
		    AND Geleverd < AantalBackorder;
		
	/* continue handler voor de cursor */	
	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET no_more_rows = 1;
	
	/**
	 * Doorloop de orders
	 */	
	OPEN cur;
	the_loop: LOOP
		FETCH cur INTO
			myId,MyEan,MyOmschrijving,myAantal,myBestellingid,myKlantid;		
				
		IF no_more_rows THEN
			CLOSE cur;
			LEAVE the_loop;
		END IF;
		
		/**
		 * processing
		 */
		SELECT Voorraadbeheer.maakVoorraadreservering(get_administratie(),
								myEan,
								-1*myAantal,
								myBestellingid,
								myId,
								myKlantid,
								'gecorrigeerd',
								0,
								myOmschrijving)
							INTO @myResevering;
	END LOOP the_loop;		
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `migratieOrderregelStatus` */;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` PROCEDURE `migratieOrderregelStatus`()
BEGIN
	DECLARE myBestellingid INT;
	DECLARE no_more_rows INT DEFAULT 0;
	DECLARE cur CURSOR FOR 
		/**
		 * Selecteer alle orders met status factuur geprint
		 */
		SELECT DISTINCT Bestellingid FROM BestellingStatus 
			/*WHERE StatusId = 17*/ /* factuur geprint */ 
			WHERE StatusId=41 /* factuur sturen niet nodig */
			AND DT > DATE_SUB(NOW(),INTERVAL 6 DAY);
	
	/* continue handler voor de cursor */	
	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET no_more_rows = 1;
	
	/**
	 * Doorloop de orders
	 */	
	OPEN cur;
	the_loop: LOOP
		FETCH cur INTO
			myBestellingid;		
				
		IF no_more_rows THEN
			CLOSE cur;
			LEAVE the_loop;
		END IF;
		
		/**
		 * processing
		 */
		 
		INSERT INTO OrderregelStatus (StatusId,Id,Resultaat,Gebruiker,DT)
			SELECT 
				/*17*/ /* factuur geprint */
				41 /* factuur sturen niet nodig */ 
				,Id,'gelukt','~p',NOW() FROM Bestellingen B
			WHERE B.Bestellingid=myBestellingid AND B.Geannuleerd = 0 AND B.AantalBackorder=0;
	END LOOP the_loop;		
    END ;;
DELIMITER ;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP PROCEDURE IF EXISTS `orderregel_status` */;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`main`@`%` PROCEDURE `orderregel_status`( iStatus INT(11), iOrderRegel INT(11), iResultaat ENUM( 'gelukt', 'mislukt' ) )
BEGIN
	DECLARE LStatusId INT;
	DECLARE Download TINYINT;
	DECLARE BO INT;
	DECLARE VO INT;
	
	REPLACE INTO OrderregelStatus SET StatusId = iStatus, Id = iOrderRegel, DT = NOW(), Gebruiker = IFNULL( @initials, '' ), Resultaat = IResultaat;
	
	/* Zet ook status op backorderorigineel, indien nodig */
	SELECT BackorderOrigineel INTO BO FROM Bestellingen WHERE Id = iOrderRegel;
	SELECT Volgorde INTO VO FROM BestellingStatussen WHERE StatusId = iStatus;
	IF IFNULL( BO, 0 ) > 0 AND VO > 150 AND BO != iOrderRegel THEN
		CALL orderregel_status( iStatus, BO, iResultaat );
	END IF;
	
	/* Als afgesloten, zet dan ook 'kan gedownload worden' */
	IF iStatus = 2 THEN
		SELECT IFNULL( Bindwijze.Download, 0 ) INTO Download 
			FROM Computerboek_Boeken.`Bindwijze` JOIN Computerboek_Boeken.Boeken USING ( Bindwijze ) 
			JOIN Bestellingen ON ( Boeken.Ean = Bestellingen.Ean )
			WHERE Id = iOrderRegel;
			
		IF Download = 1 THEN  
			REPLACE INTO OrderregelStatus SET StatusId = 38, Id = iOrderRegel, DT = NOW(), Gebruiker = IFNULL( @initials, '' ), Resultaat = 'gelukt';	
		END IF;
	END IF;
	
	/* Zet 'actuele status' op orderregel */
	SELECT StatusId INTO LStatusId FROM OrderregelStatus JOIN BestellingStatussen USING ( StatusId ) WHERE  Volgorde < 10000 AND Id = iOrderRegel ORDER BY Volgorde DESC LIMIT 1;
	UPDATE Bestellingen BN SET BN.StatusId = LStatusId WHERE BN.Id = iOrderRegel;
	
	IF iStatus =  1 THEN UPDATE OrderregelStatusPlat SET `aangemaakt`                       = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus =  2 THEN UPDATE OrderregelStatusPlat SET `bevestigd`                        = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus =  5 THEN UPDATE OrderregelStatusPlat SET `gefactureerd`                     = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus =  6 THEN UPDATE OrderregelStatusPlat SET `is_geparkeerd`                    = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus =  7 THEN UPDATE OrderregelStatusPlat SET `factuurnummer_toegewezen`         = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus =  8 THEN UPDATE OrderregelStatusPlat SET `exact_export`                     = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus =  9 THEN UPDATE OrderregelStatusPlat SET `exact_controle`                   = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 11 THEN UPDATE OrderregelStatusPlat SET `exact_factuur_verwerkt`           = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 14 THEN UPDATE OrderregelStatusPlat SET `etiket_geprint`                   = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 15 THEN UPDATE OrderregelStatusPlat SET `ingepakt`                         = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 16  OR
       iStatus = 24 THEN UPDATE OrderregelStatusPlat SET `geannuleerd`                      = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 17 THEN UPDATE OrderregelStatusPlat SET `factuur_geprint`                  = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 18 THEN UPDATE OrderregelStatusPlat SET `pakketlabel_geprint`              = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 19 THEN UPDATE OrderregelStatusPlat SET `brieflabel_geprint`               = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 20 THEN UPDATE OrderregelStatusPlat SET `betaald_via_ideal`                = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 21 THEN UPDATE OrderregelStatusPlat SET `betaald`                          = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 23 THEN UPDATE OrderregelStatusPlat SET `openstaande_post_aangemaakt`      = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 25 THEN UPDATE OrderregelStatusPlat SET `in_backorder_gezet`               = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 26 THEN UPDATE OrderregelStatusPlat SET `oud_handmatig_verwerkt`           = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 27 THEN UPDATE OrderregelStatusPlat SET `automatisch_geclassificeerd`      = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 28 THEN UPDATE OrderregelStatusPlat SET `handmatig_geclassificeerd`        = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 29 THEN UPDATE OrderregelStatusPlat SET `gecrediteerd`                     = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 30 THEN UPDATE OrderregelStatusPlat SET `volledig_geleverd_backorder`      = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 31 THEN UPDATE OrderregelStatusPlat SET `samengevoegd_met_eerdere_order`   = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 32 THEN UPDATE OrderregelStatusPlat SET `niet_inpakken`                    = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 33 THEN UPDATE OrderregelStatusPlat SET `afgesloten`                       = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 34 THEN UPDATE OrderregelStatusPlat SET `factuur_per_mail_verzonden`       = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 35 THEN UPDATE OrderregelStatusPlat SET `pdf_factuur_gecontroleerd`        = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 36 THEN UPDATE OrderregelStatusPlat SET `voorgemeld_bij_postnl`            = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 37 THEN UPDATE OrderregelStatusPlat SET `pakket_afgeleverd_volgens_postnl` = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 38 THEN UPDATE OrderregelStatusPlat SET `kan_gedownload_worden`            = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 39 THEN UPDATE OrderregelStatusPlat SET `pakbon_geprint`                   = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 40 THEN UPDATE OrderregelStatusPlat SET `uit_backorder_gehaald`            = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 41 THEN UPDATE OrderregelStatusPlat SET `factuur_sturen_niet_nodig`        = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 42 THEN UPDATE OrderregelStatusPlat SET `hoeft_niet_betaald_te_worden`     = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 43 THEN UPDATE OrderregelStatusPlat SET `uitgevoerd_naar_exact_via_mari`   = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 44 THEN UPDATE OrderregelStatusPlat SET `wacht_op_compleet`                = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 45 THEN UPDATE OrderregelStatusPlat SET `inpakbevestiging_verzonden`       = 1 WHERE Id = iOrderRegel; END IF;
	IF iStatus = 46 THEN UPDATE OrderregelStatusPlat SET `niet_reserveren`                  = 1 WHERE Id = iOrderRegel; END IF;
END ;;
DELIMITER ;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP PROCEDURE IF EXISTS `orderregel_status_op_orderid` */;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `orderregel_status_op_orderid`( iStatus INT(11), iOrderId INT(11), iResultaat ENUM( 'gelukt', 'mislukt' ) )
BEGIN
	DECLARE LStatusId INT;
	DECLARE iId INT;
	DECLARE done BOOL;
	
	DECLARE cur1 CURSOR FOR SELECT Id FROM Bestellingen WHERE BestellingId = iOrderId AND Geannuleerd = 0;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
	
	OPEN cur1;
	
	read_loop: LOOP
		FETCH cur1 INTO iId;	
		
		IF done THEN
			LEAVE read_loop;
		END IF;		
	
		CALL orderregel_status( iStatus, iId, iResultaat );
	END LOOP;
	
	CLOSE cur1;
END ;;
DELIMITER ;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP PROCEDURE IF EXISTS `orderregel_status_op_orderid_zonder_backorders` */;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `orderregel_status_op_orderid_zonder_backorders`( iStatus INT(11), iOrderId INT(11), iResultaat ENUM( 'gelukt', 'mislukt' ) )
BEGIN
	DECLARE LStatusId INT;
	DECLARE iId INT;
	DECLARE done BOOL;
	
	DECLARE cur1 CURSOR FOR SELECT Id FROM Bestellingen WHERE BestellingId = iOrderId AND AantalBackorder = 0 AND Geannuleerd = 0;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
	
	OPEN cur1;
	
	read_loop: LOOP
		FETCH cur1 INTO iId;	
		
		IF done THEN
			LEAVE read_loop;
		END IF;		
	
		CALL orderregel_status( iStatus, iId, iResultaat );
	END LOOP;
	
	CLOSE cur1;
END ;;
DELIMITER ;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP PROCEDURE IF EXISTS `resyncOrderregelStatus` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `resyncOrderregelStatus`( _id INT )
BEGIN
	SET @skip_orderregelstatus_update = 1;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 2 ) SET A.`bevestigd` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 5 ) SET A.`gefactureerd` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 6 ) SET A.`is_geparkeerd` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 7 ) SET A.`factuurnummer_toegewezen` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 8 ) SET A.`exact_export` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 9 ) SET A.`exact_controle` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 11 ) SET A.`exact_factuur_verwerkt` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 14 ) SET A.`etiket_geprint` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 15 ) SET A.`ingepakt` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 16 ) SET A.`geannuleerd` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 17 ) SET A.`factuur_geprint` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 18 ) SET A.`pakketlabel_geprint` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 19 ) SET A.`brieflabel_geprint` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 20 ) SET A.`betaald_via_ideal` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 21 ) SET A.`betaald` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 23 ) SET A.`openstaande_post_aangemaakt` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 25 ) SET A.`in_backorder_gezet` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 26 ) SET A.`oud_handmatig_verwerkt` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 27 ) SET A.`automatisch_geclassificeerd` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 28 ) SET A.`handmatig_geclassificeerd` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 29 ) SET A.`gecrediteerd` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 30 ) SET A.`volledig_geleverd_backorder` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 31 ) SET A.`samengevoegd_met_eerdere_order` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 32 ) SET A.`niet_inpakken` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 33 ) SET A.`afgesloten` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 34 ) SET A.`factuur_per_mail_verzonden` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 35 ) SET A.`pdf_factuur_gecontroleerd` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 36 ) SET A.`voorgemeld_bij_postnl` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 37 ) SET A.`pakket_afgeleverd_volgens_postnl` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 38 ) SET A.`kan_gedownload_worden` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 39 ) SET A.`pakbon_geprint` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 40 ) SET A.`uit_backorder_gehaald` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 41 ) SET A.`factuur_sturen_niet_nodig` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 42 ) SET A.`hoeft_niet_betaald_te_worden` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 43 ) SET A.`uitgevoerd_naar_exact_via_mari` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 44 ) SET A.`wacht_op_compleet` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 45 ) SET A.`inpakbevestiging_verzonden` = 1 WHERE B.Id = _id;
	UPDATE OrderregelStatusPlat A JOIN OrderregelStatus B ON ( A.Id = B.Id AND B.StatusId = 46 ) SET A.`niet_reserveren` = 1 WHERE B.Id = _id;
	SET @skip_orderregelstatus_update = 0;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `sync_exactartikel` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `sync_exactartikel`( _ean CHAR(13) )
BEGIN
	--
	-- Tijdelijke tabel met exact-achtige gevens uit de boekentabel, 
	-- maar alleen van die boeken die nog niet in de exactartikelen tabel staan
	--
	CREATE TEMPORARY TABLE Tmp.ExactTemp
		SELECT 
		    Ean AS `Code`,
		    CONCAT(
		      B.Titel,
		      IF(
			B.Bindwijze != 'paperback' 
			AND B.Bindwijze != 'ingebonden' 
			AND B.Bindwijze != 'ingenaaid' 
			AND B.Bindwijze != 'gebonden',
			CONCAT(' (', B.Bindwijze, ')'),
			''
		      )
		    ) AS Titel,
		    Achternaam,
		    IF(
		      Aanbiedingsprijs > 0 
		      AND (
			NOW() BETWEEN IF(
			  AanbiedingVanaf = 0,
			  '2000-01-01 00:00',
			  AanbiedingVanaf
			) 
			AND IF(
			  AanbiedingTotenmet = 0,
			  '2099-12-12 00:00',
			  AanbiedingTotenmet
			)
		      ),
		      Aanbiedingsprijs,
		      Computerboek_Boeken.calc_prijs (B.Prijs, Valuta)
		    ) AS Prijs,
		    Computerboek_Boeken.calc_prijs (B.Prijs, Valuta) AS VastePrijs,
		    Aanbiedingsprijs AS ActiePrijs,
		    IFNULL(BB.BriefTitel, '') AS BriefTitel,
		    IF(
		      B.BoekStatus = 5,
		      6,
		      IF(
			B.BoekStatus = 2,
			7,
			IF(
			  B.BoekStatus = 99,
			  8,
			  IF(B.BoekStatus = 1, 8, 0)
			)
		      )
		    ) AS BackorderCode,
		    0 AS ExactArtikel,
		    Btwcode_tbv_export AS BTWCode,
		    G.Artgroep AS ArtikelGroep,
		    IFNULL(B.Boeksoort, 'O'),
		    B.Bindwijze,
		    B.Magazijnsoort,
		    B.Magazijnlocatienummer,
		    W.Bindwijze_inpakken 
		  FROM
		    Computerboek_Boeken.Boeken B 
		    LEFT JOIN Computerboek_Boeken.Bindwijze W USING (Bindwijze) 
		    LEFT JOIN Computerboek_Boeken.Artikelgroep G 
		      ON (
			IF(
			  B.Artgroepid,
			  B.Artgroepid,
			  W.Artgroepid
			) = G.Id
		      ) 
		    JOIN Computerboek_Boeken.Auteurs A1 
		      ON (B.Auteur1 = A1.Auteurid) 
		    LEFT JOIN Computerboek_Boeken.Boekbrieven BB 
		      ON (B.Brief = BB.Brief_id)
		    LEFT JOIN Computerboek_Klanten.`ExactArtikelen` EA
		      ON ( EA.Code = B.Ean )
		    WHERE Ean = _ean;
  
	-- INSERT NU DIE BOEKEN
	INSERT IGNORE INTO Computerboek_Klanten.`ExactArtikelen`
	SELECT * FROM Tmp.ExactTemp
	ON DUPLICATE KEY UPDATE
	    `Titel`  = VALUES(Titel),
	    `Auteur` = VALUES(Auteur),
	    `Prijs`  = VALUES(Prijs),
	    VastePrijs = VALUES(VastePrijs),
	    ActiePrijs = VALUES(ActiePrijs),
	    BriefCode = VALUES(BriefCode),
	    BackorderCode = VALUES(BackorderCode),
	    ExactArtikel = VALUES(ExactArtikel),
	    BTWCode = VALUES(BTWCode),
	    ArtikelGroep = VALUES(ArtikelGroep),
	    BoekSoort = VALUES(BoekSoort),
	    Bindwijze = VALUES(Bindwijze),
	    Magazijnsoort = VALUES(Magazijnsoort),
	    Magazijnlocatienummer = VALUES(Magazijnlocatienummer),
	    NietInpakken = VALUES(NietInpakken);
	DROP TEMPORARY TABLE Tmp.ExactTemp;	
	 
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `sync_exactartikelen` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `sync_exactartikelen`()
BEGIN
	--
	-- Tijdelijke tabel met exact-achtige gevens uit de boekentabel, 
	-- maar alleen van die boeken die nog niet in de exactartikelen tabel staan
	--
	CREATE TEMPORARY TABLE Tmp.ExactTemp
		SELECT 
		    Ean AS `Code`,
		    CONCAT(
		      B.Titel,
		      IF(
			B.Bindwijze != 'paperback' 
			AND B.Bindwijze != 'ingebonden' 
			AND B.Bindwijze != 'ingenaaid' 
			AND B.Bindwijze != 'gebonden',
			CONCAT(' (', B.Bindwijze, ')'),
			''
		      )
		    ) AS Titel,
		    Achternaam,
		    IF(
		      Aanbiedingsprijs > 0 
		      AND (
			NOW() BETWEEN IF(
			  AanbiedingVanaf = 0,
			  '2000-01-01 00:00',
			  AanbiedingVanaf
			) 
			AND IF(
			  AanbiedingTotenmet = 0,
			  '2099-12-12 00:00',
			  AanbiedingTotenmet
			)
		      ),
		      Aanbiedingsprijs,
		      Computerboek_Boeken.calc_prijs (B.Prijs, Valuta)
		    ) AS Prijs,
		    Computerboek_Boeken.calc_prijs (B.Prijs, Valuta) AS VastePrijs,
		    Aanbiedingsprijs AS ActiePrijs,
		    IFNULL(BB.BriefTitel, '') AS BriefTitel,
		    IF(
		      B.BoekStatus = 5,
		      6,
		      IF(
			B.BoekStatus = 2,
			7,
			IF(
			  B.BoekStatus = 99,
			  8,
			  IF(B.BoekStatus = 1, 8, 0)
			)
		      )
		    ) AS BackorderCode,
		    0 AS ExactArtikel,
		    Btwcode_tbv_export AS BTWCode,
		    G.Artgroep AS ArtikelGroep,
		    IFNULL(B.Boeksoort, 'O'),
		    B.Bindwijze,
		    B.Magazijnsoort,
		    B.Magazijnlocatienummer,
		    W.Bindwijze_inpakken 
		  FROM
		    Computerboek_Boeken.Boeken B 
		    LEFT JOIN Computerboek_Boeken.Bindwijze W USING (Bindwijze) 
		    LEFT JOIN Computerboek_Boeken.Artikelgroep G 
		      ON (
			IF(
			  B.Artgroepid,
			  B.Artgroepid,
			  W.Artgroepid
			) = G.Id
		      ) 
		    JOIN Computerboek_Boeken.Auteurs A1 
		      ON (B.Auteur1 = A1.Auteurid) 
		    LEFT JOIN Computerboek_Boeken.Boekbrieven BB 
		      ON (B.Brief = BB.Brief_id)
		    LEFT JOIN Computerboek_Klanten.`ExactArtikelen` EA
		      ON ( EA.Code = B.Ean )
		      
		    WHERE EA.Titel != CONCAT( B.Titel, IF(  B.Bindwijze != 'paperback' AND B.Bindwijze != 'ingebonden' AND B.Bindwijze != 'ingenaaid' AND B.Bindwijze != 'gebonden', CONCAT(' (', B.Bindwijze, ')'), '' ) )
		    OR EA.Prijs != ROUND(IF(
		      Aanbiedingsprijs > 0 
		      AND (
			NOW() BETWEEN IF(
			  AanbiedingVanaf = 0,
			  '2000-01-01 00:00',
			  AanbiedingVanaf
			) 
			AND IF(
			  AanbiedingTotenmet = 0,
			  '2099-12-12 00:00',
			  AanbiedingTotenmet
			)
		      ),
		      Aanbiedingsprijs,
		      Computerboek_Boeken.calc_prijs (B.Prijs, Valuta)
		    ),2)
		    OR IFNULL(BB.BriefTitel, '') != BriefTitel
		    OR IF(
		      B.BoekStatus = 5,
		      6,
		      IF(
			B.BoekStatus = 2,
			7,
			IF(
			  B.BoekStatus = 99,
			  8,
			  IF(B.BoekStatus = 1, 8, 0)
			)
		      )
		    ) != Backordercode
		    OR Btwcode_tbv_export != EA.BTWCode
		    OR EA.Bindwijze != B.`Bindwijze`
		    OR B.`Magazijnsoort` != EA.Magazijnsoort
		    OR W.`Bindwijze_inpakken` != NietInpakken
		    OR EA.`Code` IS NULL;
  
	-- INSERT NU DIE BOEKEN
	INSERT IGNORE INTO Computerboek_Klanten.`ExactArtikelen`
	SELECT * FROM Tmp.ExactTemp
	ON DUPLICATE KEY UPDATE
	    `Titel`  = VALUES(Titel),
	    `Auteur` = VALUES(Auteur),
	    `Prijs`  = VALUES(Prijs),
	    VastePrijs = VALUES(VastePrijs),
	    ActiePrijs = VALUES(ActiePrijs),
	    BriefCode = VALUES(BriefCode),
	    BackorderCode = VALUES(BackorderCode),
	    ExactArtikel = VALUES(ExactArtikel),
	    BTWCode = VALUES(BTWCode),
	    ArtikelGroep = VALUES(ArtikelGroep),
	    BoekSoort = VALUES(BoekSoort),
	    Bindwijze = VALUES(Bindwijze),
	    Magazijnsoort = VALUES(Magazijnsoort),
	    Magazijnlocatienummer = VALUES(Magazijnlocatienummer),
	    NietInpakken = VALUES(NietInpakken);
	DROP TEMPORARY TABLE Tmp.ExactTemp;
	
	--
	-- CREATE Tijdelijke tabel, stom prepared statement om performance te krijgen.
	--
	DROP TEMPORARY TABLE IF EXISTS Tmp.TmpBoeken;
	PREPARE st1 FROM 
	"CREATE TEMPORARY TABLE Tmp.TmpBoeken ENGINE=MEMORY
	SELECT `Code` , EA.Titel, IFNULL( EA.Prijs*100, 0 ) AS Prijs, 99 AS BoekStatus, IFNULL( EA.Bindwijze, K.Bindwijze ) AS Bindwijze FROM `ExactArtikelen` EA
					JOIN ExactKoppeling.`BindwijzeKoppeling` K USING ( Artikelgroep ) 
					LEFT JOIN Computerboek_Boeken.Boeken ON ( `Code` = `Ean` ) 
					WHERE `Code` <> ''
					AND Ean IS NULL;";
	EXECUTE st1;
	
	--
	-- Daarna sync exact artikelen naar boekendb. In apart stored procedure ivm cursor. 
	-- (cursor declaratie moet bovenaan; maar tijdelijke tabel word pas later gemaakt)
	--
	CALL sync_exact_naar_boeken;
	 
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `sync_exact_naar_boeken` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `sync_exact_naar_boeken`()
BEGIN
	DECLARE Ean CHAR(13);
	DECLARE Titel VarChar(255);
	DECLARE Bindwijze VARCHAR(255);
	DECLARE Prijs DECIMAL(8,2);
	DECLARE Boekstatus INT;
	DECLARE no_more_rows INT DEFAULT 0;
	DECLARE cur CURSOR FOR SELECT `Code`, Titel, Bindwijze, Prijs, Boekstatus FROM Tmp.TmpBoeken;
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = 1;				
	
	OPEN cur;
	the_loop: LOOP
		FETCH cur INTO Ean, Titel, Bindwijze, Prijs, Boekstatus;
		IF no_more_rows THEN
			CLOSE cur;
			LEAVE the_loop;
		END IF;		
		
		INSERT IGNORE INTO Computerboek_Boeken.Boeken SET Ean = Ean, Bindwijze = Bindwijze, Titel = Titel, Prijs = Prijs, Boekstatus = Boekstatus, Boeken_verborgenBoek=1;
	END LOOP the_loop;
	DROP TEMPORARY TABLE Tmp.TmpBoeken;
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `tmp_orderregels` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` PROCEDURE `tmp_orderregels`(myBestellingid INT)
    READS SQL DATA
BEGIN
	set @@session.max_sp_recursion_depth=10; 
	/* create tmp table orderregels */
	DROP TEMPORARY TABLE IF EXISTS tmp.Orderregels;
	CREATE TEMPORARY TABLE tmp.Orderregels(Id INT PRIMARY KEY, OrigineelBestellingId INT,BestellingId INT, Factuurid INT,DTFactuur DATETIME, DT DATETIME, Ean VARCHAR(100), Aantal INT,AantalBackorder INT,
						Auteurnaam VARCHAR(100), Omschrijving VARCHAR(100),StatusId INT, `Status` VARCHAR(100), Prijs DOUBLE, Kortingpercentage DOUBLE, Bedrag DOUBLE,
						DTBelofte VARCHAR(100),BriefCode INT, AantalNogInBackorder INT, BackorderReden INT, Geannuleerd INT,Geexporteerd TINYINT(1),
						OrigineleOrderregel TINYINT(1),`Type` VARCHAR(20),IsPakket TINYINT(1) DEFAULT 0,IsBrief TINYINT(1) DEFAULT 0,MagCredit TINYINT(1) DEFAULT 0,
						DTAnnulering DATETIME,KEY (`Id`),CreditBestellingId INT,IsVanKlantenservice TINYINT(1),IsOpen TINYINT(1), INDEX (`OrigineelBestellingId`)) ENGINE=MEMORY;										
						
	/*DROP TEMPORARY TABLE IF EXISTS tmp.OrderregelsLog;
	CREATE TEMPORARY TABLE tmp.OrderregelsLog(`Log` VARCHAR(255)) ENGINE=MEMORY;*/
						
	/* opvragen van de backorder informatie */
	-- CALL backorderregels();
	
	call tmp_order_toevoegen(myBestellingid,myBestellingid);			
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `tmp_orderregels_toevoegen` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` PROCEDURE `tmp_orderregels_toevoegen`(myBestellingId INT,myOrigineelBestellingid INT,myType VARCHAR(20))
    MODIFIES SQL DATA
BEGIN
	INSERT INTO tmp.Orderregels SELECT 
                  BS.Id,
		  myOrigineelBestellingid,
                  BS.BestellingId,
                  BS.Factuurid,
                  F.DT,
                  BS.DTOrderregel,
                  BS.Ean,
                  BS.Aantal,
                  BS.AantalBackorder,
                  BS.Auteurnaam,
                  BS.Omschrijving,
                  BS.StatusId,
                  BSS.Naam,
                  BS.Prijs,
                  BS.Kortingpercentage,
                  BS.BedragIncBtwIncKorting,                  
                  BB.DTBelofte,
                  BS.BriefCode,
                  IF(BS.AantalBackorder > 0,BS.AantalBackorder-orderregel_geleverd(BS.Id),0),
                  BS.BackorderReden,
                  BS.Geannuleerd,
                  BS.Geexporteerd,
                  IF(myOrigineelBestellingid = myBestellingId,1,0),
                  IF(BS.Geannuleerd = 1,'geannuleerd',IF(BS.AantalBackorder > 0 AND BS.AantalBackorder-orderregel_geleverd(BS.Id) = 0,'volledig geleverd',IF (BS.Factuurid > 0 AND myType NOT IN('credit','uit backorder'),'gefactureerd',myType))),
                  OSPlat.pakketlabel_geprint,
                  OSPlat.brieflabel_geprint,
                  IF(BS.Factuurid > 0 AND OSPlat.gecrediteerd = 0 AND BS.Aantal > 0,1,0)/*magCredit*/,
                  OSAnnulering.DT,
                  BS.BestellingId AS CreditBestellingId,
                  OSPlat.vink_klantenservice,
                  OSPlat.vink_open
                  FROM Bestellingen BS
                  LEFT JOIN OrderregelStatus OSAnnulering ON (OSAnnulering.Id = BS.Id AND OSAnnulering.StatusId=24) 
                  LEFT JOIN OrderregelStatusPlat OSPlat ON (OSPlat.Id = BS.Id) 
                  LEFT JOIN ExactKoppeling.Facturen F ON (F.FactuurID = BS.Factuurid)
                  LEFT JOIN BestellingenBelofte BB ON(BB.Id=BS.Id) 
                  LEFT JOIN BestellingStatussen BSS ON (BSS.StatusId=BS.StatusId)
                  WHERE BS.Bestellingid = myBestellingid
                  GROUP BY BS.Id
                  ORDER BY Factuurid;                                    
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `tmp_order_toevoegen` */;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` PROCEDURE `tmp_order_toevoegen`(myBestellingid INT,myOrigineelBestellingid INT)
    MODIFIES SQL DATA
BEGIN
	DECLARE loopBestellingid INT;
	DECLARE no_more_rows INT DEFAULT 0;
	DECLARE myUitBackorder INT DEFAULT 0;
	DECLARE myIsOpnieuw INT DEFAULT 0;
	DECLARE myIsCredit INT DEFAULT 0;
	DECLARE myType VARCHAR(20);
	
	DECLARE cur CURSOR FOR SELECT 
		BA.Bestellingid
	FROM BestellingAll BA
	WHERE BA.OrigineelBestellingid = myBestellingid;	
	
	DECLARE CONTINUE HANDLER FOR NOT FOUND
		SET no_more_rows = 1;	
		
	SELECT BA.UitBackorder, BA.IsOpnieuw, BA.IsCredit 
		INTO myUitBackorder,myIsOpnieuw,myIsCredit
		FROM BestellingAll BA WHERE Bestellingid=myBestellingid;
		
	IF myUitBackorder = 1 THEN
		SET myType = 'uit backorder';
	ELSEIF myIsCredit = 1 THEN
		SET myType = 'credit';
	ELSEIF myIsOpnieuw = 1 THEN
		SET myType = 'opnieuw';
	ELSE
		SET myType = 'origineel';
	END IF;
		
	/*INSERT INTO tmp.OrderregelsLog SET `Log` = CONCAT(myBestellingid,'-',myOrigineelBestellingid);*/
		
	/* orderregels toevoegen voor deze bestelling */			
	CALL tmp_orderregels_toevoegen(myBestellingid,myOrigineelBestellingid,myType);		
		
	/* loop door eventueel afgeleide orders */
	OPEN cur;		
	
	the_loop: LOOP
		FETCH cur INTO
			loopBestellingid;
		IF no_more_rows THEN
			CLOSE cur;
			LEAVE the_loop;
		END IF;		
		
		/* opnieuw aanroepen om te bepalen of er nog meer afgeleide orders zijn */
		CALL tmp_order_toevoegen(loopBestellingid,myOrigineelBestellingid);			
	END LOOP the_loop;	
END ;;
DELIMITER ;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP PROCEDURE IF EXISTS `undo_annulering` */;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `undo_annulering`( id INT )
    MODIFIES SQL DATA
BEGIN
	/* zet geannuleerd vink uit */
	UPDATE BestellingAll SET BestellingAll.Geannuleerd = 0 WHERE Bestellingid=id;
	
	/* zet de geannuleerd vink uit op alle orderregels */
	UPDATE Bestellingen SET Geannuleerd = 0 WHERE Bestellingid=id;
	
	/* 
	 * verwijder de 'geannuleerd' statussen
	 * 24,16 (geannuleerd)
	 * 33 (afgesloten) omdat na annulering ook de afgesloten status gezet wordt
	 */
	DELETE FROM `BestellingStatus` WHERE 
		BestellingId = id AND
		(StatusId = 24 OR StatusId=16 OR StatusId=33);
    END ;;
DELIMITER ;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP PROCEDURE IF EXISTS `undo_order_inpakstatus` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` PROCEDURE `undo_order_inpakstatus`( bid INT )
BEGIN
	UPDATE BestellingenInpakstatus
	SET
		aantalIngepakt = 0,
		DT = NULL,
		Gebruiker = NULL
	WHERE BestellingenId IN ( SELECT Id FROM Bestellingen WHERE Bestellingid = bid );
	
	DELETE FROM BestellingStatus
	WHERE BestellingId = bid
		AND ( statusId = 12 OR statusId = 13 OR statusId = 14 );
END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `update_bestelling_herkomst` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `update_bestelling_herkomst`( _id INT )
BEGIN
	DECLARE _gclid VARCHAR( 255 );
	DECLARE _referer VARCHAR( 255 );
	DECLARE _term VARCHAR(255);
	DECLARE _aff INT;
	DECLARE _nb INT;
	DECLARE _isEigenNaam INT;
	DECLARE _isProducten INT;
	DECLARE _oudeherkomst CHAR( 20 );
	
	INSERT IGNORE INTO BestellingHerkomst SET BestellingId = _id;
	
	-- Get GCLID
	SELECT SessionGclid.`Gclid`, SessionGclid.`Term` INTO _gclid,_term FROM Computerboek_Klanten.`SessionGclid` JOIN Computerboek_Klanten.BestellingAll USING ( SessionId ) 
	WHERE BestellingId = _id LIMIT 1;
	
	-- Affiliate
	SELECT AffiliateId, Herkomst, ReferrerDomain INTO _aff, _oudeherkomst, _referer FROM BestellingAll WHERE BestellingId = _id;
	-- Fix lege herkomst	
	IF _oudeherkomst = '' THEN
		SET _oudeherkomst = 'Website';
	END IF;
	-- Get referer
	IF _referer IS NULL THEN
		SELECT Referer INTO _referer FROM Computerboek_Klanten.`SessionLog` JOIN Computerboek_Klanten.BestellingAll USING ( SessionId ) WHERE BestellingId = _id  LIMIT 1;
	END IF;
	
	-- Nieuwsbrief
	SELECT COUNT(*) > 0 INTO _nb FROM BestellingenExtra JOIN Bestellingen USING ( Id ) WHERE Tag LIKE "nb%" AND BestellingId = _id;
	
	SET _isProducten = 0;
	IF NOT _gclid IS NULL THEN		
		SELECT 
		  COUNT(*) INTO _isProducten
		FROM
		  AdWords.`ClickLog` 
		  JOIN AdWords.`StructureAds` A USING (adid) 
		  JOIN AdWords.`StructureAdGroup` G USING (adgroupid) 
		WHERE G.`campaignid` = 99973038 AND gclid = _gclid;		
	END IF;
	
	IF	_aff > 0 THEN
		UPDATE BestellingHerkomst SET BestellingHerkomst = 'Affiliate' WHERE BestellingId  = _id;
	ELSEIF _isProducten = 1 AND _referer LIKE "%google%" THEN
		UPDATE BestellingHerkomst SET Gclid = _gclid, Keyword = _term, BestellingHerkomst = 'Adwords' WHERE BestellingId = _id;
	ELSEIF (NOT _gclid IS NULL) AND (_isProducten = 0) THEN
		UPDATE BestellingHerkomst SET BestellingHerkomst = 'AdwordsDirect' WHERE BestellingId  = _id;
	ELSEIF _referer LIKE "%google%" AND AdWords.urlparam( _referer, "q" ) LIKE "%Computerboek%" THEN
		UPDATE BestellingHerkomst SET BestellingHerkomst = 'OrganicDirect' WHERE BestellingId  = _id;
	ELSEIF _referer LIKE "%google%" AND AdWords.urlparam( _referer, "q" ) NOT LIKE "%Computerboek%" THEN
		UPDATE BestellingHerkomst SET BestellingHerkomst = 'Organic' WHERE BestellingId  = _id;
	ELSEIF _referer IN ( 'https://www.google.nl', 'https://www.google.com', 'https://www.google.be' ) THEN
		UPDATE BestellingHerkomst SET BestellingHerkomst = 'Organic' WHERE BestellingId  = _id;
	ELSEIF _nb = 1 THEN
		UPDATE BestellingHerkomst SET BestellingHerkomst = 'Nieuwsbrief' WHERE BestellingId  = _id;
	ELSEIF LENGTH( _referer ) > 0 AND _referer NOT LIKE "%google%" AND _referer NOT LIKE "%Computerboek%" AND _referer NOT LIKE "%mainpress%" THEN
		UPDATE BestellingHerkomst SET BestellingHerkomst = 'Extern' WHERE BestellingId  = _id;
	ELSE
		UPDATE BestellingHerkomst SET BestellingHerkomst = 'Direct' WHERE BestellingId  = _id;
	END IF;
	
	-- oude herkomst >> Kanaal
	IF      _oudeherkomst = 'MARI' THEN
		UPDATE BestellingHerkomst SET Kanaal = 'MARI'  WHERE BestellingId = _id;
	ELSEIF _oudeherkomst = 'NCOI' THEN
		UPDATE BestellingHerkomst SET Kanaal = 'NCOI'  WHERE BestellingId = _id;
	ELSEIF _oudeherkomst = 'ABO' THEN
		UPDATE BestellingHerkomst SET Kanaal = 'ABO'  WHERE BestellingId = _id;
	ELSEIF _oudeherkomst = 'iOS' THEN
		UPDATE BestellingHerkomst SET Kanaal = 'IOS App' WHERE BestellingId = _id;
	ELSEIF _oudeherkomst = 'Android' THEN
		UPDATE BestellingHerkomst SET Kanaal = 'Android App' WHERE BestellingId  = _id;
	ELSEIF _oudeherkomst = 'Website' THEN
		UPDATE BestellingHerkomst SET Kanaal = 'Website' WHERE BestellingId  = _id AND IFNULL(Kanaal,'') != 'Mobile';
	END IF;
	
	
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `update_ebooks_verzonden` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `update_ebooks_verzonden`( bid INT )
    MODIFIES SQL DATA
BEGIN
	UPDATE Computerboek_Klanten.`Bestelling`
	JOIN Computerboek_Klanten.`Bestellingen` USING ( BestellingId )
	JOIN Computerboek_Klanten.`BestellingenStatus` USING ( id )
	JOIN Computerboek_Boeken.Boeken USING ( Ean )
	JOIN Computerboek_Boeken.`Bindwijze` USING ( Bindwijze )
	SET `BestellingenStatus`.`VerzondenOp` = Bestelling.`DT`
	WHERE BestellingId = bid
	AND ( Bindwijze LIKE "%epub%" OR Bindwijze LIKE "%ebook%" OR Bindwijze LIKE "%download%" );
    END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `update_exactartikelen` */;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `update_exactartikelen`( iEAN CHAR(15) )
    MODIFIES SQL DATA
BEGIN
INSERT INTO Computerboek_Klanten.ExactArtikelen
SELECT
  Ean              AS `Code`,
  CONCAT( Titel, IF( B.Bindwijze != 'paperback' AND B.Bindwijze != 'ingebonden' AND B.Bindwijze != 'ingenaaid' AND B.Bindwijze != 'gebonden', CONCAT( ' (',B.Bindwijze,')'),'' )),
  Achternaam,
  IF( Aanbiedingsprijs > 0 AND ( NOW() BETWEEN IF( AanbiedingVanaf = 0, '2000-01-01 00:00', AanbiedingTotenmet ) AND IF( AanbiedingTotenmet = 0, '2099-12-12 00:00', AanbiedingTotenmet ) ), Aanbiedingsprijs, Computerboek_Boeken.calc_prijs( Prijs, Valuta ) ) AS Prijs,
  Computerboek_Boeken.calc_prijs( Prijs, Valuta ) AS VastePrijs,
  Aanbiedingsprijs AS ActiePrijs,
  IFNULL( BB.BriefTitel, '' ) AS BriefTitel,
  IF( B.BoekStatus = 5, 6, IF( B.BoekStatus = 2, 7, IF( B.BoekStatus = 99, 8, IF( B.BoekStatus = 1, 8, 0 ) ) ) ) AS BackorderCode,
  0                AS ExactArtikel,
Btwcode_tbv_export AS BTWCode,
G.Artgroep AS ArtikelGroep,
IFNULL( B.Boeksoort, 'O' ),
B.Bindwijze,
B.Magazijnsoort,
B.Magazijnlocatienummer,
W.Bindwijze_inpakken
 
FROM Computerboek_Boeken.Boeken B
	LEFT JOIN Computerboek_Boeken.Bindwijze W USING ( Bindwijze )
	LEFT JOIN Computerboek_Boeken.Artikelgroep G ON ( IF( B.Artgroepid, B.Artgroepid, W.Artgroepid ) = G.Id )
  JOIN Computerboek_Boeken.Auteurs A1
    ON (B.Auteur1 = A1.Auteurid)
  LEFT JOIN Computerboek_Boeken.Boekbrieven BB
    ON (B.Brief = BB.Brief_id)
WHERE Ean = iEAN
ON DUPLICATE KEY UPDATE Titel = CONCAT( B.Titel, IF( B.Bindwijze != 'paperback' AND B.Bindwijze != 'ingebonden' AND B.Bindwijze != 'ingenaaid' AND B.Bindwijze != 'gebonden', CONCAT( ' (',B.Bindwijze,')'),'' )), Prijs = IF( B.Aanbiedingsprijs > 0 AND ( NOW() BETWEEN IF( B.AanbiedingVanaf = 0, '2000-01-01 00:00', AanbiedingVanaf ) AND IF( AanbiedingTotenmet = 0, '2099-12-12 00:00', AanbiedingTotenmet ) ), B.Aanbiedingsprijs, Computerboek_Boeken.calc_prijs( B.Prijs, Valuta ) ), VastePrijs = Computerboek_Boeken.calc_prijs( B.Prijs, Valuta ), ActiePrijs = Aanbiedingsprijs, ExactArtikel = 0, BackorderCode = IF( B.BoekStatus = 5, 6, IF( B.BoekStatus = 2, 7, IF( B.BoekStatus = 99, 8, IF( B.BoekStatus = 1, 8, 0 ) ) ) ),
BTWCode = IFNULL( Btwcode_tbv_export, '' ), ArtikelGroep = IFNULL( G.Artgroep, '' ), Boeksoort = IFNULL( B.Boeksoort, 'O' ), Bindwijze = IFNULL( B.Bindwijze, '' ), Magazijnsoort = IFNULL( B.Magazijnsoort, '' ), Magazijnlocatienummer = IFNULL( B.Magazijnlocatienummer, '' );
    END ;;
DELIMITER ;
ALTER DATABASE `Computerboek_Klanten` CHARACTER SET utf8 COLLATE utf8_general_ci ;
/*!50003 DROP PROCEDURE IF EXISTS `update_kosten_mp` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` PROCEDURE `update_kosten_mp`( id INT )
    MODIFIES SQL DATA
BEGIN
	DECLARE Porto DOUBLE;
	DECLARE VasteKosten DOUBLE;
	DECLARE Bong DOUBLE;
	DECLARE Aantal INT;
	DECLARE FirstID INT;
	DECLARE GedeeldeKosten DECIMAL( 10, 2 );
	DECLARE Verschil DECIMAL( 10, 2 );
	DECLARE R INT;
	
	SET VasteKosten = 5.5;
	
	-- Tel portokosten, zodat we die later kunnen verrekenen
	SELECT Prijs/100 INTO Porto FROM Bestellingen WHERE Bestellingid = id AND EAN = 'PORTO' LIMIT 1;
	SET Porto = IFNULL( Porto, 0 );
	
	-- Tel aantal in te pakken orderregels, niets in te pakken -> Geen kosten.
	SELECT COUNT(*) INTO Aantal 
	FROM Bestellingen
		JOIN OrderregelStatusPlat USING ( Id )
	WHERE Bestellingid = id
		AND EAN NOT IN ( 'PORTO', 'BONG', 'IDEAL', 'VOUCHER' )
		AND niet_inpakken = 0;
	
	IF Aantal > 0 THEN
		SET GedeeldeKosten = ( VasteKosten - Porto ) / Aantal;
		-- Reset alle kosten in deze bestelling
		UPDATE Bestellingen SET KostenMP = 0 WHERE Bestellingid = id;
		
		-- Zet kosten op die regels die er toe doen
		UPDATE Bestellingen JOIN OrderregelStatusPlat USING ( Id ) 
			SET KostenMP = GedeeldeKosten 
		WHERE Bestellingid = id 
			AND EAN NOT IN ( 'PORTO', 'BONG', 'IDEAL', 'VOUCHER' )
			AND niet_inpakken = 0;
			
		-- Afrondingsverschil wegwerken
		SELECT
			ROUND( ( VasteKosten - Porto ) - SUM( KostenMP ), 2 ),
			IFNULL( MIN(Id), 0 )
		INTO Verschil, R
		FROM Bestellingen JOIN OrderregelStatusPlat USING ( Id ) 
		WHERE Bestellingid = id
			AND EAN NOT IN ( 'PORTO', 'BONG', 'IDEAL', 'VOUCHER' )
			AND niet_inpakken = 0;
		
		IF Verschil > 0 AND R > 0 THEN
			UPDATE Bestellingen SET KostenMP = KostenMP + Verschil
			WHERE BestellingId = id AND Id = R;
		END IF;
		
	ELSE
		-- Niets in te pakken? Geen kosten.
		UPDATE Bestellingen SET KostenMP = 0
		WHERE Bestellingid = id
			AND KostenMP != 0
			AND EAN NOT IN ( 'PORTO', 'BONG', 'IDEAL', 'VOUCHER' );
	END IF;
	END ;;
DELIMITER ;
/*!50003 DROP PROCEDURE IF EXISTS `verwerk_plankVoorraad_wijziging` */;
DELIMITER ;;
CREATE DEFINER=`pieter`@`%` PROCEDURE `verwerk_plankVoorraad_wijziging`( EanInput CHAR(13) CHARACTER SET latin1, AantalInput INT(11) )
BEGIN
	DECLARE huidigeVoorraad INT(11);
	SELECT voorraad(EanInput) INTO huidigeVoorraad;
	
	INSERT IGNORE INTO Voorraadmutaties SET
		Ean = EanInput,
		Mutatie = AantalInput - huidigeVoorraad,
		DT = NOW(),
		Orderregelid = null,
		Gebruiker = @initials,
		`Type` = 'gecorrigeerd';
	END ;;
DELIMITER ;

--
-- Current Database: `Computerboek_Nieuwsbrieven`
--

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

USE `Computerboek_Nieuwsbrieven`;

--
-- Table structure for table `Bounces`
--

CREATE TABLE `Bounces` (
  `from` varchar(255) DEFAULT NULL,
  `to` varchar(255) DEFAULT NULL,
  `dt` datetime DEFAULT NULL,
  `message` text,
  `isbounce` tinyint(4) DEFAULT NULL,
  `uuid` char(36) DEFAULT NULL,
  KEY `NewIndex1` (`uuid`),
  KEY `dt` (`dt`),
  KEY `bauuid` (`isbounce`,`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;

--
-- Table structure for table `Klant_Bounces`
--

CREATE TABLE `Klant_Bounces` (
  `klantid` int(11) NOT NULL,
  `hard` int(11) NOT NULL,
  `soft` int(11) NOT NULL,
  PRIMARY KEY (`klantid`),
  KEY `NewIndex1` (`hard`),
  KEY `NewIndex2` (`soft`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;

--
-- Table structure for table `Klantenselectie`
--

CREATE TABLE `Klantenselectie` (
  `klantenselectie` int(11) NOT NULL,
  `titel` varchar(255) DEFAULT NULL,
  `query` mediumtext,
  `show` tinyint(1) NOT NULL,
  PRIMARY KEY (`klantenselectie`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

--
-- Table structure for table `NieuwsbriefOmzet`
--

CREATE TABLE `NieuwsbriefOmzet` (
  `nieuwsbriefid` int(11) NOT NULL,
  `omzet` double(8,2) DEFAULT NULL,
  `dt` datetime DEFAULT NULL,
  PRIMARY KEY (`nieuwsbriefid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `Nieuwsbrief_Eans`
--

CREATE TABLE `Nieuwsbrief_Eans` (
  `nieuwsbriefid` int(10) unsigned NOT NULL,
  `ean` char(13) NOT NULL,
  PRIMARY KEY (`nieuwsbriefid`,`ean`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `Nieuwsbrief_Mail`
--

CREATE TABLE `Nieuwsbrief_Mail` (
  `nieuwsbriefid` int(11) NOT NULL,
  `klantid` int(11) NOT NULL,
  `uuid` char(36) NOT NULL,
  `dtverstuurd` datetime NOT NULL,
  `bounced` tinyint(4) NOT NULL DEFAULT '0',
  `dtbounce` datetime DEFAULT NULL,
  `bouncecode` int(11) NOT NULL,
  `isverstuurd` tinyint(1) NOT NULL,
  `inqueue` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`klantid`,`nieuwsbriefid`),
  UNIQUE KEY `NewIndex1` (`uuid`),
  KEY `NewIndex3` (`nieuwsbriefid`,`isverstuurd`,`inqueue`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=COMPRESSED;

--
-- Table structure for table `Nieuwsbrief_Run`
--

CREATE TABLE `Nieuwsbrief_Run` (
  `nieuwsbriefid` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `subject` varchar(255) DEFAULT NULL,
  `titel` varchar(255) DEFAULT NULL,
  `dtopgeslagen` datetime DEFAULT NULL,
  `dtscheduled` datetime DEFAULT NULL,
  `dtstart` datetime DEFAULT NULL,
  `dteind` datetime DEFAULT NULL,
  `actief` tinyint(4) NOT NULL DEFAULT '0',
  `isverzonden` tinyint(4) NOT NULL DEFAULT '0',
  `isgeeindigd` tinyint(4) NOT NULL,
  `klantenselectie` int(11) DEFAULT NULL,
  `aantalontvangers` int(11) DEFAULT NULL,
  `aantalgegenereerd` int(11) NOT NULL DEFAULT '0',
  `aantalverzonden` int(10) unsigned NOT NULL,
  `aantalbounced` int(4) NOT NULL DEFAULT '0',
  `aantalgezien` int(11) NOT NULL,
  `template` varchar(255) NOT NULL,
  `xml` longtext NOT NULL,
  `status_mps` varchar(20) DEFAULT NULL,
  `status_eta` int(11) DEFAULT NULL,
  `heartbeat` datetime DEFAULT NULL,
  `gebruiker` varchar(255) DEFAULT NULL,
  `eanswel` mediumtext NOT NULL,
  `eansniet` mediumtext NOT NULL,
  PRIMARY KEY (`nieuwsbriefid`),
  KEY `NewIndex1` (`isverzonden`,`aantalbounced`),
  KEY `Actief` (`actief`)
) ENGINE=InnoDB AUTO_INCREMENT=3971 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;

--
-- Table structure for table `Nieuwsbrief_Views`
--

CREATE TABLE `Nieuwsbrief_Views` (
  `uuid` char(36) NOT NULL,
  `dt` datetime NOT NULL,
  PRIMARY KEY (`uuid`,`dt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;
ALTER DATABASE `Computerboek_Nieuwsbrieven` CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`sander`@`%`*/ /*!50003 TRIGGER `before_insert_view` BEFORE INSERT ON Computerboek_Nieuwsbrieven.`Nieuwsbrief_Views` 
    FOR EACH ROW BEGIN
	DECLARE nid INT;
	DECLARE c INT;
	
	SELECT COUNT(*) INTO c FROM Computerboek_Nieuwsbrieven.Nieuwsbrief_Views WHERE `uuid` = NEW.`uuid`;	
	if c = 0 THEN
		SELECT nieuwsbriefid INTO nid FROM Computerboek_Nieuwsbrieven.Nieuwsbrief_Mail WHERE `uuid` = NEW.`uuid`;
		IF nid > 0 THEN
			UPDATE Computerboek_Nieuwsbrieven.Nieuwsbrief_Run SET aantalgezien = aantalgezien + 1 WHERE nieuwsbriefid = nid;
		END IF;
	END IF;
    END */;;
DELIMITER ;
ALTER DATABASE `Computerboek_Nieuwsbrieven` CHARACTER SET utf8 COLLATE utf8_general_ci ;

--
-- Table structure for table `Nieuwsbrief_Vinkjes`
--

CREATE TABLE `Nieuwsbrief_Vinkjes` (
  `Klantid` int(11) NOT NULL,
  `OptIn` tinyint(1) NOT NULL DEFAULT '0',
  `InitieleOptIn` tinyint(1) NOT NULL DEFAULT '0',
  `SoftOptIn` tinyint(1) NOT NULL DEFAULT '0',
  `OptOut` tinyint(1) NOT NULL DEFAULT '0',
  `ServicemailOptOut` tinyint(1) NOT NULL DEFAULT '0',
  `NKPgeclaimd` tinyint(1) NOT NULL DEFAULT '0',
  `Blacklist` tinyint(1) NOT NULL DEFAULT '0',
  `Bounce` tinyint(1) NOT NULL DEFAULT '0',
  `DTOptIn` datetime DEFAULT NULL,
  `DTOptOut` datetime DEFAULT NULL,
  `DTServicemailOptOut` datetime DEFAULT NULL,
  `DTBlacklist` datetime DEFAULT NULL,
  `GroupMagazine` tinyint(1) DEFAULT '1',
  `GroupEvents` tinyint(1) DEFAULT '1',
  `GroupActies` tinyint(1) DEFAULT '1',
  `GroupBeste` tinyint(1) DEFAULT '1',
  `GroupPersoonlijk` tinyint(1) DEFAULT '1',
  PRIMARY KEY (`Klantid`),
  KEY `OptIn` (`OptIn`),
  KEY `SoftOptIn` (`SoftOptIn`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='	';

--
-- Dumping routines for database 'Computerboek_Nieuwsbrieven'
--
/*!50003 DROP FUNCTION IF EXISTS `nieuwsbrief_omzet` */;
DELIMITER ;;
CREATE DEFINER=`sander`@`%` FUNCTION `nieuwsbrief_omzet`( nid INT ) RETURNS double(8,2)
    READS SQL DATA
    DETERMINISTIC
BEGIN
	DECLARE rv DOUBLE( 8, 2 );
	
	SELECT omzet INTO rv FROM NieuwsbriefOmzet WHERE dt > DATE_SUB( NOW(), INTERVAL 1 HOUR ) AND nieuwsbriefid = nid;
	
	IF rv IS NULL THEN
		REPLACE INTO NieuwsbriefOmzet SELECT nid, ROUND( SUM( Computerboek_Klanten.bestelling_totaal( Bestellingid ) / 100 ), 2 ), NOW()
		FROM Computerboek_Klanten.BestellingenExtra E 
		JOIN Computerboek_Klanten.Bestellingen USING ( Id ) 
		JOIN Computerboek_Klanten.Bestelling USING ( Bestellingid )   WHERE E.Tag = CONCAT( "nb", nid );
		
		SELECT omzet INTO rv FROM NieuwsbriefOmzet WHERE dt > DATE_SUB( NOW(), INTERVAL 1 HOUR ) AND nieuwsbriefid = nid;
	END IF;
	
	RETURN rv;
END ;;
DELIMITER ;

--
-- Current Database: `Computerboek_vogoo`
--

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

USE `Computerboek_vogoo`;

--
-- Table structure for table `vogoo_ads`
--

CREATE TABLE `vogoo_ads` (
  `ad_id` int(11) DEFAULT NULL,
  `category` int(11) DEFAULT NULL,
  `mini` int(11) DEFAULT NULL,
  KEY `ad_id` (`ad_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `vogoo_ads_products`
--

CREATE TABLE `vogoo_ads_products` (
  `ad_id` int(11) DEFAULT NULL,
  `category` int(11) DEFAULT NULL,
  `product_id` int(11) DEFAULT NULL,
  KEY `ad_id` (`ad_id`),
  KEY `category` (`category`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `vogoo_links`
--

CREATE TABLE `vogoo_links` (
  `item_id1` int(11) DEFAULT NULL,
  `item_id2` int(11) DEFAULT NULL,
  `category` int(11) DEFAULT NULL,
  `cnt_links` int(11) DEFAULT NULL,
  `cnt_slope` int(11) DEFAULT NULL,
  `diff_slope` float DEFAULT NULL,
  KEY `item_id1` (`item_id1`),
  KEY `item_id2` (`item_id2`),
  KEY `category` (`category`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

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

CREATE TABLE `vogoo_ratings` (
  `member_id` int(11) DEFAULT NULL,
  `product_id` int(11) DEFAULT NULL,
  `Ean` char(13) CHARACTER SET ascii DEFAULT NULL,
  `category` int(11) DEFAULT NULL,
  `rating` float DEFAULT NULL,
  `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  KEY `member_id` (`member_id`),
  KEY `product_id` (`product_id`),
  KEY `category` (`category`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping routines for database 'Computerboek_vogoo'
--

--
-- Current Database: `Digipoort`
--

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

USE `Digipoort`;

--
-- Table structure for table `Inbox`
--

CREATE TABLE `Inbox` (
  `Kenmerk` char(55) CHARACTER SET ascii NOT NULL,
  `Afgehandeld` tinyint(1) NOT NULL DEFAULT '0',
  `Berichtsoort` char(32) CHARACTER SET ascii NOT NULL,
  `Berichtkenmerk` char(55) CHARACTER SET ascii DEFAULT NULL,
  `Aanleverkenmerk` char(55) CHARACTER SET ascii DEFAULT NULL,
  `Afleverkenmerk` char(55) CHARACTER SET ascii DEFAULT NULL COMMENT 'Deze verzinnen wij',
  `document_id` char(55) DEFAULT NULL,
  `DTAangeleverd` datetime(3) DEFAULT NULL,
  `DTAfgeleverd` datetime(3) DEFAULT NULL,
  `IdentiteitBelanghebbende` char(55) CHARACTER SET ascii DEFAULT NULL COMMENT 'Vraag me niet wie wie is',
  `RolBelanghebbende` char(20) CHARACTER SET ascii DEFAULT NULL,
  `IdentiteitAanleveraar` char(55) CHARACTER SET ascii DEFAULT NULL COMMENT 'Vraag me niet wie wie is',
  `IdentiteitOntvanger` char(55) CHARACTER SET ascii DEFAULT NULL COMMENT 'Vraag me niet wie wie is',
  `RolOntvanger` char(20) CHARACTER SET ascii DEFAULT NULL,
  `Bestandsnaam` char(50) DEFAULT NULL,
  `Inhoud` longblob,
  PRIMARY KEY (`Kenmerk`),
  KEY `DTAfgeleverd` (`DTAfgeleverd`),
  KEY `Afgehandeld` (`Afgehandeld`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `InboxExceptions`
--

CREATE TABLE `InboxExceptions` (
  `DT` datetime(3) NOT NULL,
  `Kenmerk` char(55) CHARACTER SET ascii NOT NULL,
  `Errno` int(11) NOT NULL DEFAULT '1',
  `Error` text NOT NULL,
  PRIMARY KEY (`DT`,`Kenmerk`,`Errno`),
  KEY `Kenmerk` (`Kenmerk`),
  CONSTRAINT `InboxExceptions_ibfk_1` FOREIGN KEY (`Kenmerk`) REFERENCES `Inbox` (`Kenmerk`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `OINMapping`
--

CREATE TABLE `OINMapping` (
  `OIN` char(20) NOT NULL,
  `CustomerAssignedAccountID` char(20) NOT NULL,
  `KlantID` int(11) NOT NULL,
  `InkoopType` enum('DigiInkoop','Leonardo') NOT NULL,
  PRIMARY KEY (`OIN`,`CustomerAssignedAccountID`),
  KEY `KlantID` (`KlantID`),
  CONSTRAINT `OINMapping_ibfk_1` FOREIGN KEY (`KlantID`) REFERENCES `Managementboek_Klanten`.`Klanten` (`Klantid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `Outbox`
--

CREATE TABLE `Outbox` (
  `volgnr` int(11) NOT NULL AUTO_INCREMENT,
  `Kenmerk` char(50) DEFAULT NULL,
  `From` char(20) NOT NULL DEFAULT '00000003242571100000',
  `To` char(20) NOT NULL,
  `document_id` varchar(55) DEFAULT NULL,
  `DT` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  `CurrentStatus` int(4) NOT NULL DEFAULT '0',
  `ErrorCode` char(16) DEFAULT NULL,
  `ErrorText` text,
  `berichtsoort` varchar(30) NOT NULL,
  `Contents` longblob NOT NULL,
  PRIMARY KEY (`volgnr`),
  KEY `Kenmerk` (`Kenmerk`)
) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=utf8;

--
-- Table structure for table `RegelHerkomst`
--

CREATE TABLE `RegelHerkomst` (
  `RegelID` int(11) NOT NULL,
  `Productie` tinyint(1) NOT NULL DEFAULT '0',
  `Kenmerk` char(55) CHARACTER SET ascii NOT NULL,
  `EPVOrderID` char(35) NOT NULL DEFAULT '',
  `Referentie` char(35) NOT NULL,
  `FactuurOIN` char(25) CHARACTER SET ascii NOT NULL DEFAULT '',
  `VorigeReferentie` varchar(35) DEFAULT NULL,
  PRIMARY KEY (`RegelID`),
  KEY `Kenmerk` (`Kenmerk`),
  KEY `Kenmerk_2` (`Kenmerk`,`Referentie`),
  CONSTRAINT `RegelHerkomst_ibfk_1` FOREIGN KEY (`RegelID`) REFERENCES `Managementboek_Klanten`.`Bestellingen` (`Id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `RegelHerkomst_ibfk_2` FOREIGN KEY (`Kenmerk`) REFERENCES `Inbox` (`Kenmerk`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Dumping routines for database 'Digipoort'
--

--
-- Current Database: `Enquetes`
--

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

USE `Enquetes`;

--
-- Table structure for table `Antwoorden`
--

CREATE TABLE `Antwoorden` (
  `AntwoordId` int(11) NOT NULL AUTO_INCREMENT,
  `ResponseId` int(11) NOT NULL,
  `VraagId` int(11) NOT NULL,
  `SubvraagId` int(11) NOT NULL DEFAULT '0',
  `Antwoord` text NOT NULL,
  `Toelichting` text,
  `DT` datetime DEFAULT NULL,
  PRIMARY KEY (`AntwoordId`),
  KEY `ResponseId` (`ResponseId`),
  KEY `VraagId` (`VraagId`),
  KEY `Subvraag-antwoord` (`SubvraagId`,`Antwoord`(16)),
  CONSTRAINT `Antwoorden_ibfk_1` FOREIGN KEY (`ResponseId`) REFERENCES `Response` (`ResponseId`) ON DELETE CASCADE,
  CONSTRAINT `Antwoorden_ibfk_2` FOREIGN KEY (`VraagId`) REFERENCES `Vragen` (`VraagId`)
) ENGINE=InnoDB AUTO_INCREMENT=213259 DEFAULT CHARSET=utf8;

--
-- Table structure for table `Enquetes`
--

CREATE TABLE `Enquetes` (
  `EnqueteId` int(11) NOT NULL AUTO_INCREMENT,
  `Type` enum('Klantid','Bestellingid','Emailadres') DEFAULT 'Klantid',
  `GratisVerzending` tinyint(1) NOT NULL DEFAULT '0',
  `Titel` varchar(100) NOT NULL,
  `SubTitel` varchar(100) NOT NULL,
  `Database` varchar(25) NOT NULL,
  `Aanmaakdatum` datetime NOT NULL,
  `RedirectPage` varchar(50) DEFAULT NULL,
  `ButtonValue` varchar(25) NOT NULL,
  `Open` tinyint(1) NOT NULL DEFAULT '1',
  `Einddatum` datetime DEFAULT NULL,
  `Mailsubject` varchar(100) NOT NULL,
  `Mailbody` text NOT NULL,
  PRIMARY KEY (`EnqueteId`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

--
-- Table structure for table `Response`
--

CREATE TABLE `Response` (
  `ResponseId` int(11) NOT NULL AUTO_INCREMENT,
  `EnqueteId` int(11) NOT NULL,
  `Hash` varchar(100) NOT NULL,
  `Klantid` int(11) DEFAULT NULL,
  `Bestellingid` int(11) DEFAULT NULL,
  `Emailadres` varchar(100) DEFAULT NULL,
  `DT` datetime NOT NULL,
  `Einddatum` datetime DEFAULT NULL,
  `Beantwoord` tinyint(1) NOT NULL DEFAULT '0',
  `BeantwoordOp` datetime DEFAULT NULL,
  `opmerking_ingevuld` tinyint(1) NOT NULL DEFAULT '0',
  `opmerking_gemaild` tinyint(1) NOT NULL DEFAULT '0',
  `opmerking_verwerkt` tinyint(1) NOT NULL DEFAULT '0',
  `contact_opnemen` tinyint(1) NOT NULL DEFAULT '0',
  `contact_opgenomen` tinyint(1) NOT NULL DEFAULT '0',
  `afgehandeld` tinyint(1) NOT NULL DEFAULT '1',
  `afgehandeld_door` char(5) NOT NULL,
  `klantenservice_opmerkingen` text NOT NULL,
  `fijnbedankt` smallint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`ResponseId`),
  KEY `EnqueteId` (`EnqueteId`),
  KEY `Hash` (`Hash`),
  KEY `Klantid` (`Klantid`),
  KEY `Bestellingid` (`Bestellingid`),
  KEY `Emailadres` (`Emailadres`),
  CONSTRAINT `Response_ibfk_1` FOREIGN KEY (`EnqueteId`) REFERENCES `Enquetes` (`EnqueteId`)
) ENGINE=InnoDB AUTO_INCREMENT=160315 DEFAULT CHARSET=utf8;

--
-- Table structure for table `Subvragen`
--

CREATE TABLE `Subvragen` (
  `SubvraagId` int(11) NOT NULL AUTO_INCREMENT,
  `Nummer` int(2) NOT NULL,
  `VraagId` int(11) NOT NULL,
  `Required` tinyint(1) NOT NULL DEFAULT '0',
  `VraagType` enum('checkbox','multiselect','radio','radio5','radio05','radio10','radio010','select','text','textarea') NOT NULL DEFAULT 'radio',
  `Vraag` varchar(255) NOT NULL,
  `Toelichting` text,
  `AntwoordToelichten` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`SubvraagId`),
  KEY `VraagId` (`VraagId`),
  CONSTRAINT `Subvragen_ibfk_1` FOREIGN KEY (`VraagId`) REFERENCES `Vragen` (`VraagId`)
) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8;

--
-- Table structure for table `VraagOpties`
--

CREATE TABLE `VraagOpties` (
  `OptieId` int(11) NOT NULL AUTO_INCREMENT,
  `VraagId` int(11) NOT NULL,
  `Nummer` tinyint(2) NOT NULL DEFAULT '1',
  `Optie` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`OptieId`),
  KEY `VraagId` (`VraagId`),
  CONSTRAINT `VraagOpties_ibfk_1` FOREIGN KEY (`VraagId`) REFERENCES `Vragen` (`VraagId`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=55 DEFAULT CHARSET=utf8;

--
-- Table structure for table `Vragen`
--

CREATE TABLE `Vragen` (
  `VraagId` int(11) NOT NULL AUTO_INCREMENT,
  `Nummer` int(2) NOT NULL,
  `EnqueteId` int(11) DEFAULT NULL,
  `Required` tinyint(1) NOT NULL DEFAULT '0',
  `VraagType` enum('checkbox','groupedradio','multiselect','radio','radio5','radio05','radio10','radio010','select','text','textarea') NOT NULL DEFAULT 'text',
  `nps` tinyint(1) NOT NULL DEFAULT '0',
  `Vraag` varchar(255) NOT NULL,
  `Toelichting` text,
  `AntwoordToelichten` tinyint(1) NOT NULL DEFAULT '0',
  `DitIsEenOpmerkingenveld` tinyint(1) NOT NULL DEFAULT '0',
  `DitIsEenContactOpnemenVinkje` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`VraagId`),
  KEY `EnqueteId` (`EnqueteId`),
  CONSTRAINT `Vragen_ibfk_1` FOREIGN KEY (`EnqueteId`) REFERENCES `Enquetes` (`EnqueteId`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8;

--
-- Dumping routines for database 'Enquetes'
--
/*!50003 DROP FUNCTION IF EXISTS `net_promotor_score` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `net_promotor_score`( from_dt datetime, to_dt DATETIME ) RETURNS int(11)
    READS SQL DATA
BEGIN
		DECLARE rv INT;
		
		SELECT ROUND( 100 * ( SUM( IF( CAST( A.Antwoord AS INT ) >= 9, 1,
				IF( CAST( A.Antwoord AS INT ) <= 6, -1, 0 ) ) )
				/ COUNT( DISTINCT ResponseID ) ) ) INTO rv
			FROM Antwoorden A
				JOIN Vragen V USING ( VraagId )
			WHERE V.nps = 1
				AND A.DT BETWEEN from_dt AND to_dt;
		return rv;
    END ;;
DELIMITER ;
/*!50003 DROP FUNCTION IF EXISTS `nps_vandaag` */;
DELIMITER ;;
CREATE DEFINER=`thijs`@`%` FUNCTION `nps_vandaag`() RETURNS int(11)
    READS SQL DATA
BEGIN
	return net_promotor_score( NOW() - TIME(NOW()) - INTERVAL 30 DAY, NOW() - TIME(NOW()) );
END ;;
DELIMITER ;

--
-- Current Database: `ExactKoppeling`
--

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

USE `ExactKoppeling`;

--
-- Table structure for table `Aanmaning_Klanten`
--

CREATE TABLE `Aanmaning_Klanten` (
  `aanmanid` int(11) NOT NULL,
  `exactid` int(11) NOT NULL,
  `klantid` int(11) NOT NULL,
  `emailadres` varchar(255) DEFAULT NULL,
  `aanhef` varchar(255) NOT NULL,
  `naam` varchar(255) NOT NULL,
  PRIMARY KEY (`aanmanid`,`exactid`),
  KEY `klantid` (`klantid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Table structure for table `Aanmaning_Posten`
--

CREATE TABLE `Aanmaning_Posten` (
  `aanmanid` int(11) NOT NULL,
  `exactid` int(11) NOT NULL,
  `klantid` int(11) DEFAULT NULL,
  `factuurid` int(11) NOT NULL,
  `dtfactuur` int(11) NOT NULL,
  `bedragorig` decimal(6,2) NOT NULL,
  `bedragopen` decimal(6,2) NOT NULL,
  `pdfpath` text,
  PRIMARY KEY (`aanmanid`,`factuurid`),
  KEY `exactid` (`exactid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Temporary table structure for view `Aanmaningen`
--

/*!50001 DROP VIEW IF EXISTS `Aanmaningen`*/;
/*!50001 CREATE TABLE `Aanmaningen` (
  `Admnr` tinyint NOT NULL,
  `FactuurID` tinyint NOT NULL,
  `OrderID` tinyint NOT NULL,
  `Debtor` tinyint NOT NULL,
  `InvoiceDebtor` tinyint NOT NULL,
  `DT` tinyint NOT NULL,
  `Bedrag` tinyint NOT NULL,
  `OpenBedrag` tinyint NOT NULL,
  `Status` tinyint NOT NULL,
  `LaatsteHerinnering` tinyint NOT NULL,
  `AantalHerinneringen` tinyint NOT NULL,
  `PayMethod` tinyint NOT NULL,
  `PayCondition` tinyint NOT NULL
) ENGINE=MyISAM */;

--
