4c3c7d665e6c706f8bc924f703ed626408919139
[freeside.git] / httemplate / misc / process / meta-import.cgi
1 <!-- mason kludge -->
2 <%= header('Map tables') %>
3 <SCRIPT>
4 var gSafeOnload = new Array();
5 var gSafeOnsubmit = new Array();
6 window.onload = SafeOnload;
7 function SafeAddOnLoad(f) {
8   gSafeOnload[gSafeOnload.length] = f;
9 }
10 function SafeOnload() {
11   for (var i=0;i<gSafeOnload.length;i++)
12     gSafeOnload[i]();
13 }
14 function SafeAddOnSubmit(f) {
15   gSafeOnsubmit[gSafeOnsubmit.length] = f;
16 }
17 function SafeOnsubmit() {
18   for (var i=0;i<gSafeOnsubmit.length;i++)
19     gSafeOnsubmit[i]();
20 }
21 </SCRIPT>
22 <FORM NAME="OneTrueForm" METHOD="POST" ACTION="meta-import.cgi">
23 <%
24   #one
25   unless ( $cgi->param('magic') ) {
26
27     #oops, silly
28     #my $fh = $cgi->upload('csvfile');
29     ##warn $cgi;
30     ##warn $fh;
31     #
32     #use Archive::Tar;
33     #$tar = Archive::Tar->new();
34     #$tar->create_archive($fh); #or die $tar->error;
35
36     #haha for now
37     my @files = qw(
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
42     );
43
44     %>
45     <INPUT TYPE="hidden" NAME="magic" VALUE="process">
46     <%= hashmaker('schema', \@files, [ grep { ! /^h_/ } dbdef->tables ] ) %>
47     <br><INPUT TYPE="submit" VALUE="done">
48     <%
49
50   } elsif ( $cgi->param('magic') eq 'process' ) {
51
52     %>
53     <INPUT TYPE="hidden" NAME="magic" VALUE="process2">
54     <%
55
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: $_";
60                        ( $1 => $2 );
61                      }
62                  split( /\n/, $schema_string );
63
64     #*** should be in global.asa/handler.pl like the rest
65     eval 'use Text::CSV_XS;';
66
67     foreach my $table ( keys %schema ) {
68
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>);
73       close FILE;
74       $csv->parse($header) or die;
75       my @from_columns = $csv->fields;
76
77       my @fs_columns = dbdef->table($schema{$table})->columns;
78
79       %>
80       <%= hashmaker($table, \@from_columns, \@fs_columns, $table, $schema{$table} ) %>
81       <br><hr><br>
82       <%
83
84     }
85
86     %>
87     <br><INPUT TYPE="submit" VALUE="done">
88     <%
89
90   } elsif ( $cgi->param('magic') eq 'process2' ) {
91
92     print "<pre>\n";
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: $_";
97                        ( $1 => $2 );
98                      }
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: $_";
107                        ( $1 => $2 );
108                      }
109                  split( /\n/, $cgi->param($table) );
110       foreach ( keys %map ) {
111         print "$spaces                     '$_' => '$map{$_}',\n";
112       }
113       print "$spaces                   },\n";
114       print "$spaces      },\n";
115
116     }
117     print "\n</pre>";
118
119   } else {
120     warn "unrecognized magic: ". $cgi->param('magic');
121   }
122
123   %>
124 </FORM>
125 </BODY>
126 </HTML>
127
128   <%
129   #hashmaker widget
130   sub hashmaker {
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 ).
137         "</SELECT>\n".
138       '</TD><TD>'.
139         qq!<SELECT NAME="${name}_to" SIZE=$tosize>\n!.
140         join("\n", map { qq!<OPTION VALUE="$_">$_</OPTION>! } sort { $a cmp $b } @$to ).
141         "</SELECT>\n".
142       '</TD></TR>'.
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>'.
148       "<script>
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);
154               }
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);
159               }
160               document.OneTrueForm.$name.value = document.OneTrueForm.$name.value + fromname + ' => ' + toname + '\\n';
161             }
162             function deleteOption_$name(object,index) {
163               value = object.options[index].value;
164               object.options[index] = null;
165               return value;
166             }
167       </script>".
168       '';
169   }
170
171 %>