Business-Cart-Generic
view release on metacpan or search on metacpan
lib/Business/Cart/Generic/Database/Import.pm view on Meta::CPAN
# -----------------------------------------------
sub clean_currency_data
{
my($self) = @_;
my($input_path) = "$FindBin::Bin/../data/raw.currencies.txt";
my(@original_data) = slurp($input_path, {chomp => 1});
my(@field);
my($line);
my(@raw_data);
push @raw_data, '"name","code","symbol_left","symbol_right","decimal_places"';
for $line (@original_data)
{
# Expected format:
# INSERT INTO osc_currencies VALUES (4,'Australian Dollar','AUD','$','','2','1.000', now());
$line = substr($line, 0, - 2); # Discard );.
@field = split(/VALUES \(/, $line);
$field[1] =~ tr/'/"/; # For Text::CSV_XS.
@field = split(/\s*,\s*/, $field[1]);
push @raw_data, join(',', @field[1 .. 5]);
}
my($output_path) = "$FindBin::Bin/../data/currencies.csv";
open(OUT, '>', $output_path) || die "Can't open($output_path): $!";
my($csv) = Text::CSV_XS -> new({allow_whitespace => 1, binary => 1});
my($status);
my(%target);
while ($line = shift @raw_data)
{
$status = $csv -> parse($line) || die "Can't parse $line";
@field = $csv -> fields;
print OUT '"', join('","', @field), qq|"\n|;
}
close OUT;
} # End of clean_currency_data.
# -----------------------------------------------
sub clean_language_data
{
my($self) = @_;
my($input_path) = "$FindBin::Bin/../data/raw.languages.txt";
my(@original_data) = slurp($input_path, {chomp => 1});
my(@field);
my($line);
my(@raw_data);
push @raw_data, '"name","code","locale","charset","date_format_short","date_format_long","time_format","text_direction","currency_id","numeric_separator_decimal","numeric_separator_thousands"';
for $line (@original_data)
{
# Expected format:
# INSERT INTO osc_languages VALUES (2,'English','en_AU','en_AU.UTF-8,en_AU,english','utf-8','%d/%m/%Y','%A %d %B, %Y','%H:%M:%S','ltr',1,'.',',',0,1);
$line = substr($line, 0, - 2); # Discard );.
@field = split(/VALUES \(/, $line);
$field[1] =~ s/,(en_(?:AU|US)),/#$1#/; # locale.
$field[1] =~ s/B,/B#/; # date_format_long.
$field[1] =~ s/'.',',',/'.','#',/; # numeric_separator_thousands.
$field[1] =~ tr/'/"/; # For Text::CSV_XS.
@field = split(/\s*,\s*/, $field[1]);
$field[3] =~ s/#/,/g; # locale.
$field[6] =~ s/#/,/; # date_format_long.
$field[11] =~ s/#/,/; # numeric_separator_thousands.
push @raw_data, join(',', @field[1 .. 11]);
}
my($output_path) = "$FindBin::Bin/../data/languages.csv";
open(OUT, '>', $output_path) || die "Can't open($output_path): $!";
my($csv) = Text::CSV_XS -> new({allow_whitespace => 1});
my($status);
my(%target);
while ($line = shift @raw_data)
{
$status = $csv -> parse($line) || die "Can't parse $line";
@field = $csv -> fields;
print OUT '"', join('","', @field), qq|"\n|;
}
close OUT;
} # End of clean_language_data.
# -----------------------------------------------
sub clean_order_statuses_data
{
my($self) = @_;
my($input_path) = "$FindBin::Bin/../data/raw.order.statuses.txt";
my(@original_data) = slurp($input_path, {chomp => 1});
my(@field);
my($line);
my(@raw_data);
push @raw_data, '"language_id","name"';
for $line (@original_data)
{
# Expected format:
# INSERT INTO osc_orders_status VALUES ( '1', '4', 'Pending');
$line = substr($line, 0, - 2); # Discard );.
@field = split(/VALUES \(/, $line);
$field[1] =~ tr/'/"/; # For Text::CSV_XS.
@field = split(/\s*,\s*/, $field[1]);
push @raw_data, join(',', @field[1 .. 2]);
}
my($output_path) = "$FindBin::Bin/../data/order.statuses.csv";
open(OUT, '>', $output_path) || die "Can't open($output_path): $!";
my($csv) = Text::CSV_XS -> new({allow_whitespace => 1});
lib/Business/Cart/Generic/Database/Import.pm view on Meta::CPAN
my($result);
for my $code (sort keys %$country_map)
{
$result = $rs -> create
({
code => $code,
name => $$country_map{$code}{name},
upper_name => uc $$country_map{$code}{name},
});
}
} # End of populate_countries_table.
# -----------------------------------------------
sub populate_currencies_table
{
my($self) = @_;
my($path) = "$FindBin::Bin/../data/currencies.csv";
my($zone) = $self -> read_csv_file($path);
my($rs) = $self -> schema -> resultset('Currency');
my($result);
for my $line (@$zone)
{
$result = $rs -> create
({
code => $$line{code},
decimal_places => $$line{decimal_places},
name => $$line{name},
symbol_left => $$line{symbol_left},
symbol_right => $$line{symbol_right},
upper_name => uc $$line{name},
});
}
} # End of populate_currencies_table.
# -----------------------------------------------
sub populate_languages_table
{
my($self) = @_;
my($path) = "$FindBin::Bin/../data/languages.csv";
my($zone) = $self -> read_csv_file($path);
my($rs) = $self -> schema -> resultset('Language');
my($result);
for my $line (@$zone)
{
$result = $rs -> create
({
charset => $$line{charset},
code => $$line{code},
currency_id => $$line{currency_id},
date_format_long => $$line{date_format_long},
date_format_short => $$line{date_format_long},
locale => $$line{locale},
name => $$line{name},
numeric_separator_decimal => $$line{numeric_separator_decimal},
numeric_separator_thousands => $$line{numeric_separator_thousands},
text_direction => $$line{text_direction},
time_format => $$line{time_format},
upper_name => uc $$line{name},
});
}
} # End of populate_languages_table.
# -----------------------------------------------
sub populate_order_statuses_table
{
my($self) = @_;
my($path) = "$FindBin::Bin/../data/order.statuses.csv";
my($zone) = $self -> read_csv_file($path);
my($rs) = $self -> schema -> resultset('OrderStatuse');
my(@language2id) = $self -> schema -> resultset('Language') -> search({}, {columns => [qw/code id/]});
my(%language2id) = map{($_ -> code, $_ -> id)} @language2id;
my($language_id);
my($result);
for my $line (@$zone)
{
$language_id = $language2id{$$line{language} } || die "Unknown language: $$line{language}";
$result = $rs -> create
({
language_id => $language_id,
name => $$line{name},
upper_name => uc $$line{name},
});
}
} # End of populate_order_statuses_table.
# -----------------------------------------------
sub populate_table
{
my($self, $file_name, $class_name) = @_;
my($path) = "$FindBin::Bin/../data/$file_name";
my($data) = $self -> read_csv_file($path);
my($rs) = $self -> schema -> resultset($class_name);
my($result);
for my $line (@$data)
{
$result = $rs -> create
({
name => $$line{name},
upper_name => uc $$line{name},
});
}
} # End of populate_table.
( run in 0.644 second using v1.01-cache-2.11-cpan-ceb78f64989 )