[freeside-commits] branch master updated. fad183c519f7d8b7c905708efc984c571b2c2990

Ivan ivan at 420.am
Fri Mar 25 12:30:18 PDT 2016


The branch, master has been updated
       via  fad183c519f7d8b7c905708efc984c571b2c2990 (commit)
      from  f4ee374e9bbb313234278c7231c046f8e07086f0 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit fad183c519f7d8b7c905708efc984c571b2c2990
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Fri Mar 25 12:30:13 2016 -0700

    webservice infrastructure, RT#33849

diff --git a/FS/FS/ClientAPI/Freeside.pm b/FS/FS/ClientAPI/Freeside.pm
new file mode 100644
index 0000000..4e25f02
--- /dev/null
+++ b/FS/FS/ClientAPI/Freeside.pm
@@ -0,0 +1,59 @@
+package FS::ClientAPI::Freeside;
+
+use strict;
+#use vars qw($DEBUG $me);
+use FS::Record qw(qsearchs);
+use FS::Conf;
+use FS::svc_external;
+use FS::webservice_log;
+
+#$DEBUG = 0;
+#$me = '[FS::ClientAPI::PrepaidPhone]';
+
+# inputs:
+#   support-key
+#   method
+#   quantity (i.e. pages) - defaults to 1
+#
+# returns:
+#   error (empty, or error message)
+
+sub freesideinc_service {
+  my $packet = shift;
+
+  my $svcpart = FS::Conf->new->config('freesideinc-webservice-svcpart')
+    or return { 'error' => 'guru meditation #pow' };
+  die 'no' unless $svcpart =~ /^\d+$/;
+
+  ( my $support_key = $packet->{'support-key'} ) =~ /^\s*([^:]+):(.+)\s*$/
+    or return { 'error' => 'bad support-key' };
+  my($username, $_password) = ($1,$2);
+
+  my $svc_external = qsearchs({
+    'table'     => 'svc_external',
+    'addl_from' => 'LEFT JOIN cust_svc USING ( svcnum )',
+    'hashref'   => { 'username'  => $username,
+                     '_password' => $_password,
+                   },
+    'extra_sql' => " AND svcpart = $svcpart",
+  })
+    or return { 'error' => 'bad support-key' };
+
+  #XXX check if some customers can use some API calls, rate-limiting, etc.
+  # but for now, everybody can use everything
+
+  #record it happened
+  my $webservice_log = new FS::webservice_log {
+    'custnum'  => $svc_external->cust_svc->cust_pkg->custnum,
+    'svcnum'   => $svc_external->svcnum,
+    'method'   => $packet->{'method'},
+    'quantity' => $packet->{'quantity'} || 1,
+  };
+  my $error = $webservice_log->insert;
+  return { 'error' => $error } if $error;
+
+  return { 'error' => '' };
+
+}
+
+1;
diff --git a/FS/FS/ClientAPI_XMLRPC.pm b/FS/FS/ClientAPI_XMLRPC.pm
index 91f979d..2dea801 100644
--- a/FS/FS/ClientAPI_XMLRPC.pm
+++ b/FS/FS/ClientAPI_XMLRPC.pm
@@ -213,6 +213,8 @@ sub ss2clientapi {
   'quotation_add_pkg'         => 'MyAccount/quotation/quotation_add_pkg',
   'quotation_remove_pkg'      => 'MyAccount/quotation/quotation_remove_pkg',
   'quotation_order'           => 'MyAccount/quotation/quotation_order',
+
+  'freesideinc_service'       => 'Freeside/freesideinc_service',
   };
 }
 
diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index e88ee68..5efd780 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -3958,7 +3958,14 @@ and customer address. Include units.',
   {
     'key'         => 'support-key',
     'section'     => '',
-    'description' => 'A support key enables access to commercial services delivered over the network, such as the payroll module, access to the internal ticket system, priority support and optional backups.',
+    'description' => 'A support key enables access to commercial services delivered over the network, such as address normalization and invoice printing.',
+    'type'        => 'text',
+  },
+
+  {
+    'key'         => 'freesideinc-webservice-svcpart',
+    'section'     => '',
+    'description' => 'Do not set this.',
     'type'        => 'text',
   },
 
diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm
index bd63af5..c27b727 100644
--- a/FS/FS/Schema.pm
+++ b/FS/FS/Schema.pm
@@ -7341,6 +7341,29 @@ sub tables_hashref {
                         ],
     },
 
+    'webservice_log' => {
+      'columns' => [
+        'webservicelognum',    'serial',      '',      '', '', '', #big? hubrus
+        'svcnum',                 'int',  'NULL',      '', '', '', #just in case
+        'custnum',                'int',      '',      '', '', '',
+        'method',             'varchar',      '', $char_d, '', '',
+        'quantity',               'int',      '',      '', '', '', #i.e. pages
+        '_date',             @date_type,                   '', '',
+        'status',             'varchar',  'NULL', $char_d, '', '', 
+        'rated_price',        'decimal',  'NULL',  '10,2', '', '',
+      ],
+      'primary_key'  => 'webservicelognum',
+      'unique'       => [],
+      'index'        => [ ['custnum'], ['status'] ],
+      'foreign_keys' => [
+                          { columns => [ 'custnum' ],
+                            table   => 'cust_main',
+                          },
+                          #no FK on svcnum... we don't want to purge these on
+                          # service deletion
+                        ],
+    },
+
     # name type nullability length default local
 
     #'new_table' => {
diff --git a/FS/FS/webservice_log.pm b/FS/FS/webservice_log.pm
new file mode 100644
index 0000000..7e320c2
--- /dev/null
+++ b/FS/FS/webservice_log.pm
@@ -0,0 +1,137 @@
+package FS::webservice_log;
+use base qw( FS::Record );
+
+use strict;
+
+=head1 NAME
+
+FS::webservice_log - Object methods for webservice_log records
+
+=head1 SYNOPSIS
+
+  use FS::webservice_log;
+
+  $record = new FS::webservice_log \%hash;
+  $record = new FS::webservice_log { 'column' => 'value' };
+
+  $error = $record->insert;
+
+  $error = $new_record->replace($old_record);
+
+  $error = $record->delete;
+
+  $error = $record->check;
+
+=head1 DESCRIPTION
+
+An FS::webservice_log object represents an web service log entry.
+FS::webservice_log inherits from FS::Record.  The following fields are
+currently supported:
+
+=over 4
+
+=item webservicelognum
+
+primary key
+
+=item svcnum
+
+svcnum
+
+=item custnum
+
+custnum
+
+=item method
+
+method
+
+=item quantity
+
+quantity
+
+=item _date
+
+_date
+
+=item status
+
+status
+
+=item rated_price
+
+rated_price
+
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item new HASHREF
+
+Creates a new log entry.  To add the log entry 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
+
+# the new method can be inherited from FS::Record, if a table method is defined
+sub table { 'webservice_log'; }
+
+=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 log entry.  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('webservicelognum')
+    || $self->ut_foreign_keyn('svcnum', 'cust_svc', 'svcnum')
+    || $self->ut_foreign_key('custnum', 'cust_main', 'custnum')
+    || $self->ut_text('method')
+    || $self->ut_number('quantity')
+    || $self->ut_numbern('_date')
+    || $self->ut_alphan('status')
+    || $self->ut_moneyn('rated_price')
+  ;
+  return $error if $error;
+
+  $self->_date(time) unless $self->_date;
+
+  $self->SUPER::check;
+}
+
+=back
+
+=head1 BUGS
+
+=head1 SEE ALSO
+
+L<FS::Record>
+
+=cut
+
+1;
+
diff --git a/FS/t/webservice_log.t b/FS/t/webservice_log.t
new file mode 100644
index 0000000..8fc9e94
--- /dev/null
+++ b/FS/t/webservice_log.t
@@ -0,0 +1,5 @@
+BEGIN { $| = 1; print "1..1\n" }
+END {print "not ok 1\n" unless $loaded;}
+use FS::webservice_log;
+$loaded=1;
+print "ok 1\n";
diff --git a/fs_selfservice/FS-SelfService/SelfService.pm b/fs_selfservice/FS-SelfService/SelfService.pm
index 4023aa8..144d982 100644
--- a/fs_selfservice/FS-SelfService/SelfService.pm
+++ b/fs_selfservice/FS-SelfService/SelfService.pm
@@ -138,6 +138,8 @@ $socket .= '.'.$tag if defined $tag && length($tag);
   'quotation_remove_pkg'      => 'MyAccount/quotation/quotation_remove_pkg',
   'quotation_order'           => 'MyAccount/quotation/quotation_order',
 
+  'freesideinc_service'       => 'Freeside/freesideinc_service',
+
 );
 @EXPORT_OK = (
   keys(%autoload),

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/ClientAPI/Freeside.pm                  |   59 ++++++++++++++++++++
 FS/FS/ClientAPI_XMLRPC.pm                    |    2 +
 FS/FS/Conf.pm                                |    9 ++-
 FS/FS/Schema.pm                              |   23 ++++++++
 FS/FS/{cdr_batch.pm => webservice_log.pm}    |   77 ++++++++++++++------------
 FS/t/{AccessRight.t => webservice_log.t}     |    2 +-
 fs_selfservice/FS-SelfService/SelfService.pm |    2 +
 7 files changed, 138 insertions(+), 36 deletions(-)
 create mode 100644 FS/FS/ClientAPI/Freeside.pm
 copy FS/FS/{cdr_batch.pm => webservice_log.pm} (54%)
 copy FS/t/{AccessRight.t => webservice_log.t} (80%)




More information about the freeside-commits mailing list