- qsearch({ 'table' => 'cust_credit',
- 'extra_sql' => " AND cust_credit._date >= $sdate ".
- " AND cust_credit._date < $edate ".
- $classnum_sql,
- %search,
- });
+ my @where = ( "$cmp_salesnum = $salesnum",
+ "sales_pkg_class.salesnum = $salesnum"
+ );
+
+ # sales_pkg_class number-of-months limit, grr
+ # (we should be able to just check for the cust_event record from the
+ # commission credit, but the report is supposed to act as a check on that)
+ #
+ # Pg-specific, of course
+ my $setup_date = 'TO_TIMESTAMP( cust_pkg.setup )';
+ my $interval = "(sales_pkg_class.commission_duration || ' months')::interval";
+ my $charge_date = 'TO_TIMESTAMP( cust_bill._date )';
+ push @where, "CASE WHEN sales_pkg_class.commission_duration IS NOT NULL ".
+ "THEN $charge_date < $setup_date + $interval ".
+ "ELSE TRUE END";
+
+ @where;
+}
+
+sub commission_where {
+ my $self = shift;
+ 'cust_credit.commission_salesnum = ' . $self->salesnum;
+}
+
+# slightly modify it
+sub cust_bill_pkg_search {
+ my $self = shift;
+ my $search = $self->SUPER::cust_bill_pkg_search(@_);
+ $search->{addl_from} .= '
+ JOIN sales_pkg_class ON( COALESCE(sales_pkg_class.classnum, 0) = COALESCE(part_pkg.classnum, 0) )';
+
+ return $search;