support importing charges by agent_custid
authorjeff <jeff>
Mon, 23 Aug 2010 20:02:41 +0000 (20:02 +0000)
committerjeff <jeff>
Mon, 23 Aug 2010 20:02:41 +0000 (20:02 +0000)
FS/FS/cust_main.pm
httemplate/misc/cust_main-import_charges.cgi
httemplate/misc/process/cust_main-import_charges.cgi

index 5203723..3556878 100644 (file)
@@ -8865,7 +8865,17 @@ sub batch_charge {
   my $param = shift;
   #warn join('-',keys %$param);
   my $fh = $param->{filehandle};
-  my @fields = @{$param->{fields}};
+  my $agentnum = $param->{agentnum};
+  my $format = $param->{format};
+
+  my $extra_sql = ' AND '. $FS::CurrentUser::CurrentUser->agentnums_sql;
+
+  my @fields;
+  if ( $format eq 'simple' ) {
+    @fields = qw( custnum agent_custid amount pkg );
+  } else {
+    die "unknown format $format";
+  }
 
   eval "use Text::CSV_XS;";
   die $@ if $@;
@@ -8905,10 +8915,32 @@ sub batch_charge {
       $row{$field} = shift @columns;
     }
 
-    my $cust_main = qsearchs('cust_main', { 'custnum' => $row{'custnum'} } );
+    if ( $row{custnum} && $row{agent_custid} ) {
+      dbh->rollback if $oldAutoCommit;
+      return "can't specify custnum with agent_custid $row{agent_custid}";
+    }
+
+    my %hash = ();
+    if ( $row{agent_custid} && $agentnum ) {
+      %hash = ( 'agent_custid' => $row{agent_custid},
+                'agentnum'     => $agentnum,
+              );
+    }
+
+    if ( $row{custnum} ) {
+      %hash = ( 'custnum' => $row{custnum} );
+    }
+
+    unless ( scalar(keys %hash) ) {
+      $dbh->rollback if $oldAutoCommit;
+      return "can't find customer without custnum or agent_custid and agentnum";
+    }
+
+    my $cust_main = qsearchs('cust_main', { %hash } );
     unless ( $cust_main ) {
       $dbh->rollback if $oldAutoCommit;
-      return "unknown custnum $row{'custnum'}";
+      my $custnum = $row{custnum} || $row{agent_custid};
+      return "unknown custnum $custnum";
     }
 
     if ( $row{'amount'} > 0 ) {
index 3801929..c844e0e 100644 (file)
@@ -1,22 +1,69 @@
-<% include('/elements/header.html', 'Batch Customer Charge') %>
+<% include("/elements/header.html",'Batch Payment Charge') %>
+
+Import a CSV file containing customer payments.
+<BR><BR>
 
 <FORM ACTION="process/cust_main-import_charges.cgi" METHOD="post" ENCTYPE="multipart/form-data">
 
-Import a CSV file containing customer charges.<BR><BR>
-Default file format is CSV, with the following field order: <i>custnum, amount, description</i><BR><BR>
-If <i>amount</i> is negative, a credit will be applied instead.<BR><BR>
-<BR><BR>
+<% &ntable("#cccccc", 2) %>
+
+<% include('/elements/tr-select-agent.html',
+              #'curr_value' => '', #$agentnum,
+              'label'       => "<B>Agent</B>",
+              'empty_label' => 'Select agent',
+           )
+%>
+
+<TR>
+  <TH ALIGN="right">Format</TH>
+  <TD>
+    <SELECT NAME="format">
+      <OPTION VALUE="simple">Simple
+<!--      <OPTION VALUE="extended" SELECTED>Extended -->
+    </SELECT>
+  </TD>
+</TR>
+
+<TR>
+  <TH ALIGN="right">CSV filename</TH>
+  <TD><INPUT TYPE="file" NAME="csvfile"></TD>
+</TR>
 
-CSV Filename: <INPUT TYPE="file" NAME="csvfile"><BR><BR>
-<INPUT TYPE="submit" VALUE="Import">
+<TR><TD COLSPAN=2 ALIGN="center" STYLE="padding-top:6px"><INPUT TYPE="submit" VALUE="Import CSV file"></TD></TR>
+
+</TABLE>
 
 </FORM>
 
-<% include('/elements/footer.html') %>
+<BR>
+
+Simple file format is CSV, with the following field order: <i>custnum, agent_custid, amount, description</i>
+<BR><BR>
+
+<!-- Extended file format is not yet defined</i>
+<BR><BR> -->
 
+Field information:
+
+<ul>
+
+  <li><i>custnum</i>: This is the freeside customer number.  It may be left blank.  If specified, agent_custid must be blank.
+
+  <li><i>agent_custid</i>: This is the reseller's idea of the customer number or identifier.  It may be left blank.  If specified, custnum must be blank.
+
+  <li><i>amount</i>: A numeric value with at most two digits after the decimal point.  If <i>amount</i> is negative, a credit will be applied instead.
+
+  <li><i>description</i>: Text describing the transaction.
+
+</ul>
+
+<BR>
+
+<% include('/elements/footer.html') %>
 <%init>
 
 die "access denied"
   unless $FS::CurrentUser::CurrentUser->access_right('Import');
 
 </%init>
+
index 3ca6894..bda3e3b 100644 (file)
@@ -16,7 +16,8 @@ my $fh = $cgi->upload('csvfile');
 my $error = defined($fh)
   ? FS::cust_main::batch_charge( {
       filehandle => $fh,
-      'fields'    => [qw( custnum amount pkg )],
+      'agentnum' => scalar($cgi->param('agentnum')),
+      'format'   => scalar($cgi->param('format')),
     } )
   : 'No file';