optimize CDR rating after timed rate perf regression, RT#15739
[freeside.git] / httemplate / edit / discount.html
1 <% include( 'elements/edit.html',
2                  'name'   => 'Discount',
3                  'table'  => 'discount',
4                  'fields' => [
5                                'name',
6                                { field => 'disabled', type => 'checkbox', value=>'Y', },
7                                # a weird kind of false laziness
8                                # w/elements/tr-select-discount.html
9                                { field => '_type',    type => 'select',
10                                  options => \@_type_options,
11                                  onchange => '_type_changed',
12                                },
13                                { field => 'amount',   type => 'money',
14                                  default => '0.00',
15                                  #cell_style => $amount_style,
16                                },
17                                { field => 'percent',  type => 'percentage',
18                                  default => 0,
19                                  #cell_style => $percent_style,
20                                },
21                                { field => 'months', type => 'text', size => 2,
22                                  postfix => '<BR><FONT SIZE="-1"><I>(blank for non-expiring discount)</I></FONT>',
23                                },
24                                { field => 'setup', type => 'checkbox', value=>'Y', },
25                              ],
26                  'labels' => { 
27                                'discountnum' => 'Discount #',
28                                'name'        => 'Name&nbsp;',
29                                'disabled'    => 'Disabled&nbsp;',
30                                '_type'       => 'Type&nbsp;',
31                                'amount'      => 'Amount&nbsp;',
32                                'percent'     => 'Percentage&nbsp;',
33                                'months'      => 'Duration (months)',
34                                'setup'       => 'Apply to setup fees',
35                              },
36                  'viewall_dir' => 'browse',
37                  'new_callback' => $new_callback,
38                  'edit_callback' => $edit_callback,
39                  'error_callback' => $error_callback,
40                  'html_init' => $javascript,
41                  'body_etc' => 'onLoad="_type_changed(document.edit_topform._type)"',
42            )
43 %>
44 <%init>
45
46 die "access denied"
47   unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
48
49 my @_type_options = ( 'Amount', 'Percentage' );
50
51 #my $amount_style = '';
52 #my $percent_style = '';
53
54 #my $hide = 'display:none;visibility:hidden';
55 my $select = 'Select discount type';
56
57 my $new_callback = sub {
58   #my( $cgi, $object, $fields_listref, $opt_hashref ) = @_;
59
60   #$amount_style  = $hide;
61   #$percent_style = $hide;
62   unshift @_type_options, $select;
63 };
64
65 my $edit_callback = sub {
66   #my( $cgi, $object, $fields_listref, $opt_hashref ) = @_;
67   my( $cgi, $object ) = @_;
68
69   if ( $object->amount > 0 && $object->percent == 0 ) {
70     $object->set('_type', 'Amount');
71     #$percent_style = $hide;
72   } elsif ( $object->amount == 0 && $object->percent > 0 ) {
73     $object->set('_type', 'Percentage');
74     #$amount_style = $hide;
75   } elsif ( $object->amount == 0 && $object->percent == 0 ) {
76     #$amount_style  = $hide;
77     #$percent_style = $hide;
78     unshift @_type_options, $select;
79   } else {
80     die "discount.amount and discount.percent not yet handled by web UI";
81   }
82
83 };
84
85 my $error_callback = sub {
86   #my( $cgi, $object, $fields_listref, $opt_hashref ) = @_;
87   my( $cgi, $object ) = @_;
88
89   if ( $cgi->param('_type') eq 'Amount' ) {
90     $object->set('_type', 'Amount');
91     #A$percent_style = $hide;
92   } elsif ( $cgi->param('_type') eq 'Percentage' ) {
93     $object->set('_type', 'Percentage');
94     #$amount_style = $hide;
95   } else {
96     #$amount_style  = $hide;
97     #$percent_style = $hide;
98     unshift @_type_options, $select;
99   }
100
101 };
102
103 my $javascript = <<END;
104   <SCRIPT TYPE="text/javascript">
105     function _type_changed(what) {
106       var _type = what.options[what.selectedIndex].value;
107
108       if ( _type == '$select' ) {
109         document.getElementById('amount_label').style.display = 'none';
110         document.getElementById('amount_label').style.visibility = 'hidden';
111         document.getElementById('amount_input0').style.display = 'none';
112         document.getElementById('amount_input0').style.visibility = 'hidden';
113         document.getElementById('percent_label').style.display = 'none';
114         document.getElementById('percent_label').style.visibility = 'hidden';
115         document.getElementById('percent_input0').style.display = 'none';
116         document.getElementById('percent_input0').style.visibility = 'hidden';
117       } else if ( _type == 'Amount' ) {
118         document.getElementById('amount_label').style.display = '';
119         document.getElementById('amount_label').style.visibility = '';
120         document.getElementById('amount_input0').style.display = '';
121         document.getElementById('amount_input0').style.visibility = '';
122         document.getElementById('percent_label').style.display = 'none';
123         document.getElementById('percent_label').style.visibility = 'hidden';
124         document.getElementById('percent_input0').style.display = 'none';
125         document.getElementById('percent_input0').style.visibility = 'hidden';
126       } else if ( _type == 'Percentage' ) {
127         document.getElementById('amount_label').style.display = 'none';
128         document.getElementById('amount_label').style.visibility = 'hidden';
129         document.getElementById('amount_input0').style.display = 'none';
130         document.getElementById('amount_input0').style.visibility = 'hidden';
131         document.getElementById('percent_label').style.display = '';
132         document.getElementById('percent_label').style.visibility = '';
133         document.getElementById('percent_input0').style.display = '';
134         document.getElementById('percent_input0').style.visibility = '';
135      }
136
137     }
138   </SCRIPT>
139 END
140
141 </%init>