[freeside-devel] Package Selections for pre14

Stephen Bechard steve at destek.net
Sun Jun 23 12:23:17 PDT 2002


> Still investigating the agent and agent_type versus the .htaccess user.

> > I was wondering if there are issues with the Add Customer
> > piece of pre14 as the select list of First Packages that
> > are available to use do not match any user agent or agent_type
> > that I have configured on the system. I have tried tracking
> > down exactly what it is looking and tried matching the packages
> > accordingly, but still no luck. I current only have one Package
> > available and there doesn't seem to be anything special about it.
> >
> > I tried logging in as a different agent and still only that
> > one package is available. Is seems as the agent and agent_type
> > tables do not effect this list of options.
> >
> > I am noticing similar problems with the Order Package
> > selection list for existing customers, as it seems to only reads
> > the first agent-type packages that are not disabled.
> >
> > I am also noticing this in the Signup Page.
> >
> > I did not notice this in previous builds of Freeside, but I am still
> > in the testing/learning phases and didn't play around with multiple
> > agents and agent_types before now.

I found that the agent and agent_type were not check when adding new
packages or ordering them for existing customers. I had the time so...

I have modified the view/cust_main.cgi so that it reads in the REMOTE_USER
and then builds the list of the available packages that this user can sell
based on their agent_type and only single svc_acct packages. I also added
a sort to the packages so they are alphabetically by the pkg name. :)

Here is the diff:
--- /tarballs/freeside-1.4.0pre14/httemplate/view/cust_main.cgi     Mon Jun
10 15:44:45 2002
+++ /aspdocs/view/cust_main.cgi   Sun Jun 23 15:09:52 2002
@@ -250,23 +250,41 @@

 print '</TD></TR></TABLE>';

-print '<BR>'.
-  '<FORM ACTION="'.popurl(2).'edit/process/quick-cust_pkg.cgi"
METHOD="POST">'.
-  qq!<INPUT TYPE="hidden" NAME="custnum" VALUE="$custnum">!.
-  '<SELECT NAME="pkgpart"><OPTION> ';
+print "<BR>\n";

-foreach my $type_pkgs ( qsearch('type_pkgs',{'typenum'=>
$agent->typenum }) ) {
-  my $pkgpart = $type_pkgs->pkgpart;
-#  my $part_pkg = qsearchs('part_pkg', { 'pkgpart' => $pkgpart } )
-#    or do { warn "unknown type_pkgs.pkgpart $pkgpart"; next; };
-  my $part_pkg =
-    qsearchs('part_pkg', { 'pkgpart' => $pkgpart, 'disabled' => '' } )
-    or next;
-  print qq!<OPTION VALUE="$pkgpart">!. $part_pkg->pkg. ' - '.
-        $part_pkg->comment;
-}
+  # Lets get the REMOTE_USER and their agent_type
+  # to build the list of packages that they can order.
+  $cgi = new CGI;
+  $remote_user = $cgi->remote_user;
+  my $agents_hash = qsearchs( 'agent', { 'agent' => $remote_user } );
+  my $pkgpart;
+  my %typenum;
+  foreach my $agent ( $agents_hash ) {
+    next if $typenum{$agent->typenum}++;
+    #fixed in 5.004_05 #$pkgpart->{$_}++ foreach keys %{
$agent->pkgpart_hashref }
+    foreach ( keys %{ $agent->pkgpart_hashref } ) { $pkgpart->{$_}++; }
#5.004_04 workaround
+  }
+  #eslaf

-print '</SELECT><INPUT TYPE="submit" VALUE="Order Package"><BR>';
+  my @part_pkg = grep { $pkgpart->{ $_->pkgpart } }
+    qsearch( 'part_pkg', { 'disabled' => '' } );
+
+  if ( @part_pkg ) {
+    print '<FORM ACTION="'.popurl(2).'edit/process/quick-cust_pkg.cgi"
METHOD="POST">'. "\n".
+      qq!<INPUT TYPE="hidden" NAME="custnum" VALUE="$custnum">\n!;
+    print qq!<BR>\n<SELECT NAME="pkgpart">\n!;
+    print qq!<OPTION VALUE="">(none)\n!;
+
+    # Resort the @part_pkg alphabetically by pkg name.
+    foreach my $part_pkg ( sort { $a->pkg cmp $b->pkg } @part_pkg ) {
+      print qq!<OPTION VALUE="!,
+              $part_pkg->pkgpart, '"';
+      print ">", $part_pkg->pkg, " - ", $part_pkg->comment. "\n";
+    }
+    print "</SELECT>\n";
+    print '<INPUT TYPE="submit" VALUE="Order Package"><BR>'. "\n";
+    print "</FORM>\n";
+  }

 print <<END;
 <SCRIPT>


I have also done the same changes for the edit/cust_main.cgi file.
Here is the diff:


--- /tarballs/freeside-1.4.0pre14/httemplate/edit/cust_main.cgi     Thu May
9 11:21:00 2002
+++ /aspdocs/edit/cust_main.cgi   Sun Jun 23 15:10:53 2002
@@ -390,20 +390,17 @@
   # pry the wrong place for this logic.  also pretty expensive
   #use FS::part_pkg;

-  #false laziness, copied from FS::cust_pkg::order
+  # Lets get the REMOTE_USER and their agent_type
+  # to build the list of packages that they can order.
+  $cgi = new CGI;
+  $remote_user = $cgi->remote_user;
+  my $agents_hash = qsearchs( 'agent', { 'agent' => $remote_user } );
   my $pkgpart;
-  if ( scalar(@agents) == 1 ) {
-    # $pkgpart->{PKGPART} is true iff $custnum may purchase PKGPART
-    my($agent)=qsearchs('agent',{'agentnum'=> $agentnum });
-    $pkgpart = $agent->pkgpart_hashref;
-  } else {
-    #can't know (agent not chosen), so, allow all
-    my %typenum;
-    foreach my $agent ( @agents ) {
-      next if $typenum{$agent->typenum}++;
-      #fixed in 5.004_05 #$pkgpart->{$_}++ foreach keys %{
$agent->pkgpart_hashref }
-      foreach ( keys %{ $agent->pkgpart_hashref } ) { $pkgpart->{$_}++; }
#5.004_04 workaround
-    }
+  my %typenum;
+  foreach my $agent ( $agents_hash ) {
+    next if $typenum{$agent->typenum}++;
+    #fixed in 5.004_05 #$pkgpart->{$_}++ foreach keys %{
$agent->pkgpart_hashref }
+    foreach ( keys %{ $agent->pkgpart_hashref } ) { $pkgpart->{$_}++; }
#5.004_04 workaround
   }
   #eslaf

@@ -419,7 +416,8 @@

     print qq!<OPTION VALUE="">(none)!;

-    foreach my $part_pkg ( @part_pkg ) {
+    # Resort the @part_pkg alphabetically by pkg name.
+    foreach my $part_pkg ( sort { $a->pkg cmp $b->pkg } @part_pkg ) {
       print qq!<OPTION VALUE="!,
 #              $part_pkg->pkgpart. "_". $pkgpart{ $part_pkg->pkgpart },
'"';
               $part_pkg->pkgpart. "_". $part_pkg->svcpart, '"';

I haven't got to the Signup Page yet, but that one will come later.

Enjoy,
Steve




More information about the freeside-devel mailing list