package FS::svc_dsl;
+use base qw(FS::Password_Mixin
+ FS::svc_Common);
use strict;
-use vars qw( @ISA $conf $DEBUG $me );
-use FS::Record qw( qsearch qsearchs );
+use vars qw( $conf $DEBUG $me );
+use FS::UID;
+use FS::Record qw( qsearch qsearchs dbh );
use FS::svc_Common;
-use FS::dsl_device;
use FS::dsl_note;
use FS::qual;
-@ISA = qw( FS::svc_Common );
$DEBUG = 0;
$me = '[FS::svc_dsl]';
=over 4
-=item svcnum - Primary key (assigned automatcially for new DSL))
+=item svcnum
-=item pushed - Time DSL order pushed to vendor/telco, if applicable
+Primary key (assigned automatcially for new DSL))
-=item desired_due_date - Desired Due Date
+=item pushed
-=item due_date - Due Date
+Time DSL order pushed to vendor/telco, if applicable
-=item vendor_order_id - Vendor/telco DSL order #
+=item desired_due_date
+
+Desired Due Date
+
+=item due_date
+
+Due Date
+
+=item vendor_order_id
+
+Vendor/telco DSL order #
=item vendor_order_type
Vendor/telco DSL order status (e.g. (N)ew, (A)ssigned, (R)ejected, (M)revised,
(C)ompleted, (X)cancelled, or similar)
-=item first - End-user first name
+=item first
+
+End-user first name
+
+=item last
+
+End-user last name
-=item last - End-user last name
+=item company
-=item company - End-user company name
+End-user company name
-=item phonenum - DSL Telephone Number
+=item phonenum
-=item gateway_access_number - Gateway access number, if different
+DSL Telephone Number
-=item loop_type - Loop-type - vendor/telco-specific
+=item gateway_access_number
-=item local_voice_provider - Local Voice Provider's name
+Gateway access number, if different
-=item circuitnum - Circuit #
+=item loop_type
+
+Loop-type - vendor/telco-specific
+
+=item local_voice_provider
+
+Local Voice Provider's name
+
+=item circuitnum
+
+Circuit #
=item vpi
=item vci
-=item rate_band - Rate Band
+=item rate_band
+
+Rate Band
=item isp_chg
Ikano-specific fields, do not use otherwise
-=item username - if outsourced PPPoE/RADIUS, username
+=item username
+
+if outsourced PPPoE/RADIUS, username
-=item password - if outsourced PPPoE/RADIUS, password
+=item password
-=item monitored - Order is monitored (auto-pull/sync), either Y or blank
+if outsourced PPPoE/RADIUS, password
-=item last_pull - time of last data pull from vendor/telco
+=item monitored
+
+Order is monitored (auto-pull/sync), either Y or blank
+
+=item last_pull
+
+time of last data pull from vendor/telco
=back
'sorts' => [ 'phonenum' ],
'display_weight' => 55,
'cancel_weight' => 75,
+ 'ip_field' => 'staticips',
'fields' => {
'pushed' => { label => 'Pushed',
type => 'disabled' },
=cut
-# the insert method can be inherited from FS::Record
+sub insert {
+ my $self = shift;
+ my $dbh = dbh;
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+
+ my $error = $self->SUPER::insert(@_);
+ if ( length($self->password) ) {
+ $error ||= $self->insert_password_history;
+ }
+
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+
+ $dbh->commit if $oldAutoCommit;
+ '';
+}
=item delete
=cut
+sub replace {
+ my $new = shift;
+ my $old = shift || $new->replace_old;
+ my $dbh = dbh;
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+
+ my $error = $new->SUPER::replace($old, @_);
+ if ( $old->password ne $new->password ) {
+ $error ||= $new->insert_password_history;
+ }
+
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+
+ $dbh->commit if $oldAutoCommit;
+ '';
+}
+
# the replace method can be inherited from FS::Record
=item check
=cut
-sub dsl_device {
- my $self = shift;
- qsearch('dsl_device', { 'svcnum' => $self->svcnum });
-}
-
sub predelete_hook_first {
my $self = shift;
my @exports = $self->part_svc->part_export_dsl_pull;
'';
}
+# password_history compatibility
+
+sub _password {
+ my $self = shift;
+ $self->get('password');
+}
+
+sub _password_encoding { 'plain'; }
+
=back
=head1 SEE ALSO