From f424f11eb366fe64f5f7bb42b21745e22537cab1 Mon Sep 17 00:00:00 2001 From: mark Date: Tue, 14 Dec 2010 07:29:13 +0000 Subject: cust_location editing features, RT#10766 --- httemplate/view/cust_main/locations.html | 87 +++++++++++++++++++++ httemplate/view/cust_main/packages.html | 96 +++++------------------- httemplate/view/cust_main/packages/location.html | 13 ++++ httemplate/view/cust_main/packages/package.html | 27 ++++++- httemplate/view/cust_main/packages/section.html | 95 +++++++++++++++++++++++ 5 files changed, 240 insertions(+), 78 deletions(-) create mode 100755 httemplate/view/cust_main/locations.html create mode 100755 httemplate/view/cust_main/packages/section.html (limited to 'httemplate/view') diff --git a/httemplate/view/cust_main/locations.html b/httemplate/view/cust_main/locations.html new file mode 100755 index 000000000..319a92747 --- /dev/null +++ b/httemplate/view/cust_main/locations.html @@ -0,0 +1,87 @@ + +% foreach my $locationnum (@sorted) { +% my $packages = $packages_in{$locationnum}; +% my $loc = $locations{$locationnum}; +% next if $loc->disabled and scalar(@$packages) == 0; +<% include('/elements/table-grid.html') %> + + +% if (! $locationnum) { +Default service location: +% } +% elsif ( $loc->disabled ) { + +% } +<% $loc->location_label %> + +% if ( $locationnum and !$loc->disabled ) { +<% edit_location_link($locationnum) %> +% } +% if ( !$loc->disabled and !$active{$locationnum} ) { + <% disable_location_link($locationnum) %> +% } + +% if (@$packages) { +<% include('packages/section.html', 'packages' => $packages ) %> +% } +
+% } #foreach $locationnum +<%init> +my %opt = @_; +my $cust_main = $opt{'cust_main'}; +my $all_packages = $opt{'packages'}; + +my %locations = map { $_->locationnum => $_ } qsearch({ + 'table' => 'cust_location', + 'hashref' => { 'custnum' => $cust_main->custnum }, + 'order_by' => 'ORDER BY country, state, city, address1, locationnum', + }); +my @sections = keys %locations; +$locations{''} = $cust_main; +my %packages_in = map { $_ => [] } @sections; + +my %active = (); # groups with non-canceled packages +foreach my $cust_pkg ( @$all_packages ) { + my $key = $cust_pkg->locationnum; + push @{ $packages_in{$key} }, $cust_pkg; + $active{$key} = 1 if !$cust_pkg->getfield('cancel'); +} + +my @sorted = ( + '', + grep ( { $active{$_} } @sections), + grep ( { !$active{$_} } @sections), +); + +sub edit_location_link { + my $locationnum = shift; + include( '/elements/popup_link.html', + 'action' => $p. "edit/cust_location.cgi?locationnum=$locationnum", + 'label' => '(Edit location)', + 'actionlabel' => 'Edit', + ); +} + +sub disable_location_link { + my $locationnum = shift; + include( '/elements/popup_link.html', + 'action' => $p. "misc/disable-cust_location.cgi?locationnum=$locationnum", + 'label' => '(Disable location)', + 'actionlabel' => 'Disable', + ); +} + + + diff --git a/httemplate/view/cust_main/packages.html b/httemplate/view/cust_main/packages.html index ce34158d8..383c2a75e 100755 --- a/httemplate/view/cust_main/packages.html +++ b/httemplate/view/cust_main/packages.html @@ -75,61 +75,23 @@ Current packages - -% if ( @$packages ) { - -<% include('/elements/table-grid.html') %> -% my $bgcolor1 = '#eeeeee'; -% my $bgcolor2 = '#ffffff'; -% my $bgcolor = ''; - - - Package - Status -% if ( $show_location ) { - Location -% } - Services - - -% #$FS::cust_pkg::DEBUG = 2; -% foreach my $cust_pkg (@$packages) { -% -% if ( $bgcolor eq $bgcolor1 ) { -% $bgcolor = $bgcolor2; -% } else { -% $bgcolor = $bgcolor1; -% } -% -% my %iopt = ( -% 'bgcolor' => $bgcolor, -% 'cust_pkg' => $cust_pkg, -% 'part_pkg' => $cust_pkg->part_pkg, -% %conf_opt, -% ); -% - - - - <% include('packages/package.html', %iopt) %> - <% include('packages/status.html', %iopt) %> -% if ( $show_location ) { - <% include('packages/location.html', %iopt) %> +% if ( $conf->exists('cust_pkg-group_by_location') and $show_location ) { +<% include('locations.html', + 'cust_main' => $cust_main, + 'packages' => $packages, +) %> % } - <% include('packages/services.html', %iopt) %> - - -% } - +% else { +% # in this format, put all packages in one section +<% include('/elements/table-grid.html') %> +<% include('packages/section.html', + 'packages' => $packages, + 'show_location' => $show_location, +) %> - -% } else { -
-% } - +% } - % if ( $cgi->param('fragment') =~ /^cust_pkg(\d+)$/ ) { % } - + <%init> -my( $cust_main ) = @_; +my $cust_main = shift; +my %opt = @_; my $conf = new FS::Conf; my $curuser = $FS::CurrentUser::CurrentUser; my( $packages, $num_old_packages ) = get_packages($cust_main, $conf); -my $show_location = $conf->exists('cust_pkg-always_show_location') - || ( grep $_->locationnum, @$packages ); # ? '1' : '0'; -my $countrydefault = scalar($conf->config('countrydefault')) || 'US'; -my %conf_opt = ( - #for services.html and status.html - 'cust_pkg-display_times' => ($conf->exists('cust_pkg-display_times') - || $curuser->option('cust_pkg-display_times')), - #for status.html - 'cust_pkg-show_autosuspend' => $conf->exists('cust_pkg-show_autosuspend'), - #for status.html pkg-balances - 'pkg-balances' => $conf->exists('pkg-balances'), - 'money_char' => ( $conf->config('money_char') || '$' ), - - #for location.html - 'countrydefault' => $countrydefault, - 'statedefault' => ( scalar($conf->config('statedefault')) - || ($countrydefault eq 'US' ? 'CA' : '') ), - #for services.html - 'svc_external-skip_manual' => $conf->exists('svc_external-skip_manual'), - 'legacy_link' => $conf->exists('legacy_link'), - 'svc_broadband-manage_link' => scalar($conf->config('svc_broadband-manage_link')), - 'maestro-status_test' => $conf->exists('maestro-status_test'), - 'cust_pkg-large_pkg_size' => $conf->config('cust_pkg-large_pkg_size'), -); +my $show_location = $conf->exists('cust_pkg-always_show_location') + || (grep $_->locationnum, @$packages); # ? '1' : '0'; +my $countrydefault = scalar($conf->config('countrydefault')) || 'US'; #subroutines sub get_packages { diff --git a/httemplate/view/cust_main/packages/location.html b/httemplate/view/cust_main/packages/location.html index 41155cbae..40a7de59f 100644 --- a/httemplate/view/cust_main/packages/location.html +++ b/httemplate/view/cust_main/packages/location.html @@ -21,12 +21,16 @@ % { ( <%pkg_change_location_link($cust_pkg)%> ) +% if ( $cust_pkg->locationnum ) { + ( <%edit_location_link($cust_pkg->locationnum)%> ) +% } % } <%init> +my $conf = new FS::Conf; my %opt = @_; my $bgcolor = $opt{'bgcolor'}; @@ -50,4 +54,13 @@ sub pkg_change_location_link { ); } +sub edit_location_link { + my $locationnum = shift; + include( '/elements/popup_link.html', + 'action' => $p. "edit/cust_location.cgi?locationnum=$locationnum", + 'label' => 'Edit location', + 'actionlabel' => 'Edit', + ); +} + diff --git a/httemplate/view/cust_main/packages/package.html b/httemplate/view/cust_main/packages/package.html index 3b58f9ec0..8cae5fdba 100644 --- a/httemplate/view/cust_main/packages/package.html +++ b/httemplate/view/cust_main/packages/package.html @@ -168,8 +168,16 @@ % } +% if ( $curuser->access_right('Change customer package') and +% !$cust_pkg->get('cancel') and +% !$opt{'show_location'}) { + + + ( <% pkg_change_location_link($cust_pkg) %> ) + + +% } % } - @@ -184,6 +192,10 @@ my $part_pkg = $opt{'part_pkg'}; my $curuser = $FS::CurrentUser::CurrentUser; +my $countrydefault = $opt{'countrydefault'} || 'US'; +my $statedefault = $opt{'statedefault'} + || ($countrydefault eq 'US' ? 'CA' : ''); + #subroutines #false laziness w/status.html @@ -204,6 +216,19 @@ sub pkg_change_link { ); } +sub pkg_change_location_link { + my $cust_pkg = shift; + my $pkgpart = $cust_pkg->pkgpart; + include( '/elements/popup_link-cust_pkg.html', + 'action' => $p. "misc/change_pkg.cgi?locationnum=-1;pkgpart=$pkgpart;". + "address1=;address2=;city=;county=;state=$statedefault;". + "zip=;country=$countrydefault", + 'label' => 'Change location', + 'actionlabel' => 'Change', + 'cust_pkg' => $cust_pkg, + ); +} + sub pkg_dates_link { pkg_link('edit/REAL_cust_pkg', 'Edit dates', @_ ); } sub pkg_discount_link { diff --git a/httemplate/view/cust_main/packages/section.html b/httemplate/view/cust_main/packages/section.html new file mode 100755 index 000000000..0795d4e59 --- /dev/null +++ b/httemplate/view/cust_main/packages/section.html @@ -0,0 +1,95 @@ +% if ( @$packages ) { +% my $bgcolor1 = '#eeeeee'; +% my $bgcolor2 = '#ffffff'; +% my $bgcolor = ''; + + +% #my $width = $show_location ? 'WIDTH="25%"' : 'WIDTH="33%"'; + Package + Status +% if ( $show_location ) { + Location +% } + Services + + +% #$FS::cust_pkg::DEBUG = 2; +% foreach my $cust_pkg (@$packages) { +% +% if ( $bgcolor eq $bgcolor1 ) { +% $bgcolor = $bgcolor2; +% } else { +% $bgcolor = $bgcolor1; +% } +% +% my %iopt = ( +% 'bgcolor' => $bgcolor, +% 'cust_pkg' => $cust_pkg, +% 'part_pkg' => $cust_pkg->part_pkg, +% %conf_opt, +% ); +% + + + + <% include('package.html', %iopt) %> + <% include('status.html', %iopt) %> +% if ( $show_location ) { + <% include('location.html', %iopt) %> +% } + <% include('services.html', %iopt) %> + + +% } #foreach $cust_pkg +%# +% } #if @$packages +% else { +
+% } + +<%init> + +my %opt = @_; +my $conf = new FS::Conf; + +my $curuser = $FS::CurrentUser::CurrentUser; + +my $packages = $opt{'packages'}; +my $show_location = $opt{'show_location'}; + +# Sort order is hardcoded for now, can change this if needed. +@$packages = sort { + ( $a->getfield('cancel') <=> $b->getfield('cancel') ) or + ( $a->getfield('setup') <=> $b->getfield('setup') ) or + ( $a->getfield('pkgnum') <=> $b->getfield('pkgnum') ) +} @$packages; + +my $countrydefault = scalar($conf->config('countrydefault')) || 'US'; + +my %conf_opt = ( + #for services.html and status.html + 'cust_pkg-display_times' => $conf->exists('cust_pkg-display_times') + || $curuser->option('cust_pkg-display_times')), + #for status.html + 'cust_pkg-show_autosuspend' => $conf->exists('cust_pkg-show_autosuspend'), + #for status.html pkg-balances + 'pkg-balances' => $conf->exists('pkg-balances'), + 'money_char' => ( $conf->config('money_char') || '$' ), + + #for location.html + 'countrydefault' => $countrydefault, + 'statedefault' => ( scalar($conf->config('statedefault')) + || ($countrydefault eq 'US' ? 'CA' : '') ), + #for services.html + 'svc_external-skip_manual' => $conf->exists('svc_external-skip_manual'), + 'legacy_link' => $conf->exists('legacy_link'), + 'svc_broadband-manage_link' => scalar($conf->config('svc_broadband-manage_link')), + 'maestro-status_test' => $conf->exists('maestro-status_test'), + 'cust_pkg-large_pkg_size' => $conf->config('cust_pkg-large_pkg_size'), + + # for packages.html Change location link + 'show_location' => $show_location, +); + + + -- cgit v1.2.1