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 )