4.x style
[freeside.git] / httemplate / edit / part_pkg.cgi
index f2c4aac..f4291f0 100755 (executable)
@@ -9,8 +9,10 @@
      #'viewall_dir'           => 'browse',
      'viewall_url'           => $p.'browse/part_pkg.cgi',
      'html_init'             => include('/elements/init_overlib.html').
+                                include('/elements/init_calendar.html').
                                 $javascript,
      'html_bottom'           => $html_bottom,
+     'extra_fields_validate' => $validate_priceplan_fields,
      'body_etc'              =>
        'onLoad="agent_changed(document.edit_topform.agentnum);
                 aux_planchanged(document.edit_topform.plan);
                      #recurring frequency
                      #recurring fee (auto-disable)
 
-                   { type => 'columnnext' },
+                   { type => 'columnnext', value=>'Taxation', },
 
-                     {type=>'justtitle', value=>'Taxation' },
                      {field=>'setuptax', type=>'checkbox', value=>'Y'},
                      {field=>'recurtax', type=>'checkbox', value=>'Y'},
                      {field=>'taxclass', type=>'select-taxclass' },
                          )
                      ),
 
-                   { type => 'columnnext' },
-
-                     {type=>'justtitle', value=>'Agent (reseller) types' },
+                   { type => 'columnnext', value=>'Agent (reseller) types' },
 
                      { field       => 'agent_type',
                        type        => 'select-agent_type',
                      'name_col' => 'name',
                      'hashref'  => { 'disabled' => '' },
                      'multiple' => 1,
+                     'curr_value_callback' => $report_option_value_callback,
                    },
 
                    { 'type'    => 'tablebreak-tr-title',
@@ -563,29 +563,42 @@ my $new_object_callback = sub {
 
 };
 
+my $report_option_value_callback = sub {
+  my ($cgi, $object) = @_;
+  my @report_option;
+  if ( defined $cgi->param('report_option') ) {
+    @report_option = $cgi->param('report_option');
+  } else {
+    foreach ($object->options) {
+      /^report_option_(\d+)$/ && (push @report_option, $1);
+    }
+  }
+  join(',', @report_option);
+};
+
 sub set_report_option {
   my($cgi, $object, $fields ) = @_; #, $opt
 
   my @report_option = ();
   foreach ($object->options) {
     /^usage_taxproductnum_(\d+)$/ && ($taxproductnums{$1} = 1);
-    /^report_option_(\d+)$/ && (push @report_option, $1);
+#    /^report_option_(\d+)$/ && (push @report_option, $1);
   }
   foreach ($object->part_pkg_taxoverride) {
     $taxproductnums{$_->usage_class} = 1
       if $_->usage_class;
   }
 
-  $cgi->param('report_option', join(',', @report_option));
-  foreach my $field ( @$fields ) {
-    next unless ( 
-      ref($field) eq 'HASH' &&
-      $field->{field} &&
-      $field->{field} eq 'report_option'
-    );
-    #$field->{curr_value} = join(',', @report_option);
-    $field->{value} = join(',', @report_option);
-  }
+#  $cgi->param('report_option', join(',', @report_option));
+#  foreach my $field ( @$fields ) {
+#    next unless ( 
+#      ref($field) eq 'HASH' &&
+#      $field->{field} &&
+#      $field->{field} eq 'report_option'
+#    );
+#    #$field->{curr_value} = join(',', @report_option);
+#    $field->{value} = join(',', @report_option);
+#  }
 
 }
 
@@ -639,7 +652,7 @@ my $clone_callback = sub {
 
   if ( $cgi->param('pkgnum') ) {
 
-    my $cust_pkg = qsearchs('cust_pkg', { 'pkgnum' => $cgi->param('pkgnum') } );
+    my $cust_pkg = qsearchs('cust_pkg', { 'pkgnum' => scalar($cgi->param('pkgnum')) } );
     $object->agentnum( $cust_pkg->cust_main->agentnum );
 
     $opt->{action} = 'Custom';
@@ -664,6 +677,12 @@ my $clone_callback = sub {
   $object->set($_ => $options{$_})
     foreach (qw( setup_fee recur_fee disable_line_item_date_ranges ));
 
+  $recur_disabled = $object->freq ? 0 : 1;
+  $recur_show_zero_disabled =
+    $object->freq
+      ? $object->option('recur_fee') > 0 ? 1 : 0
+      : 1;
+
   foreach my $currency ( $conf->config('currencies') ) {
     my %part_pkg_currency = $object->part_pkg_currency_options($currency);
     $object->set( $_.'_'.$currency, $part_pkg_currency{$_} )
@@ -696,7 +715,7 @@ my $usageprice_error_callback = sub {
                && $cgi->param("usagepricepart$1_price") )
         {
           new FS::part_pkg_usageprice {
-            'usagepricepart' => $cgi->param("usagepricepart$1"),
+            'usagepricepart' => scalar($cgi->param("usagepricepart$1")),
             'pkgpart'        => $object->pkgpart,
             'price'          => scalar($cgi->param("usagepricepart$1_price")),
             #'currency
@@ -848,8 +867,9 @@ my $javascript = <<'END';
         supp_pkg_rows[0].style.display = 'none';
         var button = document.getElementById('show_supp_pkgs');
         button.onclick = show_supp_pkgs_click;
-        button.style.backgroundColor = '#cccccc';
-        button.style.border = '1px solid #7e0079';
+        //button.style.backgroundColor = '#cccccc';
+        //button.style.border = '1px solid #7e0079';
+        button.style.border = 'thin solid #999999';
         button.style.padding = '1px';
       }
     }
@@ -888,6 +908,15 @@ tie my %plan_labels, 'Tie::IxHash',
   map {  $_ => ( $plans{$_}->{'shortname'} || $plans{$_}->{'name'} ) }
       keys %plans;
 
+my $validate_priceplan_fields = {};
+foreach my $priceplan (keys %plans) {
+  my $plan_fields = $plans{$priceplan}->{fields};
+  foreach my $price_plan_field (keys %$plan_fields) {
+    $validate_priceplan_fields->{$priceplan."__".$price_plan_field} = $plan_fields->{$price_plan_field}->{"js_validate"}
+      if exists $plan_fields->{$price_plan_field}->{"js_validate"};
+  }
+}
+
 my $html_bottom = sub {
   my( $object ) = @_;
 
@@ -896,7 +925,7 @@ my $html_bottom = sub {
   my $layer_callback = sub {
   
     my $layer = shift;
-    my $html = ntable("#cccccc",2);
+    my $html = '<TABLE CLASS="fsinnerbox">';
   
     #$html .= '
     #  <TR>
@@ -980,6 +1009,14 @@ my $html_bottom = sub {
                      : $href->{$field}{'default'} ).
                  qq!">!;
   
+      } elsif ( $href->{$field}{'type'} eq 'textarea' ) {
+
+        $html .= qq!<TEXTAREA NAME="${layer}__$field">!.
+                 ( exists($options{$field})
+                     ? &$format($options{$field})
+                     : $href->{$field}{'default'} ).
+                 qq!</TEXTAREA>!;
+
       } elsif ( $href->{$field}{'type'} eq 'checkbox' ) {
   
         $html .= qq!<INPUT TYPE="checkbox" NAME="${layer}__$field" VALUE=1 !.
@@ -988,6 +1025,23 @@ my $html_bottom = sub {
                    : ''
                  ). '>';
 
+      } elsif ( $href->{$field}{'type'} eq 'date' ) {
+
+        $html .= include('/elements/input-date-field.html', {
+                           'name'  => $layer.'__'.$field,
+                           'value' => $options{$field},
+                        });
+
+      } elsif ( $href->{$field}{'type'} =~ /^select-rt-/ ) {
+
+        $html .= include('/elements/'.$href->{$field}{'type'}.'.html',
+                           'name'       => $layer.'__'.$field,
+                           'curr_value' => $options{$field},
+                           map { $_ => $href->{$field}{$_} }
+                             grep { $_ !~ /^(name|type|parse)$/ }
+                               keys %{ $href->{$field} }
+                        );
+
       } elsif ( $href->{$field}{'type'} eq 'select-rate' ) {
 
         $html .= include('/elements/select-rate.html',