[freeside-commits] branch master updated. d29b455cf176358089f98e2970beaab88195bc62

Ivan ivan at 420.am
Sun Aug 25 01:40:31 PDT 2013


The branch, master has been updated
       via  d29b455cf176358089f98e2970beaab88195bc62 (commit)
      from  60724f233fbeb9388f4b2cbb68a4e6297c2b2118 (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 d29b455cf176358089f98e2970beaab88195bc62
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Sun Aug 25 01:40:28 2013 -0700

    continue sales person work: customer and package selection, commissions, reporting.  RT#23402

diff --git a/FS/FS/part_event.pm b/FS/FS/part_event.pm
index b7371c9..a740bb8 100644
--- a/FS/FS/part_event.pm
+++ b/FS/FS/part_event.pm
@@ -583,6 +583,7 @@ sub actions {
   (
     map  { $_ => $actions{$_} }
     sort { $actions{$a}->{'default_weight'}<=>$actions{$b}->{'default_weight'} }
+       # || $actions{$a}->{'description'} cmp $actions{$b}->{'description'} }
     $class->all_actions( $eventtable )
   );
 
diff --git a/FS/FS/part_event/Action/Mixin/credit_sales_pkg_class.pm b/FS/FS/part_event/Action/Mixin/credit_sales_pkg_class.pm
index 666de13..fc7a3e3 100644
--- a/FS/FS/part_event/Action/Mixin/credit_sales_pkg_class.pm
+++ b/FS/FS/part_event/Action/Mixin/credit_sales_pkg_class.pm
@@ -3,6 +3,7 @@ use base qw( FS::part_event::Action::Mixin::credit_pkg );
 
 use strict;
 use FS::Record qw(qsearchs);
+use FS::sales_pkg_class;
 
 sub option_fields {
   my $class = shift;
diff --git a/FS/FS/part_event/Condition/pkg_age_Common.pm b/FS/FS/part_event/Condition/pkg_age_Common.pm
index 0f3b9ef..726b01d 100644
--- a/FS/FS/part_event/Condition/pkg_age_Common.pm
+++ b/FS/FS/part_event/Condition/pkg_age_Common.pm
@@ -40,7 +40,7 @@ sub option_fields {
 sub condition {
   my( $self, $cust_pkg, %opt ) = @_;
 
-  my $age = $self->option_age_from('age', $opt{'time'} );
+  my $age = $self->pkg_age_age( $cust_pkg, %opt );
 
   my $pkg_date = $cust_pkg->get( $self->option('field') );
 
@@ -48,6 +48,13 @@ sub condition {
 
 }
 
+sub pkg_age_age {
+  my( $self, $cust_pkg, %opt );
+  $self->option_age_from('age', $opt{'time'} );
+}
+
+#doesn't work if you override pkg_age_age,
+# so if you do, override this with at least a stub that returns 'true'
 sub condition_sql {
   my( $class, $table, %opt ) = @_;
   my $age   = $class->condition_sql_option_age_from('age', $opt{'time'});
diff --git a/FS/FS/part_event/Condition/pkg_age_before_sales.pm b/FS/FS/part_event/Condition/pkg_age_before_sales.pm
new file mode 100644
index 0000000..4ad56fa
--- /dev/null
+++ b/FS/FS/part_event/Condition/pkg_age_before_sales.pm
@@ -0,0 +1,58 @@
+package FS::part_event::Condition::pkg_age_before_sales;
+use base qw( FS::part_event::Condition::pkg_age_before );
+
+use strict;
+use Time::Local qw( timelocal_nocheck );
+use FS::Record qw( qsearchs );
+use FS::sales_pkg_class;
+
+sub description { 'Package age younger than sales person commission duration'; }
+
+sub option_fields {
+  my $class = shift;
+  my %option_fields = $class->SUPER::option_fields();
+
+  delete $option_fields{'age'};
+
+  $option_fields{'cust_main_sales'} = {
+    'label' => "Compare to the customer sales person if there is no package sales person",
+    'type'  => 'checkbox',
+    'value' => 'Y',
+  };
+
+  %option_fields;
+}
+
+sub pkg_age_age {
+  my( $self, $cust_pkg, %opt );
+
+  my $salesnum = $cust_pkg->salesnum;
+  $salesnum ||= $self->cust_main($cust_pkg)->salesnum
+    if $self->option('cust_main_sales');
+
+  return 0 unless $salesnum;
+
+  my $sales_pkg_class = qsearchs( 'sales_pkg_class', {
+    'salesnum' => $salesnum,
+    'classnum' => $cust_pkg->part_pkg->classnum,
+  });
+
+  my $commission_duration = $sales_pkg_class->commission_duration;
+  return 0 unless $commission_duration =~ /^\s*(\d+)\s*$/;
+
+  #false laziness w/Condition::option_age_from, but just months
+
+  my $time = $opt{'time'};
+  my ($sec,$min,$hour,$mday,$mon,$year) = (localtime($time) )[0,1,2,3,4,5];
+  $mon -= $commission_duration;
+  until ( $mon >= 0 ) { $mon += 12; $year--; }
+
+  timelocal_nocheck($sec,$min,$hour,$mday,$mon,$year);
+}
+
+#no working condition_sql for this comparison yet, don't want pkg_age_Common's
+sub condition_sql {
+  'true';
+}
+
+1;
diff --git a/FS/FS/part_event_condition.pm b/FS/FS/part_event_condition.pm
index d550680..78aa3b1 100644
--- a/FS/FS/part_event_condition.pm
+++ b/FS/FS/part_event_condition.pm
@@ -224,8 +224,7 @@ sub conditions {
   my( $class, $eventtable ) = @_;
   (
     map  { $_ => $conditions{$_} }
-#    sort { $conditions{$a}->{'default_weight'}<=>$conditions{$b}->{'default_weight'} }
-#    sort by ?
+    sort {$conditions{$a}->{'description'} cmp $conditions{$b}->{'description'}}
     $class->all_conditionnames( $eventtable )
   );
 

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

Summary of changes:
 FS/FS/part_event.pm                                |    1 +
 .../Action/Mixin/credit_sales_pkg_class.pm         |    1 +
 FS/FS/part_event/Condition/pkg_age_Common.pm       |    9 +++-
 FS/FS/part_event/Condition/pkg_age_before_sales.pm |   58 ++++++++++++++++++++
 FS/FS/part_event_condition.pm                      |    3 +-
 5 files changed, 69 insertions(+), 3 deletions(-)
 create mode 100644 FS/FS/part_event/Condition/pkg_age_before_sales.pm




More information about the freeside-commits mailing list