--- /dev/null
+package FS::realestate_property;
+use strict;
+use warnings;
+use Carp qw(croak);
+
+use base 'FS::Record';
+use FS::Record qw(qsearch qsearchs);
+
+=head1 NAME
+
+FS::realestate_property - Object representing a realestate_property record
+
+=head1 SYNOPSIS
+
+ use FS::realestate_property;
+
+ $record = new FS:realestate_property \%values;
+ $record = new FS::realestate_property {
+ title => 'Superdome',
+ address1 => '1500 Sugar Bowl Dr',
+ city => 'New Orleans',
+ state => 'LA',
+ zip => '70112',
+ disabled => 0,
+ agentnum => 1,
+ };
+
+ $error = $record->insert;
+ $error = $new_rec->replace($record)
+ $error = $record->check;
+
+ $sub_record = $record->add_subproperty('Box Seat No. 42');
+
+ @subprops = $record->subproperties;
+ @subprops = $record->enabled_subproperties;
+
+=head1 DESCRIPTION
+
+An FS::realestate_property object represents a real estate property. This
+object may represent a single property, such as a rental house. It may also
+represent a group of properties sharing a common address or identifier, such
+as a shopping mall, apartment complex, or office building.
+
+FS::realestate_property inherits from FS::Record.
+
+The following fields are currently supported:
+
+=over 4
+
+=item propnum
+
+=item agentnum
+
+=item title
+
+=item address1 *optional
+
+=item address2 *optional
+
+=item city *optional
+
+=item state *optional
+
+=item zip *optional
+
+=item disabled
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item new HASHREF (see L<FS::Record>)
+
+=cut
+
+sub table {'realestate_property';}
+
+=item insert (see L<FS::Record>)
+
+=item delete
+
+ FS::realestate_property records should never be deleted, only disabled
+
+=cut
+
+sub delete {
+ # Once this record has been associated with a customer in any way, it
+ # should not be deleted. todo perhaps, add a is_deletable function that
+ # checks if the record has ever actually been used, and allows deletion
+ # if it hasn't. (entered in error, etc).
+ croak "FS::realestate_property records should never be deleted";
+}
+
+
+=item replace OLD_RECORD (see L<FS::Record>)
+
+=item check (see L<FS::Record>)
+
+=item agent
+
+Returns the associated agent, if any, for this object
+
+=cut
+
+sub agent {
+ my $self = shift;
+ return undef unless $self->agentnum;
+ return qsearchs('agent', {agentnum => $self->agentnum} );
+}
+
+
+=item subproperties
+
+Returns all subproperties linked to this property
+
+=cut
+
+sub subproperties {
+ qsearch('realestate_subproperty', {propnum => shift->propnum} );
+}
+
+
+=item enabled_subproperties
+
+Returns all subproperties linked to this property where disabled = 0
+
+=cut
+
+sub enabled_subproperties {
+ qsearch( 'realestate_subproperty', {
+ propnum => shift->propnum,
+ disabled => 0,
+ });
+}
+
+=item add_subproperty SUBPROPERTY_TITLE
+
+Create a new subproperty record for this property
+
+=cut
+
+sub add_subproperty {
+ my ($self, $subtitle) = @_;
+ croak "add_subproperty() requires a \$subtitle parameter" unless $subtitle;
+
+ my $subp = new FS::realestate_subproperty {
+ propnum => $self->propnum,
+ subtitle => $subtitle,
+ disabled => 0,
+ };
+ my $err = $subp->insert;
+ die "Error inserting subproperty: $err" if $err;
+ $subp;
+}
+
+
+=back
+
+=head1 SUBROUTINES
+
+=over 4
+
+=cut
+
+
+=back
+
+=head1 SEE ALSO
+
+L<FS::record>, L<FS::realestate_subproperty>, L<FS::svc_realestate>
+
+=cut
+
+1;