svc_phone service and CDR billing from imported CDRs
[freeside.git] / httemplate / edit / process / elements / process.html
1 <%
2
3   # options example...
4   # 
5   ###
6   ##req
7   ##
8   #
9   # 'table' => 
10   #
11   # #? 'primary_key' => #required when the dbdef doesn't know...???
12   # #? 'fields' => []
13   #
14   ###
15   ##opt
16   ###
17   #
18   # 'viewall_dir' => '', #'search' or 'browse', defaults to 'search'
19   # OR
20   # 'redirect'    => 'view/table.cgi?', # value of primary key is appended
21   #
22   # 'edit_ext' => 'html', #defaults to 'html', you might want 'cgi' while the
23   #                       #naming is still inconsistent
24   # 
25   # 'process_m2m' => { 'link_table'   => 'link_table_name',
26   #                    'target_table' => 'target_table_name',
27   #                  },
28   # 'process_m2name' => { 'link_table'   => 'link_table_name',
29   #                       'link_static' => { 'column' => 'value' },
30   #                       'num_col' => 'column', #if column name is different in
31   #                                              #link_table than source_table 
32   #                       'name_col' => 'name_column',
33   #                       'names_list' => [ 'list', 'names' ],
34   #                     },
35
36   my(%opt) = @_;
37
38   #false laziness w/edit.html
39   my $table = $opt{'table'};
40   my $class = "FS::$table";
41   my $pkey = dbdef->table($table)->primary_key; #? $opt{'primary_key'} || 
42   my $fields = $opt{'fields'}
43                #|| [ grep { $_ ne $pkey } dbdef->table($table)->columns ];
44                || [ fields($table) ];
45
46   my $pkeyvalue = $cgi->param($pkey);
47
48   my $old = qsearchs( $table, { $pkey => $pkeyvalue } ) if $pkeyvalue;
49
50   my $new = $class->new( {
51     map {
52       $_, scalar($cgi->param($_));
53     } @$fields
54   } );
55
56   my $error;
57   if ( $pkeyvalue ) {
58     $error = $new->replace($old);
59   } else {
60     $error = $new->insert;
61     $pkeyvalue = $new->getfield($pkey);
62   }
63
64   if ( !$error && $opt{'process_m2m'} ) {
65     $error = $new->process_m2m( %{ $opt{'process_m2m'} },
66                                 'params' => scalar($cgi->Vars),
67                               );
68   }
69
70   if ( !$error && $opt{'process_m2name'} ) {
71     $error = $new->process_m2name( %{ $opt{'process_m2name'} },
72                                    'params' => scalar($cgi->Vars),
73                                  );
74   }
75
76   # XXX print?!?!
77
78   if ( $error ) {
79     $cgi->param('error', $error);
80     my $edit_ext = $opt{'edit_ext'} || 'html';
81     print $cgi->redirect(popurl(2). "$table.$edit_ext?". $cgi->query_string );
82   } elsif ( $opt{'redirect'} ) {
83     print $cgi->redirect( $opt{'redirect'}. $pkeyvalue );
84   } else { 
85     print $cgi->redirect( popurl(3).
86                           ( $opt{'viewall_dir'} || 'search' ).
87                           "/$table.html"
88                         );
89   }
90
91 %>