summaryrefslogtreecommitdiff
path: root/FS/FS/part_pkg/rt_time.pm
diff options
context:
space:
mode:
Diffstat (limited to 'FS/FS/part_pkg/rt_time.pm')
-rw-r--r--FS/FS/part_pkg/rt_time.pm70
1 files changed, 70 insertions, 0 deletions
diff --git a/FS/FS/part_pkg/rt_time.pm b/FS/FS/part_pkg/rt_time.pm
new file mode 100644
index 0000000..9452d44
--- /dev/null
+++ b/FS/FS/part_pkg/rt_time.pm
@@ -0,0 +1,70 @@
+package FS::part_pkg::rt_time;
+
+use strict;
+use FS::Conf;
+use FS::Record qw(qsearchs qsearch);
+use FS::part_pkg::recur_Common;
+use Carp qw(cluck);
+
+our @ISA = qw(FS::part_pkg::recur_Common);
+
+our $DEBUG = 0;
+
+our %info = (
+ 'name' => 'Bill from Time Worked on tickets in RT',
+ 'shortname' => 'Project Billing (RT)',
+ 'weight' => 55,
+ 'fields' => {
+ 'base_rate' => { 'name' => 'Rate (per minute)',
+ 'default' => 0,
+ },
+ }
+);
+
+sub calc_setup {
+ my($self, $cust_pkg ) = @_;
+ $self->option('setup_fee');
+}
+
+sub calc_recur {
+ my $self = shift;
+ my($cust_pkg, $sdate, $details, $param ) = @_;
+
+ my $charges = 0;
+
+ $charges += $self->calc_usage(@_);
+ $charges += $self->calc_recur_Common(@_);
+
+ $charges;
+
+}
+
+sub can_discount { 0; }
+
+sub calc_cancel {
+ my $self = shift;
+ my($cust_pkg, $sdate, $details, $param ) = @_;
+
+ $self->calc_usage(@_);
+}
+
+sub calc_usage {
+ my $self = shift;
+ my($cust_pkg, $sdate, $details, $param ) = @_;
+
+ my $last_bill = $cust_pkg->get('last_bill') || $cust_pkg->get('setup');
+ my @tickets = @{ FS::TicketSystem->comments_on_tickets( $cust_pkg->custnum, 100, $last_bill ) };
+
+ my $charges = 0;
+
+ my $rate = $self->option('base_rate');
+
+ foreach my $ding ( @tickets) {
+ $charges += sprintf('%.2f', $ding->{'timetaken'} * $rate);
+ push @$details, join( ", ", ("($ding->{timetaken}) Minutes", substr($ding->{'content'},0,255)));
+ }
+ cluck $rate, $charges, @$details if $DEBUG > 0;
+ return $charges;
+}
+
+1;