From: Ivan Kohler Date: Sun, 11 Aug 2013 23:18:24 +0000 (-0700) Subject: Merge branch 'master' of git.freeside.biz:/home/git/freeside X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=35e5b12fb55f229edd16bed66e21c5806b8d3b7e;hp=9005d0ad058eee59bacafe26217ed4fda2da1800 Merge branch 'master' of git.freeside.biz:/home/git/freeside --- diff --git a/FS/FS/cust_bill_pkg.pm b/FS/FS/cust_bill_pkg.pm index 572fe7973..f94bf9b19 100644 --- a/FS/FS/cust_bill_pkg.pm +++ b/FS/FS/cust_bill_pkg.pm @@ -955,8 +955,8 @@ Returns an SQL expression for the sum of payments applied to this item. sub paid_sql { my ($class, $start, $end, %opt) = @_; - my $s = $start ? "AND cust_bill_pay._date <= $start" : ''; - my $e = $end ? "AND cust_bill_pay._date > $end" : ''; + my $s = $start ? "AND cust_pay._date <= $start" : ''; + my $e = $end ? "AND cust_pay._date > $end" : ''; my $setuprecur = $opt{setuprecur} =~ /^s/ ? 'setup' : $opt{setuprecur} =~ /^r/ ? 'recur' : @@ -965,6 +965,7 @@ sub paid_sql { my $paid = "( SELECT COALESCE(SUM(cust_bill_pay_pkg.amount),0) FROM cust_bill_pay_pkg JOIN cust_bill_pay USING (billpaynum) + JOIN cust_pay USING (paynum) WHERE cust_bill_pay_pkg.billpkgnum = cust_bill_pkg.billpkgnum $s $e $setuprecur )"; @@ -983,8 +984,8 @@ sub paid_sql { sub credited_sql { my ($class, $start, $end, %opt) = @_; - my $s = $start ? "AND cust_credit_bill._date <= $start" : ''; - my $e = $end ? "AND cust_credit_bill._date > $end" : ''; + my $s = $start ? "AND cust_credit._date <= $start" : ''; + my $e = $end ? "AND cust_credit._date > $end" : ''; my $setuprecur = $opt{setuprecur} =~ /^s/ ? 'setup' : $opt{setuprecur} =~ /^r/ ? 'recur' : @@ -993,6 +994,7 @@ sub credited_sql { my $credited = "( SELECT COALESCE(SUM(cust_credit_bill_pkg.amount),0) FROM cust_credit_bill_pkg JOIN cust_credit_bill USING (creditbillnum) + JOIN cust_credit USING (crednum) WHERE cust_credit_bill_pkg.billpkgnum = cust_bill_pkg.billpkgnum $s $e $setuprecur )"; diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index d885abfdd..89c683e17 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -1732,6 +1732,11 @@ New pkgpart (see L). New refnum (see L). +=item quantity + +New quantity; if unspecified, the new package will have the same quantity +as the old. + =item cust_pkg "New" (existing) FS::cust_pkg object. The package's services and other @@ -1767,9 +1772,6 @@ sub change { my $self = shift; my $opt = ref($_[0]) ? shift : { @_ }; -# my ($custnum, $pkgparts, $remove_pkgnum, $return_cust_pkg, $refnum) = @_; -# - my $conf = new FS::Conf; # Transactionize this whole mess @@ -1790,10 +1792,6 @@ sub change { my $time = time; - #$hash{$_} = $self->$_() foreach qw( last_bill bill ); - - #$hash{$_} = $self->$_() foreach qw( setup ); - $hash{'setup'} = $time if $self->setup; $hash{'change_date'} = $time; @@ -1865,6 +1863,7 @@ sub change { } $hash{'contactnum'} = $opt->{'contactnum'} if $opt->{'contactnum'}; + $hash{'quantity'} = $opt->{'quantity'} || $self->quantity; my $cust_pkg; if ( $opt->{'cust_pkg'} ) { @@ -2098,7 +2097,9 @@ The date for the package change. Required, and must be in the future. =item locationnum -The pkgpart and locationnum of the new package, with the same +=item quantity + +The pkgpart. locationnum, and quantity of the new package, with the same meaning as in C. =back @@ -2130,7 +2131,9 @@ sub change_later { if $opt->{'pkgpart'} and $opt->{'pkgpart'} != $change_to->pkgpart; my $new_locationnum = $opt->{'locationnum'} if $opt->{'locationnum'} and $opt->{'locationnum'} != $change_to->locationnum; - if ( $new_pkgpart or $new_locationnum ) { + my $new_quantity = $opt->{'quantity'} + if $opt->{'quantity'} and $opt->{'quantity'} != $change_to->quantity; + if ( $new_pkgpart or $new_locationnum or $new_quantity ) { # it hasn't been billed yet, so in principle we could just edit # it in place (w/o a package change), but that's bad form. # So change the package according to the new options... @@ -2168,12 +2171,16 @@ sub change_later { if $opt->{'pkgpart'} and $opt->{'pkgpart'} != $self->pkgpart; my $new_locationnum = $opt->{'locationnum'} if $opt->{'locationnum'} and $opt->{'locationnum'} != $self->locationnum; - return '' unless $new_pkgpart or $new_locationnum; # wouldn't do anything + my $new_quantity = $opt->{'quantity'} + if $opt->{'quantity'} and $opt->{'quantity'} != $self->quantity; + + return '' unless $new_pkgpart or $new_locationnum or $new_quantity; # wouldn't do anything my %hash = ( 'custnum' => $self->custnum, 'pkgpart' => ($opt->{'pkgpart'} || $self->pkgpart), 'locationnum' => ($opt->{'locationnum'} || $self->locationnum), + 'quantity' => ($opt->{'quantity'} || $self->quantity), 'start_date' => $date, ); my $new = FS::cust_pkg->new(\%hash); diff --git a/httemplate/edit/process/change-cust_pkg.html b/httemplate/edit/process/change-cust_pkg.html index 9d06d8e1a..0d571defd 100644 --- a/httemplate/edit/process/change-cust_pkg.html +++ b/httemplate/edit/process/change-cust_pkg.html @@ -27,7 +27,7 @@ my $cust_pkg = qsearchs({ die 'unknown pkgnum' unless $cust_pkg; my %change = map { $_ => scalar($cgi->param($_)) } - qw( locationnum pkgpart ); + qw( locationnum pkgpart quantity ); $change{'keep_dates'} = 1; diff --git a/httemplate/elements/location.html b/httemplate/elements/location.html index 41a67a0cb..df5106cb0 100644 --- a/httemplate/elements/location.html +++ b/httemplate/elements/location.html @@ -244,6 +244,42 @@ Example: %# Placeholders + + + <%init> my %opt = @_; diff --git a/httemplate/elements/tr-input-pkg-quantity.html b/httemplate/elements/tr-input-pkg-quantity.html new file mode 100644 index 000000000..7ade57399 --- /dev/null +++ b/httemplate/elements/tr-input-pkg-quantity.html @@ -0,0 +1,15 @@ +% if ( FS::Conf->new->exists('invoice-unitprice') or $curr_value > 1 ) { + + <% mt('Quantity') |h %> + + + + + +% } else { + +% } +<%init> +my %opt = @_; +my $curr_value = $cgi->param('quantity') || $opt{'curr_value'} || 1; + diff --git a/httemplate/misc/change_pkg.cgi b/httemplate/misc/change_pkg.cgi index 7425fbfaf..923be71b1 100755 --- a/httemplate/misc/change_pkg.cgi +++ b/httemplate/misc/change_pkg.cgi @@ -22,6 +22,10 @@ 'cust_main' => $cust_main, &> + <& /elements/tr-input-pkg-quantity.html, + 'curr_value' => $cust_pkg->quantity + &> + <& /elements/tr-select-cust_location.html, 'cgi' => $cgi, 'cust_main' => $cust_main, @@ -94,7 +98,7 @@ my $title = "Change Package"; if ( $cust_pkg->change_to_pkgnum ) { my $change_to = FS::cust_pkg->by_key($cust_pkg->change_to_pkgnum); $cgi->param('delay', 1); - foreach(qw( start_date pkgpart locationnum )) { + foreach(qw( start_date pkgpart locationnum quantity )) { $cgi->param($_, $change_to->get($_)); } $title = "Edit Scheduled Package Change"; diff --git a/httemplate/misc/order_pkg.html b/httemplate/misc/order_pkg.html index a257e53e3..66c405ac1 100644 --- a/httemplate/misc/order_pkg.html +++ b/httemplate/misc/order_pkg.html @@ -37,16 +37,7 @@ &> % } -% if ( $conf->exists('invoice-unitprice') ) { - - <% mt('Quantity') |h %> - - - - -% } else { - -% } +<& /elements/tr-input-pkg-quantity.html, curr_value => $quantity &> <% mt('Start date') |h %> diff --git a/httemplate/misc/suspend_cust.html b/httemplate/misc/suspend_cust.html index b41f36f8c..e0d17f30b 100644 --- a/httemplate/misc/suspend_cust.html +++ b/httemplate/misc/suspend_cust.html @@ -40,7 +40,7 @@ toggle(false); STYLE="margin-left:auto; margin-right:auto"> <& /elements/tr-select-reason.html, 'field' => 'reasonnum', - 'reason_class' => 'C', + 'reason_class' => 'S', 'cgi' => $cgi, 'control_button' => "document.getElementById('confirm_suspend_cust_button')", &> diff --git a/httemplate/search/pay_batch.cgi b/httemplate/search/pay_batch.cgi index 620996abd..40df5aa56 100755 --- a/httemplate/search/pay_batch.cgi +++ b/httemplate/search/pay_batch.cgi @@ -14,12 +14,23 @@ 'Type', 'First Download', 'Last Upload', - '', # requests - '', # req amt - '', # payments - '', # pay amt + { label => 'Requested', colspan => 2 }, + '', + { label => 'Paid', colspan => 2 }, + '', 'Status', ], + 'header2' => [ '', + '', + '', + '', + '', + 'Items', + 'Amount', + 'Items', + 'Amount', + '', + ], 'align' => 'rcllrrrrc', 'fields' => [ 'batchnum', sub { @@ -49,7 +60,7 @@ }, sub { my $c = FS::cust_pay_batch->count('batchnum = '.$_[0]->batchnum); - $c ? "$c requested" : '' + $c || '' }, sub { my $st = "SELECT SUM(amount) from cust_pay_batch WHERE batchnum=" . shift->batchnum; @@ -62,7 +73,7 @@ }, sub { my $c = FS::cust_pay->count('batchnum = '.$_[0]->batchnum); - $c ? "$c paid" : '' + $c || ''; }, sub { my $st = "SELECT SUM(paid) from cust_pay WHERE batchnum=" . shift->batchnum; diff --git a/httemplate/search/unearned_detail.html b/httemplate/search/unearned_detail.html index 285fb50a7..b87a7477e 100644 --- a/httemplate/search/unearned_detail.html +++ b/httemplate/search/unearned_detail.html @@ -105,6 +105,10 @@ my $agentnums_sql = my @where = ( $agentnums_sql ); +if ( $cgi->param('agentnum') =~ /^(\d+)$/ ) { + push @where, "cust_main.agentnum = $1"; +} + my($beginning, $ending) = FS::UI::Web::parse_beginning_ending($cgi); if ( $cgi->param('status') =~ /^([a-z]+)$/ ) { @@ -191,12 +195,16 @@ push @select, "$unearned_sql AS unearned_revenue"; # last payment/credit date my %t = (pay => 'cust_bill_pay', credit => 'cust_credit_bill'); foreach my $x (qw(pay credit)) { - my $table = $t{$x}; - my $link = $table.'_pkg'; - my $pkey = dbdef->table($table)->primary_key; - my $last_date_sql = "SELECT MAX(_date) - FROM $table JOIN $link USING ($pkey) - WHERE $link.billpkgnum = cust_bill_pkg.billpkgnum + my $table = "cust_$x"; + my $link_bill = $t{$x}; + my $link_pkg = $link_bill.'_pkg'; + my %pkey = map { $_ => dbdef->table($_)->primary_key } + ( $table, $link_bill ); + + my $last_date_sql = "SELECT MAX($table._date) + FROM $table JOIN $link_bill USING ($pkey{$table}) + JOIN $link_pkg USING ($pkey{$link_bill}) + WHERE $link_pkg.billpkgnum = cust_bill_pkg.billpkgnum AND $table._date <= $unearned"; push @select, "($last_date_sql) AS last_$x"; } diff --git a/httemplate/view/cust_main/packages/location.html b/httemplate/view/cust_main/packages/location.html index 01cbc0ffb..5ff2b1e1f 100644 --- a/httemplate/view/cust_main/packages/location.html +++ b/httemplate/view/cust_main/packages/location.html @@ -70,8 +70,8 @@ sub pkg_change_location_link { 'label' => emt('Change location'), 'actionlabel' => emt('Change'), 'cust_pkg' => $cust_pkg, - 'width' => 763, - 'height' => 380, + 'width' => 960, + 'height' => 490, ); } diff --git a/httemplate/view/cust_main/packages/package.html b/httemplate/view/cust_main/packages/package.html index 596a47391..7df0869a3 100644 --- a/httemplate/view/cust_main/packages/package.html +++ b/httemplate/view/cust_main/packages/package.html @@ -280,8 +280,8 @@ sub pkg_change_link { 'label' => emt('Change package'), 'actionlabel' => emt('Change'), 'cust_pkg' => $cust_pkg, - 'width' => 763, - 'height' => 480, + 'width' => 960, + 'height' => 490, ); } @@ -295,8 +295,8 @@ sub pkg_change_location_link { 'label' => emt('Change location'), 'actionlabel' => emt('Change'), 'cust_pkg' => $cust_pkg, - 'width' => 763, - 'height' => 380, + 'width' => 960, + 'height' => 490, ); } diff --git a/httemplate/view/cust_main/packages/status.html b/httemplate/view/cust_main/packages/status.html index 6894a4e02..70b623c0f 100644 --- a/httemplate/view/cust_main/packages/status.html +++ b/httemplate/view/cust_main/packages/status.html @@ -645,8 +645,8 @@ sub pkg_change_later_link { 'label' => emt('Reschedule'), 'actionlabel' => emt('Edit scheduled change for'), 'cust_pkg' => $cust_pkg, - 'width' => 763, - 'height' => 480, + 'width' => 960, + 'height' => 490, ) } diff --git a/rt/lib/RT/Interface/Web.pm b/rt/lib/RT/Interface/Web.pm index bdad21350..4a6bfda88 100644 --- a/rt/lib/RT/Interface/Web.pm +++ b/rt/lib/RT/Interface/Web.pm @@ -2983,6 +2983,7 @@ sub ProcessTicketDates { Starts Started Due + WillResolve ); #Run through each field in this list. update the value if apropriate diff --git a/rt/lib/RT/Interface/Web_Vendor.pm b/rt/lib/RT/Interface/Web_Vendor.pm index fb2b80717..a5f5b8827 100644 --- a/rt/lib/RT/Interface/Web_Vendor.pm +++ b/rt/lib/RT/Interface/Web_Vendor.pm @@ -254,8 +254,20 @@ sub ProcessTicketBasics { TimeLeft Type Queue + WillResolve ); + # the UI for editing WillResolve through Ticket Basics should allow + # setting it to null + my $to_date = delete($ARGSRef->{'WillResolve_Date'}); + my $DateObj = RT::Date->new($session{'CurrentUser'}); + if ( $to_date ) { + $DateObj->Set(Format => 'unknown', Value => $to_date); + } else { + $DateObj->Set(Value => 0); + } + $ARGSRef->{'WillResolve'} = $DateObj->ISO; + if ( $ARGSRef->{'Queue'} and ( $ARGSRef->{'Queue'} !~ /^(\d+)$/ ) ) { my $tempqueue = RT::Queue->new($RT::SystemUser); $tempqueue->Load( $ARGSRef->{'Queue'} ); diff --git a/rt/share/html/Ticket/Elements/EditBasics b/rt/share/html/Ticket/Elements/EditBasics index ae70bd802..e7a16620f 100755 --- a/rt/share/html/Ticket/Elements/EditBasics +++ b/rt/share/html/Ticket/Elements/EditBasics @@ -52,6 +52,7 @@ $InTable => 0 %defaults => () <%INIT> +my $WillResolveObj = $TicketObj->WillResolveObj if defined $TicketObj; unless ( @fields ) { @fields = ( { name => 'Subject', @@ -72,7 +73,10 @@ unless ( @fields ) { comp => '/Elements/SelectDate', args => { menu_prefix => 'WillResolve', - Default => $ARGS{'WillResolve'} || $TicketObj->WillResolveObj->Date, + Default => $ARGS{'WillResolve'} || + (defined($WillResolveObj) + and $WillResolveObj->Unix > 0 ? + $WillResolveObj->Date : ''), current => 0, ShowTime => 0, },