diff options
Diffstat (limited to 'FS/FS/part_event/Condition/cust_bill_has_service.pm')
-rw-r--r-- | FS/FS/part_event/Condition/cust_bill_has_service.pm | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/FS/FS/part_event/Condition/cust_bill_has_service.pm b/FS/FS/part_event/Condition/cust_bill_has_service.pm new file mode 100644 index 0000000..d85af26 --- /dev/null +++ b/FS/FS/part_event/Condition/cust_bill_has_service.pm @@ -0,0 +1,56 @@ +package FS::part_event::Condition::cust_bill_has_service; + +use strict; +use FS::cust_bill; + +use base qw( FS::part_event::Condition ); + +sub description { + 'Invoice is billing for a certain service type'; +} + +sub eventtable_hashref { + { 'cust_main' => 0, + 'cust_bill' => 1, + 'cust_pkg' => 0, + }; +} + +# could not find component for path '/elements/tr-select-part_svc.html' +# sub disabled { 1; } + +sub option_fields { + ( + 'has_service' => { 'label' => 'Has service', + 'type' => 'select-part_svc', + }, + ); +} + +sub condition { + #my($self, $cust_bill, %opt) = @_; + my($self, $cust_bill) = @_; + + my $servicenum = $self->option('has_service'); + grep { $servicenum == $_->svcpart } + map { $_->cust_pkg->cust_svc } + $cust_bill->cust_bill_pkg ; +} + +sub condition_sql { + my( $class, $table, %opt ) = @_; + + my $integer = $opt{'driver_name'} =~ /^mysql/ ? 'UNSIGNED INTEGER' : 'INTEGER'; + + my $servicenum = $class->condition_sql_option('has_service'); + my $sql = qq| 0 < ( SELECT COUNT(cs.svcpart) + FROM cust_bill_pkg cbp, cust_svc cs + WHERE cbp.invnum = cust_bill.invnum + AND cs.pkgnum = cbp.pkgnum + AND cs.svcpart = CAST( $servicenum AS $integer ) + ) + |; + return $sql; +} + +1; |