diff options
author | jeff <jeff> | 2010-01-04 04:13:11 +0000 |
---|---|---|
committer | jeff <jeff> | 2010-01-04 04:13:11 +0000 |
commit | a5cda9b76146da5c3a2c4f5c706c0b7a093a17ca (patch) | |
tree | 1b719767ab887c71f0990c9b6dcb0e49adb7a7d5 /bin/opensrs_domain_pkgs | |
parent | 551eccdc359883b2a78edf8672b4766000876650 (diff) |
untested triggering of export on payments, requires config enable (RT5825)
Diffstat (limited to 'bin/opensrs_domain_pkgs')
-rwxr-xr-x | bin/opensrs_domain_pkgs | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/bin/opensrs_domain_pkgs b/bin/opensrs_domain_pkgs new file mode 100755 index 000000000..ae1476104 --- /dev/null +++ b/bin/opensrs_domain_pkgs @@ -0,0 +1,126 @@ +#!/usr/bin/perl -w + +use strict; +use DateTime; +use Date::Format; +use Date::Parse; +use Net::OpenSRS; +use Net::Whois::Raw; +use Data::Dumper; +use FS::UID qw(adminsuidsetup); +use FS::Record qw(qsearchs qsearch); +use FS::Conf; +use FS::svc_domain; +use FS::part_pkg; +use FS::part_export; + +my $exportnum = 1; +my $pkgpart = 631; +my $user = 'qis'; + +adminsuidsetup $user; + +my $part_export = qsearchs('part_export' => { exportnum => $exportnum }) + or die "can't find export $exportnum\n"; + +my $srs = $part_export->get_srs; + +my $rv = $srs->make_request( + { + action => 'get_domains_by_expiredate', + object => 'domain', + attributes => { + exp_from => time2str('%Y-%m-%d', time() - 4*24*60*60), + exp_to => time2str('%Y-%m-%d', time() + 10*366*24*60*60), + limit => 10000, + } + } +); + +die $rv->{response_text} unless $rv->{is_success}; + +my %domains = map { $_->{name}, $_ } @{ $rv->{attributes}->{exp_domains} }; + +# each is of form +# { +# 'f_let_expire' => 'N', +# 'name' => 'wolfecpa.com', +# 'f_auto_renew' => 'N', +# 'expiredate' => '2017-09-16 04:00:00' +# }, + +foreach my $svc_domain ( $part_export->svc_x ) { + unless ( exists($domains{$svc_domain->domain}) ) { + warn $svc_domain->domain. " not at registrar. No action taken.\n"; + next; + } + + $domains{$svc_domain->domain}{seen} = 1; + + unless ( $domains{$svc_domain->domain}{expiredate} =~ + /^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/ ) + { + warn "Can't parse expiration date for ". $svc_domain->domain. " skipping\n"; + next; + } + + 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 $expiretime = $exp->epoch; + + my $error = $part_export->is_supported_domain($svc_domain); + warn $error if $error; + $error = undef; + + my $create = ''; + my $whois = whois($svc_domain->domain); + $whois =~ /Record created on (\d{1,2}-\w{3}-\d{4})\./ && ($create = $1); + my $createtime = str2time($create); + + unless ($createtime) { + $exp->subtract( 'years' => 1 ); + $createtime = $exp->epoch; + } + + my $new; + my $cust_svc = $svc_domain->cust_svc; + my $cust_pkg = $cust_svc->cust_pkg; + unless ($cust_pkg) { + warn $svc_domain->domain. " not linked to package. No action taken.\n"; + next; + } + + foreach my $pkg ( grep { $_->pkgpart == $pkgpart } $cust_pkg->cust_main->ncancelled_pkgs ) { + next if $pkg->cust_svc; # only handles simple 1 domain/package case + $cust_svc->pkgnum($pkg->pkgnum); + $error = $cust_svc->replace; + die "error linking to empty package: $error\n" if $error; + $cust_pkg = $pkg; + last; + } + + unless ($cust_pkg->pkgpart == $pkgpart) { + $new = new FS::cust_pkg + { custnum => $cust_pkg->custnum, pkgpart => $pkgpart }; + my $error = $new->insert; + die "error inserting package: $error\n" if $error; + $cust_svc->pkgnum($new->pkgnum); + $error = $cust_svc->replace; + die "error linking to new package: $error\n" if $error; + $cust_pkg = $new; + } + + # set dates on package if it was empty? + $cust_pkg->bill($expiretime); + $cust_pkg->setup($createtime); + $error = $cust_pkg->replace; + die $error if $error; +} + |