[freeside-commits] freeside/httemplate/misc cust_main_note-import.cgi, NONE, 1.2.2.1 cust_main_note-import.html, NONE, 1.2.2.1

Jeff Finucane,420,, jeff at wavetail.420.am
Tue Mar 20 13:22:01 PDT 2007


Update of /home/cvs/cvsroot/freeside/httemplate/misc
In directory wavetail:/tmp/cvs-serv16376/httemplate/misc

Added Files:
      Tag: FREESIDE_1_7_BRANCH
	cust_main_note-import.cgi cust_main_note-import.html 
Log Message:
ticket 1418, a tool for customer note importation (backport)

--- NEW FILE: cust_main_note-import.cgi ---
<% include("/elements/header.html", 'Batch Customer Note Import') %>
%

<FORM ACTION="process/cust_main_note-import.cgi" METHOD="POST">


<SCRIPT TYPE="text/javascript">

  function clearhint_custnum() {

    if ( this.value == 'Not found' ) {
      this.value = '';
      this.style.color = '#000000';
    }

  }

  function search_custnum() {

    this.style.color = '#000000'

    var custnum_obj = this;
    var searchrow = this.getAttribute('rownum');
    var custnum = this.value;
    var name_obj = document.getElementById('name'+searchrow);

    if ( custnum == 'searching...' || custnum == 'Not found' )
      return;

    var customer_select = document.getElementById('cust_select'+searchrow);

    if ( custnum == '' ) {
      customer_select.selectedIndex = 0;
      return;
    }

    custnum_obj.value = 'searching...';
    custnum_obj.disabled = true;
    custnum_obj.style.backgroundColor = '#dddddd';


    //alert('search for custnum ' + custnum + ', row#' + searchrow );

    function search_custnum_update(name) {

      var name = eval('(' + name + ')' );

      custnum_obj.disabled = false;
      custnum_obj.style.backgroundColor = '#ffffff';

      if ( name.length > 0 ) {
        //alert('custnum found: ' + name);
        opt(customer_select,custnum,name,'#000000');
        customer_select.selectedIndex = customer_select.length - 1;
        custnum_obj.value = custnum;
        name_obj.value = name;
      } else {
        custnum_obj.value = 'Not found';
        custnum_obj.style.color = '#ff0000';
      }

    }

    custnum_search( custnum, search_custnum_update );

  }

  function select_customer() {

    var custnum = this.options[this.selectedIndex].value;
    var name = this.options[this.selectedIndex].text;

    var searchrow = this.getAttribute('rownum');
    var custnum_obj = document.getElementById('custnum'+searchrow);
    var name_obj = document.getElementById('name'+searchrow);

    custnum_obj.value = custnum;
    custnum_obj.style.color = '#000000';

    name_obj.value = name;

  }

  function opt(what,value,text,color) {
    var optionName = new Option(text, value, false, false);
    optionName.style.color = color;
    var length = what.length;
    what.options[length] = optionName;
  }

  function previewChanged(what) {
    var submit_obj = document.getElementById('importsubmit');
    if (what.checked) {
      submit_obj.value = 'Preview note import';
    }else{
      submit_obj.value = 'Import notes';
    }
  }

</SCRIPT>

<% include('/elements/xmlhttp.html',
              'url'  => $p. 'misc/xmlhttp-cust_main-search.cgi',
              'subs' => [qw( custnum_search )],
           )
%>

%  my $fh = $cgi->upload('csvfile');
%  my $csv = new Text::CSV_XS;
%  my $skip_fuzzies = $cgi->param('fuzzies') ? 0 : 1;
%
%  if ( defined($fh) ) {
     <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0>
     <TR>
       <TH>Cust #</TH>
       <TH>Customer</TH>
       <TH>Last</TH>
       <TH>First</TH>
       <TH>Note to be added</TH>
     </TR>
%    my $agentnum   => scalar($cgi->param('agentnum')),
%    my $line;
%    my $row = 0;
%    while ( defined($line=<$fh>) ) {
%      chomp $line;
%      $line =~ s/^(.*)(#!).*/$1/;
%
%      $csv->parse($line) or die "can't parse line: " . $csv->error_input();
%      my $custnum = 0;
%      my @values = $csv->fields();
%      my $last  = shift @values;
%      if ($last =~ /^\s*(\d+)\s*$/ ) {
%        $custnum = $1;
%        $last = shift @values;
%      }
%      my $first = shift @values;
%      my $note  = join ' ', @values;
%      next unless ( $last || $first || $note );
%      my @cust_main = ();
%      warn "searching for: $last, $first" if ($first || $last);
%      if ($custnum) {
%        @cust_main = qsearch('cust_main', { 'custnum' => $custnum });
%      } else {
%        @cust_main = FS::cust_main::smart_search(
%                                          'search' => "$last, $first",
%                                          'no_fuzzy_on_exact' => $skip_fuzzies,
%                                                )
%          if ($first || $last);
%      }
%
       <TR>
         <TD>
           <INPUT TYPE="text" NAME="custnum<% $row %>" ID="custnum<% $row %>" SIZE=8 MAXLENGTH=12 VALUE="<% $cust_main[0] ? $cust_main[0]->custnum : '' %>" rownum="<% $row %>">
             <SCRIPT TYPE="text/javascript">
               var custnum_input<% $row %> = document.getElementById("custnum<% $row %>");
               custnum_input<% $row %>.onfocus = clearhint_custnum;
               custnum_input<% $row %>.onchange = search_custnum;
             </SCRIPT>
         </TD>
         <TD>
           <SELECT NAME="cust_select<% $row %>" ID="cust_select<% $row %>" rownum="<% $row %>">
             <OPTION VALUE="">---</OPTION>
%      my $i=0;
%      foreach (@cust_main) {
             <OPTION <% $i ? '' : 'SELECTED' %> VALUE="<% $_->custnum %>"><% $_->name %></OPTION>
%        $i++;
%      }
           </SELECT>
             <SCRIPT TYPE="text/javascript">
               var customer_select<% $row %> = document.getElementById("cust_select<% $row %>");
               customer_select<% $row %>.onchange = select_customer;
             </SCRIPT>
           <INPUT TYPE="hidden" NAME="name<% $row %>" ID="name<% $row %>" VALUE="<% $i ? $cust_main[0]->name : '' %>">
         </TD>
         <TD>
           <% $first %>
           <INPUT TYPE="hidden" NAME="first<% $row %>" VALUE="<% $first %>">
         </TD>
         <TD>
           <% $last %>
           <INPUT TYPE="hidden" NAME="last<% $row %>" VALUE="<% $last %>">
         </TD>
         <TD>
           <% $note %>
           <INPUT TYPE="hidden" NAME="note<% $row %>" VALUE="<% $note %>">
         </TD>
       </TR>
%      $row++;
%    }
     </TABLE>
     <INPUT TYPE="submit" NAME="submit" ID="importsubmit" VALUE="Import notes">
     <INPUT TYPE="checkbox" NAME="preview" onchange="previewChanged(this);">
     Preview mode
%  } else {
     No file supplied
%  }

</FORM>
</BODY>
</HTML>

<%init>

die "access denied"
  unless $FS::CurrentUser::CurrentUser->access_right('Import');

</%init>

--- NEW FILE: cust_main_note-import.html ---
<% include("/elements/header.html",'Batch Customer Note Import') %>

<FORM ACTION="cust_main_note-import.cgi" METHOD="post" ENCTYPE="multipart/form-data">

Import a CSV file containing customer notes records.
<BR><BR>

File format is CSV, with the following field order: <i>[custnum,] last, first, notefield1, notefield2, notefield3...</i>
<BR>
The optional custnum field is identified by being numeric.
Anything after the character sequence #! is ignored.
<BR><BR>

<% &ntable("#cccccc") %>

<TR>
  <TH ALIGN="right">CSV filename</TH>
  <TD><INPUT TYPE="file" NAME="csvfile"></TD>
</TR>
<TR>
  <TH ALIGN="right">Include additional possibilites when exact match is found</TH>
  <TD><INPUT TYPE="checkbox" NAME="fuzzies"></TD>
</TR>

</TABLE>
<BR><BR>

<INPUT TYPE="submit" VALUE="Load and match">
</FORM>

<% include('/elements/footer.html') %>

<%init>

die "access denied"
  unless $FS::CurrentUser::CurrentUser->access_right('Import');

</%init>




More information about the freeside-commits mailing list