make customer view selection semi-sticky
[freeside.git] / httemplate / elements / checkboxes-table.html
1 %
2 %
3 %  ##
4 %  # required
5 %  ##
6 %  # 'target_table'    => 'table_name',
7 %  # 'link_table'      => 'table_name',
8 %  #
9 %  # 'name_col' => 'name_column',
10 %  # #or
11 %  # 'name_callback' => sub { },
12 %  #
13 %  ##
14 %  # recommended (required?)
15 %  ##
16 %  # 'source_obj'   => $obj,
17 %  # #or?
18 %  # #'source_table' => 'table_name',
19 %  # #'sourcenum'    => '4', #current value of primary key in source_table
20 %  # #                       # (none is okay, just pass it if you have it)
21 %  ##
22 %  # optional
23 %  ##
24 %  # 'disable-able' => 1,
25 %
26 %  my( %opt ) = @_;
27 %
28 %  my $target_pkey = dbdef->table($opt{'target_table'})->primary_key;
29 %
30 %  my( $source_pkey, $sourcenum, $source_obj );
31 %  if ( $opt{'source_obj'} || $opt{'object'} ) {
32 %
33 %    $source_obj = $opt{'source_obj'} || $opt{'object'};
34 %    #$source_table = $source_obj->dbdef_table->table;
35 %    $source_pkey = $source_obj->dbdef_table->primary_key;
36 %    $sourcenum = $source_obj->$source_pkey();
37 %
38 %  } else {
39 %
40 %    #$source_obj?
41 %    $source_pkey = $opt{'source_table'}
42 %                     ? dbdef->table($opt{'source_table'})->primary_key
43 %                     : '';
44 %    $sourcenum = $opt{'sourcenum'};
45 %  }
46 %
47 %  my $hashref = $opt{'hashref'} || {};
48 %
49 %  my $extra_sql = $opt{'extra_sql'} || '';
50 %
51 %  if ( $opt{'agent_virt'} ) {
52 %    $extra_sql .= ' AND' . $FS::CurrentUser::CurrentUser->agentnums_sql(
53 %                             'null_right' => $opt{'agent_null_right'}
54 %                           );
55 %  }
56 %
57 %  if ( $opt{'disable-able'} ) {
58 %    $hashref->{'disabled'} = '';
59 %
60 %    $extra_sql .= ( $sourcenum && $source_pkey ) 
61 %                    ? " OR $source_pkey = $sourcenum"
62 %                    : '';
63 %  }
64 %
65 %
66 % foreach my $target_obj (
67 %     qsearch({ 'table'     => $opt{'target_table'},
68 %               'hashref'   => $hashref,
69 %               'select'    => $opt{'target_table'}. '.*',
70 %               'addl_from' => "LEFT JOIN $opt{'link_table'} USING ( $target_pkey )",
71 %               'extra_sql' => $extra_sql,
72 %            })
73 %   ) {
74 %
75 %     my $targetnum = $target_obj->$target_pkey();
76 %
77 %     my $checked;
78 %     if ( $cgi->param('error') ) {
79 %
80 %       $checked = $cgi->param($target_pkey.$targetnum)
81 %                    ? 'CHECKED'
82 %                    : '';
83 %
84 %     } elsif ( !$sourcenum ) { # newly created object, has no links yet
85 %
86 %       $checked = $opt{'default'} ? 'CHECKED' : ''
87 %
88 %     } else {
89 %
90 %       $checked = qsearchs( $opt{'link_table'}, {
91 %                                                  $source_pkey => $sourcenum,
92 %                                                  $target_pkey => $targetnum,
93 %                                                }                             )
94 %                    ? 'CHECKED'
95 %                    : ''
96 %
97 %     }
98 %
99 %
100
101
102   <INPUT TYPE="checkbox" NAME="<% $target_pkey. $targetnum %>" <% $checked %> VALUE="ON">
103 % if ( $opt{'target_link'} ) { 
104
105
106     <A HREF="<% $opt{'target_link'} %><% $targetnum %>">
107 %
108 %
109 %  }
110 %  
111 <% $targetnum %>: 
112 % if ( $opt{'name_callback'} ) { 
113
114
115     <% &{ $opt{'name_callback'} }( $target_obj ) %><% $opt{'target_link'} ? '</A>' : '' %>
116 % } else {
117 %       my $name_col = $opt{'name_col'};
118 %  
119
120
121     <% $target_obj->$name_col() %><% $opt{'target_link'} ? '</A>' : '' %>
122 % } 
123 % if ( $opt{'disable-able'} ) { 
124
125
126     <% $target_obj->disabled =~ /^Y/i ? ' (DISABLED)' : '' %>
127 % } 
128
129
130   <BR>
131 % } 
132
133