diff options
| author | Mark Wells <mark@freeside.biz> | 2016-07-19 12:56:49 -0700 | 
|---|---|---|
| committer | Mark Wells <mark@freeside.biz> | 2016-07-19 12:56:49 -0700 | 
| commit | 43f9be2fd8ef088788ade01d2e4bcc0667be36e5 (patch) | |
| tree | bfe014da84b63eca8263008e40335b5943ec5e4b | |
| parent | 0491d209351c209a64885a4d1fdf1398c1b56397 (diff) | |
| parent | 78a19c83d3cc5b3f22156d9ac19e5ae2d9170175 (diff) | |
Merge branch 'FREESIDE_4_BRANCH' of git.freeside.biz:/home/git/freeside into 4.x
| -rw-r--r-- | FS/FS/quotation.pm | 30 | ||||
| -rw-r--r-- | httemplate/edit/process/quotation_convert.html | 7 | ||||
| -rwxr-xr-x | httemplate/edit/svc_acct.cgi | 32 | ||||
| -rw-r--r-- | httemplate/edit/svc_acct/communigate.html | 2 | ||||
| -rw-r--r-- | httemplate/elements/tr-select-router_block_ip.html | 2 | ||||
| -rwxr-xr-x | httemplate/view/quotation.html | 2 | ||||
| -rw-r--r-- | httemplate/view/svc_acct/basics.html | 32 | 
7 files changed, 66 insertions, 41 deletions
| diff --git a/FS/FS/quotation.pm b/FS/FS/quotation.pm index 054985390..c61e001c6 100644 --- a/FS/FS/quotation.pm +++ b/FS/FS/quotation.pm @@ -350,7 +350,7 @@ sub _items_sections {  sub enable_previous { 0 } -=item convert_cust_main +=item convert_cust_main [ PARAMS ]  If this quotation already belongs to a customer, then returns that customer, as  an FS::cust_main object. @@ -362,10 +362,13 @@ packages as real packages for the customer.  If there is an error, returns an error message, otherwise, returns the  newly-created FS::cust_main object. +Accepts the same params as L</order>. +  =cut  sub convert_cust_main {    my $self = shift; +  my $params = shift || {};    my $cust_main = $self->cust_main;    return $cust_main if $cust_main; #already converted, don't again @@ -382,7 +385,7 @@ sub convert_cust_main {    $self->prospectnum('');    $self->custnum( $cust_main->custnum ); -  my $error = $self->replace || $self->order; +  my $error = $self->replace || $self->order(undef,$params);    if ( $error ) {      $dbh->rollback if $oldAutoCommit;      return $error; @@ -394,7 +397,7 @@ sub convert_cust_main {  } -=item order [ HASHREF ] +=item order [ HASHREF ] [ PARAMS ]  This method is for use with quotations which are already associated with a customer. @@ -406,11 +409,16 @@ If HASHREF is passed, it will be filled with a hash mapping the  C<quotationpkgnum> of each quoted package to the C<pkgnum> of the package  as ordered. +If PARAMS hashref is passed, the following params are accepted: + +onhold - if true, suspends newly ordered packages +  =cut  sub order {    my $self = shift;    my $pkgnum_map = shift || {}; +  my $params = shift || {};    my $details_map = {};    tie my %all_cust_pkg, 'Tie::RefHash'; @@ -461,10 +469,11 @@ sub order {      }    } -  foreach my $quotationpkgnum (keys %$pkgnum_map) { -    # convert the objects to just pkgnums -    my $cust_pkg = $pkgnum_map->{$quotationpkgnum}; -    $pkgnum_map->{$quotationpkgnum} = $cust_pkg->pkgnum; +  if ($$params{'onhold'}) { +    foreach my $quotationpkgnum (keys %$pkgnum_map) { +      last if $error; +      $error = $pkgnum_map->{$quotationpkgnum}->suspend(); +    }    }    if ($error) { @@ -473,6 +482,13 @@ sub order {    }    $dbh->commit or die $dbh->errstr if $oldAutoCommit; + +  foreach my $quotationpkgnum (keys %$pkgnum_map) { +    # convert the objects to just pkgnums +    my $cust_pkg = $pkgnum_map->{$quotationpkgnum}; +    $pkgnum_map->{$quotationpkgnum} = $cust_pkg->pkgnum; +  } +    ''; #no error  } diff --git a/httemplate/edit/process/quotation_convert.html b/httemplate/edit/process/quotation_convert.html index dc00a88d3..26b5294f7 100644 --- a/httemplate/edit/process/quotation_convert.html +++ b/httemplate/edit/process/quotation_convert.html @@ -10,9 +10,12 @@ my $quotation = qsearchs( 'quotation' => {    quotationnum => scalar( $cgi->param('quotationnum') ),  } ) or die 'unknown quotationnum'; +my $params = {}; +$$params{'onhold'} = $cgi->param('onhold') ? 1 : 0; +  my $cust_main = $quotation->cust_main;  if ( $cust_main ) { -  my $error = $quotation->order; +  my $error = $quotation->order(undef,$params);    errorpage($error) if $error;    #i should be part of the order transaction @@ -20,7 +23,7 @@ if ( $cust_main ) {    $quotation->replace;  } else { -  $cust_main = $quotation->convert_cust_main; +  $cust_main = $quotation->convert_cust_main( $params );    errorpage($cust_main) unless ref($cust_main);# eq 'FS::cust_main';  } diff --git a/httemplate/edit/svc_acct.cgi b/httemplate/edit/svc_acct.cgi index ca26c6cf0..7be5eabb7 100755 --- a/httemplate/edit/svc_acct.cgi +++ b/httemplate/edit/svc_acct.cgi @@ -31,7 +31,7 @@  </TR>  <% include('/elements/tr-td-label.html', -     'label'    => mt('Username'), +     'label'    => $part_svc->part_svc_column('username')->columnlabel || mt('Username'),       'required' => $part_svc->part_svc_column('username')->required ) %>  % if ( $svcnum && $conf->exists('svc_acct-no_edit_username') ) {      <TD BGCOLOR="#eeeeee"><% $svc_acct->username() %></TD> @@ -46,7 +46,7 @@  %if ( $part_svc->part_svc_column('_password')->columnflag ne 'F' ) {  % #XXX eventually should require "Edit Password" ACL  <% include('/elements/tr-td-label.html', -     'label'    => mt('Password'), +     'label'    => $part_svc->part_svc_column('_password')->columnlabel || mt('Password'),       'required' => $part_svc->part_svc_column('_password')->required ) %>    <TD>      <INPUT TYPE="text" ID="clear_password" NAME="clear_password" VALUE="<% $password %>" SIZE=<% $pmax2 %> MAXLENGTH=<% $pmax %>> @@ -68,7 +68,7 @@  %  && $part_svc->part_svc_column('sec_phrase')->columnflag ne 'F' ) {  <% include('/elements/tr-td-label.html', -     'label'    => mt('Security phrase'), +     'label'    => $part_svc->part_svc_column('sec_phrase')->columnlabel || mt('Security phrase'),       'required' => $part_svc->part_svc_column('sec_phrase')->required ) %>      <TD>        <INPUT TYPE="text" NAME="sec_phrase" VALUE="<% $sec_phrase %>" SIZE=32> @@ -106,7 +106,7 @@  %                );  <% include('/elements/tr-td-label.html', -     'label'    => mt('Domain'), +     'label'    => $part_svc->part_svc_column('domsvc')->columnlabel || mt('Domain'),       'required' => $part_svc->part_svc_column('domsvc')->required ) %>      <TD>        <SELECT NAME="domsvc" SIZE=1> @@ -142,6 +142,7 @@               'curr_value' => $svc_acct->pbxsvc,               'part_svc'   => $part_svc,               'cust_pkg'   => $cust_pkg, +             'label'      => $part_svc->part_svc_column('pbxsvc')->columnlabel || 'PBX',  &>  %#pop @@ -153,7 +154,7 @@  % } else {   <% include('/elements/tr-td-label.html', -     'label'    => mt('Access number'), +     'label'    => $part_svc->part_svc_column('popnum')->columnlabel || mt('Access number'),       'required' => $part_svc->part_svc_column('popnum')->required ) %>      <TD><% FS::svc_acct_pop::popselector($popnum) %></TD>    </TR> @@ -167,6 +168,7 @@           #'part_svc'   => $part_svc,           #'cust_pkg'   => $cust_pkg,           'required'   => $part_svc->part_svc_column('sectornum')->required, +         'label'       => $part_svc->part_svc_column('sectornum')->columnlabel || mt('Tower sector'),      &>  %} else {      <INPUT TYPE="hidden" NAME="sectornum" VALUE="<% $svc_acct->sectornum %>"> @@ -188,10 +190,10 @@  % if ( length($svc_acct->$xid()) ) {   <% include('/elements/tr-td-label.html', -     'label'    => uc($xid), +     'label'    => $part_svc->part_svc_column($xid)->columnlabel || uc($xid),       'required' => $part_svc->part_svc_column($xid)->required ) %> -      <TR> -        <TD ALIGN="right"><% uc($xid) %></TD> +%#      <TR> +%#        <TD ALIGN="right"><% uc($xid) %></TD>            <TD BGCOLOR="#eeeeee"><% $svc_acct->$xid() %></TD>          <TD>          </TD> @@ -202,7 +204,7 @@  % } else {   <% include('/elements/tr-td-label.html', -     'label'    => uc($xid), +     'label'    => $part_svc->part_svc_column($xid)->columnlabel || uc($xid),       'required' => $part_svc->part_svc_column($xid)->required ) %>        <TD>          <INPUT TYPE="text" NAME="<% $xid %>" SIZE=8 MAXLENGTH=6 VALUE="<% $svc_acct->$xid() %>"> @@ -221,7 +223,7 @@  <% include('/elements/tr-td-label.html', -     'label'    => mt('Real Name'), +     'label'    => $part_svc->part_svc_column('finger')->columnlabel || mt('Real Name'),       'required' => $part_svc->part_svc_column('finger')->required ) %>      <TD>        <INPUT TYPE="text" NAME="finger" VALUE="<% $svc_acct->finger %>"> @@ -240,7 +242,7 @@  <% include('/elements/tr-td-label.html', -     'label'    => mt('Home directory'), +     'label'    => $part_svc->part_svc_column('dir')->columnlabel || mt('Home directory'),       'required' => $part_svc->part_svc_column('dir')->required ) %>      <TD><INPUT TYPE="text" NAME="dir" VALUE="<% $svc_acct->dir %>"></TD>    </TR> @@ -258,7 +260,7 @@  <% include('/elements/tr-td-label.html', -     'label'    => mt('Shell'), +     'label'    => $part_svc->part_svc_column('shell')->columnlabel || mt('Shell'),       'required' => $part_svc->part_svc_column('shell')->required ) %>      <TD>        <SELECT NAME="shell" SIZE=1> @@ -289,7 +291,9 @@    'object' => $svc_acct,    'ip_field' => 'slipip',    'required' => $part_svc->part_svc_column('routernum')->required, +  'label'    => $part_svc->part_svc_column('routernum')->columnlabel,    'ip_addr_required' => $part_svc->part_svc_column('slipip')->required, +  'ip_addr_label' => $part_svc->part_svc_column('slipip')->columnlabel,  &>  % } else {  %   # don't expose these to the user--they're only useful in the other case @@ -299,7 +303,7 @@      <INPUT TYPE="hidden" NAME="slipip" VALUE="<% $svc_acct->slipip %>">  %   } else {   <% include('/elements/tr-td-label.html', -     'label'    => mt('IP'), +     'label'    => $part_svc->part_svc_column('slipip')->columnlabel || mt('IP'),       'required' => $part_svc->part_svc_column('slipip')->required ) %>        <TD><INPUT TYPE="text" NAME="slipip" VALUE="<% $svc_acct->slipip %>"></TD>      </TR> @@ -346,7 +350,7 @@  <% include('/elements/tr-td-label.html', -     'label'    => mt('RADIUS groups'), +     'label'    => $part_svc->part_svc_column('usergroup')->columnlabel || mt('RADIUS groups'),       'required' => $part_svc->part_svc_column('usergroup')->required ) %>  % if ( $part_svc_usergroup->columnflag eq 'F' ) {       <TD BGCOLOR="#eeeeee"><% join('<BR>', @groupnames) %></TD> diff --git a/httemplate/edit/svc_acct/communigate.html b/httemplate/edit/svc_acct/communigate.html index 370bfb0e7..544d00be3 100644 --- a/httemplate/edit/svc_acct/communigate.html +++ b/httemplate/edit/svc_acct/communigate.html @@ -46,7 +46,7 @@  % if ( $part_svc->part_svc_column('quota')->columnflag eq 'F' ) {     <INPUT TYPE="hidden" NAME="quota" VALUE="<% $svc_acct->quota %>">  % } else { -%   my $quota_label = $communigate ? 'Mail storage limit' : 'Quota'; +%   my $quota_label = $communigate ? 'Mail storage limit' : ($part_svc->part_svc_column('quota')->columnlabel || 'Quota');  <% include('/elements/tr-td-label.html',       'label'    => $quota_label,       'required' => $part_svc->part_svc_column('quota')->required ) %> diff --git a/httemplate/elements/tr-select-router_block_ip.html b/httemplate/elements/tr-select-router_block_ip.html index ee135686c..2aa715e29 100644 --- a/httemplate/elements/tr-select-router_block_ip.html +++ b/httemplate/elements/tr-select-router_block_ip.html @@ -56,7 +56,7 @@ function clearhint_ip_addr (what) {  ]  &>  </td></tr> -<& /elements/tr-td-label.html, label => 'IP address', required => $opt{'ip_addr_required'} &> +<& /elements/tr-td-label.html, label => ($opt{'ip_addr_label'} || 'IP address'), required => $opt{'ip_addr_required'} &>  <td>  % #warn Dumper \%fixed;  % if ( exists $fixed{$ip_field} ) { diff --git a/httemplate/view/quotation.html b/httemplate/view/quotation.html index 7221d53cd..58d398ca2 100755 --- a/httemplate/view/quotation.html +++ b/httemplate/view/quotation.html @@ -67,7 +67,9 @@ function areyousure(href, message) {      <BR><BR>  %   if ( $curuser->access_right('New customer') && $quotation->quotation_pkg ) { +%     # if we end up with more than one option, combine these links and add an interstitial screen        <A HREF="<%$p%>edit/process/quotation_convert.html?quotationnum=<% $quotation->quotationnum %>">Place order</A> +      | <A HREF="<%$p%>edit/process/quotation_convert.html?quotationnum=<% $quotation->quotationnum %>&onhold=1">Order on hold</A>        <BR><BR>  %   } diff --git a/httemplate/view/svc_acct/basics.html b/httemplate/view/svc_acct/basics.html index 1b7d56b23..5532c22a5 100644 --- a/httemplate/view/svc_acct/basics.html +++ b/httemplate/view/svc_acct/basics.html @@ -1,18 +1,18 @@  <% &ntable("#cccccc") %><TR><TD><% &ntable("#cccccc",2) %> -<& /view/elements/tr.html, label=>mt('Service'),  value=>$part_svc->svc &> +<& /view/elements/tr.html, label=> $part_svc->part_svc_column('svc')->columnlabel || mt('Service'),  value=>$part_svc->svc &>  % if ( $opt{cust_svc}->agent_svcid ) {    <& /view/elements/tr.html, label=>mt('Legacy ID'),  value=>$opt{cust_svc}->agent_svcid &>  % } -<& /view/elements/tr.html, label=>mt('Username'), value=>$svc_acct->username &> -<& /view/elements/tr.html, label=>mt('Domain'),   value=>$domain &> +<& /view/elements/tr.html, label=> $part_svc->part_svc_column('username')->columnlabel || mt('Username'), value=>$svc_acct->username &> +<& /view/elements/tr.html, label=> $part_svc->part_svc_column('domsvc')->columnlabel || mt('Domain'),   value=>$domain &>  % if ( $opt{'communigate'} ) {    <& /view/elements/tr.html, label=>mt('Aliases'), value=>$svc_acct->cgp_aliases &>  %}  % if ( $svc_acct->pbxsvc ) { -  <& /view/elements/tr.html, label=>mt('PBX'), value=>$svc_acct->pbx_title &> +  <& /view/elements/tr.html, label=> $part_svc->part_svc_column('pbxsvc')->columnlabel || mt('PBX'), value=>$svc_acct->pbx_title &>  %}  % my $show_pw = ''; @@ -38,7 +38,7 @@  %   # show nothing  % } else {  <TR> -  <TD ALIGN="right"><% mt('Password') %></TD> +  <TD ALIGN="right"><% $psc->columnlabel || mt('Password') %></TD>    <TD STYLE="background-color: #ffffff; white-space: nowrap">    <% $show_pw %>  %   my $curuser = $FS::CurrentUser::CurrentUser; @@ -58,12 +58,12 @@  % }  % if ( $conf->exists('security_phrase') ) { -  <& /view/elements/tr.html, label=>mt('Security phrase'), value=>$svc_acct->sec_phrase &> +  <& /view/elements/tr.html, label=> $part_svc->part_svc_column('sec_phrase')->columnlabel || mt('Security phrase'), value=>$svc_acct->sec_phrase &>  % }   % if ( $svc_acct->popnum ) {  %   my $svc_acct_pop = qsearchs('svc_acct_pop',{'popnum'=>$svc_acct->popnum}); -    <& /view/elements/tr.html, label=>mt('Access number'), value=>$svc_acct_pop->text &> +    <& /view/elements/tr.html, label=> $part_svc->part_svc_column('popnum')->columnlabel || mt('Access number'), value=>$svc_acct_pop->text &>  % }   % if ( $svc_acct->sectornum && $conf->exists('svc_acct-tower_sector') ) { @@ -72,7 +72,7 @@  %                ? '<A HREF="http://'. $tower_sector->ip_addr. '">'  %                : '';      <& /view/elements/tr.html, -        label => mt('Tower sector'), +        label =>  $part_svc->part_svc_column('sectornum')->columnlabel || mt('Tower sector'),          value => $link. $tower_sector->description. ($link ? '</A>' : ''),      &>  % } @@ -83,28 +83,28 @@  &>  % if ($svc_acct->uid ne '') {  -  <& /view/elements/tr.html, label=>mt('UID'), value=>$svc_acct->uid &> +  <& /view/elements/tr.html, label=> $part_svc->part_svc_column('uid')->columnlabel || mt('UID'), value=>$svc_acct->uid &>  % }   % if ($svc_acct->gid ne '') {  -  <& /view/elements/tr.html, label=>mt('GID'), value=>$svc_acct->gid &> +  <& /view/elements/tr.html, label=> $part_svc->part_svc_column('gid')->columnlabel || mt('GID'), value=>$svc_acct->gid &>  % }   % if ($svc_acct->finger ne '') {  -  <& /view/elements/tr.html, label=>mt('Real Name'), value=>$svc_acct->finger &> +  <& /view/elements/tr.html, label=> $part_svc->part_svc_column('finger')->columnlabel || mt('Real Name'), value=>$svc_acct->finger &>  % }   % if ($svc_acct->dir ne '') {  -  <& /view/elements/tr.html, label=>mt('Home directory'), value=>$svc_acct->dir &> +  <& /view/elements/tr.html, label=> $part_svc->part_svc_column('dir')->columnlabel || mt('Home directory'), value=>$svc_acct->dir &>  % }   % if ($svc_acct->shell ne '') {  -  <& /view/elements/tr.html, label=>mt('Shell'), value=>$svc_acct->shell &> +  <& /view/elements/tr.html, label=> $part_svc->part_svc_column('shell')->columnlabel || mt('Shell'), value=>$svc_acct->shell &>  % }   % if ($svc_acct->quota ne '' && ! $opt{'communigate'} ) {  -  <& /view/elements/tr.html, label=>mt('Quota'), value=>$svc_acct->quota &> +  <& /view/elements/tr.html, label=> $part_svc->part_svc_column('quota')->columnlabel || mt('Quota'), value=>$svc_acct->quota &>  % } elsif ( $opt{'communigate'} ) { @@ -133,7 +133,7 @@ sub slipip {  % if ($svc_acct->slipip) {     <& /view/elements/tr.html, -       label=>mt('IP address'), +       label=> $part_svc->part_svc_column('slipip')->columnlabel || mt('IP address'),         value=> slipip($svc_acct)    &>  % }  @@ -156,7 +156,7 @@ sub slipip {      &>  % }  -<& /view/elements/tr.html, label=>mt('RADIUS groups'), +<& /view/elements/tr.html, label=> $part_svc->part_svc_column('usergroup')->columnlabel || mt('RADIUS groups'),      value=>join('<BR>', $svc_acct->radius_groups('long_description')) &>  <& router.html, 'svc_acct' => $svc_acct &> | 
