warn " inserting $self\n"
if $DEBUG > 1;
+ $self->signupdate(time) unless $self->signupdate;
+
my $error = $self->SUPER::insert;
if ( $error ) {
$dbh->rollback if $oldAutoCommit;
|| $self->ut_number('refnum')
|| $self->ut_name('last')
|| $self->ut_name('first')
+ || $self->ut_snumbern('birthdate')
+ || $self->ut_snumbern('signupdate')
|| $self->ut_textn('company')
|| $self->ut_text('address1')
|| $self->ut_textn('address2')
sub suspend {
my $self = shift;
- grep { $_->suspend } $self->unsuspended_pkgs;
+ grep { $_->suspend(@_) } $self->unsuspended_pkgs;
}
=item suspend_if_pkgpart PKGPART [ , PKGPART ... ]
sub suspend_if_pkgpart {
my $self = shift;
- my @pkgparts = @_;
- grep { $_->suspend }
+ my (@pkgparts, %opt);
+ if (ref($_[0]) eq 'HASH'){
+ @pkgparts = @{$_[0]{pkgparts}};
+ %opt = %{$_[0]};
+ }else{
+ @pkgparts = @_;
+ }
+ grep { $_->suspend(%opt) }
grep { my $pkgpart = $_->pkgpart; grep { $pkgpart eq $_ } @pkgparts }
$self->unsuspended_pkgs;
}
sub suspend_unless_pkgpart {
my $self = shift;
- my @pkgparts = @_;
- grep { $_->suspend }
+ my (@pkgparts, %opt);
+ if (ref($_[0]) eq 'HASH'){
+ @pkgparts = @{$_[0]{pkgparts}};
+ %opt = %{$_[0]};
+ }else{
+ @pkgparts = @_;
+ }
+ grep { $_->suspend(%opt) }
grep { my $pkgpart = $_->pkgpart; ! grep { $pkgpart eq $_ } @pkgparts }
$self->unsuspended_pkgs;
}
$content{customer_ip} = $payip
if length($payip);
+ $content{invoice_number} = $options{'invnum'}
+ if exists($options{'payip'}) && length($options{'invnum'});
+
if ( $method eq 'CC' ) {
$content{card_number} = $payinfo;
'action' => $action1,
'description' => $options{'description'},
'amount' => $amount,
- 'invoice_number' => $options{'invnum'},
+ #'invoice_number' => $options{'invnum'},
'customer_id' => $self->custnum,
'last_name' => $paylast,
'first_name' => $payfirst,
check_and_rebuild_fuzzyfiles();
foreach my $field ( keys %$fuzzy ) {
+
+ my $all = $self->all_X($field);
+ next unless scalar(@$all);
+
my %match = ();
- $match{$_}=1 foreach ( amatch( $fuzzy->{$field},
- ['i'],
- @{ $self->all_X($field) }
- )
- );
+ $match{$_}=1 foreach ( amatch( $fuzzy->{$field}, ['i'], @$all ) );
my @fcust = ();
foreach ( keys %match ) {
Accepts the following options: I<search>, the string to search for. The string
will be searched for as a customer number, phone number, name or company name,
-first searching for an exact match then fuzzy and substring matches (in some
-cases - see the source code for the exact heuristics used).
+as an exact, or, in some cases, a substring or fuzzy match (see the source code
+for the exact heuristics used).
-Any additional options treated as an additional qualifier on the search
+Any additional options are treated as an additional qualifier on the search
(i.e. I<agentnum>).
Returns a (possibly empty) array of FS::cust_main objects.
'extra_sql' => "$sql AND $agentnums_sql", #agent virtualization
} );
- unless ( @cust_main ) { #no exact match, trying substring/fuzzy
+ #always do substring & fuzzy,
+ #getting complains searches are not returning enough
+ #unless ( @cust_main ) { #no exact match, trying substring/fuzzy
#still some false laziness w/ search/cust_main.cgi
FS::cust_main->fuzzy_search( { $field => $value }, @fuzopts );
}
- }
+ #}
#eliminate duplicates
my %saw = ();
my @svc_acct = ();
if ( $svc_acct{'username'} ) {
- $svc_acct{svcpart} = $cust_pkg->part_pkg->svcpart( 'svc_acct' );
+ my $part_pkg = $cust_pkg->part_pkg;
+ unless ( $part_pkg ) {
+ $dbh->rollback if $oldAutoCommit;
+ return "unknown pkgnum ". $cust_pkg{'pkgpart'};
+ }
+ $svc_acct{svcpart} = $part_pkg->svcpart( 'svc_acct' );
push @svc_acct, new FS::svc_acct ( \%svc_acct )
}
payinfo_masked false laziness with cust_pay.pm and cust_refund.pm
+Birthdates rely on negative epoch values.
+
=head1 SEE ALSO
L<FS::Record>, L<FS::cust_pkg>, L<FS::cust_bill>, L<FS::cust_credit>