summaryrefslogtreecommitdiff
path: root/FS/FS/prospect_main.pm
diff options
context:
space:
mode:
authorivan <ivan>2009-12-28 19:20:25 +0000
committerivan <ivan>2009-12-28 19:20:25 +0000
commit03ceab71dad1e5eb366865d304e5e459cc905ce4 (patch)
tree18b4532289a0237ae694b1ad5c033b25f448bd7c /FS/FS/prospect_main.pm
parent5950a980cef4968ac59ca8041d2204e6d98e7a3d (diff)
beginning of prospect/CRM/contact work
Diffstat (limited to 'FS/FS/prospect_main.pm')
-rw-r--r--FS/FS/prospect_main.pm292
1 files changed, 292 insertions, 0 deletions
diff --git a/FS/FS/prospect_main.pm b/FS/FS/prospect_main.pm
new file mode 100644
index 0000000..369029b
--- /dev/null
+++ b/FS/FS/prospect_main.pm
@@ -0,0 +1,292 @@
+package FS::prospect_main;
+
+use strict;
+use base qw( FS::o2m_Common FS::Record );
+use vars qw( $DEBUG );
+use Scalar::Util qw( blessed );
+use FS::Record qw( dbh qsearch ); #qsearchs );
+use FS::agent;
+use FS::cust_location;
+use FS::contact;
+
+$DEBUG = 0;
+
+=head1 NAME
+
+FS::prospect_main - Object methods for prospect_main records
+
+=head1 SYNOPSIS
+
+ use FS::prospect_main;
+
+ $record = new FS::prospect_main \%hash;
+ $record = new FS::prospect_main { 'column' => 'value' };
+
+ $error = $record->insert;
+
+ $error = $new_record->replace($old_record);
+
+ $error = $record->delete;
+
+ $error = $record->check;
+
+=head1 DESCRIPTION
+
+An FS::prospect_main object represents a prospect. FS::prospect_main inherits
+from FS::Record. The following fields are currently supported:
+
+=over 4
+
+=item prospectnum
+
+primary key
+
+=item company
+
+company
+
+=item locationnum
+
+locationnum
+
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item new HASHREF
+
+Creates a new prospect. To add the prospect to the database, see L<"insert">.
+
+Note that this stores the hash reference, not a distinct copy of the hash it
+points to. You can ask the object for a copy with the I<hash> method.
+
+=cut
+
+sub table { 'prospect_main'; }
+
+=item insert
+
+Adds this record to the database. If there is an error, returns the error,
+otherwise returns false.
+
+=cut
+
+sub insert {
+ my $self = shift;
+ my %options = @_;
+ warn "FS::prospect_main::insert called on $self with options ".
+ join(', ', map "$_=>$options{$_}", keys %options)
+ if $DEBUG;
+
+ local $SIG{HUP} = 'IGNORE';
+ local $SIG{INT} = 'IGNORE';
+ local $SIG{QUIT} = 'IGNORE';
+ local $SIG{TERM} = 'IGNORE';
+ local $SIG{TSTP} = 'IGNORE';
+ local $SIG{PIPE} = 'IGNORE';
+
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
+ warn " inserting prospect_main record" if $DEBUG;
+ my $error = $self->SUPER::insert;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+
+ if ( $options{'cust_location'} ) {
+ warn " inserting cust_location record" if $DEBUG;
+ my $cust_location = $options{'cust_location'};
+ $cust_location->prospectnum($self->prospectnum);
+ $error = $cust_location->insert;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+ }
+
+ warn " commiting transaction" if $DEBUG;
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+
+ '';
+}
+
+=item delete
+
+Delete this record from the database.
+
+=cut
+
+#delete dangling locations?
+
+=item replace OLD_RECORD
+
+Replaces the OLD_RECORD with this one in the database. If there is an error,
+returns the error, otherwise returns false.
+
+=cut
+
+sub replace {
+ my $new = shift;
+
+ my $old = ( blessed($_[0]) && $_[0]->isa('FS::Record') )
+ ? shift
+ : $new->replace_old;
+
+ my %options = @_;
+
+ warn "FS::prospect_main::replace called on $new to replace $old with options".
+ " ". join(', ', map "$_ => ". $options{$_}, keys %options)
+ if $DEBUG;
+
+ local $SIG{HUP} = 'IGNORE';
+ local $SIG{INT} = 'IGNORE';
+ local $SIG{QUIT} = 'IGNORE';
+ local $SIG{TERM} = 'IGNORE';
+ local $SIG{TSTP} = 'IGNORE';
+ local $SIG{PIPE} = 'IGNORE';
+
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
+ warn " replacing prospect_main record" if $DEBUG;
+ my $error = $new->SUPER::replace($old);
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+
+ if ( $options{'cust_location'} ) {
+ my $cust_location = $options{'cust_location'};
+ $cust_location->prospectnum($new->prospectnum);
+ my $method = $cust_location->locationnum ? 'replace' : 'insert';
+ warn " ${method}ing cust_location record" if $DEBUG;
+ $error = $cust_location->$method();
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+ } elsif ( exists($options{'cust_location'}) ) {
+ foreach my $cust_location (
+ qsearch('cust_location', { 'prospectnum' => $new->prospectnum } )
+ ) {
+ $error = $cust_location->delete();
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+ }
+ }
+
+ warn " commiting transaction" if $DEBUG;
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+
+ '';
+}
+
+=item check
+
+Checks all fields to make sure this is a valid prospect. If there is
+an error, returns the error, otherwise returns false. Called by the insert
+and replace methods.
+
+=cut
+
+sub check {
+ my $self = shift;
+
+ my $error =
+ $self->ut_numbern('prospectnum')
+ || $self->ut_foreign_key('agentnum', 'agent', 'agentnum' )
+ || $self->ut_text('company')
+ ;
+ return $error if $error;
+
+ $self->SUPER::check;
+}
+
+=item contact
+
+Returns the contacts (see L<FS::contact>) associated with this prospect.
+
+=cut
+
+sub contact {
+ my $self = shift;
+ qsearch( 'contact', { 'prospectnum' => $self->prospectnum } );
+}
+
+=item search HASHREF
+
+(Class method)
+
+Returns a qsearch hash expression to search for the parameters specified in
+HASHREF. Valid parameters are:
+
+=over 4
+
+=item agentnum
+
+=back
+
+=cut
+
+sub search {
+ my( $class, $params ) = @_;
+
+ my @where = ();
+ my $orderby;
+
+ ##
+ # parse agent
+ ##
+
+ if ( $params->{'agentnum'} =~ /^(\d+)$/ and $1 ) {
+ push @where,
+ "prospect_main.agentnum = $1";
+ }
+
+ ##
+ # setup queries, subs, etc. for the search
+ ##
+
+ $orderby ||= 'ORDER BY prospectnum';
+
+ # here is the agent virtualization
+ push @where, $FS::CurrentUser::CurrentUser->agentnums_sql;
+
+ my $extra_sql = scalar(@where) ? ' WHERE '. join(' AND ', @where) : '';
+
+ my $count_query = "SELECT COUNT(*) FROM prospect_main $extra_sql";
+
+ my $sql_query = {
+ 'table' => 'prospect_main',
+ #'select' => $select,
+ 'hashref' => {},
+ 'extra_sql' => $extra_sql,
+ 'order_by' => $orderby,
+ 'count_query' => $count_query,
+ #'extra_headers' => \@extra_headers,
+ #'extra_fields' => \@extra_fields,
+ };
+
+}
+
+=back
+
+=head1 BUGS
+
+=head1 SEE ALSO
+
+L<FS::Record>, schema.html from the base documentation.
+
+=cut
+
+1;
+