[freeside-commits] freeside/FS/FS/part_export domreg_opensrs.pm, 1.5, 1.6
Jeff Finucane,420,,
jeff at wavetail.420.am
Sun Jan 3 20:13:14 PST 2010
Update of /home/cvs/cvsroot/freeside/FS/FS/part_export
In directory wavetail.420.am:/tmp/cvs-serv16634/FS/FS/part_export
Modified Files:
domreg_opensrs.pm
Log Message:
untested triggering of export on payments, requires config enable (RT5825)
Index: domreg_opensrs.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/part_export/domreg_opensrs.pm,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- domreg_opensrs.pm 15 Jun 2009 19:41:28 -0000 1.5
+++ domreg_opensrs.pm 4 Jan 2010 04:13:11 -0000 1.6
@@ -2,6 +2,7 @@
use vars qw(@ISA %info %options $conf);
use Tie::IxHash;
+use DateTime;
use FS::Record qw(qsearchs qsearch);
use FS::Conf;
use FS::part_export::null;
@@ -50,6 +51,10 @@
},
'masterdomain' => { label => 'Master domain at OpenSRS',
},
+ 'wait_for_pay' => { label => 'Do not provision until payment is received',
+ type => 'checkbox',
+ default => '0',
+ },
'debug_level' => { label => 'Net::OpenSRS debug level',
type => 'select',
options => [ 0, 1, 2, 3 ],
@@ -213,6 +218,7 @@
return 'live' if $self->machine eq "rr-n1-tor.opensrs.net";
return 'test' if $self->machine eq "horizon.opensrs.net";
undef;
+
}
=item _export_insert
@@ -241,6 +247,19 @@
return "Unknown domain action " . $svc_domain->action;
}
+sub _export_insert_on_payment {
+ my( $self, $svc_domain ) = ( shift, shift );
+ return '' unless $self->option('wait_for_pay');
+
+ my $queue = new FS::queue {
+ 'svcnum' => $svc_domain->svcnum,
+ 'job' => 'FS::part_export::domreg_opensrs::renew_through',
+ };
+ $queue->insert( $self, $svc_domain->svcnum ); #_export_insert with 'R' action?
+
+ return '';
+}
+
## Domain registration exports do nothing on replace. Mainly because we haven't decided what they should do.
#sub _export_replace {
# my( $self, $new, $old ) = (shift, shift, shift);
@@ -454,6 +473,82 @@
return ''; # Should only get here if renewal succeeded
}
+=item renew_through [ EPOCH_DATE ]
+
+Attempts to renew the domain through the specified date. If no date is
+provided it is gleaned from the associated cust_pkg bill date
+
+Like most export functions, returns an error message on failure or undef on success.
+
+=cut
+
+sub renew_through {
+ my ( $self, $svc_domain, $date ) = @_;
+
+ eval "use Net::OpenSRS;";
+ return $@ if $@;
+
+ unless ( $date ) {
+ my $cust_pkg = $svc_domain->cust_svc->cust_pkg;
+ return "Can't renew: no date specified and domain is not in a package."
+ unless $cust_pkg;
+ $date = $cust_pkg->bill;
+ }
+
+ my $err = $self->is_supported_domain( $svc_domain );
+ return $err if $err;
+
+ my $srs = $self->get_srs;
+
+ $rv = $srs->check_transfer($svc_domain->domain);
+ return "Domain ". $svc_domain->domain. " is not renewable"
+ unless $rv->{expdate};
+
+ return "Can't parse expiration date for ". $svc_domain->domain
+ unless $rv->{expdate} =~ /^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/;
+
+ my ($year,$month,$day,$hour,$minute,$second) = ($1,$2,$3,$4,$5,$6);
+ my $exp = DateTime->new( year => $year,
+ month => $month,
+ day => $day,
+ hour => $hour,
+ minute => $minute,
+ second => $second,
+ time_zone => 'America/New_York',#timezone of opensrs
+ );
+
+ my $bill = DateTime->
+ from_epoch( 'epoch' => $date,
+ 'time_zone' => DateTime::TimeZone->new( name => 'local' ),
+ );
+
+ my $years = 0;
+ while ( DateTime->compare( $bill, $exp ) > 0 ) {
+ $years++;
+ $exp->add( 'years' => 1 );
+
+ return "Can't renew ". $svc_domain->domain. " for more than 10 years."
+ if $years > 10; #no infinite loop
+ }
+
+ $rv = $srs->make_request(
+ {
+ action => 'renew',
+ object => 'domain',
+ attributes => {
+ domain => $svc_domain->domain,
+ auto_renew => 0,
+ handle => 'process',
+ period => $years,
+ currentexpirationyear => $year,
+ }
+ }
+ );
+ return $rv->{response_text} unless $rv->{is_success};
+
+ return ''; # Should only get here if renewal succeeded
+}
+
=item revoke
Attempts to revoke the domain registration. Only succeeds if invoked during the OpenSRS
More information about the freeside-commits
mailing list