rt# 74031 implementing svc_realestate
authorMitch Jackson <mitch@freeside.biz>
Tue, 19 Dec 2017 19:09:13 +0000 (13:09 -0600)
committerMitch Jackson <mitch@freeside.biz>
Tue, 19 Dec 2017 23:15:18 +0000 (17:15 -0600)
 - updated schema
 - updated includes
 - begin writing FS::svc_realestate.pm
 - progress adding a "Real estate unit" selection to
   provision a real estate service

FS/FS/Mason.pm
FS/FS/Schema.pm
FS/FS/h_svc_realestate.pm [new file with mode: 0644]
FS/FS/part_svc_column.pm
FS/FS/svc_realestate.pm [new file with mode: 0644]
httemplate/docs/part_svc-table.html
httemplate/edit/elements/part_svc_column.html
httemplate/edit/part_svc.cgi

index 068f5b6..cbfeca0 100644 (file)
@@ -223,8 +223,6 @@ if ( -e $addl_handler_use_file ) {
   use FS::cdr_batch;
   use FS::inventory_class;
   use FS::inventory_item;
-  use FS::realestate_location;
-  use FS::realestate_unit;
   use FS::pkg_category;
   use FS::pkg_class;
   use FS::access_user;
@@ -422,6 +420,9 @@ if ( -e $addl_handler_use_file ) {
   use FS::commission_rate;
   use FS::saved_search;
   use FS::sector_coverage;
+  use FS::realestate_location;
+  use FS::realestate_unit;
+  use FS::svc_realestate;
   # Sammath Naur
 
   if ( $FS::Mason::addl_handler_use ) {
index e1301b6..f2817f5 100644 (file)
@@ -7652,7 +7652,7 @@ sub tables_hashref {
         ['custnum'],
         ['realestatelocnum'],
         ['disabled'],
-        ['title']
+        ['unit_title']
       ],
       'foreign_keys' => [
         {columns => ['agentnum'], table => 'agent'},
@@ -7681,6 +7681,16 @@ sub tables_hashref {
       ],
     },
 
+    svc_realestate => {
+      columns => [
+        'svcnum',      'serial', '',      '',      '', '',
+        'description', 'varchar', 'NULL', $char_d, '', '',
+        'property',    'varchar', 'NULL', $char_d, '', '',
+      ],
+      primary_key => 'svcnum',
+      index => [],
+    },
+
     # name type nullability length default local
 
     #'new_table' => {
diff --git a/FS/FS/h_svc_realestate.pm b/FS/FS/h_svc_realestate.pm
new file mode 100644 (file)
index 0000000..55f6edf
--- /dev/null
@@ -0,0 +1,31 @@
+package FS::h_svc_realestate;
+
+use strict;
+use vars qw( @ISA );
+use FS::h_Common;
+
+
+@ISA = qw( FS::h_Common );
+
+sub table { 'h_svc_realestate' };
+
+=head1 NAME
+
+FS::h_svc_circuit - Historical telecom circuit service objects
+
+=head1 SYNOPSIS
+
+=head1 DESCRIPTION
+
+An FS::h_svc_realestate object
+
+=head1 BUGS
+
+=head1 SEE ALSO
+
+L<FS::h_Common>, L<FS::svc_realestate>, L<FS::Record>, schema.html from the base
+documentation.
+
+=cut
+
+1;
index 75a2dfb..7d6e57c 100644 (file)
@@ -97,7 +97,7 @@ sub check {
   ;
   return $error if $error;
 
-  $self->columnflag =~ /^([DFSMAHX]?)$/
+  $self->columnflag =~ /^([DFSMAHXR]?)$/
     or return "illegal columnflag ". $self->columnflag;
   $self->columnflag(uc($1));
 
@@ -133,4 +133,3 @@ schema.html from the base documentation.
 =cut
 
 1;
-
diff --git a/FS/FS/svc_realestate.pm b/FS/FS/svc_realestate.pm
new file mode 100644 (file)
index 0000000..27012d0
--- /dev/null
@@ -0,0 +1,99 @@
+package FS::svc_realestate;
+use base qw(FS::svc_Common);
+
+use strict;
+use warnings;
+use vars qw($conf);
+
+use FS::Record qw(qsearchs qsearch dbh);
+
+$FS::UID::callback{'FS::svc_realestate'} = sub {
+  $conf = new FS::Conf;
+};
+
+=head1 NAME
+
+FS::svc_realestate - Object methods for svc_realestate records
+
+=head1 SYNOPSIS
+
+  {...} TODO
+
+=head1 DESCRIPTION
+
+A FS::svc_realestate object represents a billable real estate trasnaction,
+such as renting a home or office.
+
+FS::svc_realestate inherits from FS::svc_Common.  The following fields are
+currently supported:
+
+=over 4
+
+=item svcnum - primary key
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item new HASHREF
+
+Instantiates a new svc_realestate object.
+
+=cut
+
+sub table_info {{
+  name => 'Real estate',
+  name_plural => 'Real estate services',
+  longname_plural => 'Real estate services',
+  display_weight => 100,
+  cancel_weight => 100,
+  fields => {
+    svcnum => 'Service',
+    description => 'Descriptive label',
+    property => 'Real estate property',
+  },
+}}
+
+sub table {'svc_realestate'};
+
+=item search_sql
+
+I have an unfounded suspicion this method serves no purpose in this context
+
+=cut
+
+sub search_sql {die "search_sql called on FS::svc_realestate"}
+
+=item insert
+
+Adds this record to the database.  If there is an error, returns the error,
+otherwise returns false.
+
+=item delete
+
+Delete this record from the database.
+
+=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.
+
+=item check
+
+Checks all fields to make sure this is a valid record.  If there is
+an error, returns the error, otherwise returns false.  Called by the insert
+and replace methods.
+
+=back 4
+
+=head1 BUGS
+
+=head1 SEE ALSO
+
+L<FS::Record>, schema.html from the base documentation.
+
+=cut
+
+1;
index 820d0b9..56a4d0e 100644 (file)
@@ -39,6 +39,7 @@
   <TR>
     <TH ALIGN="left">Hosting</TH>
     <TH ALIGN="left">Colocation</TH>
+    <TH ALIGN="left">Real Estate</TH>
   </TR>
     <TD VALIGN="top">
       <UL STYLE="margin:0">
         <LI><B>svc_port</B>: Customer router/switch port
       </UL>
     </TD>
+    <TD VALIGN="top">
+      <UL STYLE="margin:0">
+        <LI><B>svc_realestate</B>: Real estate properties
+      </UL>
+    </TD>
   </TR>
 <TABLE>
 <!--   <LI>svc_charge - One-time charges (Partially unimplemented)
@@ -62,4 +68,3 @@
 
 </BODY>
 </HTML>
-
index 816f342..ecf8eff 100644 (file)
@@ -35,6 +35,9 @@ tie my %flag, 'Tie::IxHash',
   'A' => { 'desc' => 'Automatically fill in from inventory',
            'condition' => $inv_sub,
          },
+  'R' => { 'desc' => 'Manual selection from real estate',
+           'condition' => $inv_sub,
+         },
   'H' => { 'desc' => 'Select from hardware class',
            'condition' => sub { $_[0]->{type} ne 'select-hardware' },
          },
index fed2125..3018e3a 100755 (executable)
@@ -68,7 +68,7 @@ function flag_changed(obj) {
   // for fields that have both 'input' and 'select', 'select' is 'select from
   // inventory class'.
   var select = document.getElementById(layer + '__' + field + '_select');
-  if (newflag == "" || newflag == "X") { // disable
+  if (newflag == "" || newflag == "X" || newflag == 'R' ) { // disable
     if ( input ) {
       input.disabled = true;
       input.className = 'disabled';
@@ -280,6 +280,3 @@ my $widget = new HTML::Widgets::SelectLayers(
   }
 );
 </%init>
-
-
-