<!-- 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') ) { %>
- %>
- <FORM NAME="OneTrueForm" METHOD="POST" ACTION="meta-import.cgi">
<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">
- </FORM>
- </BODY>
- </HTML>
<%
- } elsif ( $cgi->param('magic') eq 'process' ) {
+ #second page
+ } elsif ( $cgi->param('magic') eq 'process' ) { %>
- %>
- <FORM NAME="OneTrueForm" METHOD="POST" ACTION="meta-import.cgi">
<INPUT TYPE="hidden" NAME="magic" VALUE="process2">
<%
- 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 );
-
- #*** 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">
- </FORM>
- </BODY>
- </HTML>
<%
- } elsif ( $cgi->param('magic') eq 'process' ) {
+ #third (results)
+ } elsif ( $cgi->param('magic') eq 'process2' ) {
- %>
- print results!!
- <%
+ print "<pre>\n";
+
+ my %unique;
+ foreach my $table ( keys %schema ) {
+ ( my $spaces = $table ) =~ s/./ /g;
+ print "'$table' => { 'table' => '$schema{$table}',\n".
+ #(length($table) x ' '). " 'map' => {\n";
+ "$spaces 'map' => {\n";
+ my %map = map { /^\s*(\w+)\s*=>\s*(\w+)\s*$/
+ or die "guru meditation #420: $_";
+ ( $1 => $2 );
+ }
+ split( /\n/, $cgi->param($table.'__'.$unique{$table}++) );
+ foreach ( keys %map ) {
+ print "$spaces '$_' => '$map{$_}',\n";
+ }
+ print "$spaces },\n";
+ print "$spaces },\n";
+
+ }
+ print "\n</pre>";
+
+ } else {
+ warn "unrecognized magic: ". $cgi->param('magic');
}
+ %>
+</FORM>
+</BODY>
+</HTML>
+
+ <%
#hashmaker widget
sub hashmaker {
my($name, $from, $to, $labelfrom, $labelto) = @_;
"<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>".
'';
}