diff --git a/doc/company-setup/initial-data.xsd b/doc/company-setup/initial-data.xsd new file mode 100644 index 00000000000..a51cb282d05 --- /dev/null +++ b/doc/company-setup/initial-data.xsd @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/conf/ledgersmb.yaml b/doc/conf/ledgersmb.yaml index 3f5e9ed7f5f..40800f3c806 100644 --- a/doc/conf/ledgersmb.yaml +++ b/doc/conf/ledgersmb.yaml @@ -11,6 +11,8 @@ db: $class: LedgerSMB::Database::Factory connect_data: sslmode: prefer + data_dir: + $ref: paths/sql_data source_dir: $ref: paths/sql @@ -81,6 +83,7 @@ paths: config: locale: ./locale/po/ sql: ./sql/ + sql_data: ./locale/ templates: ./templates/ UI: ./UI/ UI_cache: lsmb_templates/ diff --git a/lib/LedgerSMB/Database.pm b/lib/LedgerSMB/Database.pm index 3dde27fda39..7214bd8aef7 100644 --- a/lib/LedgerSMB/Database.pm +++ b/lib/LedgerSMB/Database.pm @@ -34,12 +34,16 @@ C. use strict; use warnings; +use Carp; use DateTime; use DBD::Pg; use DBI; use File::Spec; use File::Temp; use PGObject::Util::DBAdmin 'v1.6.1'; +use Scope::Guard; +use XML::LibXML; +use XML::LibXML::XPathContext; use Moose; use namespace::autoclean; @@ -83,6 +87,15 @@ to be the root of the LedgerSMB source tree. has source_dir => (is => 'ro', default => './sql'); +=head2 data_dir + +Indicates the path to the directory which holds the 'initial-data.xml' file +containing the reference and static data to be loaded into the base schema. + +=cut + +has data_dir => (is => 'ro', default => './locale'); + =head2 default_connect_options =cut @@ -486,6 +499,84 @@ tag in the LOADORDER file will be applied (the main use-case being migrations). =cut +sub _load_contact_classes { + my ($self, $dbh, $xpc) = @_; + my @nodes = $xpc->findnodes( './x:contact-classes/x:class' ); + return unless @nodes; + + my $sth = $dbh->prepare( + q|INSERT INTO contact_class (class) VALUES (?)| + ) or die $dbh->errstr; + for my $node (@nodes) { + my $atts = $node->attributes; + my @vals = ( + $atts->getNamedItem( 'name' )->nodeValue, + ); + $self->logger->tracef( 'Inserting contact class "%s"', @vals ); + $sth->execute( @vals ) + or die $sth->errstr; + } +} + +sub _load_countries { + my ($self, $dbh, $xpc) = @_; + my @nodes = $xpc->findnodes( './x:countries/x:country' ); + return unless @nodes; + + my $sth = $dbh->prepare( + q|INSERT INTO country (short_name, name) VALUES (?, ?)| + ) or die $dbh->errstr; + for my $node (@nodes) { + my $atts = $node->attributes; + my @vals = ( + $atts->getNamedItem( 'code' )->nodeValue, + $atts->getNamedItem( 'description' )->nodeValue + ); + $self->logger->tracef( 'Inserting country code "%s"/"%s"', @vals ); + $sth->execute( @vals ) + or die $sth->errstr; + } +} + +sub _load_languages { + my ($self, $dbh, $xpc) = @_; + my @nodes = $xpc->findnodes( './x:languages/x:language' ); + return unless @nodes; + + my $sth = $dbh->prepare( + q|INSERT INTO language (code, description) VALUES (?, ?)| + ) or die $dbh->errstr; + for my $node (@nodes) { + my $atts = $node->attributes; + my @vals = ( + $atts->getNamedItem( 'code' )->nodeValue, + $atts->getNamedItem( 'description' )->nodeValue + ); + $self->logger->tracef( 'Inserting language code "%s"/"%s"', @vals ); + $sth->execute( @vals ) + or die $sth->errstr; + } +} + +sub _load_salutations { + my ($self, $dbh, $xpc) = @_; + my @nodes = $xpc->findnodes( './x:salutations/x:salutation' ); + return unless @nodes; + + my $sth = $dbh->prepare( + q|INSERT INTO salutation (salutation) VALUES (?)| + ) or die $dbh->errstr; + for my $node (@nodes) { + my $atts = $node->attributes; + my @vals = ( + $atts->getNamedItem( 'text' )->nodeValue, + ); + $self->logger->tracef( 'Inserting salutation "%s"', @vals ); + $sth->execute( @vals ) + or die $sth->errstr; + } +} + sub load_base_schema { my ($self, %args) = @_; @@ -516,6 +607,24 @@ sub load_base_schema { die 'Base schema failed to load' if ! $success; + $dbh->disconnect; + $dbh = $self->connect(); + my $guard = Scope::Guard->new(sub { $dbh->disconnect if $dbh; }); + my $initial = File::Spec->catfile( $self->data_dir, 'initial-data.xml' ); + open( my $fh, '<:bytes', $initial ) + or croak "Failed to open schema seed data file ($initial): $!"; + my $doc = XML::LibXML->load_xml( IO => $fh ); + my $xpc = XML::LibXML::XPathContext->new( $doc->documentElement ); + $xpc->registerNs( 'x', 'http://ledgersmb.org/xml-schemas/initial-data' ); + close( $fh ) or carp "Failed to close seed data file ($initial): $!"; + $self->_load_contact_classes( $dbh, $xpc ); + $self->_load_countries( $dbh, $xpc ); + $self->_load_languages( $dbh, $xpc ); + $self->_load_salutations( $dbh, $xpc ); + $dbh->commit; + $dbh->disconnect; + $dbh = undef; + if (opendir(LOADDIR, "$self->{source_dir}/on_load")) { while (my $fname = readdir(LOADDIR)) { $self->run_file( diff --git a/lib/LedgerSMB/Database/Factory.pm b/lib/LedgerSMB/Database/Factory.pm index f0c5cb53639..904da79e447 100644 --- a/lib/LedgerSMB/Database/Factory.pm +++ b/lib/LedgerSMB/Database/Factory.pm @@ -61,6 +61,18 @@ have been loaded. When none is provided, the default ('public') is assumed. has schema => (is => 'ro', default => 'public'); +=head2 data_dir + +Indicates the path to the directory which holds the 'initial-data.xml' file +containing the reference and static data to be loaded into the base schema. + +The default value is relative to the current directory, which is assumed +to be the root of the LedgerSMB source tree. + +=cut + +has data_dir => (is => 'ro', default => './locale'); + =head2 source_dir Indicates the path to the directory which holds the 'Pg-database.sql' file @@ -97,6 +109,7 @@ sub instance { %args }, schema => $self->schema, + data_dir => $self->data_dir, source_dir => $self->source_dir); } diff --git a/lib/LedgerSMB/Database/Upgrade.pm b/lib/LedgerSMB/Database/Upgrade.pm index 73cc2db80bf..f3a249bd1c6 100644 --- a/lib/LedgerSMB/Database/Upgrade.pm +++ b/lib/LedgerSMB/Database/Upgrade.pm @@ -15,10 +15,15 @@ use warnings; use LedgerSMB::I18N; use LedgerSMB::Upgrade_Tests; +use Carp; +use File::Spec; use File::Temp; -use List::Util qw( first ); +use List::Util qw( any first ); +use Log::Any qw( $log ); use Scope::Guard qw( guard ); use Template; +use XML::LibXML; +use XML::LibXML::XPathContext; use Moose; use namespace::autoclean; @@ -51,6 +56,18 @@ my %migration_upto = ( =head1 ATTRIBUTES +=head2 data_dir + +Indicates the path to the directory which holds the 'initial-data.xml' file +containing the reference and static data to be loaded into the base schema. + +The default value is relative to the current directory, which is assumed +to be the root of the LedgerSMB source tree. + +=cut + +has data_dir => (is => 'ro', default => './locale'); + =head2 database (required) @@ -178,8 +195,7 @@ my %migration_required_vars = ( my %required_vars_values = ( default_ar => sub { _linked_accounts($_[1], 'AR') }, default_ap => sub { _linked_accounts($_[1], 'AP') }, - default_country => sub { - LedgerSMB::I18N::get_country_list($_[0]->language) }, + default_country => sub { _filtered_languages($_[0]) }, slschema => sub { $migration_schema{$_[0]->type} }, ); @@ -210,6 +226,31 @@ sub _linked_accounts { return \@accounts; } +sub _filtered_languages { + my $self = shift; + my $initial = File::Spec->catfile( $self->data_dir, 'initial-data.xml' ); + my $langs = LedgerSMB::I18N::get_country_list($self->language); + + open( my $fh, '<:bytes', $initial ) + or croak "Failed to open schema seed data file ($initial): $!"; + my $doc = XML::LibXML->load_xml( IO => $fh ); + my $xpc = XML::LibXML::XPathContext->new( $doc->documentElement ); + $xpc->registerNs( 'x', 'http://ledgersmb.org/xml-schemas/initial-data' ); + close( $fh ) or carp "Failed to close seed data file ($initial): $!"; + + my @lang_codes = map { + my $atts = $_->attributes; + lc($atts->getNamedItem( 'code' )->nodeValue) + } $xpc->findnodes( './x:countries/x:country' ); + return [ + sort { $a->{text} cmp $b->{text} } + grep { + my $value = lc($_->{value}); + any { $value eq $_ } @lang_codes + } @$langs + ]; +} + sub required_vars { my ($self) = @_; my $dbh = $self->database->connect({ PrintError => 0, AutoCommit => 0 }); diff --git a/locale/initial-data.xml b/locale/initial-data.xml new file mode 100644 index 00000000000..3b4c5a6130e --- /dev/null +++ b/locale/initial-data.xml @@ -0,0 +1,330 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sql/Pg-database.sql b/sql/Pg-database.sql index 742773ccff8..7d92e7d7499 100644 --- a/sql/Pg-database.sql +++ b/sql/Pg-database.sql @@ -154,53 +154,6 @@ CREATE TABLE pricegroup ( COMMENT ON TABLE pricegroup IS $$ Pricegroups are groups of customers who are assigned prices and discounts together.$$; ---TABLE language moved here because of later references --- Keep this in sync with the Locale::CLDR::Locales::* required in cpanfile -INSERT INTO language (code, description) -VALUES ('ar_EG', 'Arabic (Egypt)'), - ('es_AR', 'Spanish (Argentina)'), - ('bg', 'Bulgarian'), - ('ca', 'Catalan'), - ('cs', 'Czech'), - ('da', 'Danish'), - ('de', 'German'), - ('de_CH', 'German (Switzerland)'), - ('el', 'Greek'), - ('en', 'English'), - ('en_CA', 'English (Canada)'), - ('en_US', 'English (US)'), - ('en_GB', 'English (UK)'), - ('es', 'Spanish'), - ('es_CO', 'Spanish (Colombia)'), - ('es_EC', 'Spanish (Ecuador)'), - ('es_MX', 'Spanish (Mexico)'), - ('es_PA', 'Spanish (Panama)'), - ('es_PY', 'Spanish (Paraguay)'), - ('es_VE', 'Spanish (Venezuela)'), - ('et', 'Estonian'), - ('fi', 'Finnish'), - ('fr', 'French'), - ('fr_BE', 'French (Belgium)'), - ('fr_CA', 'French (Canada)'), - ('hu', 'Hungarian'), - ('id', 'Indonesian'), - ('is', 'Icelandic'), - ('it', 'Italian'), - ('lt', 'Latvian'), - ('ms_MY','Malay'), - ('nb', 'Norwegian'), - ('nl', 'Dutch'), - ('nl_BE', 'Dutch (Belgium)'), - ('pl', 'Polish'), - ('pt', 'Portuguese'), - ('pt_BR', 'Portuguese (Brazil)'), - ('ru', 'Russian'), - ('sv', 'Swedish'), - ('tr', 'Turkish'), - ('uk', 'Ukranian'), - ('zh_CN', 'Chinese (China)'), - ('zh_TW', 'Chinese (Taiwan)'); --- country and tax form CREATE TABLE country ( id serial PRIMARY KEY, @@ -212,260 +165,6 @@ COMMENT ON COLUMN country.itu IS $$ The ITU Telecommunication Standardization Se CREATE UNIQUE INDEX country_name_idx on country(lower(name)); --- Populate some country data - -INSERT INTO country(short_name,name) VALUES ('AC','Ascension Island'); -INSERT INTO country(short_name,name) VALUES ('AD','Andorra'); -INSERT INTO country(short_name,name) VALUES ('AE','United Arab Emirates'); -INSERT INTO country(short_name,name) VALUES ('AF','Afghanistan'); -INSERT INTO country(short_name,name) VALUES ('AG','Antigua and Barbuda'); -INSERT INTO country(short_name,name) VALUES ('AI','Anguilla'); -INSERT INTO country(short_name,name) VALUES ('AL','Albania'); -INSERT INTO country(short_name,name) VALUES ('AM','Armenia'); -INSERT INTO country(short_name,name) VALUES ('AN','Netherlands Antilles'); -INSERT INTO country(short_name,name) VALUES ('AO','Angola'); -INSERT INTO country(short_name,name) VALUES ('AQ','Antarctica'); -INSERT INTO country(short_name,name) VALUES ('AR','Argentina'); -INSERT INTO country(short_name,name) VALUES ('AS','American Samoa'); -INSERT INTO country(short_name,name) VALUES ('AT','Austria'); -INSERT INTO country(short_name,name) VALUES ('AU','Australia'); -INSERT INTO country(short_name,name) VALUES ('AW','Aruba'); -INSERT INTO country(short_name,name) VALUES ('AX','Aland Islands'); -INSERT INTO country(short_name,name) VALUES ('AZ','Azerbaijan'); -INSERT INTO country(short_name,name) VALUES ('BA','Bosnia and Herzegovina'); -INSERT INTO country(short_name,name) VALUES ('BB','Barbados'); -INSERT INTO country(short_name,name) VALUES ('BD','Bangladesh'); -INSERT INTO country(short_name,name) VALUES ('BE','Belgium'); -INSERT INTO country(short_name,name) VALUES ('BF','Burkina Faso'); -INSERT INTO country(short_name,name) VALUES ('BG','Bulgaria'); -INSERT INTO country(short_name,name) VALUES ('BH','Bahrain'); -INSERT INTO country(short_name,name) VALUES ('BI','Burundi'); -INSERT INTO country(short_name,name) VALUES ('BJ','Benin'); -INSERT INTO country(short_name,name) VALUES ('BM','Bermuda'); -INSERT INTO country(short_name,name) VALUES ('BN','Brunei Darussalam'); -INSERT INTO country(short_name,name) VALUES ('BO','Bolivia'); -INSERT INTO country(short_name,name) VALUES ('BR','Brazil'); -INSERT INTO country(short_name,name) VALUES ('BS','Bahamas'); -INSERT INTO country(short_name,name) VALUES ('BT','Bhutan'); -INSERT INTO country(short_name,name) VALUES ('BV','Bouvet Island'); -INSERT INTO country(short_name,name) VALUES ('BW','Botswana'); -INSERT INTO country(short_name,name) VALUES ('BY','Belarus'); -INSERT INTO country(short_name,name) VALUES ('BZ','Belize'); -INSERT INTO country(short_name,name) VALUES ('CA','Canada'); -INSERT INTO country(short_name,name) VALUES ('CC','Cocos (Keeling) Islands'); -INSERT INTO country(short_name,name) VALUES ('CD','Congo, Democratic Republic'); -INSERT INTO country(short_name,name) VALUES ('CF','Central African Republic'); -INSERT INTO country(short_name,name) VALUES ('CG','Congo'); -INSERT INTO country(short_name,name) VALUES ('CH','Switzerland'); -INSERT INTO country(short_name,name) VALUES ('CI','Cote D''Ivoire (Ivory Coast)'); -INSERT INTO country(short_name,name) VALUES ('CK','Cook Islands'); -INSERT INTO country(short_name,name) VALUES ('CL','Chile'); -INSERT INTO country(short_name,name) VALUES ('CM','Cameroon'); -INSERT INTO country(short_name,name) VALUES ('CN','China'); -INSERT INTO country(short_name,name) VALUES ('CO','Colombia'); -INSERT INTO country(short_name,name) VALUES ('CR','Costa Rica'); -INSERT INTO country(short_name,name) VALUES ('CS','Czechoslovakia (former)'); -INSERT INTO country(short_name,name) VALUES ('CU','Cuba'); -INSERT INTO country(short_name,name) VALUES ('CV','Cape Verde'); -INSERT INTO country(short_name,name) VALUES ('CX','Christmas Island'); -INSERT INTO country(short_name,name) VALUES ('CY','Cyprus'); -INSERT INTO country(short_name,name) VALUES ('CZ','Czech Republic'); -INSERT INTO country(short_name,name) VALUES ('DE','Germany'); -INSERT INTO country(short_name,name) VALUES ('DJ','Djibouti'); -INSERT INTO country(short_name,name) VALUES ('DK','Denmark'); -INSERT INTO country(short_name,name) VALUES ('DM','Dominica'); -INSERT INTO country(short_name,name) VALUES ('DO','Dominican Republic'); -INSERT INTO country(short_name,name) VALUES ('DZ','Algeria'); -INSERT INTO country(short_name,name) VALUES ('EC','Ecuador'); -INSERT INTO country(short_name,name) VALUES ('EE','Estonia'); -INSERT INTO country(short_name,name) VALUES ('EG','Egypt'); -INSERT INTO country(short_name,name) VALUES ('EH','Western Sahara'); -INSERT INTO country(short_name,name) VALUES ('ER','Eritrea'); -INSERT INTO country(short_name,name) VALUES ('ES','Spain'); -INSERT INTO country(short_name,name) VALUES ('ET','Ethiopia'); -INSERT INTO country(short_name,name) VALUES ('FI','Finland'); -INSERT INTO country(short_name,name) VALUES ('FJ','Fiji'); -INSERT INTO country(short_name,name) VALUES ('FK','Falkland Islands (Malvinas)'); -INSERT INTO country(short_name,name) VALUES ('FM','Micronesia'); -INSERT INTO country(short_name,name) VALUES ('FO','Faroe Islands'); -INSERT INTO country(short_name,name) VALUES ('FR','France'); -INSERT INTO country(short_name,name) VALUES ('FX','France, Metropolitan'); -INSERT INTO country(short_name,name) VALUES ('GA','Gabon'); -INSERT INTO country(short_name,name) VALUES ('GB','Great Britain (UK)'); -INSERT INTO country(short_name,name) VALUES ('GD','Grenada'); -INSERT INTO country(short_name,name) VALUES ('GE','Georgia'); -INSERT INTO country(short_name,name) VALUES ('GF','French Guiana'); -INSERT INTO country(short_name,name) VALUES ('GH','Ghana'); -INSERT INTO country(short_name,name) VALUES ('GI','Gibraltar'); -INSERT INTO country(short_name,name) VALUES ('GL','Greenland'); -INSERT INTO country(short_name,name) VALUES ('GM','Gambia'); -INSERT INTO country(short_name,name) VALUES ('GN','Guinea'); -INSERT INTO country(short_name,name) VALUES ('GP','Guadeloupe'); -INSERT INTO country(short_name,name) VALUES ('GQ','Equatorial Guinea'); -INSERT INTO country(short_name,name) VALUES ('GR','Greece'); -INSERT INTO country(short_name,name) VALUES ('GS','S. Georgia and S. Sandwich Isls.'); -INSERT INTO country(short_name,name) VALUES ('GT','Guatemala'); -INSERT INTO country(short_name,name) VALUES ('GU','Guam'); -INSERT INTO country(short_name,name) VALUES ('GW','Guinea-Bissau'); -INSERT INTO country(short_name,name) VALUES ('GY','Guyana'); -INSERT INTO country(short_name,name) VALUES ('HK','Hong Kong'); -INSERT INTO country(short_name,name) VALUES ('HM','Heard and McDonald Islands'); -INSERT INTO country(short_name,name) VALUES ('HN','Honduras'); -INSERT INTO country(short_name,name) VALUES ('HR','Croatia (Hrvatska)'); -INSERT INTO country(short_name,name) VALUES ('HT','Haiti'); -INSERT INTO country(short_name,name) VALUES ('HU','Hungary'); -INSERT INTO country(short_name,name) VALUES ('ID','Indonesia'); -INSERT INTO country(short_name,name) VALUES ('IE','Ireland'); -INSERT INTO country(short_name,name) VALUES ('IL','Israel'); -INSERT INTO country(short_name,name) VALUES ('IM','Isle of Man'); -INSERT INTO country(short_name,name) VALUES ('IN','India'); -INSERT INTO country(short_name,name) VALUES ('IO','British Indian Ocean Territory'); -INSERT INTO country(short_name,name) VALUES ('IQ','Iraq'); -INSERT INTO country(short_name,name) VALUES ('IR','Iran'); -INSERT INTO country(short_name,name) VALUES ('IS','Iceland'); -INSERT INTO country(short_name,name) VALUES ('IT','Italy'); -INSERT INTO country(short_name,name) VALUES ('JE','Jersey'); -INSERT INTO country(short_name,name) VALUES ('JM','Jamaica'); -INSERT INTO country(short_name,name) VALUES ('JO','Jordan'); -INSERT INTO country(short_name,name) VALUES ('JP','Japan'); -INSERT INTO country(short_name,name) VALUES ('KE','Kenya'); -INSERT INTO country(short_name,name) VALUES ('KG','Kyrgyzstan'); -INSERT INTO country(short_name,name) VALUES ('KH','Cambodia'); -INSERT INTO country(short_name,name) VALUES ('KI','Kiribati'); -INSERT INTO country(short_name,name) VALUES ('KM','Comoros'); -INSERT INTO country(short_name,name) VALUES ('KN','Saint Kitts and Nevis'); -INSERT INTO country(short_name,name) VALUES ('KP','Korea (North)'); -INSERT INTO country(short_name,name) VALUES ('KR','Korea (South)'); -INSERT INTO country(short_name,name) VALUES ('KW','Kuwait'); -INSERT INTO country(short_name,name) VALUES ('KY','Cayman Islands'); -INSERT INTO country(short_name,name) VALUES ('KZ','Kazakhstan'); -INSERT INTO country(short_name,name) VALUES ('LA','Laos'); -INSERT INTO country(short_name,name) VALUES ('LB','Lebanon'); -INSERT INTO country(short_name,name) VALUES ('LC','Saint Lucia'); -INSERT INTO country(short_name,name) VALUES ('LI','Liechtenstein'); -INSERT INTO country(short_name,name) VALUES ('LK','Sri Lanka'); -INSERT INTO country(short_name,name) VALUES ('LR','Liberia'); -INSERT INTO country(short_name,name) VALUES ('LS','Lesotho'); -INSERT INTO country(short_name,name) VALUES ('LT','Lithuania'); -INSERT INTO country(short_name,name) VALUES ('LU','Luxembourg'); -INSERT INTO country(short_name,name) VALUES ('LV','Latvia'); -INSERT INTO country(short_name,name) VALUES ('LY','Libya'); -INSERT INTO country(short_name,name) VALUES ('MA','Morocco'); -INSERT INTO country(short_name,name) VALUES ('MC','Monaco'); -INSERT INTO country(short_name,name) VALUES ('MD','Moldova'); -INSERT INTO country(short_name,name) VALUES ('MG','Madagascar'); -INSERT INTO country(short_name,name) VALUES ('MH','Marshall Islands'); -INSERT INTO country(short_name,name) VALUES ('MK','F.Y.R.O.M. (Macedonia)'); -INSERT INTO country(short_name,name) VALUES ('ML','Mali'); -INSERT INTO country(short_name,name) VALUES ('MM','Myanmar'); -INSERT INTO country(short_name,name) VALUES ('MN','Mongolia'); -INSERT INTO country(short_name,name) VALUES ('MO','Macau'); -INSERT INTO country(short_name,name) VALUES ('MP','Northern Mariana Islands'); -INSERT INTO country(short_name,name) VALUES ('MQ','Martinique'); -INSERT INTO country(short_name,name) VALUES ('MR','Mauritania'); -INSERT INTO country(short_name,name) VALUES ('MS','Montserrat'); -INSERT INTO country(short_name,name) VALUES ('MT','Malta'); -INSERT INTO country(short_name,name) VALUES ('MU','Mauritius'); -INSERT INTO country(short_name,name) VALUES ('MV','Maldives'); -INSERT INTO country(short_name,name) VALUES ('MW','Malawi'); -INSERT INTO country(short_name,name) VALUES ('MX','Mexico'); -INSERT INTO country(short_name,name) VALUES ('MY','Malaysia'); -INSERT INTO country(short_name,name) VALUES ('MZ','Mozambique'); -INSERT INTO country(short_name,name) VALUES ('NA','Namibia'); -INSERT INTO country(short_name,name) VALUES ('NC','New Caledonia'); -INSERT INTO country(short_name,name) VALUES ('NE','Niger'); -INSERT INTO country(short_name,name) VALUES ('NF','Norfolk Island'); -INSERT INTO country(short_name,name) VALUES ('NG','Nigeria'); -INSERT INTO country(short_name,name) VALUES ('NI','Nicaragua'); -INSERT INTO country(short_name,name) VALUES ('NL','Netherlands'); -INSERT INTO country(short_name,name) VALUES ('NO','Norway'); -INSERT INTO country(short_name,name) VALUES ('NP','Nepal'); -INSERT INTO country(short_name,name) VALUES ('NR','Nauru'); -INSERT INTO country(short_name,name) VALUES ('NT','Neutral Zone'); -INSERT INTO country(short_name,name) VALUES ('NU','Niue'); -INSERT INTO country(short_name,name) VALUES ('NZ','New Zealand (Aotearoa)'); -INSERT INTO country(short_name,name) VALUES ('OM','Oman'); -INSERT INTO country(short_name,name) VALUES ('PA','Panama'); -INSERT INTO country(short_name,name) VALUES ('PE','Peru'); -INSERT INTO country(short_name,name) VALUES ('PF','French Polynesia'); -INSERT INTO country(short_name,name) VALUES ('PG','Papua New Guinea'); -INSERT INTO country(short_name,name) VALUES ('PH','Philippines'); -INSERT INTO country(short_name,name) VALUES ('PK','Pakistan'); -INSERT INTO country(short_name,name) VALUES ('PL','Poland'); -INSERT INTO country(short_name,name) VALUES ('PM','St. Pierre and Miquelon'); -INSERT INTO country(short_name,name) VALUES ('PN','Pitcairn'); -INSERT INTO country(short_name,name) VALUES ('PR','Puerto Rico'); -INSERT INTO country(short_name,name) VALUES ('PS','Palestinian Territory, Occupied'); -INSERT INTO country(short_name,name) VALUES ('PT','Portugal'); -INSERT INTO country(short_name,name) VALUES ('PW','Palau'); -INSERT INTO country(short_name,name) VALUES ('PY','Paraguay'); -INSERT INTO country(short_name,name) VALUES ('QA','Qatar'); -INSERT INTO country(short_name,name) VALUES ('RE','Reunion'); -INSERT INTO country(short_name,name) VALUES ('RO','Romania'); -INSERT INTO country(short_name,name) VALUES ('RS','Serbia'); -INSERT INTO country(short_name,name) VALUES ('RU','Russian Federation'); -INSERT INTO country(short_name,name) VALUES ('RW','Rwanda'); -INSERT INTO country(short_name,name) VALUES ('SA','Saudi Arabia'); -INSERT INTO country(short_name,name) VALUES ('SB','Solomon Islands'); -INSERT INTO country(short_name,name) VALUES ('SC','Seychelles'); -INSERT INTO country(short_name,name) VALUES ('SD','Sudan'); -INSERT INTO country(short_name,name) VALUES ('SE','Sweden'); -INSERT INTO country(short_name,name) VALUES ('SG','Singapore'); -INSERT INTO country(short_name,name) VALUES ('SH','St. Helena'); -INSERT INTO country(short_name,name) VALUES ('SI','Slovenia'); -INSERT INTO country(short_name,name) VALUES ('SJ','Svalbard & Jan Mayen Islands'); -INSERT INTO country(short_name,name) VALUES ('SK','Slovak Republic'); -INSERT INTO country(short_name,name) VALUES ('SL','Sierra Leone'); -INSERT INTO country(short_name,name) VALUES ('SM','San Marino'); -INSERT INTO country(short_name,name) VALUES ('SN','Senegal'); -INSERT INTO country(short_name,name) VALUES ('SO','Somalia'); -INSERT INTO country(short_name,name) VALUES ('SR','Suriname'); -INSERT INTO country(short_name,name) VALUES ('ST','Sao Tome and Principe'); -INSERT INTO country(short_name,name) VALUES ('SU','USSR (former)'); -INSERT INTO country(short_name,name) VALUES ('SV','El Salvador'); -INSERT INTO country(short_name,name) VALUES ('SY','Syria'); -INSERT INTO country(short_name,name) VALUES ('SZ','Swaziland'); -INSERT INTO country(short_name,name) VALUES ('TC','Turks and Caicos Islands'); -INSERT INTO country(short_name,name) VALUES ('TD','Chad'); -INSERT INTO country(short_name,name) VALUES ('TF','French Southern Territories'); -INSERT INTO country(short_name,name) VALUES ('TG','Togo'); -INSERT INTO country(short_name,name) VALUES ('TH','Thailand'); -INSERT INTO country(short_name,name) VALUES ('TJ','Tajikistan'); -INSERT INTO country(short_name,name) VALUES ('TK','Tokelau'); -INSERT INTO country(short_name,name) VALUES ('TM','Turkmenistan'); -INSERT INTO country(short_name,name) VALUES ('TN','Tunisia'); -INSERT INTO country(short_name,name) VALUES ('TO','Tonga'); -INSERT INTO country(short_name,name) VALUES ('TP','East Timor'); -INSERT INTO country(short_name,name) VALUES ('TR','Turkey'); -INSERT INTO country(short_name,name) VALUES ('TT','Trinidad and Tobago'); -INSERT INTO country(short_name,name) VALUES ('TV','Tuvalu'); -INSERT INTO country(short_name,name) VALUES ('TW','Taiwan'); -INSERT INTO country(short_name,name) VALUES ('TZ','Tanzania'); -INSERT INTO country(short_name,name) VALUES ('UA','Ukraine'); -INSERT INTO country(short_name,name) VALUES ('UG','Uganda'); -INSERT INTO country(short_name,name) VALUES ('UK','United Kingdom'); -INSERT INTO country(short_name,name) VALUES ('UM','US Minor Outlying Islands'); -INSERT INTO country(short_name,name) VALUES ('US','United States'); -INSERT INTO country(short_name,name) VALUES ('UY','Uruguay'); -INSERT INTO country(short_name,name) VALUES ('UZ','Uzbekistan'); -INSERT INTO country(short_name,name) VALUES ('VA','Vatican City State (Holy See)'); -INSERT INTO country(short_name,name) VALUES ('VC','Saint Vincent & the Grenadines'); -INSERT INTO country(short_name,name) VALUES ('VE','Venezuela'); -INSERT INTO country(short_name,name) VALUES ('VG','British Virgin Islands'); -INSERT INTO country(short_name,name) VALUES ('VI','Virgin Islands (U.S.)'); -INSERT INTO country(short_name,name) VALUES ('VN','Viet Nam'); -INSERT INTO country(short_name,name) VALUES ('VU','Vanuatu'); -INSERT INTO country(short_name,name) VALUES ('WF','Wallis and Futuna Islands'); -INSERT INTO country(short_name,name) VALUES ('WS','Samoa'); -INSERT INTO country(short_name,name) VALUES ('YE','Yemen'); -INSERT INTO country(short_name,name) VALUES ('YT','Mayotte'); -INSERT INTO country(short_name,name) VALUES ('YU','Yugoslavia (former)'); -INSERT INTO country(short_name,name) VALUES ('ZA','South Africa'); -INSERT INTO country(short_name,name) VALUES ('ZM','Zambia'); -INSERT INTO country(short_name,name) VALUES ('ZR','Zaire'); -INSERT INTO country(short_name,name) VALUES ('ZW','Zimbabwe'); - - create table country_tax_form (country_id int references country(id) not null, form_name text not null, @@ -702,15 +401,6 @@ CREATE TABLE salutation ( id serial unique, salutation text primary key); -INSERT INTO salutation (id,salutation) VALUES ('1','Dr.'); -INSERT INTO salutation (id,salutation) VALUES ('2','Miss.'); -INSERT INTO salutation (id,salutation) VALUES ('3','Mr.'); -INSERT INTO salutation (id,salutation) VALUES ('4','Mrs.'); -INSERT INTO salutation (id,salutation) VALUES ('5','Ms.'); -INSERT INTO salutation (id,salutation) VALUES ('6','Sir.'); - -SELECT SETVAL('salutation_id_seq',7); - CREATE TABLE person ( id serial PRIMARY KEY, entity_id integer references entity(id) not null, @@ -774,30 +464,6 @@ Please coordinate with others before adding new types.$$; CREATE UNIQUE INDEX contact_class_class_idx ON contact_class(lower(class)); -INSERT INTO contact_class (id,class) values (1,'Primary Phone'); -INSERT INTO contact_class (id,class) values (2,'Secondary Phone'); -INSERT INTO contact_class (id,class) values (3,'Cell Phone'); -INSERT INTO contact_class (id,class) values (4,'AIM'); -INSERT INTO contact_class (id,class) values (5,'Yahoo'); -INSERT INTO contact_class (id,class) values (6,'Gtalk'); -INSERT INTO contact_class (id,class) values (7,'MSN'); -INSERT INTO contact_class (id,class) values (8,'IRC'); -INSERT INTO contact_class (id,class) values (9,'Fax'); -INSERT INTO contact_class (id,class) values (10,'Generic Jabber'); -INSERT INTO contact_class (id,class) values (11,'Home Phone'); --- The e-mail classes are hard-coded into LedgerSMB/Form.pm by class_id --- i.e. 'class_id's 12 - 17 -INSERT INTO contact_class (id,class) values (12,'Email'); -INSERT INTO contact_class (id,class) values (13,'CC'); -INSERT INTO contact_class (id,class) values (14,'BCC'); -INSERT INTO contact_class (id,class) values (15,'Billing Email'); -INSERT INTO contact_class (id,class) values (16,'Billing CC'); -INSERT INTO contact_class (id,class) values (17,'Billing BCC'); -INSERT INTO contact_class (id,class) values (18,'EDI Interchange ID'); -INSERT INTO contact_class (id,class) values (19,'EDI ID'); - -SELECT SETVAL('contact_class_id_seq',19); - CREATE TABLE entity_to_contact ( entity_id integer not null references entity(id) ON DELETE CASCADE, contact_class_id integer references contact_class(id) not null, diff --git a/xt/40-database.t b/xt/40-database.t index d3af0d1f9e4..bc0842e8036 100644 --- a/xt/40-database.t +++ b/xt/40-database.t @@ -123,6 +123,7 @@ $db = LedgerSMB::Database->new( user => $ENV{PGUSER}, password => $ENV{PGPASSWORD}, }, + data_dir => './xt/data/40-database', source_dir => './xt/data/40-database/module-failure-1', schema => 'xyz', ); @@ -138,6 +139,7 @@ $db = LedgerSMB::Database->new( user => $ENV{PGUSER}, password => $ENV{PGPASSWORD}, }, + data_dir => './xt/data/40-database', source_dir => './xt/data/40-database/module-failure-2', schema => 'xyz', ); diff --git a/xt/data/40-database/initial-data.xml b/xt/data/40-database/initial-data.xml new file mode 100644 index 00000000000..3936a851e41 --- /dev/null +++ b/xt/data/40-database/initial-data.xml @@ -0,0 +1,3 @@ + + +