2 <%= header('Map tables') %>
4 var gSafeOnload = new Array();
5 var gSafeOnsubmit = new Array();
6 window.onload = SafeOnload;
7 function SafeAddOnLoad(f) {
8 gSafeOnload[gSafeOnload.length] = f;
10 function SafeOnload() {
11 for (var i=0;i<gSafeOnload.length;i++)
14 function SafeAddOnSubmit(f) {
15 gSafeOnsubmit[gSafeOnsubmit.length] = f;
17 function SafeOnsubmit() {
18 for (var i=0;i<gSafeOnsubmit.length;i++)
22 <FORM NAME="OneTrueForm" METHOD="POST" ACTION="meta-import.cgi">
25 unless ( $cgi->param('magic') ) {
28 #my $fh = $cgi->upload('csvfile');
33 #$tar = Archive::Tar->new();
34 #$tar->create_archive($fh); #or die $tar->error;
38 authserv credtype dunprev invoice pmtdet product taxplan
39 ccdet customer genlog ledger pops pubvars
40 cchist discplan glacct origco prodcat recur users
41 credcode dundet invline payment prodclas repforms webserv
45 <INPUT TYPE="hidden" NAME="magic" VALUE="process">
46 <%= hashmaker('schema', \@files, [ grep { ! /^h_/ } dbdef->tables ] ) %>
47 <br><INPUT TYPE="submit" VALUE="done">
50 } elsif ( $cgi->param('magic') eq 'process' ) {
53 <INPUT TYPE="hidden" NAME="magic" VALUE="process2">
56 my $schema_string = $cgi->param('schema');
57 %><INPUT TYPE="hidden" NAME="schema" VALUE="<%=$schema_string%>"><%
58 my %schema = map { /^\s*(\w+)\s*=>\s*(\w+)\s*$/
59 or die "guru meditation #420: $_";
62 split( /\n/, $schema_string );
64 #*** should be in global.asa/handler.pl like the rest
65 eval 'use Text::CSV_XS;';
67 foreach my $table ( keys %schema ) {
69 my $csv = Text::CSV_XS->new({ 'binary'=>1 });
70 open(FILE,"</home/ivan/intergate/legacy/csvdir/$table")
71 or die "can't /home/ivan/intergate/legacy/csvdir/$table: $!";
72 my $header = lc(<FILE>);
74 $csv->parse($header) or die;
75 my @from_columns = $csv->fields;
77 my @fs_columns = dbdef->table($schema{$table})->columns;
80 <%= hashmaker($table, \@from_columns, \@fs_columns, $table, $schema{$table} ) %>
87 <br><INPUT TYPE="submit" VALUE="done">
90 } elsif ( $cgi->param('magic') eq 'process2' ) {
93 #false laziness with above
94 my $schema_string = $cgi->param('schema');
95 my %schema = map { /^\s*(\w+)\s*=>\s*(\w+)\s*$/
96 or die "guru meditation #420: $_";
99 split( /\n/, $schema_string );
100 foreach my $table ( keys %schema ) {
101 ( my $spaces = $table ) =~ s/./ /g;
102 print "'$table' => { 'table' => '$schema{$table}',\n".
103 #(length($table) x ' '). " 'map' => {\n";
104 "$spaces 'map' => {\n";
105 my %map = map { /^\s*(\w+)\s*=>\s*(\w+)\s*$/
106 or die "guru meditation #420: $_";
109 split( /\n/, $cgi->param($table) );
110 foreach ( keys %map ) {
111 print "$spaces '$_' => '$map{$_}',\n";
113 print "$spaces },\n";
114 print "$spaces },\n";
120 warn "unrecognized magic: ". $cgi->param('magic');
131 my($name, $from, $to, $labelfrom, $labelto) = @_;
132 $fromsize = scalar(@$from);
133 $tosize = scalar(@$to);
134 "<TABLE><TR><TH>$labelfrom</TH><TH>$labelto</TH></TR><TR><TD>".
135 qq!<SELECT NAME="${name}_from" SIZE=$fromsize>\n!.
136 join("\n", map { qq!<OPTION VALUE="$_">$_</OPTION>! } sort { $a cmp $b } @$from ).
139 qq!<SELECT NAME="${name}_to" SIZE=$tosize>\n!.
140 join("\n", map { qq!<OPTION VALUE="$_">$_</OPTION>! } sort { $a cmp $b } @$to ).
143 '<TR><TD COLSPAN=2>'.
144 qq!<INPUT TYPE="button" VALUE="map" onClick="toke_$name(this.form)">!.
145 '</TD></TR><TR><TD COLSPAN=2>'.
146 qq!<TEXTAREA NAME="$name" COLS=80 ROWS=8></TEXTAREA>!.
147 '</TD></TR></TABLE>'.
149 function toke_$name() {
150 fromObject = document.OneTrueForm.${name}_from;
151 for (var i=fromObject.options.length-1;i>-1;i--) {
152 if (fromObject.options[i].selected)
153 fromname = deleteOption_$name(fromObject,i);
155 toObject = document.OneTrueForm.${name}_to;
156 for (var i=toObject.options.length-1;i>-1;i--) {
157 if (toObject.options[i].selected)
158 toname = deleteOption_$name(toObject,i);
160 document.OneTrueForm.$name.value = document.OneTrueForm.$name.value + fromname + ' => ' + toname + '\\n';
162 function deleteOption_$name(object,index) {
163 value = object.options[index].value;
164 object.options[index] = null;