diff options
Diffstat (limited to 'httemplate/edit')
-rwxr-xr-x | httemplate/edit/part_pkg.cgi | 73 | ||||
-rw-r--r-- | httemplate/edit/process/change-cust_pkg.html | 31 |
2 files changed, 87 insertions, 17 deletions
diff --git a/httemplate/edit/part_pkg.cgi b/httemplate/edit/part_pkg.cgi index 89f16158f..7e67c833a 100755 --- a/httemplate/edit/part_pkg.cgi +++ b/httemplate/edit/part_pkg.cgi @@ -13,7 +13,8 @@ 'html_bottom' => $html_bottom, 'body_etc' => 'onLoad="agent_changed(document.edit_topform.agentnum); - aux_planchanged(document.edit_topform.plan)"', + aux_planchanged(document.edit_topform.plan); + hide_supp_pkgs()"', 'begin_callback' => $begin_callback, 'end_callback' => $end_callback, @@ -61,10 +62,11 @@ 'discountnum' => 'Offer discounts for longer terms', 'bill_dst_pkgpart' => 'Include line item(s) from package', 'svc_dst_pkgpart' => 'Include services of package', - 'supp_dst_pkgpart' => 'Include complete package', + 'supp_dst_pkgpart' => 'When ordering package, also order', 'report_option' => 'Report classes', 'fcc_ds0s' => 'Voice-grade equivalents', 'fcc_voip_class' => 'Category', + 'delay_start' => 'Default delay (days)', }, 'fields' => [ @@ -199,6 +201,16 @@ { field=>'setup_cost', type=>'money', }, { field=>'recur_cost', type=>'money', }, + ( $conf->exists('part_pkg-delay_start') + ? ( { type => 'tablebreak-tr-title', + value => 'Delayed start', + }, + { field => 'delay_start', + type => 'text', size => 6 }, + ) + : () + ), + { type => 'columnnext' }, { field => 'agent_type', @@ -264,19 +276,6 @@ }, { 'type' => 'tablebreak-tr-title', - 'value' => 'Supplemental packages', - 'colspan' => '4', - }, - { 'field' => 'supp_dst_pkgpart', - 'type' => 'select-part_pkg', - 'm2_label' => 'Include complete package', - 'm2m_method' => 'supp_part_pkg_link', - 'm2m_dstcol' => 'dst_pkgpart', - 'm2_error_callback' => - &{$m2_error_callback_maker}('supp'), - }, - - { 'type' => 'tablebreak-tr-title', 'value' => 'Pricing add-ons', 'colspan' => 4, }, @@ -319,6 +318,22 @@ &{$m2_error_callback_maker}('svc'), }, + { 'type' => 'tablebreak-tr-title', + 'value' => 'Supplemental packages', + 'colspan' => '4', + 'include_opt_callback' => sub { + 'id' => 'show_supp_pkgs', + }, + }, + { 'field' => 'supp_dst_pkgpart', + 'type' => 'select-part_pkg', + 'm2_label' => 'When ordering package, also order', + 'm2m_method' => 'supp_part_pkg_link', + 'm2m_dstcol' => 'dst_pkgpart', + 'm2_error_callback' => + &{$m2_error_callback_maker}('supp'), + }, + { type => 'tablebreak-tr-title', value => 'Price plan options', }, @@ -782,6 +797,34 @@ my $javascript = <<'END'; } + // some magic to make "supplemental packages" less obvious + var supp_pkg_rows = []; + function show_supp_pkgs_click() { + supp_pkg_rows[0].style.display = ''; + this.onclick = ''; + this.style.backgroundColor = ''; + this.style.border = ''; + this.style.padding = ''; + } + + function hide_supp_pkgs() { + var all_selects = document.getElementsByTagName('select'); + for (var i=0; i < all_selects.length; i++) { + if ( all_selects[i].id.match(/^supp_dst_pkgpart/) ) { + supp_pkg_rows.push( all_selects[i].parentNode.parentNode ); + } + } + if ( supp_pkg_rows.length == 1 ) { + // there are none configured, so hide the row to create a new one + 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.padding = '1px'; + } + } + END my $warning = diff --git a/httemplate/edit/process/change-cust_pkg.html b/httemplate/edit/process/change-cust_pkg.html index c893f13a2..9d06d8e1a 100644 --- a/httemplate/edit/process/change-cust_pkg.html +++ b/httemplate/edit/process/change-cust_pkg.html @@ -40,8 +40,35 @@ if ( $cgi->param('locationnum') == -1 ) { $change{'cust_location'} = $cust_location; } -my $pkg_or_error = $cust_pkg->change( \%change ); +my $error; +if ( $cgi->param('delay') ) { + my $date = parse_datetime($cgi->param('start_date')); + if (!$date) { + $error = "Invalid change date '".$cgi->param('start_date')."'."; + } elsif ( $date < time ) { + $error = "Change date ".$cgi->param('start_date')." is in the past."; + } else { + # schedule the change + $change{'start_date'} = $date; + $error = $cust_pkg->change_later(\%change); + } +} else { + # special case: if there's a package change scheduled, and it matches + # the parameters the user requested this time, then change to the existing + # future package. + if ( $cust_pkg->change_to_pkgnum ) { + my $change_to = FS::cust_pkg->by_key($cust_pkg->change_to_pkgnum); + if ( $change_to->pkgpart == $change{'pkgpart'} and + $change_to->locationnum == $change{'locationnum'} ) { -my $error = ref($pkg_or_error) ? '' : $pkg_or_error; + %change = ( 'cust_pkg' => $change_to ); + + } + } + + # do a package change right now + my $pkg_or_error = $cust_pkg->change( \%change ); + $error = ref($pkg_or_error) ? '' : $pkg_or_error; +} </%init> |