From: ivan Date: Mon, 5 Apr 2004 11:55:35 +0000 (+0000) Subject: apply some heuristics to transfer ordering: primaries first, then sorted by quantity X-Git-Tag: NET_WHOIS_RAW_0_31~6 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=65615896de6e2474953722ea25122174b151d289 apply some heuristics to transfer ordering: primaries first, then sorted by quantity --- diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index d554d8be7..db0f7d423 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -508,11 +508,21 @@ L) sub cust_svc { my $self = shift; - if ( $self->{'_svcnum'} ) { - values %{ $self->{'_svcnum'}->cache }; - } else { + #if ( $self->{'_svcnum'} ) { + # values %{ $self->{'_svcnum'}->cache }; + #} else { + map { $_->[0] } + sort { $b->[1] cmp $a->[1] or $a->[2] <=> $b->[2] } + map { + my $pkg_svc = qsearchs( 'pkg_svc', { 'pkgpart' => $self->pkgpart, + 'svcpart' => $_->svcpart } ); + [ $_, + $pkg_svc ? $pkg_svc->primary_svc : '', + $pkg_svc ? $pkg_svc->quantity : 0, + ]; + } qsearch ( 'cust_svc', { 'pkgnum' => $self->pkgnum } ); - } + #} } =item labels @@ -654,7 +664,6 @@ sub transfer { my $remaining = 0; my $dest; my %target; - my $pkg_svc; if (ref ($dest_pkgnum) eq 'FS::cust_pkg') { $dest = $dest_pkgnum; @@ -665,13 +674,11 @@ sub transfer { return ('Package does not exist: '.$dest_pkgnum) unless $dest; - foreach $pkg_svc (qsearch('pkg_svc', { pkgpart => $dest->pkgpart })) { + foreach my $pkg_svc ( $dest->part_pkg->pkg_svc ) { $target{$pkg_svc->svcpart} = $pkg_svc->quantity; } - my $cust_svc; - - foreach $cust_svc ($dest->cust_svc) { + foreach my $cust_svc ($dest->cust_svc) { $target{$cust_svc->svcpart}--; } @@ -682,9 +689,20 @@ sub transfer { next if exists $svcpart2svcparts{$svcpart}; my $part_svc = qsearchs('part_svc', { 'svcpart' => $svcpart } ); $svcpart2svcparts{$svcpart} = [ + map { $_->[0] } + sort { $b->[1] cmp $a->[1] or $a->[2] <=> $b->[2] } + map { + my $pkg_svc = qsearchs( 'pkg_svc', { 'pkgpart' => $dest->pkgpart, + 'svcpart' => $_ } ); + [ $_, + $pkg_svc ? $pkg_svc->primary_svc : '', + $pkg_svc ? $pkg_svc->quantity : 0, + ]; + } + grep { $_ != $svcpart } - map { $_->svcpart } - qsearch('part_svc', { 'svcdb' => $part_svc->svcdb } ) + map { $_->svcpart } + qsearch('part_svc', { 'svcdb' => $part_svc->svcdb } ) ]; warn "alternates for svcpart $svcpart: ". join(', ', @{$svcpart2svcparts{$svcpart}}). "\n" @@ -692,7 +710,7 @@ sub transfer { } } - foreach $cust_svc ($self->cust_svc) { + foreach my $cust_svc ($self->cust_svc) { if($target{$cust_svc->svcpart} > 0) { $target{$cust_svc->svcpart}--; my $new = new FS::cust_svc { @@ -716,7 +734,7 @@ sub transfer { } @{$svcpart2svcparts{$cust_svc->svcpart}}; if ( @alternate ) { warn "alternate(s) found\n" if $DEBUG; - my $change_svcpart = $alternate[0]; #arbitrary. + my $change_svcpart = $alternate[0]; $target{$change_svcpart}--; my $new = new FS::cust_svc { svcnum => $cust_svc->svcnum, diff --git a/httemplate/view/cust_main.cgi b/httemplate/view/cust_main.cgi index dd9cd3075..624fe37d1 100755 --- a/httemplate/view/cust_main.cgi +++ b/httemplate/view/cust_main.cgi @@ -891,14 +891,7 @@ sub get_packages { } - foreach my $cust_svc ( - qsearch( 'cust_svc', { - 'pkgnum' => $cust_pkg->pkgnum, - #'svcpart' => $part_svc->svcpart, - } - ) - ) { - + foreach my $cust_svc ( $cust_pkg->cust_svc ) { #warn "svcnum ". $cust_svc->svcnum. " / svcpart ". $cust_svc->svcpart. "\n"; my $svc = { 'svcnum' => $cust_svc->svcnum,