X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg%2Fsql_external.pm;h=5233c5403b7c46370b6dd2b711670c46d336083d;hb=dc83512c36dc6bea2585abada4f88d714c600e55;hp=77b5e49836425ecf0792869fe518d2f7608a57b1;hpb=e3a53cf6d4915941327a316927310586c0126d77;p=freeside.git diff --git a/FS/FS/part_pkg/sql_external.pm b/FS/FS/part_pkg/sql_external.pm index 77b5e4983..5233c5403 100644 --- a/FS/FS/part_pkg/sql_external.pm +++ b/FS/FS/part_pkg/sql_external.pm @@ -3,7 +3,7 @@ use base qw( FS::part_pkg::discount_Mixin FS::part_pkg::recur_Common ); use strict; use vars qw( %info ); -use DBI; +use FS::DBI; #use FS::Record qw(qsearch qsearchs); tie our %query_style, 'Tie::IxHash', ( @@ -44,6 +44,7 @@ our @detail_cols = ( qw(amount format duration phonenum accountcode 'default' => '', }, 'query' => { 'name' => 'SQL query', + 'type' => 'textarea', 'default' => '', }, @@ -74,10 +75,10 @@ sub calc_recur { my $price = 0; my $quantity; # can be overridden; if not we use the default - my $dbh = DBI->connect( map { $self->option($_) } + my $dbh = FS::DBI->connect( map { $self->option($_) } qw( datasrc db_username db_password ) ) - or die $DBI::errstr; + or die $FS::DBI::errstr; my $sth = $dbh->prepare( $self->option('query') ) or die $dbh->errstr; @@ -145,41 +146,9 @@ sub calc_recur { } sub cutoff_day { - my $self = shift; - my $cust_pkg = shift; - my $cust_main = $cust_pkg->cust_main; - # force it to act like a prorate package, is what this means - # because we made a distinction once between prorate and flat packages - if ( $cust_main->force_prorate_day and $cust_main->prorate_day ) { - return ( $cust_main->prorate_day ); - } - if ( $self->option('sync_bill_date',1) ) { - my $next_bill = $cust_pkg->cust_main->next_bill_date; - if ( $next_bill ) { - return (localtime($next_bill))[3]; - } else { - # This is the customer's only active package and hasn't been billed - # yet, so set the cutoff day to either today or tomorrow, whichever - # would result in a full period after rounding. - my $setup = $cust_pkg->setup; # because it's "now" - my $rounding_mode = $self->option('prorate_round_day',1); - return () if !$setup or !$rounding_mode; - my ($sec, $min, $hour, $mday, $mon, $year) = localtime($setup); - - if ( ( $rounding_mode == 1 and $hour >= 12 ) - or ( $rounding_mode == 3 and ( $sec > 0 or $min > 0 or $hour > 0 )) - ) { - # then the prorate period will be rounded down to start from - # midnight tomorrow, so the cutoff day should be the current day + - # 1. - $setup = timelocal(59,59,23,$mday,$mon,$year) + 1; - $mday = (localtime($setup))[3]; - } - # otherwise, it will be rounded up, so leave the cutoff day at today. - return $mday; - } - } - return (); + my( $self, $cust_pkg ) = @_; + my $error = FS::part_pkg::flat::cutoff_day( $self, $cust_pkg ); + return $error; } sub can_discount { 1; }