-#-------------------
-# Defines
-
-# Tables to add if they don't exist
-my %requiretables = (
- action_logs => "(
- `timestamp` TIMESTAMP NOT NULL ,
- `user` INT( 11 ) NOT NULL ,
- `module` TEXT default '',
- `action` TEXT default '' ,
- `object` INT(11) NULL ,
- `info` TEXT default '' ,
- PRIMARY KEY ( `timestamp` , `user` )
- )",
- letter => "(
- module varchar(20) NOT NULL default '',
- code varchar(20) NOT NULL default '',
- name varchar(100) NOT NULL default '',
- title varchar(200) NOT NULL default '',
- content text,
- PRIMARY KEY (module,code)
- )",
- alert =>"(
- alertid int(11) NOT NULL auto_increment,
- borrowernumber int(11) NOT NULL default '0',
- type varchar(10) NOT NULL default '',
- externalid varchar(20) NOT NULL default '',
- PRIMARY KEY (alertid),
- KEY borrowernumber (borrowernumber),
- KEY type (type,externalid)
- )",
- opac_news => "(
- `idnew` int(10) unsigned NOT NULL auto_increment,
- `title` varchar(250) NOT NULL default '',
- `new` text NOT NULL,
- `lang` varchar(4) NOT NULL default '',
- `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
- PRIMARY KEY (`idnew`)
- )",
- repeatable_holidays => "(
- `id` int(11) NOT NULL auto_increment,
- `branchcode` varchar(4) NOT NULL default '',
- `weekday` smallint(6) default NULL,
- `day` smallint(6) default NULL,
- `month` smallint(6) default NULL,
- `title` varchar(50) NOT NULL default '',
- `description` text NOT NULL,
- PRIMARY KEY (`id`)
- )",
- special_holidays => "(
- `id` int(11) NOT NULL auto_increment,
- `branchcode` varchar(4) NOT NULL default '',
- `day` smallint(6) NOT NULL default '0',
- `month` smallint(6) NOT NULL default '0',
- `year` smallint(6) NOT NULL default '0',
- `isexception` smallint(1) NOT NULL default '1',
- `title` varchar(50) NOT NULL default '',
- `description` text NOT NULL,
- PRIMARY KEY (`id`)
- )",
- overduerules =>"(`branchcode` varchar(255) NOT NULL default '',
- `categorycode` char(2) NOT NULL default '',
- `delay1` int(4) default '0',
- `letter1` varchar(20) default NULL,
- `debarred1` char(1) default '0',
- `delay2` int(4) default '0',
- `debarred2` char(1) default '0',
- `letter2` varchar(20) default NULL,
- `delay3` int(4) default '0',
- `letter3` varchar(20) default NULL,
- `debarred3` int(1) default '0',
- PRIMARY KEY (`branchcode`,`categorycode`)
- )",
- cities => "(`cityid` int auto_increment,
- `city_name` char(100) NOT NULL,
- `city_zipcode` char(20),
- PRIMARY KEY (`cityid`)
- )",
- roadtype => "(`roadtypeid` int auto_increment,
- `road_type` char(100) NOT NULL,
- PRIMARY KEY (`roadtypeid`)
- )",
-
- labels => "(
- labelid int(11) NOT NULL auto_increment,
- itemnumber varchar(100) NOT NULL default '',
- timestamp timestamp(14) NOT NULL,
- PRIMARY KEY (labelid)
- )",
-
- labels_conf => "(
- id int(4) NOT NULL auto_increment,
- barcodetype char(100) default '',
- title tinyint(1) default '0',
- isbn tinyint(1) default '0',
- itemtype tinyint(1) default '0',
- barcode tinyint(1) default '0',
- dewey tinyint(1) default '0',
- class tinyint(1) default '0',
- author tinyint(1) default '0',
- papertype char(100) default '',
- startrow int(2) default NULL,
- PRIMARY KEY (id)
- )",
- reviews => "(
- reviewid integer NOT NULL auto_increment,
- borrowernumber integer,
- biblionumber integer,
- review text,
- approved tinyint,
- datereviewed datetime,
- PRIMARY KEY (reviewid)
- )",
- subscriptionroutinglist=>"(
- routingid integer NOT NULL auto_increment,
- borrowernumber integer,
- ranking integer,
- subscriptionid integer,
- PRIMARY KEY (routingid)
- )",
-
- notifys => "(
- notify_id int(11) NOT NULL default '0',
- `borrowernumber` int(11) NOT NULL default '0',
- `itemnumber` int(11) NOT NULL default '0',
- `notify_date` date NOT NULL default '0000-00-00',
- `notify_send_date` date default NULL,
- `notify_level` int(1) NOT NULL default '0',
- `method` varchar(20) NOT NULL default ''
- )",
-
- charges => "(
- `charge_id` varchar(5) NOT NULL default '',
- `description` text NOT NULL,
- `amount` decimal(28,6) NOT NULL default '0.000000',
- `min` int(4) NOT NULL default '0',
- `max` int(4) NOT NULL default '0',
- `level` int(1) NOT NULL default '0',
- PRIMARY KEY (`charge_id`)
- )",
- tags => "(
- `entry` varchar(255) NOT NULL default '',
- `weight` bigint(20) NOT NULL default '0',
- PRIMARY KEY (`entry`)
- )
- ",
- zebraqueue => "(
- `id` int NOT NULL auto_increment,
- `biblio_auth_number` int NOT NULL,
- `operation` char(20) NOT NULL,
- `server` char(20) NOT NULL ,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci AUTO_INCREMENT=1",
-
-);
-
-my %requirefields = (
- subscription => { 'letter' => 'char(20) NULL', 'distributedto' => 'text NULL', 'firstacquidate'=>'date NOT NULL','irregularity'=>'TEXT NULL default \'\'','numberpattern'=>'TINYINT(3) NULL default 0', 'callnumber'=>'text NULL', 'hemisphere' =>'TINYINT(3) NULL default 0', 'issuesatonce'=>'TINYINT(3) NOT NULL default 1', 'branchcode' =>'varchar(12) NOT NULL default \'\'', 'manualhistory'=>'TINYINT(1) NOT NULL default 0','internalnotes'=>'LONGTEXT NULL default \'\''},
- itemtypes => { 'imageurl' => 'char(200) NULL'},
- aqbookfund => { 'branchcode' => 'varchar(4) NULL'},
- aqbudget => { 'branchcode' => 'varchar(4) NULL'},
- auth_header => { 'marc' => 'BLOB NOT NULL', 'linkid' => 'BIGINT(20) NULL'},
- auth_subfield_structure =>{ 'hidden' => 'TINYINT(3) NOT NULL default 0', 'kohafield' => 'VARCHAR(45) NOT NULL', 'linkid' => 'TINYINT(1) NOT NULL default 0', 'isurl' => 'TINYINT(1)', 'frameworkcode'=>'VARCHAR(8) NOT NULL'},
- marc_breeding => { 'isbn' => 'varchar(13) NOT NULL'},
- serial =>{ 'publisheddate' => 'date', 'claimdate' => 'date', 'itemnumber'=>'text NULL','routingnotes'=>'text NULL',},
- statistics => { 'associatedborrower' => 'integer'},
- z3950servers =>{ "name" =>"text", "description" => "text NOT NULL",
- "position" =>"enum('primary','secondary','') NOT NULL default 'primary'", "icon" =>"text",
- "type" =>"enum('zed','opensearch') NOT NULL default 'zed'",
- },
- issues =>{ 'issuedate'=>"date NOT NULL default '0000-00-00'", },
-
-# tablename => { 'field' => 'fieldtype' },
-);
-
-# Enter here the table to delete.
-my @TableToDelete = qw(
- additionalauthors
- bibliosubject
- bibliosubtitle
- bibliothesaurus
-);
-
-my %uselessfields = (
-# tablename => "field1,field2",
- borrowers => "suburb,altstreetaddress,altsuburb,altcity,studentnumber,school,area,preferredcont,altcp",
- deletedborrowers=> "suburb,altstreetaddress,altsuburb,altcity,studentnumber,school,area,preferredcont,altcp",
- );
-# the other hash contains other actions that can't be done elsewhere. they are done
-# either BEFORE of AFTER everything else, depending on "when" entry (default => AFTER)
-
-# The tabledata hash contains data that should be in the tables.
-# The uniquefieldrequired hash entry is used to determine which (if any) fields
-# must not exist in the table for this row to be inserted. If the
-# uniquefieldrequired entry is already in the table, the existing data is not
-# modified, unless the forceupdate hash entry is also set. Fields in the
-# anonymous "forceupdate" hash will be forced to be updated to the default
-# values given in the %tabledata hash.
-
-my %tabledata = (
-# tablename => [
-# { uniquefielrequired => 'fieldname', # the primary key in the table
-# fieldname => fieldvalue,
-# fieldname2 => fieldvalue2,
-# },
-# ],
- systempreferences => [
- {
- uniquefieldrequired => 'variable',
- variable => 'useDaysMode',
- value => 'Calendar',
- forceupdate => { 'explanation' => 1,
- 'type' => 1},
- explanation => 'How to calculate return dates : Calendar means holidays will be controled, Days means the return date don\'t depend on holidays',
- type => 'Choice',
- options => 'Calendar|Days'
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'BorrowersTitles',
- value => 'Mr|Mrs|Miss|Ms',
- forceupdate => { 'explanation' => 1,
- 'type' => 1},
- explanation => 'List all Titles for borrowers',
- type => 'free',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'BorrowerMandatoryField',
- value => 'cardnumber|surname|address',
- forceupdate => { 'explanation' => 1,
- 'type' => 1},
- explanation => 'List all mandatory fields for borrowers',
- type => 'free',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'borrowerRelationship',
- value => 'father|mother,grand-mother',
- forceupdate => { 'explanation' => 1,
- 'type' => 1},
- explanation => 'The relationships between a guarantor & a guarantee (separated by | or ,)',
- type => 'free',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'ReservesMaxPickUpDelay',
- value => '10',
- forceupdate => { 'explanation' => 1,
- 'type' => 1},
- explanation => 'Maximum delay to pick up a reserved document',
- type => 'free',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'TransfersMaxDaysWarning',
- value => '3',
- forceupdate => { 'explanation' => 1,
- 'type' => 1},
- explanation => 'Max delay before considering the transfer has potentialy a problem',
- type => 'free',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'memberofinstitution',
- value => '0',
- forceupdate => { 'explanation' => 1,
- 'type' => 1},
- explanation => 'Are your patrons members of institutions',
- type => 'YesNo',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'ReadingHistory',
- value => '0',
- forceupdate => { 'explanation' => 1,
- 'type' => 1},
- explanation => 'Allow reading record info retrievable from issues and oldissues tables',
- type => 'YesNo',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'IssuingInProcess',
- value => '0',
- forceupdate => { 'explanation' => 1,
- 'type' => 1},
- explanation => 'Allow no debt alert if the patron is issuing item that accumulate debt',
- type => 'YesNo',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'AutomaticItemReturn',
- value => '1',
- forceupdate => { 'explanation' => 1,
- 'type' => 1},
- explanation => 'This Variable allow or not to return automaticly to his homebranch',
- type => 'YesNo',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'reviewson',
- value => '0',
- forceupdate => { 'explanation' => 1,
- 'type' => 1},
- explanation => 'Allows patrons to submit reviews from the opac',
- type => 'YesNo',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'intranet_includes',
- value => 'includes',
- forceupdate => { 'explanation' => 1,
- 'type' => 1},
- explanation => 'The includes directory you want for specific look of Koha (includes or includes_npl for example)',
- type => 'Free',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'AutoLocation',
- value => '0',
- forceupdate => { 'explanation' => 1,
- 'type' => 1},
- explanation => 'switch to activate or not Autolocation, if Yes, the Librarian can\'t change his location, it\'s defined by branchip',
- type => 'YesNo',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'serialsadditems',
- value => '0',
- forceupdate => {
- 'explanation' => 1,
- 'type' => 1
- },
- explanation => 'If set, a new item will be automatically added when receiving an issue',
- type => 'YesNo',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'expandedSearchOption',
- value => '0',
- forceupdate => {
- 'explanation' => 1,
- 'type' => 1
- },
- explanation => 'search among marc field',
- type => 'YesNo',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'RequestOnOpac',
- value => '1',
- forceupdate => { 'explanation' => 1,
- 'type' => 1},
- explanation => 'option to allow reserves on opac',
- type => 'YesNo',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'OpacCloud',
- value => '1',
- forceupdate => { 'explanation' => 1,
- 'type' => 1},
- explanation => 'Enable / Disable cloud link on OPAC (Require to run misc/cronjobs/build_browser_and_cloud.pl on the server)',
- type => 'YesNo',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'OpacBrowser',
- value => '1',
- forceupdate => { 'explanation' => 1,
- 'type' => 1},
- explanation => 'Enable/Disable browser link on OPAC (Require to run misc/cronjobs/build_browser_and_cloud.pl on the server)',
- type => 'YesNo',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'OpacTopissue',
- value => '1',
- forceupdate => { 'explanation' => 1,
- 'type' => 1},
- explanation => 'Enable / Disable the top issue link on OPAC',
- type => 'YesNo',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'OpacAuthorities',
- value => '1',
- forceupdate => { 'explanation' => 1,
- 'type' => 1},
- explanation => 'Enable / Disable the search authority link on OPAC',
- type => 'YesNo',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'CataloguingLog',
- value => '0',
- forceupdate => {'explanation' => 1, 'type' => 1},
- explanation => 'Active this if you want to log cataloguing action.',
- type => 'YesNo',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'BorrowersLog',
- value => '0',
- forceupdate => {'explanation' => 1, 'type' => 1},
- explanation => 'Active this if you want to log borrowers edition/creation/deletion...',
- type => 'YesNo',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'SubscriptionLog',
- value => '0',
- forceupdate => {'explanation' => 1, 'type' => 1},
- explanation => 'Active this if you want to log Subscription action',
- type => 'YesNo',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'IssueLog',
- value => '0',
- forceupdate => {'explanation' => 1, 'type' => 1},
- explanation => 'Active this if you want to log issue.',
- type => 'YesNo',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'ReturnLog',
- value => '0',
- forceupdate => {'explanation' => 1, 'type' => 1},
- explanation => 'Active this if you want to log the circulation return',
- type => 'YesNo',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'Version',
- value => '3.0',
- forceupdate => {'explanation' => 1, 'type' => 1},
- explanation => 'Koha Version',
- type => 'Free',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'LetterLog',
- value => '0',
- forceupdate => {'explanation' => 1, 'type' => 1},
- explanation => 'Active this if you want to log all the letter sent',
- type => 'YesNo',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'FinesLog',
- value => '0',
- forceupdate => {'explanation' => 1, 'type' => 1},
- explanation => 'Active this if you want to log fines',
- type => 'YesNo',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'NoZebra',
- value => '0',
- forceupdate => {'explanation' => 1, 'type' => 1},
- explanation => 'Active this if you want NOT to use zebra (large libraries should avoid this parameters)',
- type => 'YesNo',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'NoZebraIndexes',
- value => '0',
- forceupdate => {'explanation' => 1, 'type' => 1},
- explanation => "Enter a specific hash for NoZebra indexes. Enter : 'indexname' => '100a,245a,500*','index2' => '...'",
- type => 'Free',
- },
- {
- uniquefieldrequired => 'variable',
- variable => 'uppercasesurnames',
- value => '0',
- forceupdate => {'explanation' => 1, 'type' => 1},
- explanation => "Force Surnames to be uppercase",
- type => 'YesNo',
- },
- ],
- userflags => [
- {
- uniquefieldrequired => 'bit',
- bit => '14',
- flag => 'editauthorities',
- flagdesc => 'allow to edit authorities',
- defaulton => '0',
- },
- {
- uniquefieldrequired => 'bit',
- bit => '15',
- flag => 'serials',
- flagdesc => 'allow to manage serials subscriptions',
- defaulton => '0',
- },
- {
- uniquefieldrequired => 'bit',
- bit => '16',
- flag => 'reports',
- flagdesc => 'allow to access to the reports module',
- defaulton => '0',
- },
- ],
- authorised_values => [
- {
- uniquefieldrequired => 'id',
- category => 'SUGGEST',
- authorised_value => 'Not enough budget',
- lib => 'This book it too much expensive',
- }
- ],
-);
-
-my %fielddefinitions = (
-# fieldname => [
-# { field => 'fieldname',
-# type => 'fieldtype',
-# null => '',
-# key => '',
-# default => ''
-# },
-# ],
- aqbasket => [
- {
- field => 'booksellerid',
- type => 'int(11)',
- null => 'NOT NULL',
- key => '',
- default => '1',
- extra => '',
- },
- ],
- aqbooksellers => [
- {
- field => 'id',
- type => 'int(11)',
- null => 'NOT NULL',
- key => 'PRI',
- default => '',
- extra => 'auto_increment',
- },
- {
- field => 'listprice',
- type => 'varchar(10)',
- null => 'NULL',
- key => '',
- default => '',
- extra => '',
- },
- {
- field => 'invoiceprice',
- type => 'varchar(10)',
- null => 'NULL',
- key => '',
- default => '',
- extra => '',
- },
- ],
-
- accountlines => [
- {
- field => 'notify_id',
- type => 'int(11)',
- null => 'NOT NULL',
- key => '',
- default => '0',
- extra => '',
- },
- {
- field => 'notify_level',
- type => 'int(2)',
- null => 'NOT NULL',
- key => '',
- default => '0',
- extra => '',
- },
-
- ],
-
- borrowers => [
- { field => 'firstname',
- type => 'text',
- null => 'NULL',
- },
- { field => 'initials',
- type => 'text',
- null => 'NULL',
- },
- { field => 'B_email',
- type => 'text',
- null => 'NULL',
- after => 'B_zipcode',
- },
- {
- field => 'streetnumber', # street number (hidden if streettable table is empty)
- type => 'char(10)',
- null => 'NULL',
- after => 'initials',
- },
- {
- field => 'streettype', # street table, list builded from a system table
- type => 'char(50)',
- null => 'NULL',
- after => 'streetnumber',
- },
- { field => 'phone',
- type => 'text',
- null => 'NULL',
- },
- {
- field => 'B_streetnumber', # street number (hidden if streettable table is empty)
- type => 'char(10)',
- null => 'NULL',
- after => 'fax',
- },
- {
- field => 'B_streettype', # street table, list builded from a system table
- type => 'char(50)',
- null => 'NULL',
- after => 'B_streetnumber',
- },
- {
- field => 'phonepro',
- type => 'text',
- null => 'NULL',
- after => 'fax',
- },
- {
- field => 'address2', # complement address
- type => 'text',
- null => 'NULL',
- after => 'address',
- },
- {
- field => 'emailpro',
- type => 'text',
- null => 'NULL',
- after => 'fax',
- },
- {
- field => 'contactfirstname', # contact's firstname
- type => 'text',
- null => 'NULL',
- after => 'contactname',
- },
- {
- field => 'contacttitle', # contact's title
- type => 'text',
- null => 'NULL',
- after => 'contactfirstname',
- },
- {
- field => 'branchcode',
- type => 'varchar(10)',
- null => 'NOT NULL',
- default => '',
- extra => '',
- },
- {
- field => 'categorycode',
- type => 'varchar(10)',
- null => 'NOT NULL',
- default => '',
- extra => '',
- }
- ],
-
- biblioitems => [
- {
- field => 'lcsort',
- type => 'varchar(25)',
- null => 'NULL',
- key => '',
- default => '',
- extra => '',
- },
- {
- field => 'ccode',
- type => 'varchar(4)',
- null => 'NULL',
- key => '',
- default => '',
- extra => '',
- },
- {
- field => 'dewey',
- type => 'varchar(30)',
- null => 'null',
- default => '',
- extra => '',
- },
- {
- field => 'publicationyear',
- type => 'text',
- null => 'null',
- default => '',
- extra => '',
- },
- {
- field => 'collectiontitle',
- type => 'mediumtext',
- null => 'null',
- default => '',
- extra => '',
- },
- {
- field => 'collectionissn',
- type => 'mediumtext',
- null => 'null',
- default => '',
- extra => '',
- },
- {
- field => 'collectionvolume',
- type => 'mediumtext',
- null => 'null',
- default => '',
- extra => '',
- },
- {
- field => 'editionstatement',
- type => 'text',
- null => 'null',
- default => '',
- extra => '',
- },
- {
- field => 'editionresponsability',
- type => 'text',
- null => 'null',
- default => '',
- extra => '',
- },
-
- ],
- deletedbiblioitems => [
- {
- field => 'dewey',
- type => 'varchar(30)',
- null => 'null',
- default => '',
- extra => '',
- },
- ],
- branches => [
- {
- field => 'branchip',
- type => 'varchar(15)',
- null => 'NULL',
- key => '',
- default => '',
- extra => '',
- },
- {
- field => 'branchprinter',
- type => 'varchar(100)',
- null => 'NULL',
- key => '',
- default => '',
- extra => '',
- },
- {
- field => 'branchcode',
- type => 'varchar(10)',
- null => 'NOT NULL',
- default => '',
- extra => '',
- }
- ],
- branchtransfers =>[
- {
- field => 'frombranch',
- type => 'VARCHAR(10)',
- null => 'NOT NULL',
- key => '',
- default => '',
- extra => '',
- },
- {
- field => 'tobranch',
- type => 'VARCHAR(10)',
- null => 'NOT NULL',
- key => '',
- default => '',
- }
- ],
-
- categories => [
- {
- field => 'category_type',
- type => 'char(1)',
- null => 'NOT NULL',
- key => '',
- default => 'A',
- extra => '',
- },
- {
- field => 'categorycode',
- type => 'varchar(10)',
- null => 'NOT NULL',
- key => 'PRI',
- default => '',
- extra => '',
- },
- ],
-
- deletedborrowers => [
- { field => 'firstname',
- type => 'text',
- null => 'NULL',
- },
- { field => 'initials',
- type => 'text',
- null => 'NULL',
- },
- { field => 'B_email',
- type => 'text',
- null => 'NULL',
- after => 'B_zipcode',
- },
- {
- field => 'streetnumber', # street number (hidden if streettable table is empty)
- type => 'char(10)',
- null => 'NULL',
- after => 'initials',
- },
- {
- field => 'streettype', # street table, list builded from a system table
- type => 'char(50)',
- null => 'NULL',
- after => 'streetnumber',
- },
- { field => 'phone',
- type => 'text',
- null => 'NULL',
- },
- {
- field => 'B_streetnumber', # street number (hidden if streettable table is empty)
- type => 'char(10)',
- null => 'NULL',
- after => 'fax',
- },
- {
- field => 'B_streettype', # street table, list builded from a system table
- type => 'char(50)',
- null => 'NULL',
- after => 'B_streetnumber',
- },
- {
- field => 'phonepro',
- type => 'text',
- null => 'NULL',
- after => 'fax',
- },
- {
- field => 'address2', # complement address
- type => 'text',
- null => 'NULL',
- after => 'address',
- },
- {
- field => 'emailpro',
- type => 'text',
- null => 'NULL',
- after => 'fax',
- },
- {
- field => 'contactfirstname', # contact's firstname
- type => 'text',
- null => 'NULL',
- after => 'contactname',
- },
- {
- field => 'contacttitle', # contact's title
- type => 'text',
- null => 'NULL',
- after => 'contactfirstname',
- },
- ],
-
- issues => [
- {
- field => 'borrowernumber',
- type => 'int(11)',
- null => 'NULL', # can be null when a borrower is deleted and the foreign key rule executed
- key => '',
- default => '',
- extra => '',
- },
- {
- field => 'itemnumber',
- type => 'int(11)',
- null => 'NULL', # can be null when a borrower is deleted and the foreign key rule executed
- key => '',
- default => '',
- extra => '',
- },
- {
- field => 'branchcode',
- type => 'varchar(10)',
- null => 'NULL',
- key => '',
- default => '',
- extra => '',
- },
- {
- field => 'issuedate',
- type => 'date',
- null => '',
- key => '',
- default => '0000-00-00',
- extra => '',
- },
- ],
-
- items => [
- {
- field => 'onloan',
- type => 'date',
- null => 'NULL',
- key => '',
- default => '0000-00-00',
- extra => '',
- },
- {
- field => 'cutterextra',
- type => 'varchar(45)',
- null => 'NULL',
- key => '',
- default => '',
- extra => '',
- },
- {
- field => 'issue_date',
- type => 'date',
- null => 'NULL',
- key => '',
- default => '',
- extra => '',
- },
- {
- field => 'homebranch',
- type => 'varchar(10)',
- null => 'NULL',
- key => '',
- default => '',
- extra => '',
- },
- {
- field => 'holdingbranch',
- type => 'varchar(10)',
- null => 'NULL',
- key => '',
- default => '',
- extra => '',
- },
- {
- field => 'itype',
- type => 'varchar(10)',
- null => 'NULL',
- key => '',
- default => '',
- extra => '',
- },
- ],
- itemtypes => [
- {
- field => 'itemtype',
- type => 'varchar(10)',
- default => '',
- null => 'NOT NULL',
- key => 'PRI',
- extra => 'UNIQUE',
- },
- {
- field => 'summary',
- type => 'TEXT',
- null => 'NULL',
- key => '',
- extra => '',
- },
- ],
- marc_breeding => [
- {
- field => 'marc',
- type => 'LONGBLOB',
- null => 'NULL',
- key => '',
- extra => '',
- }
- ],
- marc_subfield_structure => [
- {
- field => 'defaultvalue',
- type => 'TEXT',
- null => 'NULL',
- key => '',
- extra => '',
- }
- ],
- opac_news => [
- {
- field => 'expirationdate',
- type => 'date',
- null => 'null',
- key => '',
- extra => '',
- },
- {
- field => 'number',
- type => 'int(11)',
- null => 'NULL',
- key => '',
- default => '0',
- extra => '',
- },
- ],
- reserves => [
- {
- field => 'waitingdate',
- type => 'date',
- null => 'NULL',
- key => '',
- default => '',
- extra => '',
- },
- ],
- serial => [
- {
- field => 'notes',
- type => 'TEXT',
- null => 'NULL',
- key => '',
- default => '',
- extra => ''
- },
- ],
- shelfcontents => [
- {
- field => 'dateadded',
- type => 'timestamp',
- null => 'NULL',
- },
- ],
- systempreferences => [
- {
- field => 'value',
- type => 'text',
- null => 'NULL',
- key => '',
- default => '',
- extra => '',
- },
- {
- field => 'explanation',
- type => 'text',
- null => 'NULL',
- key => '',
- default => '',
- extra => '',
- },
- ],
- suggestions => [
- {
- field => 'reason',
- type => 'text',
- null => 'NULL',
- key => '' ,
- default => '',
- extra => '',
- }
- ],
-);
-
-my %indexes = (
-# table => [
-# { indexname => 'index detail'
-# }
-# ],
- aqbooksellers => [
- { indexname => 'PRIMARY',
- content => 'id',
- type => 'PRI',
- }
- ],
- aqbasket => [
- { indexname => 'booksellerid',
- content => 'booksellerid',
- },
- ],
- aqorders => [
- { indexname => 'basketno',
- content => 'basketno',
- },
- ],
- aqorderbreakdown => [
- { indexname => 'ordernumber',
- content => 'ordernumber',
- },
- { indexname => 'bookfundid',
- content => 'bookfundid',
- },
- ],
- biblioitems => [
- { indexname => 'isbn',
- content => 'isbn',
- },
- { indexname => 'publishercode',
- content => 'publishercode',
- },
- ],
- branches => [
- {
- indexname => 'branchcode',
- content => 'branchcode',
- type => 'PRI',
- }
- ],
- branchrelations => [
- {
- indexname => 'PRIMARY',
- content => 'categorycode',
- type => 'PRI',
- }
- ],
- branchrelations => [
- { indexname => 'PRIMARY',
- content => 'branchcode,categorycode',
- type => 'PRI',
- },
- { indexname => 'branchcode',
- content => 'branchcode',
- },
- { indexname => 'categorycode',
- content => 'categorycode',
- }
- ],
- currency => [
- { indexname => 'PRIMARY',
- content => 'currency',
- type => 'PRI',
- }
- ],
- categories => [
- {
- indexname => 'categorycode',
- content => 'categorycode',
- }
- ],
- items => [
- { indexname => 'homebranch',
- content => 'homebranch',
- },
- { indexname => 'holdingbranch',
- content => 'holdingbranch',
- }
- ],
- itemtypes => [
- {
- indexname => 'itemtype',
- content => 'itemtype',
- }
- ],
- shelfcontents => [
- { indexname => 'shelfnumber',
- content => 'shelfnumber',
- },
- { indexname => 'itemnumber',
- content => 'itemnumber',
- }
- ],
- userflags => [
- { indexname => 'PRIMARY',
- content => 'bit',
- type => 'PRI',
- }
- ]
-);
-
-my %foreign_keys = (
-# table => [
-# { key => 'the key in table' (must be indexed)
-# foreigntable => 'the foreigntable name', # (the parent)
-# foreignkey => 'the foreign key column(s)' # (in the parent)
-# onUpdate => 'CASCADE|SET NULL|NO ACTION| RESTRICT',
-# onDelete => 'CASCADE|SET NULL|NO ACTION| RESTRICT',
-# }
-# ],
- branchrelations => [
- { key => 'branchcode',
- foreigntable => 'branches',
- foreignkey => 'branchcode',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- { key => 'categorycode',
- foreigntable => 'branchcategories',
- foreignkey => 'categorycode',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- ],
- shelfcontents => [
- { key => 'shelfnumber',
- foreigntable => 'bookshelf',
- foreignkey => 'shelfnumber',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- { key => 'itemnumber',
- foreigntable => 'items',
- foreignkey => 'itemnumber',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- ],
- # onDelete is RESTRICT on reference tables (branches, itemtype) as we don't want items to be
- # easily deleted, but branches/itemtype not too easy to empty...
- biblioitems => [
- { key => 'biblionumber',
- foreigntable => 'biblio',
- foreignkey => 'biblionumber',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- { key => 'itemtype',
- foreigntable => 'itemtypes',
- foreignkey => 'itemtype',
- onUpdate => 'CASCADE',
- onDelete => 'RESTRICT',
- },
- ],
- items => [
- { key => 'biblioitemnumber',
- foreigntable => 'biblioitems',
- foreignkey => 'biblioitemnumber',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- { key => 'homebranch',
- foreigntable => 'branches',
- foreignkey => 'branchcode',
- onUpdate => 'CASCADE',
- onDelete => 'RESTRICT',
- },
- { key => 'holdingbranch',
- foreigntable => 'branches',
- foreignkey => 'branchcode',
- onUpdate => 'CASCADE',
- onDelete => 'RESTRICT',
- },
- ],
- aqbasket => [
- { key => 'booksellerid',
- foreigntable => 'aqbooksellers',
- foreignkey => 'id',
- onUpdate => 'CASCADE',
- onDelete => 'RESTRICT',
- },
- ],
- aqorders => [
- { key => 'basketno',
- foreigntable => 'aqbasket',
- foreignkey => 'basketno',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- { key => 'biblionumber',
- foreigntable => 'biblio',
- foreignkey => 'biblionumber',
- onUpdate => 'SET NULL',
- onDelete => 'SET NULL',
- },
- ],
- aqbooksellers => [
- { key => 'listprice',
- foreigntable => 'currency',
- foreignkey => 'currency',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- { key => 'invoiceprice',
- foreigntable => 'currency',
- foreignkey => 'currency',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- ],
- aqorderbreakdown => [
- { key => 'ordernumber',
- foreigntable => 'aqorders',
- foreignkey => 'ordernumber',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- { key => 'bookfundid',
- foreigntable => 'aqbookfund',
- foreignkey => 'bookfundid',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- ],
- branchtransfers => [
- { key => 'frombranch',
- foreigntable => 'branches',
- foreignkey => 'branchcode',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- { key => 'tobranch',
- foreigntable => 'branches',
- foreignkey => 'branchcode',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- { key => 'itemnumber',
- foreigntable => 'items',
- foreignkey => 'itemnumber',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- ],
- issuingrules => [
- { key => 'categorycode',
- foreigntable => 'categories',
- foreignkey => 'categorycode',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- { key => 'itemtype',
- foreigntable => 'itemtypes',
- foreignkey => 'itemtype',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- ],
- issues => [ # constraint is SET NULL : when a borrower or an item is deleted, we keep the issuing record
- # for stat purposes
- { key => 'borrowernumber',
- foreigntable => 'borrowers',
- foreignkey => 'borrowernumber',
- onUpdate => 'SET NULL',
- onDelete => 'SET NULL',
- },
- { key => 'itemnumber',
- foreigntable => 'items',
- foreignkey => 'itemnumber',
- onUpdate => 'SET NULL',
- onDelete => 'SET NULL',
- },
- ],
- reserves => [
- { key => 'borrowernumber',
- foreigntable => 'borrowers',
- foreignkey => 'borrowernumber',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- { key => 'biblionumber',
- foreigntable => 'biblio',
- foreignkey => 'biblionumber',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- { key => 'itemnumber',
- foreigntable => 'items',
- foreignkey => 'itemnumber',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- { key => 'branchcode',
- foreigntable => 'branches',
- foreignkey => 'branchcode',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- ],
- borrowers => [ # foreign keys are RESTRICT as we don't want to delete borrowers when a branch is deleted
- # but prevent deleting a branch as soon as it has 1 borrower !
- { key => 'categorycode',
- foreigntable => 'categories',
- foreignkey => 'categorycode',
- onUpdate => 'RESTRICT',
- onDelete => 'RESTRICT',
- },
- { key => 'branchcode',
- foreigntable => 'branches',
- foreignkey => 'branchcode',
- onUpdate => 'RESTRICT',
- onDelete => 'RESTRICT',
- },
- ],
- deletedborrowers => [ # foreign keys are RESTRICT as we don't want to delete borrowers when a branch is deleted
- # but prevent deleting a branch as soon as it has 1 borrower !
- { key => 'categorycode',
- foreigntable => 'categories',
- foreignkey => 'categorycode',
- onUpdate => 'RESTRICT',
- onDelete => 'RESTRICT',
- },
- { key => 'branchcode',
- foreigntable => 'branches',
- foreignkey => 'branchcode',
- onUpdate => 'RESTRICT',
- onDelete => 'RESTRICT',
- },
- ],
- accountlines => [
- { key => 'borrowernumber',
- foreigntable => 'borrowers',
- foreignkey => 'borrowernumber',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- { key => 'itemnumber',
- foreigntable => 'items',
- foreignkey => 'itemnumber',
- onUpdate => 'SET NULL',
- onDelete => 'SET NULL',
- },
- ],
- auth_tag_structure => [
- { key => 'authtypecode',
- foreigntable => 'auth_types',
- foreignkey => 'authtypecode',
- onUpdate => 'CASCADE',
- onDelete => 'CASCADE',
- },
- ],
- # FIXME : don't constraint auth_*_table and auth_word, as they may be replaced by zebra
-);