d42d6d46676e2776f21b22d43475cf2e5176e0bf
[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 <%
23   #one
24   unless ( $cgi->param('magic') ) {
25
26     #oops, silly
27     #my $fh = $cgi->upload('csvfile');
28     ##warn $cgi;
29     ##warn $fh;
30     #
31     #use Archive::Tar;
32     #$tar = Archive::Tar->new();
33     #$tar->create_archive($fh); #or die $tar->error;
34
35     #haha for now
36     my @files = qw(
37 authserv  credtype  dunprev  invoice  pmtdet    product   taxplan
38 ccdet     customer  genlog   ledger   pops      pubvars   
39 cchist    discplan  glacct   origco   prodcat   recur     users
40 credcode  dundet    invline  payment  prodclas  repforms  webserv
41     );
42
43     %>
44     <FORM NAME="OneTrueForm" METHOD="POST" ACTION="meta-import.cgi">
45     <INPUT TYPE="hidden" NAME="magic" VALUE="process">
46     <%= hashmaker('schema', \@files, [ grep { ! /^h_/ } dbdef->tables ] ) %>
47     <br><INPUT TYPE="submit" VALUE="done">
48     </FORM>
49     </BODY>
50     </HTML>
51     <%
52
53   } elsif ( $cgi->param('magic') eq 'process' ) {
54
55     %>
56     <FORM NAME="OneTrueForm" METHOD="POST" ACTION="meta-import.cgi">
57     <INPUT TYPE="hidden" NAME="magic" VALUE="process2">
58     <%
59
60     my $schema_string = $cgi->param('schema');
61     my %schema = map { /^\s*(\w+)\s*=>\s*(\w+)\s*$/
62                          or die "guru meditation #420: $_";
63                        ( $1 => $2 );
64                      }
65                  split( /\n/, $schema_string );
66
67     #*** should be in global.asa/handler.pl like the rest
68     eval 'use Text::CSV_XS;';
69
70     foreach my $table ( keys %schema ) {
71
72       my $csv = Text::CSV_XS->new({ 'binary'=>1 });
73       open(FILE,"</home/ivan/intergate/legacy/csvdir/$table")
74         or die "can't /home/ivan/intergate/legacy/csvdir/$table: $!";
75       my $header = lc(<FILE>);
76       close FILE;
77       $csv->parse($header) or die;
78       my @from_columns = $csv->fields;
79
80       my @fs_columns = dbdef->table($schema{$table})->columns;
81
82       %>
83       <%= hashmaker($table, \@from_columns, \@fs_columns, $table, $schema{$table} ) %>
84       <br><hr><br>
85       <%
86
87     }
88
89     %>
90     <br><INPUT TYPE="submit" VALUE="done">
91     </FORM>
92     </BODY>
93     </HTML>
94     <%
95
96   } elsif ( $cgi->param('magic') eq 'process' ) {
97
98     %>
99     print results!!
100     <%
101   }
102
103   #hashmaker widget
104   sub hashmaker {
105     my($name, $from, $to, $labelfrom, $labelto) = @_;
106     $fromsize = scalar(@$from);
107     $tosize = scalar(@$to);
108     "<TABLE><TR><TH>$labelfrom</TH><TH>$labelto</TH></TR><TR><TD>".
109         qq!<SELECT NAME="${name}_from" SIZE=$fromsize>\n!.
110         join("\n", map { qq!<OPTION VALUE="$_">$_</OPTION>! } sort { $a cmp $b } @$from ).
111         "</SELECT>\n".
112       '</TD><TD>'.
113         qq!<SELECT NAME="${name}_to" SIZE=$tosize>\n!.
114         join("\n", map { qq!<OPTION VALUE="$_">$_</OPTION>! } sort { $a cmp $b } @$to ).
115         "</SELECT>\n".
116       '</TD></TR>'.
117       '<TR><TD COLSPAN=2>'.
118         qq!<INPUT TYPE="button" VALUE="map" onClick="toke_$name(this.form)">!.
119       '</TD></TR><TR><TD COLSPAN=2>'.
120       qq!<TEXTAREA NAME="$name" COLS=80 ROWS=8></TEXTAREA>!.
121       '</TD></TR></TABLE>'.
122       "<script>
123             function toke_$name() {
124               fromObject = document.OneTrueForm.${name}_from;
125               for (var i=fromObject.options.length-1;i>-1;i--) {
126                 if (fromObject.options[i].selected)
127                   fromname = deleteOption_$name(fromObject,i);
128               }
129               toObject = document.OneTrueForm.${name}_to;
130               for (var i=toObject.options.length-1;i>-1;i--) {
131                 if (toObject.options[i].selected)
132                   toname = deleteOption_$name(toObject,i);
133               }
134               document.OneTrueForm.$name.value = document.OneTrueForm.$name.value + fromname + ' => ' + toname + '\\n';
135             }
136             function deleteOption_$name(object,index) {
137               value = object.options[index].value;
138               object.options[index] = null;
139               return value;
140             }
141       </script>".
142       '';
143   }
144
145 %>