time/data/etc. unit pricing add-ons, RT#24392
[freeside.git] / httemplate / misc / order_pkg.html
index 7aa024a..080ba41 100644 (file)
@@ -1,4 +1,15 @@
-<& /elements/header-popup.html, mt('Order new package') &>
+<& /elements/header-popup.html, {
+     'title' =>  $quotationnum ? mt('Add package to quotation')
+                               : mt('Order new package'),
+     'nobr'  => 1,
+   }
+&>
+
+<& /elements/xmlhttp.html,
+              'url'  => $p.'misc/xmlhttp-part_pkg_usageprice.html',
+              'subs' => [ 'get_part_pkg_usageprice' ],
+&>
+
 
 <LINK REL="stylesheet" TYPE="text/css" HREF="../elements/calendar-win2k-2.css" TITLE="win2k-2">
 <SCRIPT TYPE="text/javascript" SRC="../elements/calendar_stripped.js"></SCRIPT>
 
 <FORM NAME="OrderPkgForm" ACTION="<% $p %>edit/process/quick-cust_pkg.cgi" METHOD="POST">
 
-<INPUT TYPE="hidden" NAME="custnum" VALUE="<% $cust_main->custnum %>">
+<INPUT TYPE="hidden" NAME="custnum" VALUE="<% $cust_main ? $cust_main->custnum : '' %>">
+<INPUT TYPE="hidden" NAME="prospectnum" VALUE="<% $prospect_main ? $prospect_main->prospectnum : '' %>">
 <INPUT TYPE="hidden" NAME="qualnum" VALUE="<% scalar($cgi->param('qualnum')) |h %>">
+<INPUT TYPE="hidden" NAME="quotationnum" VALUE="<% $quotationnum %>">
 % if ( $svcpart ) {
     <INPUT TYPE="hidden" NAME="svcpart" VALUE="<% $svcpart %>">
 % }
 
-<% ntable("#cccccc", 2) %>
+% my $num_sales = $agent->num_sales;
+% my $conf_pkg_referral = $conf->exists('pkg_referral');
+% my $show_sales = $num_sales && $conf_pkg_referral;
+% my $show_sales_table = $num_sales || $conf_pkg_referral;
+
+% if ( $show_sales ) {
+  <FONT CLASS="fsinnerbox-title"><% mt('Sales') |h %></FONT>
+% }
+% if ( $show_sales_table ) {
+  <% ntable("#cccccc") %>
+% }
+
+<& /elements/tr-select-sales.html,
+     'curr_value' => scalar($cgi->param('salesnum')),
+     'agentnum'   => $agent->agentnum,
+     'th'         => 1,
+&>
+
+% if ( $conf->exists('pkg_referral') ) {
+  <& /elements/tr-select-part_referral.html,
+               'curr_value'    => scalar( $cgi->param('refnum') ), #get rid of empty_label first# || $cust_main->refnum,
+               'disable_empty' => 1,
+               'multiple'      => $conf->exists('pkg_referral-multiple'),
+               'colspan'       => 7,
+  &>
+% }
+
+% if ( $show_sales_table ) {
+  </TABLE><BR>
+% }
+
+<FONT CLASS="fsinnerbox-title"><% mt('Package') |h %></FONT>
+<% ntable("#cccccc") %>
+
 % if ( $part_pkg ) {
     <INPUT TYPE="hidden" NAME="pkgpart" VALUE="<% $part_pkg->pkgpart %>">
     <TR>
     </TR>
 % } else {
     <& /elements/tr-select-cust-part_pkg.html,
-                 'curr_value' => $pkgpart,
-                 'classnum'   => -1,
-                 'cust_main'  => $cust_main,
+                 'curr_value'    => $pkgpart,
+                 'classnum'      => -1,
+                 'cust_main'     => $cust_main,
+                 'prospect_main' => $prospect_main,
     &>
 % }
 
-% if ( $conf->exists('invoice-unitprice') ) {
+<& /elements/tr-input-pkg-quantity.html, curr_value => $quantity &>
+
+% if ( $cust_main && $cust_main->payby =~ /^(CARD|CHEK)$/ ) {
+%   my $what = lc(FS::payby->shortname($cust_main->payby));
     <TR>
-      <TH ALIGN="right"><% mt('Quantity') |h %> </TD>
-      <TD>
-        <INPUT TYPE="text" NAME="quantity" SIZE=4 VALUE="<% $quantity %>">
-      </TD>
+      <TH ALIGN="right"><% mt("Disable automatic $what charge") |h %> </TH>
+      <TD COLSPAN=6><INPUT TYPE="checkbox" NAME="no_auto" VALUE="Y"></TD>
     </TR>
 % }
 
     <& /elements/input-date-field.html,{
                 'name'      => 'start_date',
                 'format'    => $date_format,
-                'value'     => $start_date,
+                'value'     => '',
                 'noinit'    => 1,
               } &>
+    <IMG SRC   = "<%$fsurl%>images/calendar-disabled.png"
+         ID    = "start_date_button_disabled"
+         STYLE = "display:none">
     <FONT SIZE=-1>(<% mt('leave blank to start immediately') |h %>)</FONT>
   </TD>
 </TR>
 
-% if ( $cust_main->payby =~ /^(CARD|CHEK)$/ ) {
-%   my $what = lc(FS::payby->shortname($cust_main->payby));
-    <TR>
-      <TH ALIGN="right"><% mt("Disable automatic $what charge") |h %> </TH>
-      <TD COLSPAN=6><INPUT TYPE="checkbox" NAME="no_auto" VALUE="Y"></TD>
-    </TR>
-% }
+<TR>
+  <TH ALIGN="right"><% mt('Contract end date') |h %> </TD>
+  <TD COLSPAN=6>
+    <& /elements/input-date-field.html,{
+                'name'      => 'contract_end',
+                'format'    => $date_format,
+                'value'     => '',
+                'noinit'    => 1,
+                } &>
+  </TD>
+</TR>
 
-% if ( $curuser->access_right('Discount customer package') ) {
-  <& /elements/tr-select-discount.html,
+</TABLE><BR>
+
+%#so:
+%# - hide until you selecdt a pacakge with add-ons
+%# -lookup and display the available add-ons when 
+%# -add them to the (recur if there is one, otherwise setup) price and display magically like processing fees do on edit/cust_pay.cgi
+
+%# better label?
+<FONT CLASS = "fsinnerbox-title" 
+      ID    = "cust_pkg_usageprice_title"
+      STYLE = "display:none"
+><% mt('Usage add-ons') |h %></FONT>
+<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0 ID="cust_pkg_usageprice_table">
+
+</TABLE>
+<BR>
+
+% my $discount_cust_pkg = $curuser->access_right('Discount customer package');
+% my $waive_setup_fee   = $curuser->access_right('Waive setup fee');
+%
+% if ( $discount_cust_pkg || $waive_setup_fee ) {
+  <FONT CLASS="fsinnerbox-title"><% mt('Discounting') |h %></FONT>
+  <% ntable("#cccccc") %>
+
+%   if ( $waive_setup_fee ) {
+      <TR>
+        <TH ALIGN="right"><% mt('Waive setup fee') |h %> </TH>
+        <TD COLSPAN=6><INPUT TYPE="checkbox" NAME="waive_setup" VALUE="Y"></TD>
+      </TR>
+%   }
+
+%   if ( $discount_cust_pkg ) {
+      <& /elements/tr-select-discount.html,
                'element_etc' => 'DISABLED',
                'colspan'     => 7,
                'cgi'         => $cgi,
-  &>
-% }
+      &>
+%   }
 
-% if ( $curuser->access_right('Waive setup fee') ) {
-    <TR>
-      <TH ALIGN="right"><% mt('Waive setup fee') |h %> </TH>
-      <TD COLSPAN=6><INPUT TYPE="checkbox" NAME="waive_setup" VALUE="Y"></TD>
-    </TR>
-% }
+  </TABLE><BR>
 
-% if ( $conf->exists('pkg_referral') ) {
-  <& /elements/tr-select-part_referral.html,
-               'curr_value'    => scalar( $cgi->param('refnum') ), #get rid of empty_label first# || $cust_main->refnum,
-               'disable_empty' => 1,
-               'multiple'      => $conf->exists('pkg_referral-multiple'),
-               'colspan'       => 7,
-  &>
 % }
 
+
+% my $lock_locationnum = scalar($cgi->param('lock_locationnum'));
+% my $contact_title = $lock_locationnum ? 'Contact'
+%                                       : 'Contact and Location';
+<FONT CLASS="fsinnerbox-title"><% mt($contact_title) |h %></FONT>
+<% ntable("#cccccc") %>
+
+<& /elements/tr-select-contact.html,
+             'cgi'           => $cgi,
+             'cust_main'     => $cust_main,
+             'prospect_main' => $prospect_main,
+&>
+
 % if ( $cgi->param('lock_locationnum') ) {
 
     <INPUT TYPE  = "hidden"
 % } else {
 
     <& /elements/tr-select-cust_location.html,
-                 'cgi'       => $cgi,
-                 'cust_main' => $cust_main,
+                 'cgi'           => $cgi,
+                 'cust_main'     => $cust_main,
+                 'prospect_main' => $prospect_main,
     &>
 
 % }
 
-<TR>
-  <TH ALIGN="right"><% mt('Contract end date') |h %> </TD>
-  <TD COLSPAN=6>
-    <& /elements/input-date-field.html,{
-                'name'      => 'contract_end',
-                'format'    => $date_format,
-                'value'     => '',
-                'noinit'    => 1,
-                } &>
-  </TD>
-</TR>
-
 </TABLE>
 
 % unless ( $cgi->param('lock_locationnum') ) {
 
   <& /elements/standardize_locations.html,
-                'form'       => "OrderPkgForm",
-                'onlyship'   => 1,
-                'no_company' => 1,
-                'callback'   => 'document.OrderPkgForm.submit();',
+                'form'        => "OrderPkgForm",
+                'callback'    => 'document.OrderPkgForm.submit()',
+                'with_census' => 1,
+                'with_census_functions' => 1,
   &>
 
 % }
@@ -152,20 +228,42 @@ die "access denied"
 my $conf = new FS::Conf;
 my $date_format = $conf->config('date_format') || '%m/%d/%Y';
 
-$cgi->param('custnum') =~ /^(\d+)$/ or die "no custnum";
-my $custnum = $1;
-my $cust_main = qsearchs({
-  'table'     => 'cust_main',
-  'hashref'   => { 'custnum' => $custnum },
-  'extra_sql' => ' AND '. $FS::CurrentUser::CurrentUser->agentnums_sql,
-});
+my $cust_main = '';
+if ( $cgi->param('custnum') =~ /^(\d+)$/ ) {
+  my $custnum = $1;
+  $cust_main = qsearchs({
+    'table'     => 'cust_main',
+    'hashref'   => { 'custnum' => $custnum },
+    'extra_sql' => ' AND '. $curuser->agentnums_sql,
+  });
+}
+
+my $prospect_main = '';
+if ( $cgi->param('prospectnum') =~ /^(\d+)$/ ) {
+  my $prospectnum = $1;
+  $prospect_main = qsearchs({
+    'table'     => 'prospect_main',
+    'hashref'   => { 'prospectnum' => $prospectnum },
+    'extra_sql' => ' AND '. $curuser->agentnums_sql,
+  });
+}
+
+my $quotationnum = '';
+if ( $cgi->param('quotationnum') =~ /^(\d+)$/ ) {
+  $quotationnum = $1;
+}
+
+die 'no custnum or prospectnum' unless $cust_main || $prospect_main;
+
+my $agent =  $cust_main ? $cust_main->agent
+                        : $prospect_main->agent;
 
 my $part_pkg = '';
 if ( $cgi->param('lock_pkgpart') ) {
   $part_pkg = qsearchs({
     'table'     => 'part_pkg',
     'hashref'   => { 'pkgpart' => scalar($cgi->param('lock_pkgpart')) },
-    'extra_sql' => ' AND '. FS::part_pkg->agent_pkgs_sql( $cust_main->agent ),
+    'extra_sql' => ' AND '. FS::part_pkg->agent_pkgs_sql($agent),
   })
     or die "unknown pkgpart ". $cgi->param('lock_pkgpart');
 }
@@ -178,11 +276,6 @@ if ( $cgi->param('quantity') =~ /^\s*(\d+)\s*$/ ) {
 }
 
 my $format = $date_format. ' %T %z (%Z)'; #false laziness w/REAL_cust_pkg.cgi?
-my $start_date = '';
-if( ! $conf->exists('order_pkg-no_start_date') ) {
-  $start_date = $cust_main->next_bill_date;
-  $start_date = $start_date ? time2str($format, $start_date) : '';
-}
 
 my $svcpart = scalar($cgi->param('svcpart'));