package FS::cust_pkg_discount;
use strict;
-use base qw( FS::Record );
-use FS::Record; # qw( qsearch qsearchs );
+use base qw( FS::otaker_Mixin FS::cust_main_Mixin FS::Record );
+use FS::Record qw( dbh qsearchs ); # qsearch );
use FS::cust_pkg;
use FS::discount;
end_date
-=item otaker
+=item usernum
-otaker
+order taker, see L<FS::access_user>
=back
=cut
-# the insert method can be inherited from FS::Record
+sub insert {
+ #my( $self, %options ) = @_;
+ my $self = shift;
+
+ local $SIG{HUP} = 'IGNORE';
+ local $SIG{INT} = 'IGNORE';
+ local $SIG{QUIT} = 'IGNORE';
+ local $SIG{TERM} = 'IGNORE';
+ local $SIG{TSTP} = 'IGNORE';
+ local $SIG{PIPE} = 'IGNORE';
+
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
+ if ( $self->discountnum == -1 ) {
+ my $discount = new FS::discount {
+ '_type' => $self->_type,
+ 'amount' => $self->amount,
+ 'percent' => $self->percent,
+ 'months' => $self->months,
+ 'setup' => $self->setup,
+ 'disabled' => 'Y',
+ };
+ my $error = $discount->insert;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+ $self->discountnum($discount->discountnum);
+ }
+
+ my $error = $self->SUPER::insert; #(@_); #(%options);
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+ '';
+
+}
=item delete
|| $self->ut_foreign_key('discountnum', 'discount', 'discountnum' )
|| $self->ut_float('months_used') #actually decimal, but this will do
|| $self->ut_numbern('end_date')
- || $self->ut_text('otaker')
+ || $self->ut_alphan('otaker')
+ || $self->ut_numbern('usernum')
+ || $self->ut_enum('disabled', [ '', 'Y' ] )
;
return $error if $error;
+ $self->usernum($FS::CurrentUser::CurrentUser->usernum) unless $self->usernum;
+
$self->SUPER::check;
}
+=item cust_pkg
+
+Returns the customer package (see L<FS::cust_pkg>).
+
+=cut
+
+sub cust_pkg {
+ my $self = shift;
+ qsearchs('cust_pkg', { 'pkgnum' => $self->pkgnum } );
+}
+
+=item discount
+
+Returns the discount (see L<FS::discount>).
+
+=cut
+
+sub discount {
+ my $self = shift;
+ qsearchs('discount', { 'discountnum' => $self->discountnum } );
+}
+
+=item increment_months_used
+
+Increments months_used by the given parameter
+
+=cut
+
+sub increment_months_used {
+ my( $self, $used ) = @_;
+ #UPDATE cust_pkg_discount SET months_used = months_used + ?
+ #leaves no history, and billing is mutexed per-customer, so the dum way is ok
+ $self->months_used( $self->months_used + $used );
+ $self->replace();
+}
+
+=item status
+
+=cut
+
+sub status {
+ my $self = shift;
+ my $discount = $self->discount;
+
+ if ( $self->disabled ne 'Y'
+ and ( ! $discount->months || $self->months_used < $discount->months )
+ #XXX also end date
+ ) {
+ 'active';
+ } else {
+ 'expired';
+ }
+}
+
+# Used by FS::Upgrade to migrate to a new database.
+sub _upgrade_data { # class method
+ my ($class, %opts) = @_;
+ $class->_upgrade_otaker(%opts);
+}
+
=back
=head1 BUGS