<!-- mason kludge -->
<%= header('Map tables') %>
+
<SCRIPT>
var gSafeOnload = new Array();
var gSafeOnsubmit = new Array();
gSafeOnsubmit[i]();
}
</SCRIPT>
+
<FORM NAME="OneTrueForm" METHOD="POST" ACTION="meta-import.cgi">
+
<%
- #one
- unless ( $cgi->param('magic') ) {
-
- #oops, silly
- #my $fh = $cgi->upload('csvfile');
- ##warn $cgi;
- ##warn $fh;
- #
- #use Archive::Tar;
- #$tar = Archive::Tar->new();
- #$tar->create_archive($fh); #or die $tar->error;
-
- #haha for now
- my @files = qw(
-authserv credtype dunprev invoice pmtdet product taxplan
-ccdet customer genlog ledger pops pubvars
-cchist discplan glacct origco prodcat recur users
-credcode dundet invline payment prodclas repforms webserv
- );
+ #use DBIx::DBSchema;
+ my $schema = new_native DBIx::DBSchema
+ map { $cgi->param($_) } qw( data_source username password );
+ foreach my $field (qw( data_source username password )) { %>
+ <INPUT TYPE="hidden" NAME=<%= $field %> VALUE="<%= $cgi->param($field) %>">
+ <% }
+
+ my %schema;
+ use Tie::DxHash;
+ tie %schema, 'Tie::DxHash';
+ if ( $cgi->param('schema') ) {
+ my $schema_string = $cgi->param('schema');
+ %> <INPUT TYPE="hidden" NAME="schema" VALUE="<%=$schema_string%>"> <%
+ %schema = map { /^\s*(\w+)\s*=>\s*(\w+)\s*$/
+ or die "guru meditation #420: $_";
+ ( $1 => $2 );
+ }
+ split( /\n/, $schema_string );
+ }
+
+ #first page
+ unless ( $cgi->param('magic') ) { %>
- %>
<INPUT TYPE="hidden" NAME="magic" VALUE="process">
- <%= hashmaker('schema', \@files, [ grep { ! /^h_/ } dbdef->tables ] ) %>
+ <%= hashmaker('schema', [ $schema->tables ],
+ [ grep !/^h_/, dbdef->tables ], ) %>
<br><INPUT TYPE="submit" VALUE="done">
<%
- } elsif ( $cgi->param('magic') eq 'process' ) {
+ #second page
+ } elsif ( $cgi->param('magic') eq 'process' ) { %>
- %>
<INPUT TYPE="hidden" NAME="magic" VALUE="process2">
<%
- my $schema_string = $cgi->param('schema');
- %><INPUT TYPE="hidden" NAME="schema" VALUE="<%=$schema_string%>"><%
- my %schema = map { /^\s*(\w+)\s*=>\s*(\w+)\s*$/
- or die "guru meditation #420: $_";
- ( $1 => $2 );
- }
- split( /\n/, $schema_string );
-
- #*** should be in global.asa/handler.pl like the rest
- eval 'use Text::CSV_XS;';
-
+ my %unique;
foreach my $table ( keys %schema ) {
- my $csv = Text::CSV_XS->new({ 'binary'=>1 });
- open(FILE,"</home/ivan/intergate/legacy/csvdir/$table")
- or die "can't /home/ivan/intergate/legacy/csvdir/$table: $!";
- my $header = lc(<FILE>);
- close FILE;
- $csv->parse($header) or die;
- my @from_columns = $csv->fields;
-
+ my @from_columns = $schema->table($table)->columns;
my @fs_columns = dbdef->table($schema{$table})->columns;
%>
- <%= hashmaker($table, \@from_columns, \@fs_columns, $table, $schema{$table} ) %>
+ <%= hashmaker( $table.'__'.$unique{$table}++,
+ \@from_columns => \@fs_columns,
+ $table => $schema{$table}, ) %>
<br><hr><br>
<%
<br><INPUT TYPE="submit" VALUE="done">
<%
+ #third (results)
} elsif ( $cgi->param('magic') eq 'process2' ) {
print "<pre>\n";
- #false laziness with above
- my $schema_string = $cgi->param('schema');
- my %schema = map { /^\s*(\w+)\s*=>\s*(\w+)\s*$/
- or die "guru meditation #420: $_";
- ( $1 => $2 );
- }
- split( /\n/, $schema_string );
+
+ my %unique;
foreach my $table ( keys %schema ) {
( my $spaces = $table ) =~ s/./ /g;
print "'$table' => { 'table' => '$schema{$table}',\n".
or die "guru meditation #420: $_";
( $1 => $2 );
}
- split( /\n/, $cgi->param($table) );
+ split( /\n/, $cgi->param($table.'__'.$unique{$table}++) );
foreach ( keys %map ) {
print "$spaces '$_' => '$map{$_}',\n";
}
#hashmaker widget
sub hashmaker {
my($name, $from, $to, $labelfrom, $labelto) = @_;
- $fromsize = scalar(@$from);
- $tosize = scalar(@$to);
+ my $fromsize = scalar(@$from);
+ my $tosize = scalar(@$to);
"<TABLE><TR><TH>$labelfrom</TH><TH>$labelto</TH></TR><TR><TD>".
qq!<SELECT NAME="${name}_from" SIZE=$fromsize>\n!.
join("\n", map { qq!<OPTION VALUE="$_">$_</OPTION>! } sort { $a cmp $b } @$from ).
- "</SELECT>\n".
+ "</SELECT>\n<BR>".
+ qq!<INPUT TYPE="button" VALUE="refill" onClick="repack_${name}_from()">!.
'</TD><TD>'.
qq!<SELECT NAME="${name}_to" SIZE=$tosize>\n!.
join("\n", map { qq!<OPTION VALUE="$_">$_</OPTION>! } sort { $a cmp $b } @$to ).
- "</SELECT>\n".
+ "</SELECT>\n<BR>".
+ qq!<INPUT TYPE="button" VALUE="refill" onClick="repack_${name}_to()">!.
'</TD></TR>'.
'<TR><TD COLSPAN=2>'.
qq!<INPUT TYPE="button" VALUE="map" onClick="toke_$name(this.form)">!.
object.options[index] = null;
return value;
}
+ function repack_${name}_from() {
+ var object = document.OneTrueForm.${name}_from;
+ object.options.length = 0;
+ ". join("\n",
+ map { "addOption_$name(object, '$_');\n" }
+ ( sort { $a cmp $b } @$from ) ). "
+ }
+ function repack_${name}_to() {
+ var object = document.OneTrueForm.${name}_to;
+ object.options.length = 0;
+ ". join("\n",
+ map { "addOption_$name(object, '$_');\n" }
+ ( sort { $a cmp $b } @$to ) ). "
+ }
+ function addOption_$name(object,value) {
+ var length = object.length;
+ object.options[length] = new Option(value, value, false, false);
+ }
</script>".
'';
}