invoice_sections_with_taxes per-agent, RT#79636
[freeside.git] / httemplate / misc / cust_main_note-import.cgi
1 <% include("/elements/header.html", 'Batch Customer Note Import') %>
2 %
3
4 <FORM ACTION="process/cust_main_note-import.cgi" METHOD="POST">
5
6
7 <SCRIPT TYPE="text/javascript">
8
9   function clearhint_custnum() {
10
11     if ( this.value == 'Not found' ) {
12       this.value = '';
13       this.style.color = '#000000';
14     }
15
16   }
17
18   function search_custnum() {
19
20     this.style.color = '#000000'
21
22     var custnum_obj = this;
23     var searchrow = this.getAttribute('rownum');
24     var custnum = this.value;
25     var name_obj = document.getElementById('name'+searchrow);
26
27     if ( custnum == 'searching...' || custnum == 'Not found' )
28       return;
29
30     var customer_select = document.getElementById('cust_select'+searchrow);
31
32     if ( custnum == '' ) {
33       customer_select.selectedIndex = 0;
34       return;
35     }
36
37     custnum_obj.value = 'searching...';
38     custnum_obj.disabled = true;
39     custnum_obj.style.backgroundColor = '#dddddd';
40
41
42     function search_custnum_update(customers) {
43
44       var customerArray = eval('(' + customers + ')');
45
46       custnum_obj.disabled = false;
47       custnum_obj.style.backgroundColor = '#ffffff';
48
49       if ( customerArray.length == 0 )  {
50         custnum_obj.value = 'Not found';
51         custnum_obj.style.color = '#ff0000';
52       } else if ( customerArray.length >= 5 ) {
53             var name = customerArray[1];
54         opt(customer_select,custnum,name,'#000000');
55         customer_select.selectedIndex = customer_select.length - 1;
56         custnum_obj.value = custnum;
57         name_obj.value = name;
58       }
59
60     }
61
62     custnum_search( custnum, search_custnum_update );
63
64   }
65
66   function select_customer() {
67
68     var custnum = this.options[this.selectedIndex].value;
69     var name = this.options[this.selectedIndex].text;
70
71     var searchrow = this.getAttribute('rownum');
72     var custnum_obj = document.getElementById('custnum'+searchrow);
73     var name_obj = document.getElementById('name'+searchrow);
74
75     custnum_obj.value = custnum;
76     custnum_obj.style.color = '#000000';
77
78     name_obj.value = name;
79
80   }
81
82   function opt(what,value,text,color) {
83     var optionName = new Option(text, value, false, false);
84     optionName.style.color = color;
85     var length = what.length;
86     what.options[length] = optionName;
87   }
88
89   function previewChanged(what) {
90     var submit_obj = document.getElementById('importsubmit');
91     if (what.checked) {
92       submit_obj.value = 'Preview note import';
93     }else{
94       submit_obj.value = 'Import notes';
95     }
96   }
97
98 </SCRIPT>
99
100 <% include('/elements/xmlhttp.html',
101               'url'  => $p. 'misc/xmlhttp-cust_main-search.cgi',
102               'subs' => [qw( custnum_search )],
103            )
104 %>
105
106 %  my $fh = $cgi->upload('csvfile');
107 %  my $csv = new Text::CSV_XS;
108 %  my $skip_fuzzies = $cgi->param('fuzzies') ? 0 : 1;
109 %  my $use_agent_custid = $cgi->param('use_agent_custid') ? 1 : 0;
110 %
111 %  if ( defined($fh) ) {
112      <TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0>
113      <TR>
114        <TH>Cust #</TH>
115        <TH>Customer</TH>
116        <TH>Last</TH>
117        <TH>First</TH>
118        <TH>Note to be added</TH>
119      </TR>
120 %    my $agentnum = scalar($cgi->param('agentnum'));
121 %    my $line;
122 %    my $row = 0;
123 %    while ( defined($line=<$fh>) ) {
124 %      $line =~ s/(\S*)\s*$/$1/;
125 %      $line =~ s/^(.*)(#!).*/$1/;
126 %
127 %      $csv->parse($line) or die "can't parse line: " . $csv->error_input();
128 %      my $custnum = 0;
129 %      my @values = $csv->fields();
130 %      my $last  = shift @values;
131 %      if ($last =~ /^\s*(\d+)\s*$/ ) {
132 %        $custnum = $1;
133 %        $last = shift @values;
134 %      }
135 %      my $first = shift @values;
136 %      my $note  = join ' ', @values;
137 %      next unless ( $last || $first || $note );
138 %      my @cust_main = ();
139 %      warn "searching for: $last, $first" if ($first || $last);
140 %      if ($agentnum && $custnum && $use_agent_custid) {
141 %        @cust_main = qsearch('cust_main', { 'agent'        => $agentnum,
142 %                                             'agent_custid' => $custnum   } );
143 %      } elsif ($custnum) { # && !use_agent_custid
144 %        @cust_main = qsearch('cust_main', { 'custnum' => $custnum });
145 %      } else {
146 %        @cust_main = FS::cust_main::smart_search(
147 %                                          'search' => "$last, $first",
148 %                                          'no_fuzzy_on_exact' => $skip_fuzzies,
149 %                                                )
150 %          if ($first || $last);
151 %      }
152 %
153        <TR>
154          <TD>
155            <INPUT TYPE="text" NAME="custnum<% $row %>" ID="custnum<% $row %>" SIZE=8 MAXLENGTH=12 VALUE="<% $cust_main[0] ? $cust_main[0]->custnum : '' %>" rownum="<% $row %>">
156              <SCRIPT TYPE="text/javascript">
157                var custnum_input<% $row %> = document.getElementById("custnum<% $row %>");
158                custnum_input<% $row %>.onfocus = clearhint_custnum;
159                custnum_input<% $row %>.onchange = search_custnum;
160              </SCRIPT>
161          </TD>
162          <TD>
163            <SELECT NAME="cust_select<% $row %>" ID="cust_select<% $row %>" rownum="<% $row %>">
164              <OPTION VALUE="">---</OPTION>
165 %      my $i=0;
166 %      foreach (@cust_main) {
167              <OPTION <% $i ? '' : 'SELECTED' %> VALUE="<% $_->custnum %>"><% $_->name |h %></OPTION>
168 %        $i++;
169 %      }
170            </SELECT>
171              <SCRIPT TYPE="text/javascript">
172                var customer_select<% $row %> = document.getElementById("cust_select<% $row %>");
173                customer_select<% $row %>.onchange = select_customer;
174              </SCRIPT>
175            <INPUT TYPE="hidden" NAME="name<% $row %>" ID="name<% $row %>" VALUE="<% $i ? $cust_main[0]->name : '' |h %>">
176          </TD>
177          <TD>
178            <% $first |h %>
179            <INPUT TYPE="hidden" NAME="first<% $row %>" VALUE="<% $first |h %>">
180          </TD>
181          <TD>
182            <% $last |h %>
183            <INPUT TYPE="hidden" NAME="last<% $row %>" VALUE="<% $last |h %>">
184          </TD>
185          <TD>
186            <% $note %>
187            <INPUT TYPE="hidden" NAME="note<% $row %>" VALUE="<% $note %>">
188          </TD>
189        </TR>
190 %      $row++;
191 %    }
192      </TABLE>
193      <INPUT TYPE="submit" NAME="submit" ID="importsubmit" VALUE="Import notes">
194      <INPUT TYPE="checkbox" NAME="preview" onchange="previewChanged(this);">
195      Preview mode
196 %  } else {
197      No file supplied
198 %  }
199
200 </FORM>
201 </BODY>
202 </HTML>
203
204 <%init>
205
206 die "access denied"
207   unless $FS::CurrentUser::CurrentUser->access_right('Import');
208
209 </%init>