[freeside-commits] branch master updated. 74d699971acf29b125dd63b1a9571fad1517bcc6

Ivan Kohler ivan at freeside.biz
Fri Nov 9 12:37:02 PST 2018


The branch, master has been updated
       via  74d699971acf29b125dd63b1a9571fad1517bcc6 (commit)
       via  bb7e827141c9ed68f30765c9ca2ddcd1d760ad2d (commit)
      from  9a9eb2c2fcda78be903c418239b9a51b18c51d33 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 74d699971acf29b125dd63b1a9571fad1517bcc6
Merge: bb7e82714 9a9eb2c2f
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Fri Nov 9 12:36:57 2018 -0800

    Merge branch 'master' of git.freeside.biz:/home/git/freeside


commit bb7e827141c9ed68f30765c9ca2ddcd1d760ad2d
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Fri Nov 9 12:36:52 2018 -0800

    delete fees, RT#81713

diff --git a/FS/FS/AccessRight.pm b/FS/FS/AccessRight.pm
index 2024d948d..87836279f 100644
--- a/FS/FS/AccessRight.pm
+++ b/FS/FS/AccessRight.pm
@@ -352,6 +352,7 @@ tie my %rights, 'Tie::IxHash',
     { rightname=>'Import', global=>1 }, #some of these are ag-virt'ed now?  give em their own ACLs
     { rightname=>'Export', global=>1 },
     { rightname=> 'Edit rating data', desc=>'Delete CDRs', global=>1 },
+    { rightname=>'Delete fees', },
   #],
   #
   ###
@@ -471,6 +472,7 @@ sub default_superuser_rights {
     'Backdate credit',
     'View legacy typeset statments',
     'Detach customer package',
+    'Delete fees',
   );
 
   no warnings 'uninitialized';
diff --git a/FS/FS/cust_bill_pkg.pm b/FS/FS/cust_bill_pkg.pm
index 1262c3874..d0d62bd6a 100644
--- a/FS/FS/cust_bill_pkg.pm
+++ b/FS/FS/cust_bill_pkg.pm
@@ -491,6 +491,20 @@ sub delete {
     }
   }
 
+  #fix the invoice amount
+
+  my $cust_bill = $self->cust_bill;
+  $cust_bill->charged( $cust_bill->charged - $self->setup - $self->recur );
+
+  #not adding a cc surcharge, but this override lets us modify charged
+  $cust_bill->{'Hash'}{'cc_surcharge_replace_hack'} = 1;
+
+  my $error = $cust_bill->replace;
+  if ( $error ) {
+    $dbh->rollback if $oldAutoCommit;
+    return $error;
+  }
+
   my $error = $self->SUPER::delete(@_);
   if ( $error ) {
     $dbh->rollback if $oldAutoCommit;
diff --git a/FS/FS/cust_event_fee.pm b/FS/FS/cust_event_fee.pm
index 7b448dd18..1896b52c9 100644
--- a/FS/FS/cust_event_fee.pm
+++ b/FS/FS/cust_event_fee.pm
@@ -3,6 +3,7 @@ use base qw( FS::cust_main_Mixin FS::Record FS::FeeOrigin_Mixin );
 
 use strict;
 use FS::Record qw( qsearch dbh );
+use FS::cust_event;
 
 =head1 NAME
 
@@ -72,6 +73,36 @@ otherwise returns false.
 
 Delete this record from the database.
 
+=cut
+
+sub delete {
+  my $self = shift;
+
+  my $oldAutoCommit = $FS::UID::AutoCommit;
+  local $FS::UID::AutoCommit = 0;
+  my $dbh = dbh;
+
+  my $cust_bill_pkg = $self->cust_bill_pkg;
+  if ( $cust_bill_pkg ) {
+    my $error = $cust_bill_pkg->delete;
+    if ( $error ) {
+      $dbh->rollback if $oldAutoCommit;
+      return $error;
+    }
+  }
+
+  my $error = $self->SUPER::delete;
+  if ( $error ) {
+    $dbh->rollback if $oldAutoCommit;
+    return $error;
+  }
+
+  $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+
+  '';
+
+}
+
 =item replace OLD_RECORD
 
 Replaces the OLD_RECORD with this one in the database.  If there is an error,
@@ -194,10 +225,84 @@ sub cust_pkg {
   }
 }
 
+=item search_sql_where
+
+=cut
+
+sub search_sql_where {
+  my($class, $param) = @_;
+
+  my $where = FS::cust_event->search_sql_where( $param );
+
+  if ( $param->{'billpkgnum'} eq 'NULL' ) {
+    $where .= ' AND billpkgnum IS NULL';
+  } elsif ( $param->{'billpkgnum'} eq 'NOT NULL' ) {
+    $where .= ' AND billpkgnum IS NOT NULL';
+  }
+
+  $where;
+
+}
+
+=item join_sql
+
+=cut
+
+sub join_sql {
+  #my $class = shift;
+
+  ' LEFT JOIN cust_event USING (eventnum)
+    LEFT JOIN cust_bill_pkg USING (billpkgnum)
+    LEFT JOIN cust_bill AS fee_cust_bill USING (invnum)
+    LEFT JOIN part_fee ON (cust_event_fee.feepart = part_fee.feepart )
+  '. FS::cust_event->join_sql();
+
+}
+
 =back
 
+=head1 SUBROUTINES
+
+=over 4
+
+=item process_delete
+
 =cut
 
+sub process_delete {
+  my( $job, $param ) = @_;
+
+  my $search_sql = FS::cust_event_fee->search_sql_where($param);
+  my $where = $search_sql ? " WHERE $search_sql" : '';
+
+  my @cust_event_fee = qsearch({
+    'table'     => 'cust_event_fee',
+    'addl_from' => FS::cust_event_fee->join_sql(),
+    'hashref'   => {},
+    'extra_sql' => $where,
+  });
+
+  my( $num, $last, $min_sec ) = (0, time, 5); #progresbar foo
+  foreach my $cust_event_fee ( @cust_event_fee ) {
+
+    my $error = $cust_event_fee->delete;
+    die $error if $error;
+
+    if ( $job ) { #progressbar foo
+      $num++;
+      if ( time - $min_sec > $last ) {
+        my $error = $job->update_statustext(
+          int( 100 * $num / scalar(@cust_event_fee) )
+        );
+        die $error if $error;
+        $last = time;
+      }
+    }
+
+  }
+
+}
+
 sub _upgrade_schema {
   my ($class, %opts) = @_;
 
diff --git a/httemplate/misc/delete_fees.cgi b/httemplate/misc/delete_fees.cgi
new file mode 100644
index 000000000..834479765
--- /dev/null
+++ b/httemplate/misc/delete_fees.cgi
@@ -0,0 +1,9 @@
+<% $server->process %>
+<%init>
+
+die "access denied"
+  unless $FS::CurrentUser::CurrentUser->access_right('Delete fees');
+
+my $server = new FS::UI::Web::JSRPC 'FS::cust_event_fee::process_delete', $cgi; 
+
+</%init>
diff --git a/httemplate/search/cust_event_fee.html b/httemplate/search/cust_event_fee.html
index d21a3c3d1..242eed22d 100644
--- a/httemplate/search/cust_event_fee.html
+++ b/httemplate/search/cust_event_fee.html
@@ -73,7 +73,7 @@ my $link_cust = sub {
 </%once>
 <%shared>
 my @scalars = qw(); #qw( agentnum status custnum invnum pkgnum failed );
-my @lists = qw( eventpart );
+my @lists = qw( eventpart billpkgnum );
 my %search;
 </%shared>
 <%init>
@@ -97,20 +97,9 @@ my($beginning, $ending) = FS::UI::Web::parse_beginning_ending($cgi);
 $search{'beginning'} = $beginning;
 $search{'ending'}    = $ending;
 
-my $where = ' WHERE '. FS::cust_event->search_sql_where( \%search );
+my $where = ' WHERE '. FS::cust_event_fee->search_sql_where( \%search );
 
-if ( $cgi->param('billpkgnum') eq 'NULL' ) {
-  $where .= ' AND billpkgnum IS NULL';
-} elsif ( $cgi->param('billpkgnum') eq 'NOT NULL' ) {
-  $where .= ' AND billpkgnum IS NOT NULL';
-}
-
-my $join = '
-  LEFT JOIN cust_event USING (eventnum)
-  LEFT JOIN cust_bill_pkg USING (billpkgnum)
-  LEFT JOIN cust_bill AS fee_cust_bill USING (invnum)
-  LEFT JOIN part_fee ON (cust_event_fee.feepart = part_fee.feepart )
-  '. FS::cust_event->join_sql();
+my $join = FS::cust_event_fee->join_sql();
 
 my $sql_query = {
   'table'     => 'cust_event_fee',
@@ -131,40 +120,26 @@ my $sql_query = {
 };
 
 my $count_sql = "SELECT COUNT(*) FROM cust_event_fee $join $where";
-warn join(',', FS::UI::Web::cust_sql_fields() );
 
 my $conf = new FS::Conf;
 
 my $menubar = [];
-
-if ( $curuser->access_right('Delete fees') ) {
-
-#XXX delete fee link
-
-#  push @$menubar, 'Re-print these events' =>
-#                    "javascript:confirm_print_process()",
-#                  'Re-email these events' =>
-#                    "javascript:confirm_email_process()",
-#                ;
-#
-#  push @$menubar, 'Re-fax these events' =>
-#                    "javascript:confirm_fax_process()"
-#    if $conf->exists('hylafax');
-
-}
+push @$menubar, 'Delete these fees' => "javascript:confirm_delete_fees()"
+  if $curuser->access_right('Delete fees');
 
 </%init>
 <%def .init>
-% # action is part of the target URL, don't need to pass it as a param
-% foreach my $action (qw(print email fax)) {
 <& /elements/progress-init.html,
-  $action.'_form',
+  'delete_fees_form',
   [ @scalars, @lists, 'beginning', 'ending' ],
-  "../misc/${action}_events.cgi",
-  { 'message' => "Invoices re-${action}ed" }, #would be nice to show the number of them, but...
-  $action.'_', #key
+  "../misc/delete_fees.cgi",
+  { 'message' => 'Fees deleted', #would be nice to show the number of them...
+    #what we were just displaying is gone, so where to go?
+    # woudl be nice to not keep displaying the deleted data
+    #'url'     => 
+  },
 &>
-<FORM NAME="<% $action %>_form">
+<FORM NAME="delete_fees_form">
 %   foreach my $param (@scalars, 'beginning', 'ending') {
   <INPUT TYPE="hidden" NAME="<% $param %>" VALUE="<% $search{$param} |h %>">
 %   }
@@ -174,26 +149,14 @@ if ( $curuser->access_right('Delete fees') ) {
 %     }
 %   }
 </FORM>
-% } # foreach $action
 <SCRIPT TYPE="text/javascript">
 
-function confirm_print_process() {
-  if ( ! confirm("Are you sure you want to reprint these invoices?") ) {
+function confirm_delete_fees() {
+  if ( ! confirm("Are you sure you want to delete these fees?") ) {
     return;
   }
-  print_process();
-}
-function confirm_email_process() {
-  if ( ! confirm("Are you sure you want to re-email these invoices?") ) {
-    return;
-  }
-  email_process();
-}
-function confirm_fax_process() {
-  if ( ! confirm("Are you sure you want to re-fax these invoices?") ) {
-    return;
-  }
-  fax_process();
+  process();
 }
+
 </SCRIPT>
 </%def>

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/AccessRight.pm                  |   2 +
 FS/FS/cust_bill_pkg.pm                |  14 +++++
 FS/FS/cust_event_fee.pm               | 105 ++++++++++++++++++++++++++++++++++
 httemplate/misc/delete_fees.cgi       |   9 +++
 httemplate/search/cust_event_fee.html |  71 ++++++-----------------
 5 files changed, 147 insertions(+), 54 deletions(-)
 create mode 100644 httemplate/misc/delete_fees.cgi




More information about the freeside-commits mailing list