[freeside-commits] branch master updated. 948b9b8b79874f68bfe24f32035ce0d259da2a31

Jonathan Prykop jonathan at 420.am
Fri Jun 3 22:19:02 PDT 2016


The branch, master has been updated
       via  948b9b8b79874f68bfe24f32035ce0d259da2a31 (commit)
       via  a61d2e97a458b63f9fefb2099b3845a6a9e4622f (commit)
      from  bde60d15eb42797e210e681eaf1318f7608042c0 (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 948b9b8b79874f68bfe24f32035ce0d259da2a31
Author: Jonathan Prykop <jonathan at freeside.biz>
Date:   Sat Jun 4 00:18:16 2016 -0500

    RT#42043: Check for cancelled packages with a cancellation date age option [hasnt cancelled conditions]

diff --git a/FS/FS/part_event/Condition/hasnt_pkg_class_cancelled.pm b/FS/FS/part_event/Condition/hasnt_pkg_class_cancelled.pm
new file mode 100644
index 0000000..353e646
--- /dev/null
+++ b/FS/FS/part_event/Condition/hasnt_pkg_class_cancelled.pm
@@ -0,0 +1,44 @@
+package FS::part_event::Condition::hasnt_pkg_class_cancelled;
+use base qw( FS::part_event::Condition );
+
+use strict;
+
+sub description {
+  'Customer does not have canceled package with class';
+}
+
+sub eventtable_hashref {
+    { 'cust_main' => 1,
+      'cust_bill' => 1,
+      'cust_pkg'  => 1,
+    };
+}
+
+#something like this
+sub option_fields {
+  (
+    'pkgclass'  => { 'label'    => 'Package Class',
+                     'type'     => 'select-pkg_class',
+                     'multiple' => 1,
+                   },
+    'age'       => { 'label'      => 'Cancellation in last',
+                     'type'       => 'freq',
+                   },
+  );
+}
+
+sub condition {
+  my( $self, $object, %opt ) = @_;
+
+  my $cust_main = $self->cust_main($object);
+
+  my $age = $self->option_age_from('age', $opt{'time'} );
+
+  #XXX test
+  my $hashref = $self->option('pkgclass') || {};
+  ! grep { $hashref->{ $_->part_pkg->classnum } && $_->get('cancel') > $age }
+    $cust_main->cancelled_pkgs;
+}
+
+1;
+
diff --git a/FS/FS/part_event/Condition/hasnt_pkgpart_cancelled.pm b/FS/FS/part_event/Condition/hasnt_pkgpart_cancelled.pm
new file mode 100644
index 0000000..b4ff6c3
--- /dev/null
+++ b/FS/FS/part_event/Condition/hasnt_pkgpart_cancelled.pm
@@ -0,0 +1,46 @@
+package FS::part_event::Condition::hasnt_pkgpart_cancelled;
+use base qw( FS::part_event::Condition );
+
+use strict;
+
+sub description { 'Customer does not have canceled specific package(s)'; }
+
+sub eventtable_hashref {
+    { 'cust_main' => 1,
+      'cust_bill' => 1,
+      'cust_pkg'  => 1,
+    };
+}
+
+sub option_fields {
+  ( 
+    'if_pkgpart' => { 'label'    => 'Packages: ',
+                      'type'     => 'select-part_pkg',
+                      'multiple' => 1,
+                    },
+    'age'        => { 'label'      => 'Cancellation in last',
+                      'type'       => 'freq',
+                    },
+  );
+}
+
+sub condition {
+  my( $self, $object, %opt ) = @_;
+
+  my $cust_main = $self->cust_main($object);
+
+  my $age = $self->option_age_from('age', $opt{'time'} );
+
+  my $if_pkgpart = $self->option('if_pkgpart') || {};
+  ! grep { $if_pkgpart->{ $_->pkgpart } && $_->get('cancel') > $age }
+    $cust_main->cancelled_pkgs;
+
+}
+
+#XXX 
+#sub condition_sql {
+#
+#}
+
+1;
+

commit a61d2e97a458b63f9fefb2099b3845a6a9e4622f
Author: Jonathan Prykop <jonathan at freeside.biz>
Date:   Sat Jun 4 00:16:52 2016 -0500

    RT#42043: Check for cancelled packages with a cancellation date age option [cancelled_pkgs sub, master only, already on v3/4]

diff --git a/FS/FS/cust_main/Packages.pm b/FS/FS/cust_main/Packages.pm
index fc5927c..89d25d2 100644
--- a/FS/FS/cust_main/Packages.pm
+++ b/FS/FS/cust_main/Packages.pm
@@ -500,6 +500,26 @@ sub ncancelled_pkgs {
 
 }
 
+=item cancelled_pkgs [ EXTRA_QSEARCH_PARAMS_HASHREF ]
+
+Returns all cancelled packages (see L<FS::cust_pkg>) for this customer.
+
+=cut
+
+sub cancelled_pkgs {
+  my $self = shift;
+  my $extra_qsearch = ref($_[0]) ? shift : { @_ };
+
+  return $self->num_cancelled_pkgs($extra_qsearch) unless wantarray;
+
+  $extra_qsearch->{'extra_sql'} .=
+    ' AND cust_pkg.cancel IS NOT NULL AND cust_pkg.cancel > 0 ';
+
+  local($skip_label_sort) = 1 if $extra_qsearch->{skip_label_sort};
+
+  sort sort_packages $self->_cust_pkg($extra_qsearch);
+}
+
 sub _cust_pkg {
   my $self = shift;
   my $extra_qsearch = ref($_[0]) ? shift : {};

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

Summary of changes:
 FS/FS/cust_main/Packages.pm                        |   20 ++++++++++++++++++++
 ...s_cancelled.pm => hasnt_pkg_class_cancelled.pm} |    9 +++++----
 ...art_cancelled.pm => hasnt_pkgpart_cancelled.pm} |    9 +++++----
 3 files changed, 30 insertions(+), 8 deletions(-)
 copy FS/FS/part_event/Condition/{has_pkg_class_cancelled.pm => hasnt_pkg_class_cancelled.pm} (73%)
 copy FS/FS/part_event/Condition/{has_pkgpart_cancelled.pm => hasnt_pkgpart_cancelled.pm} (74%)




More information about the freeside-commits mailing list