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 @@
+
+
+