summaryrefslogtreecommitdiff
path: root/httemplate/elements
diff options
context:
space:
mode:
authorivan <ivan>2009-12-28 19:20:25 +0000
committerivan <ivan>2009-12-28 19:20:25 +0000
commit03ceab71dad1e5eb366865d304e5e459cc905ce4 (patch)
tree18b4532289a0237ae694b1ad5c033b25f448bd7c /httemplate/elements
parent5950a980cef4968ac59ca8041d2204e6d98e7a3d (diff)
beginning of prospect/CRM/contact work
Diffstat (limited to 'httemplate/elements')
-rw-r--r--httemplate/elements/city.html4
-rw-r--r--httemplate/elements/contact.html72
-rw-r--r--httemplate/elements/header.html49
-rw-r--r--httemplate/elements/menu.html2
-rw-r--r--httemplate/elements/tr-contact.html24
-rw-r--r--httemplate/elements/tr-select-cust_location.html79
6 files changed, 197 insertions, 33 deletions
diff --git a/httemplate/elements/city.html b/httemplate/elements/city.html
index 47e5c37..61d0578 100644
--- a/httemplate/elements/city.html
+++ b/httemplate/elements/city.html
@@ -34,7 +34,7 @@ Example:
what.options[length] = optionName;
}
- var saved_<%$pre%>city= '';
+ var saved_<%$pre%>city= '<% $saved_city |h %>';
function <% $pre %>county_changed(what, callback) {
@@ -124,10 +124,12 @@ my $text_style = $opt{'style'} ? [ @{ $opt{'style'} } ] : [];
my $select_style = $opt{'style'} ? [ @{ $opt{'style'} } ] : [];
my @cities = cities( $opt{'county'}, $opt{'state'}, $opt{'country'} );
+my $saved_city = '';
if ( scalar(@cities) > 1 || $cities[0] ) {
push @$text_style, 'display:none';
} else {
push @$select_style, 'display:none';
+ $saved_city = $opt{'city'};
}
$text_style =
diff --git a/httemplate/elements/contact.html b/httemplate/elements/contact.html
new file mode 100644
index 0000000..38703bf
--- /dev/null
+++ b/httemplate/elements/contact.html
@@ -0,0 +1,72 @@
+% unless ( $opt{'js_only'} ) {
+
+ <INPUT TYPE="hidden" NAME="<%$name%>" ID="<%$id%>" VALUE="<% $curr_value %>">
+
+ <TABLE>
+ <TR>
+ <TD>
+ <INPUT TYPE = "text"
+ NAME = "<%$name%>_first"
+ ID = "<%$id%>_id"
+ VALUE = "<% $contact->first |h %>"
+ <% $onchange %>
+ ><BR>
+ <FONT SIZE="-2">First name</FONT>
+ </TD>
+ <TD>
+ <INPUT TYPE = "text"
+ NAME = "<%$name%>_last"
+ ID = "<%$id%>_id"
+ VALUE = "<% $contact->get('last') |h %>"
+ <% $onchange %>
+ ><BR>
+ <FONT SIZE="-2">Last name</FONT>
+ </TD>
+ <TD>
+ <INPUT TYPE = "text"
+ NAME = "<%$name%>_title"
+ ID = "<%$id%>_id"
+ VALUE = "<% $contact->title |h %>"
+ <% $onchange %>
+ ><BR>
+ <FONT SIZE="-2">Title/Position</FONT>
+ </TD>
+ <TD>
+ <INPUT TYPE = "text"
+ NAME = "<%$name%>_comment"
+ ID = "<%$id%>_id"
+ VALUE = "<% $contact->comment |h %>"
+ <% $onchange %>
+ ><BR>
+ <FONT SIZE="-2">Comment</FONT>
+ </TD>
+ </TR>
+ </TABLE>
+
+% }
+<%init>
+
+my( %opt ) = @_;
+
+my $name = $opt{'element_name'} || $opt{'field'} || 'contactnum';
+my $id = $opt{'id'} || 'contactnum';
+
+my $curr_value = $opt{'curr_value'} || $opt{'value'};
+
+my $onchange = '';
+if ( $opt{'onchange'} ) {
+ $onchange = $opt{'onchange'};
+ $onchange .= '(this)' unless $onchange =~ /\(\w*\);?$/;
+ $onchange =~ s/\(what\);/\(this\);/g; #ugh, terrible hack. all onchange
+ #callbacks should act the same
+ $onchange = 'onChange="'. $onchange. '"';
+}
+
+my $contact;
+if ( $curr_value ) {
+ $contact = qsearchs('contact', { 'contactnum' => $curr_value } );
+} else {
+ $contact = new FS::contact {};
+}
+
+</%init>
diff --git a/httemplate/elements/header.html b/httemplate/elements/header.html
index 22e872e..495923c 100644
--- a/httemplate/elements/header.html
+++ b/httemplate/elements/header.html
@@ -39,6 +39,12 @@ Example:
<% include('init_overlib.html') |n %>
<SCRIPT TYPE="text/javascript">
+
+ function clearhint_search_prospect (what) {
+ if ( what.value == '<% $prospect_label |n %>' )
+ what.value = '';
+ }
+
function clearhint_search_cust (what) {
if ( what.value == '<% $cust_label |n %>' )
what.value = '';
@@ -63,6 +69,7 @@ Example:
if ( what.value == '<% $ticketing_label |n %>' )
what.value = '';
}
+
</SCRIPT>
<% $head |n %>
@@ -140,6 +147,7 @@ input.fstext {
vertical-align:bottom;
text-align:right;
font-family: Arial,Verdana,Helvetica,sans-serif;
+ font-size: 13px;
padding-left: 0px;
padding-right: 0px;
padding-top: 0px;
@@ -154,14 +162,14 @@ input.fstext {
<TABLE WIDTH="100%" CELLSPACING=0 CELLPADDING=0>
<TR>
- <TD COLSPAN=6 WIDTH="100%" STYLE="padding:0"><IMG BORDER=0 ALT="" SRC="<%$fsurl%>images/black-gradient.png" HEIGHT="13" WIDTH="100%"></TD>
+ <TD COLSPAN="7" WIDTH="100%" STYLE="padding:0"><IMG BORDER=0 ALT="" SRC="<%$fsurl%>images/black-gradient.png" HEIGHT="13" WIDTH="100%"></TD>
</TR>
% if ( $menu_position eq 'top' ) {
<TR>
- <TD COLSPAN="4" WIDTH="100%" STYLE="padding:0" BGCOLOR="#000000">
+ <TD COLSPAN="5" WIDTH="100%" STYLE="padding:0" BGCOLOR="#000000">
<SCRIPT TYPE="text/javascript">
document.write(myBar);
</SCRIPT>
@@ -180,12 +188,12 @@ input.fstext {
</TR>
<TR>
- <TD COLSPAN="6" WIDTH="100%" HEIGHT="2px" STYLE="padding:0" BGCOLOR="#000000">
+ <TD COLSPAN="7" WIDTH="100%" HEIGHT="2px" STYLE="padding:0" BGCOLOR="#000000">
</TD>
</TR>
<TR>
- <TD COLSPAN="6" WIDTH="100%" HEIGHT="4px" STYLE="padding:0" BGCOLOR="#000000">
+ <TD COLSPAN="7" WIDTH="100%" HEIGHT="4px" STYLE="padding:0" BGCOLOR="#000000">
</TD>
</TR>
@@ -193,7 +201,17 @@ input.fstext {
<TR>
- <TD COLSPAN=1 BGCOLOR="#000000" ALIGN="right">
+ <TD COLSPAN=1 BGCOLOR="#000000" ALIGN="right" STYLE="padding-left:2px">
+% if ( $curuser->access_right('List prospects') ) {
+ <FORM ACTION="<%$fsurl%>search/prospect_main.html" METHOD="GET" STYLE="margin:0">
+ <INPUT NAME="search_prospect" TYPE="text" VALUE="<% $prospect_label |n %>" STYLE="width:155px" onFocus="clearhint_search_prospect(this);" onClick="clearhint_search_prospect(this);" CLASS="fstext"><BR>
+ <A HREF="<%$fsurl%>search/report_prospect_main.html" STYLE="color: #ffffff; font-size: 11px">Adv</A>
+ <INPUT TYPE="submit" VALUE="Search prospects" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:11px;padding-left:1px;padding-right:1px"">
+ </FORM>
+% }
+ </TD>
+
+ <TD COLSPAN=1 BGCOLOR="#000000" ALIGN="right" STYLE="padding-left:2px">
% if ( $curuser->access_right('List customers') ) {
<FORM ACTION="<%$fsurl%>search/cust_main.cgi" METHOD="GET" STYLE="margin:0">
<INPUT NAME="search_cust" TYPE="text" VALUE="<% $cust_label |n %>" STYLE="width:<%$cust_width%>px" onFocus="clearhint_search_cust(this);" onClick="clearhint_search_cust(this);" CLASS="fstext"><BR>
@@ -209,7 +227,7 @@ input.fstext {
<INPUT TYPE="hidden" NAME="address2_on" VALUE="1">
<INPUT NAME="address2_text" TYPE="text" VALUE="<% $address2_label |n %>" STYLE="width:67px" onFocus="clearhint_search_address2(this);" onClick="clearhint_search_address2(this);" CLASS="fstext">
<BR>
- <INPUT TYPE="submit" VALUE="Search units" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:11px;padding-left:2px;padding-right:2px">
+ <INPUT TYPE="submit" VALUE="Search units" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:11px;padding-left:1px;padding-right:1px;margin-top:3px">
</FORM>
% }
</TD>
@@ -217,30 +235,29 @@ input.fstext {
<TD COLSPAN=1 BGCOLOR="#000000" ALIGN="right">
% if ( $curuser->access_right('View invoices') ) {
<FORM ACTION="<%$fsurl%>search/cust_bill.html" METHOD="GET" STYLE="margin:0;display:inline">
- <INPUT NAME="invnum" TYPE="text" VALUE="<% $inv_label |n %>" STYLE="width:64px" onFocus="clearhint_search_invoice(this);" onClick="clearhint_search_invoice(this);" CLASS="fstext">
+ <INPUT NAME="invnum" TYPE="text" VALUE="<% $inv_label |n %>" STYLE="width:56px" onFocus="clearhint_search_invoice(this);" onClick="clearhint_search_invoice(this);" CLASS="fstext">
% if ( $curuser->access_right('List invoices') ) {
<A HREF="<%$fsurl%>search/report_cust_bill.html" STYLE="color: #ffffff; font-size: 11px">Adv</A>\
% }
-<BR>
- <INPUT TYPE="submit" VALUE="Search invoices" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:11px;padding-left:2px;padding-right:2px">
+<BR><INPUT TYPE="submit" VALUE="Search invoices" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:11px;padding-left:1px;padding-right:1px;margin-top:3px">
</FORM>
% }
</TD>
- <TD COLSPAN=1 BGCOLOR="#000000" ALIGN="right">
+ <TD COLSPAN=1 BGCOLOR="#000000" ALIGN="right" STYLE="padding-left:2px">
% if ( $curuser->access_right('View customer services') ) {
<FORM ACTION="<%$fsurl%>search/cust_svc.html" METHOD="GET" STYLE="margin:0">
- <INPUT NAME="search_svc" TYPE="text" VALUE="<% $svc_label |n %>" STYLE="width:324px" onFocus="clearhint_search_svc(this);" onClick="clearhint_search_svc(this);" CLASS="fstext"><BR>
+ <INPUT NAME="search_svc" TYPE="text" VALUE="<% $svc_label |n %>" STYLE="width:271px" onFocus="clearhint_search_svc(this);" onClick="clearhint_search_svc(this);" CLASS="fstext"><BR>
<A NOTYET="<%$fsurl%>search/svc_Smarter.html" STYLE="color: #000000; font-size:11px">Advanced</A>
<INPUT TYPE="submit" VALUE="Search services" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:11px">
</FORM>
% }
</TD>
- <TD COLSPAN=1 BGCOLOR="#000000" ALIGN="right" STYLE="padding-left:4px;padding-right:4px">
+ <TD COLSPAN=1 BGCOLOR="#000000" ALIGN="right" STYLE="padding-left:2px;padding-right:2px">
% if ( $conf->config("ticket_system") ) {
<FORM ACTION="<% FS::TicketSystem->baseurl %>index.html" METHOD="GET" STYLE="margin:0">
- <INPUT NAME="q" TYPE="text" VALUE="<% $ticketing_label |n %>" STYLE="width:256px" onFocus="clearhint_search_ticket(this);" onClick="clearhint_search_ticket(this);" CLASS="fstext"><BR>
+ <INPUT NAME="q" TYPE="text" VALUE="<% $ticketing_label |n %>" STYLE="width:223px" onFocus="clearhint_search_ticket(this);" onClick="clearhint_search_ticket(this);" CLASS="fstext"><BR>
<A HREF="<% FS::TicketSystem->baseurl %>Search/Build.html" STYLE="color: #ffffff; font-size:11px">Advanced</A>
<INPUT TYPE="submit" VALUE="Search tickets" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:11px">
</FORM>
@@ -334,11 +351,13 @@ if ( scalar(@agentnums) == 1 ) {
$company_name = $conf->config('company_name');
}
-my $cust_width = 288; #251 #ok for IE, slightly bigger for windows firefox
+my $prospect_label = '(name, company or phone)';
+
+my $cust_width = 246;
my $cust_label = '(cust #, name, company';
if ( $conf->exists('address1-search') ) {
$cust_label .= ', address';
- $cust_width += 64;
+ $cust_width += 56;
}
$cust_label .= ' or contact phone)';
diff --git a/httemplate/elements/menu.html b/httemplate/elements/menu.html
index caf2274..ce0278f 100644
--- a/httemplate/elements/menu.html
+++ b/httemplate/elements/menu.html
@@ -476,6 +476,8 @@ if ( $conf->config('ticket_system') ) {
'Ticketing start page',
],
}
+$menu{'New prospect'} = [ $fsurl.'edit/prospect_main.html', 'Add a new prospect' ]
+ if $curuser->access_right('New prospect');
$menu{'New customer'} = [ $fsurl.'edit/cust_main.cgi', 'Add a new customer' ]
if $curuser->access_right('New customer');
$menu{'Reports'} = [ \%report_menu, 'Lists, reporting and graphing' ]
diff --git a/httemplate/elements/tr-contact.html b/httemplate/elements/tr-contact.html
new file mode 100644
index 0000000..ee0e6e8
--- /dev/null
+++ b/httemplate/elements/tr-contact.html
@@ -0,0 +1,24 @@
+% unless ( $opt{'js_only'} ) {
+
+ <% include('tr-td-label.html', %opt) %>
+ <TD <% $cell_style %>>
+
+% }
+%
+ <% include( '/elements/contact.html', %opt ) %>
+%
+% unless ( $opt{'js_only'} ) {
+
+ </TD>
+ </TR>
+
+% }
+<%init>
+
+my( %opt ) = @_;
+
+my $cell_style = $opt{'cell_style'} ? 'STYLE="'. $opt{'cell_style'}. '"' : '';
+
+$opt{'label'} ||= 'Contact';
+
+</%init>
diff --git a/httemplate/elements/tr-select-cust_location.html b/httemplate/elements/tr-select-cust_location.html
index ab043ee..5e938b5 100644
--- a/httemplate/elements/tr-select-cust_location.html
+++ b/httemplate/elements/tr-select-cust_location.html
@@ -4,7 +4,13 @@ Example:
include('/elements/tr-select-cust_location.html',
'cgi' => $cgi,
- 'cust_main' => $cust_main,
+
+ 'cust_main' => $cust_main,
+ #or
+ 'prospect_main' => $prospect_main,
+
+ #optional
+ 'empty_label' => '(default service address)',
)
</%doc>
@@ -42,6 +48,7 @@ Example:
} else {
if ( locationnum == 0 ) {
+% if ( $cust_main ) {
what.form.address1.value = <% $cust_main->get($prefix.'address1') |js_string %>;
what.form.address2.value = <% $cust_main->get($prefix.'address2') |js_string %>;
what.form.city.value = <% $cust_main->get($prefix.'city') |js_string %>;
@@ -54,16 +61,33 @@ Example:
<% $cust_main->get($prefix.'county') | js_string %>
)
);
+% }
} else {
get_location( locationnum, update_location );
}
+% if ( $editable ) {
+ if ( locationnum == 0 ) {
+% }
+
%#sleep/wait until dropdowns are updated?
-% for (@location_fields, 'city_select') {
- what.form.<%$_%>.disabled = true;
- what.form.<%$_%>.style.backgroundColor = '#dddddd';
-% }
+% for (@location_fields, 'city_select') {
+ what.form.<%$_%>.disabled = true;
+ what.form.<%$_%>.style.backgroundColor = '#dddddd';
+% }
+
+% if ( $editable ) {
+ } else {
+
+%#sleep/wait until dropdowns are updated?
+% for (@location_fields, 'city_select') {
+ what.form.<%$_%>.disabled = false;
+ what.form.<%$_%>.style.backgroundColor = '#ffffff';
+% }
+
+ }
+% }
}
}
@@ -122,15 +146,20 @@ Example:
<TH ALIGN="right">Service&nbsp;location</TH>
<TD COLSPAN=7>
<SELECT NAME="locationnum" onChange="locationnum_changed(this);">
- <OPTION VALUE="">(default service address)
-% foreach my $loc ( $cust_main->cust_location ) {
+ <OPTION VALUE=""><% $opt{'empty_label'} || '(default service address)' |h %>
+% my @locations = $cust_main ? $cust_main->cust_location : ();
+% push @locations, $cust_location
+% if !$cust_main && $cust_location && $cust_location->locationnum>0;
+% foreach my $loc ( @locations ) {
<OPTION VALUE="<% $loc->locationnum %>"
<% $locationnum == $loc->locationnum ? 'SELECTED' : '' %>
><% $loc->line |h %>
% }
- <OPTION VALUE="-1"
- <% $locationnum == -1 ? 'SELECTED' : '' %>
- >Add new location
+% if ( $addnew ) {
+ <OPTION VALUE="-1"
+ <% $locationnum == -1 ? 'SELECTED' : '' %>
+ >Add new location
+% }
</SELECT>
</TD>
</TR>
@@ -138,7 +167,7 @@ Example:
<% include('/elements/location.html',
'object' => $cust_location,
#'onchange' ? probably not
- 'disabled' => ( $locationnum == -1 ? '' : 'DISABLED' ),
+ 'disabled' => $disabled,
'no_asterisks' => 1,
)
%>
@@ -156,13 +185,25 @@ my $statedefault = $conf->config('statedefault')
|| ($countrydefault eq 'US' ? 'CA' : '');
my %opt = @_;
-my $cgi = $opt{'cgi'};
-my $cust_main = $opt{'cust_main'};
+my $cgi = $opt{'cgi'};
+my $cust_main = $opt{'cust_main'};
+my $prospect_main = $opt{'prospect_main'};
+
+my $prefix = ($cust_main && length($cust_main->ship_last)) ? 'ship_' : '';
-my $prefix = length($cust_main->ship_last) ? 'ship_' : '';
+my $locationnum;
+if ( length($opt{'curr_value'}) ) {
+ $locationnum = $opt{'curr_value'};
+} else {
+ $cgi->param('locationnum') =~ /^(\-?\d*)$/ or die "illegal locationnum";
+ $locationnum = $1;
+}
+
+#probably could use explicit controls
+# (cust_main locations not editable for tax reasons)
+my $editable = $cust_main ? 0 : 1; #could use explicit control
+my $addnew = $cust_main ? 1 : ( $locationnum>0 ? 0 : 1 );
-$cgi->param('locationnum') =~ /^(\-?\d*)$/ or die "illegal locationnum";
-my $locationnum = $1;
my $cust_location;
if ( $locationnum && $locationnum != -1 ) {
$cust_location = qsearchs('cust_location', { 'locationnum' => $locationnum } )
@@ -171,9 +212,13 @@ if ( $locationnum && $locationnum != -1 ) {
$cust_location = new FS::cust_location;
if ( $locationnum == -1 ) {
$cust_location->$_( $cgi->param($_) ) foreach @location_fields;
- } else {
+ } elsif ( $cust_main ) {
$cust_location->$_( $cust_main->get($prefix.$_) ) foreach @location_fields;
}
}
+my $disabled = ( $locationnum == -1 || ($editable && $locationnum) )
+ ? ''
+ : 'DISABLED';
+
</%init>