diff options
-rw-r--r-- | httemplate/edit/cust_main/top_misc.html | 12 | ||||
-rw-r--r-- | httemplate/elements/tr-select-sales.html | 89 | ||||
-rw-r--r-- | httemplate/elements/xmlhttp.html | 12 | ||||
-rw-r--r-- | httemplate/misc/sales.cgi | 27 | ||||
-rwxr-xr-x | httemplate/search/report_cust_pkg.html | 15 |
5 files changed, 146 insertions, 9 deletions
diff --git a/httemplate/edit/cust_main/top_misc.html b/httemplate/edit/cust_main/top_misc.html index d8141b5a7..ebd9b927c 100644 --- a/httemplate/edit/cust_main/top_misc.html +++ b/httemplate/edit/cust_main/top_misc.html @@ -20,7 +20,9 @@ <% $cust_main->residential_commercial eq 'Commercial' ? 'CHECKED' : '' %> ></TD> </TR> + <SCRIPT TYPE="text/javascript"> + function rescom_changed(what) { if ( what.checked == (what.value == 'Commercial' ) ) { document.getElementById('company_row').style.display = ''; @@ -33,11 +35,16 @@ } } + var ship_locked_agents = <% encode_json(\%ship_locked_agents) %>; var ship_fields = ['address1', 'city', 'state', 'zip', 'country', 'latitude', 'longitude', 'district']; + function agent_changed(what) { var agentnum = what.value; + +% # unlock/lock service location + var f = what.form; if ( ship_locked_agents[agentnum] ) { % # For this agent, the service location (except address2) @@ -65,7 +72,12 @@ f['same'].disabled = false; } samechanged(f['same']); + +% # update sales dropdown + salesnum_agentnum_changed(what); + } + <&| /elements/onload.js &> agent_changed(document.getElementById('agentnum')) </&> diff --git a/httemplate/elements/tr-select-sales.html b/httemplate/elements/tr-select-sales.html index 2a2edf03c..b69b3d8b6 100644 --- a/httemplate/elements/tr-select-sales.html +++ b/httemplate/elements/tr-select-sales.html @@ -13,7 +13,8 @@ Example: 'label' => 'Sales Person', 'empty_label' => 'Select sales person', #override default - #on already# 'disable_empty' => 1, + 'disable_empty' => 0, #on byd efault, pass 0 to disable + 'field' => 'salesnum', #HTML element name and ID &> @@ -21,8 +22,8 @@ Example: % if ( scalar(@sales) == 0 || $opt{'fixed'} ) { <INPUT TYPE = "hidden" - NAME = "<% $opt{'field'} || 'salesnum' %>" - ID = "<% $opt{'field'} || 'salesnum' %>" + NAME = "<% $field %>" + ID = "<% $id %>" VALUE = "<% $salesnum %>" > @@ -63,19 +64,99 @@ Example: % } +<& /elements/xmlhttp.html, + 'url' => $p.'misc/sales.cgi', + 'subs' => [ 'get_sales' ], +&> +<SCRIPT TYPE="text/javascript"> + +% # false laziness w/ elements/tr-select-cust-part_pkg.html + + function <% $field %>_opt(what, value, text) { + var optionName = new Option(text, value, false, false); + var length = what.length; + what.options[length] = optionName; + } + + function <% $field %>_agentnum_changed(what) { + what.form.<% $field %>.disabled = 'disabled'; //disable sales dropdown + + agentnum = what.options[what.selectedIndex].value; + + function update_<% $field %>(sales) { + + if ( what.form.<% $field %>.type == 'hidden' ) { + what.form.<% $field %>.disabled = ''; //re-enable sales dropdown + return; + } + + // save the current salesnum + var salesnum = what.form.<% $field %>.value; + + // blank the current sales people + for ( var i = what.form.<% $field %>.length; i>= 0; i-- ) + what.form.<% $field %>.options[i] = null; + + // add the new sales people + +% my @pre_options = $opt{pre_options} ? @{ $opt{pre_options} } : (); +% while ( @pre_options ) { +% my $pre_opt = shift(@pre_options); +% my $pre_label = shift(@pre_options); +% #my $selected = ( $salesnum eq $pre_opt ); + <% $field %>_opt( what.form.<% $field %>, + <% $pre_opt |js_string %>, + <% $pre_label |js_string %> + ); +% } + +% unless ( $opt{'disable_empty'} ) { + <% $field %>_opt( what.form.<% $field %>, + '', + <% $opt{'empty_label'} || '(none)' |js_string %> + ); +% } + + var salesArray = eval('(' + sales + ')' ); + for ( var s = 0; s < salesArray.length; s=s+2 ) { + //surely this should be some kind of JSON structure + var salesLabel = salesArray[s+1]; + <% $field %>_opt( what.form.<% $field %>, salesArray[s], salesLabel ); + } + + what.form.<% $field %>.disabled = ''; //re-enable sales dropdown + + //restore salesnum if possible + what.form.<% $field %>.value = salesnum; + + } + + get_sales( agentnum, + update_<% $field %> + ); + } + + <&| /elements/onload.js &> + <% $field %>_agentnum_changed(document.getElementById('agentnum')); + </&> + +</SCRIPT> + <%init> my $curuser = $FS::CurrentUser::CurrentUser; my %opt = @_; my $salesnum = $opt{'curr_value'} || $opt{'value'}; +my $field = $opt{'element_name'} || $opt{'field'} || 'salesnum'; +my $id = $opt{'id'} || $opt{'field'} || 'salesnum'; my @sales = qsearch({ 'table' => 'sales', 'hashref' => { 'disabled' => '' }, 'extra_sql' => ' AND '. $curuser->agentnums_sql, + 'order_by' => 'ORDER BY salesperson', }); my $colspan = $opt{'colspan'} ? 'COLSPAN="'.$opt{'colspan'}.'"' : ''; - </%init> diff --git a/httemplate/elements/xmlhttp.html b/httemplate/elements/xmlhttp.html index a9e65c790..2f4f0d555 100644 --- a/httemplate/elements/xmlhttp.html +++ b/httemplate/elements/xmlhttp.html @@ -14,17 +14,19 @@ Example: ); </%doc> +<%shared> +my %initialized = ();#won't work if component is "preloaded"... so don't do that +</%shared> <& /elements/rs_init_object.html &> <& /elements/init_overlib.html &> <SCRIPT TYPE="text/javascript"> % foreach my $func ( @{$opt{'subs'}} ) { % -% my $furl = $url; -% $furl =~ s/\"/\\\\\"/; #javascript escape -%#" -% - +% next if $initialized{$key.$func}++; +% +% my $furl = $url; +% $furl =~ s/\"/\\\\\"/; #javascript escape (fix gvim syntax: ") function <%$key%><%$func%>() { // count args; build URL diff --git a/httemplate/misc/sales.cgi b/httemplate/misc/sales.cgi new file mode 100644 index 000000000..1e5637173 --- /dev/null +++ b/httemplate/misc/sales.cgi @@ -0,0 +1,27 @@ +<% encode_json( \@return ) %>\ +<%init> + +my( $agentnum ) = $cgi->param('arg'); + +my %hash = ( 'disabled' => '' ); +if ( $agentnum > 0 ) { + $hash{'agentnum'} = $agentnum; +} +my @sales = qsearch({ + 'table' => 'sales', + 'hashref' => \%hash, + 'extra_sql' => ' AND '. $FS::CurrentUser::CurrentUser->agentnums_sql, + 'order_by' => 'ORDER BY salesperson', +}); + +warn scalar(@sales); + +my @return = map { + ( $_->salesnum, + $_->salesperson, + ) + } + #sort { $a->salesperson cmp $b->salesperson } + @sales; + +</%init> diff --git a/httemplate/search/report_cust_pkg.html b/httemplate/search/report_cust_pkg.html index 6cf297c91..0a17344b8 100755 --- a/httemplate/search/report_cust_pkg.html +++ b/httemplate/search/report_cust_pkg.html @@ -16,9 +16,24 @@ <% include( '/elements/tr-select-agent.html', 'curr_value' => scalar( $cgi->param('agentnum') ), 'disable_empty' => 0, + 'onchange' => 'agent_changed(this)', ) %> + <SCRIPT TYPE="text/javascript"> + + function agent_changed(what) { +% # update sales dropdowns + salesnum_agentnum_changed(what); + cust_main_salesnum_agentnum_changed(what); + } + + <&| /elements/onload.js &> + agent_changed(document.getElementById('agentnum')) + </&> + + </SCRIPT> + <& /elements/tr-select-sales.html, 'label' => 'Customer sales person', 'element_name' => 'cust_main_salesnum', |