This commit was manufactured by cvs2svn to create branch 'freeside_import'.
authorcvs2git <cvs2git>
Fri, 25 Sep 1998 08:52:49 +0000 (08:52 +0000)
committercvs2git <cvs2git>
Fri, 25 Sep 1998 08:52:49 +0000 (08:52 +0000)
35 files changed:
bin/pod2x [new file with mode: 0755]
htdocs/docs/man/Bill.txt [new file with mode: 0644]
htdocs/docs/man/CGI.txt [new file with mode: 0644]
htdocs/docs/man/Conf.txt [new file with mode: 0644]
htdocs/docs/man/Invoice.txt [new file with mode: 0644]
htdocs/docs/man/Record.txt [new file with mode: 0644]
htdocs/docs/man/SSH.txt [new file with mode: 0644]
htdocs/docs/man/UID.txt [new file with mode: 0644]
htdocs/docs/man/agent.txt [new file with mode: 0644]
htdocs/docs/man/agent_type.txt [new file with mode: 0644]
htdocs/docs/man/cust_bill.txt [new file with mode: 0644]
htdocs/docs/man/cust_bill_pkg.txt [new file with mode: 0644]
htdocs/docs/man/cust_credit.txt [new file with mode: 0644]
htdocs/docs/man/cust_main.txt [new file with mode: 0644]
htdocs/docs/man/cust_main_county.txt [new file with mode: 0644]
htdocs/docs/man/cust_pay.txt [new file with mode: 0644]
htdocs/docs/man/cust_pkg.txt [new file with mode: 0644]
htdocs/docs/man/cust_refund.txt [new file with mode: 0644]
htdocs/docs/man/cust_svc.txt [new file with mode: 0644]
htdocs/docs/man/dbdef.txt [new file with mode: 0644]
htdocs/docs/man/dbdef_colgroup.txt [new file with mode: 0644]
htdocs/docs/man/dbdef_column.txt [new file with mode: 0644]
htdocs/docs/man/dbdef_index.txt [new file with mode: 0644]
htdocs/docs/man/dbdef_table.txt [new file with mode: 0644]
htdocs/docs/man/dbdef_unique.txt [new file with mode: 0644]
htdocs/docs/man/index.html [new file with mode: 0644]
htdocs/docs/man/part_pkg.txt [new file with mode: 0644]
htdocs/docs/man/part_referral.txt [new file with mode: 0644]
htdocs/docs/man/part_svc.txt [new file with mode: 0644]
htdocs/docs/man/pkg_svc.txt [new file with mode: 0644]
htdocs/docs/man/svc_acct.txt [new file with mode: 0644]
htdocs/docs/man/svc_acct_pop.txt [new file with mode: 0644]
htdocs/docs/man/svc_acct_sm.txt [new file with mode: 0644]
htdocs/docs/man/svc_domain.txt [new file with mode: 0644]
htdocs/docs/man/type_pkgs.txt [new file with mode: 0644]

diff --git a/bin/pod2x b/bin/pod2x
new file mode 100755 (executable)
index 0000000..1edb1c4
--- /dev/null
+++ b/bin/pod2x
@@ -0,0 +1,23 @@
+#!/usr/bin/perl
+
+#use Pod::Text;
+#$Pod::Text::termcap=1;
+
+my $site_perl = "./site_perl";
+#my $catman = "./catman";
+my $catman = "./htdocs/docs/man";
+#my $html = "./htdocs/docs/man";
+
+$|=1;
+
+die "Can't find $site_perl and $catman"
+  unless [ -d $site_perl ] && [ -d $catman ] && [ -d $html ];
+
+foreach my $file (glob("$site_perl/*.pm")) {
+  $file =~ /\/([\w\-]+)\.pm$/ or die "oops file $file";
+  my $name = $1;
+  print "$name\n"; 
+  system "pod2text $file >$catman/$name.txt"; 
+#  system "pod2html --podpath=$site_perl $file >$html/$name.html";
+#  system "pod2html $file >$html/$name.html";
+}
diff --git a/htdocs/docs/man/Bill.txt b/htdocs/docs/man/Bill.txt
new file mode 100644 (file)
index 0000000..545dd1a
--- /dev/null
@@ -0,0 +1,29 @@
+NAME
+    FS::Bill - Legacy stub
+
+SYNOPSIS
+    The functionality of FS::Bill has been integrated into
+    FS::cust_main.
+
+HISTORY
+    ivan@voicenet.com 97-jul-24 - 25 - 28
+
+    use Safe; evaluate all fees with perl (still on TODO list until
+    I write some examples & test opmask to see if we can read db)
+    %hash=$obj->hash later ivan@sisd.com 98-mar-13
+
+    packages with no next bill date start at $time not time, this
+    should eliminate the last of the problems with billing at a past
+    date also rewrite the invoice priting logic not to print
+    invoices for things that haven't happended yet and update
+    $cust_bill->printed when we print so PAST DUE notices work, and
+    s/date/_date/ ivan@sisd.com 98-jun-4
+
+    more logic for past due stuff - packages with no next bill date
+    start at $cust_pkg->setup || $time ivan@sisd.com 98-jul-13
+
+    moved a few things in collection logic; negative charges should
+    work ivan@sisd.com 98-aug-6
+
+    pod, moved everything to FS::cust_main ivan@sisd.com 98-sep-19
+
diff --git a/htdocs/docs/man/CGI.txt b/htdocs/docs/man/CGI.txt
new file mode 100644 (file)
index 0000000..54f9b8a
--- /dev/null
@@ -0,0 +1,47 @@
+NAME
+    FS::CGI - Subroutines for the web interface
+
+SYNOPSIS
+      use FS::CGI qw(header menubar idiot eidiot);
+
+      print header( 'Title', '' );
+      print header( 'Title', menubar('item', 'URL', ... ) );
+
+      idiot "error message"; 
+      eidiot "error message";
+
+DESCRIPTION
+    Provides a few common subroutines for the web interface.
+
+SUBROUTINES
+    header TITLE, MENUBAR
+        Returns an HTML header.
+
+    menubar ITEM, URL, ...
+        Returns an HTML menubar.
+
+    idiot ERROR
+        Sends headers and an HTML error message.
+
+    eidiot ERROR
+        Sends headers and an HTML error message, then exits.
+
+BUGS
+    Not OO.
+
+    Not complete.
+
+    Uses CGI-modules instead of CGI.pm
+
+SEE ALSO
+    the CGI::Base manpage
+
+HISTORY
+    subroutines for the HTML/CGI GUI, not properly OO. :(
+
+    ivan@sisd.com 98-apr-16 ivan@sisd.com 98-jun-22
+
+    lose the background, eidiot ivan@sisd.com 98-sep-2
+
+    pod ivan@sisd.com 98-sep-12
+
diff --git a/htdocs/docs/man/Conf.txt b/htdocs/docs/man/Conf.txt
new file mode 100644 (file)
index 0000000..c46c9ee
--- /dev/null
@@ -0,0 +1,47 @@
+NAME
+    FS::Conf - Read access to Freeside configuration values
+
+SYNOPSIS
+      use FS::Conf;
+
+      $conf = new FS::Conf;
+      $conf = new FS::Conf "/non/standard/config/directory";
+
+      $dir = $conf->dir;
+
+      $value = $conf->config('key');
+      @list  = $conf->config('key');
+      $bool  = $conf->exists('key');
+
+DESCRIPTION
+    Read access to Freeside configuration values. Keys currently map
+    to filenames, but this may change in the future.
+
+METHODS
+    new [ DIRECTORY ]
+        Create a new configuration object. Optionally, a non-default
+        directory may be specified.
+
+    dir Returns the directory.
+
+    config
+        Returns the configuration value or values (depending on
+        context) for key.
+
+    exists
+        Returns true if the specified key exists, even if the
+        corresponding value is undefined.
+
+BUGS
+    The option to specify a non-default directory should probably be
+    removed.
+
+    Write access (with locking) should be implemented.
+
+SEE ALSO
+    config.html from the base documentation contains a list of
+    configuration files.
+
+HISTORY
+    Ivan Kohler <ivan@sisd.com> 98-sep-6
+
diff --git a/htdocs/docs/man/Invoice.txt b/htdocs/docs/man/Invoice.txt
new file mode 100644 (file)
index 0000000..17953d5
--- /dev/null
@@ -0,0 +1,23 @@
+NAME
+    FS::Invoice - Legacy stub
+
+SYNOPSIS
+    The functioanlity of FS::invoice has been integrated in
+    FS::cust_bill.
+
+HISTORY
+    ivan@voicenet.com 97-jun-25 - 27
+
+    maybe should be changed to be OO-functions on $cust_bill
+    objects? (instead of passing invnum, ugh).
+
+    ISA cust_bill and return inovice instead of passing filehandle
+    ivan@sisd.com 98-mar-13 (add postscript output!)
+
+    close our kid when we're done ivan@sisd.com 98-jun-4
+
+    separated code which shuffled data from code which formatted.
+    (so i could) fixed past due notices showing up when balance due
+    =< 0 return address comes from /var/spool/freeside/conf/address
+    ivan@sisd.com 98-jul-2
+
diff --git a/htdocs/docs/man/Record.txt b/htdocs/docs/man/Record.txt
new file mode 100644 (file)
index 0000000..0accb65
--- /dev/null
@@ -0,0 +1,332 @@
+NAME
+    FS::Record - Database record objects
+
+SYNOPSIS
+        use FS::Record;
+        use FS::Record qw(dbh fields hfields qsearch qsearchs dbdef);
+
+        $record = new FS::Record 'table', \%hash;
+        $record = new FS::Record 'table', { 'column' => 'value', ... };
+
+        $record  = qsearchs FS::Record 'table', \%hash;
+        $record  = qsearchs FS::Record 'table', { 'column' => 'value', ... };
+        @records = qsearch  FS::Record 'table', \%hash; 
+        @records = qsearch  FS::Record 'table', { 'column' => 'value', ... };
+
+        $table = $record->table;
+        $dbdef_table = $record->dbdef_table;
+
+        $value = $record->get('column');
+        $value = $record->getfield('column');
+        $value = $record->column;
+
+        $record->set( 'column' => 'value' );
+        $record->setfield( 'column' => 'value' );
+        $record->column('value');
+
+        %hash = $record->hash;
+
+        $hashref = $record->hashref;
+
+        $error = $record->add;
+
+        $error = $record->del;
+
+        $error = $new_record->rep($old_record);
+
+        $value = $record->unique('column');
+
+        $value = $record->ut_float('column');
+        $value = $record->ut_number('column');
+        $value = $record->ut_numbern('column');
+        $value = $record->ut_money('column');
+        $value = $record->ut_text('column');
+        $value = $record->ut_textn('column');
+        $value = $record->ut_alpha('column');
+        $value = $record->ut_alphan('column');
+        $value = $record->ut_phonen('column');
+        $value = $record->ut_anythingn('column');
+
+        $dbdef = reload_dbdef;
+        $dbdef = reload_dbdef "/non/standard/filename";
+        $dbdef = dbdef;
+
+        $quoted_value = _quote($value,'table','field');
+
+        #depriciated
+        $fields = hfields('table');
+        if ( $fields->{Field} ) { # etc.
+
+        @fields = fields 'table';
+
+DESCRIPTION
+    (Mostly) object-oriented interface to database records. Records
+    are currently implemented on top of DBI. FS::Record is intended
+    as a base class for table-specific classes to inherit from, i.e.
+    FS::cust_main.
+
+METHODS
+    new TABLE, HASHREF
+        Creates a new record. It doesn't store it in the database,
+        though. See the section on "add" for that.
+
+        Note that the object stores this hash reference, not a
+        distinct copy of the hash it points to. You can ask the
+        object for a copy with the *hash* method.
+
+    qsearch TABLE, HASHREF
+        Searches the database for all records matching (at least)
+        the key/value pairs in HASHREF. Returns all the records
+        found as FS::Record objects.
+
+    qsearchs TABLE, HASHREF
+        Searches the database for a record matching (at least) the
+        key/value pairs in HASHREF, and returns the record found as
+        an FS::Record object. If more than one record matches, it
+        carps but returns the first. If this happens, you either
+        made a logic error in asking for a single item, or your data
+        is corrupted.
+
+    table
+        Returns the table name.
+
+    dbdef_table
+        Returns the FS::dbdef_table object for the table.
+
+    get, getfield COLUMN
+        Returns the value of the column/field/key COLUMN.
+
+    set, setfield COLUMN, VALUE
+        Sets the value of the column/field/key COLUMN to VALUE.
+        Returns VALUE.
+
+    AUTLOADED METHODS
+        $record->column is a synonym for $record->get('column');
+
+        $record->column('value') is a synonym for $record-
+        >set('column','value');
+
+    hash
+        Returns a list of the column/value pairs, usually for
+        assigning to a new hash.
+
+        To make a distinct duplicate of an FS::Record object, you
+        can do:
+
+            $new = new FS::Record ( $old->table, { $old->hash } );
+
+    hashref
+        Returns a reference to the column/value hash.
+
+    add Adds this record to the database. If there is an error, returns
+        the error, otherwise returns false.
+
+    del Delete this record from the database. If there is an error,
+        returns the error, otherwise returns false.
+
+    rep OLD_RECORD
+        Replace the OLD_RECORD with this one in the database. If
+        there is an error, returns the error, otherwise returns
+        false.
+
+    unique COLUMN
+        Replaces COLUMN in record with a unique number. Called by
+        the add method on primary keys and single-field unique
+        columns (see the FS::dbdef_table manpage). Returns the new
+        value.
+
+    ut_float COLUMN
+        Check/untaint floating point numeric data: 1.1, 1, 1.1e10,
+        1e10. May not be null. If there is an error, returns the
+        error, otherwise returns false.
+
+    ut_number COLUMN
+        Check/untaint simple numeric data (whole numbers). May not
+        be null. If there is an error, returns the error, otherwise
+        returns false.
+
+    ut_numbern COLUMN
+        Check/untaint simple numeric data (whole numbers). May be
+        null. If there is an error, returns the error, otherwise
+        returns false.
+
+    ut_money COLUMN
+        Check/untaint monetary numbers. May be negative. Set to 0 if
+        null. If there is an error, returns the error, otherwise
+        returns false.
+
+    ut_text COLUMN
+        Check/untaint text. Alphanumerics, spaces, and the following
+        punctuation symbols are currently permitted: ! @ # $ % & ( )
+        - + ; : ' " , . ? / May not be null. If there is an error,
+        returns the error, otherwise returns false.
+
+    ut_textn COLUMN
+        Check/untaint text. Alphanumerics, spaces, and the following
+        punctuation symbols are currently permitted: ! @ # $ % & ( )
+        - + ; : ' " , . ? / May be null. If there is an error,
+        returns the error, otherwise returns false.
+
+    ut_alpha COLUMN
+        Check/untaint alphanumeric strings (no spaces). May not be
+        null. If there is an error, returns the error, otherwise
+        returns false.
+
+    ut_alpha COLUMN
+        Check/untaint alphanumeric strings (no spaces). May be null.
+        If there is an error, returns the error, otherwise returns
+        false.
+
+    ut_phonen COLUMN
+        Check/untaint phone numbers. May be null. If there is an
+        error, returns the error, otherwise returns false.
+
+    ut_anything COLUMN
+        Untaints arbitrary data. Be careful.
+
+SUBROUTINES
+    reload_dbdef([FILENAME])
+            Load a database definition (see the FS::dbdef manpage),
+            optionally from a non-default filename. This command is
+            executed at startup unless *$FS::Record::setup_hack* is
+            true. Returns a FS::dbdef object.
+
+    dbdef   Returns the current database definition. See the FS::dbdef
+            manpage.
+
+    _quote VALUE, TABLE, COLUMN
+            This is an internal function used to construct SQL
+            statements. It returns VALUE DBI-quoted (see the section
+            on "quote" in the DBI manpage) unless VALUE is a number
+            and the column type (see the dbdef_column manpage) does
+            not end in `char' or `binary'.
+
+    hfields TABLE
+            This is depriciated. Don't use it.
+
+            It returns a hash-type list with the fields of this
+            record's table set true.
+
+    fields TABLE
+            This returns a list of the columns in this record's
+            table (See the dbdef_table manpage).
+
+BUGS
+        This module should probably be renamed, since much of the
+        functionality is of general use. It is not completely unlike
+        Adapter::DBI (see below).
+
+        Exported qsearch and qsearchs should be depriciated in favor
+        of method calls (against an FS::Record object like the old
+        search and searchs that qsearch and qsearchs were on top
+        of.)
+
+        The whole fields / hfields mess should be removed.
+
+        The various WHERE clauses should be subroutined.
+
+        table string should be depriciated in favor of
+        FS::dbdef_table.
+
+        No doubt we could benefit from a Tied hash. Documenting how
+        exists / defined true maps to the database (and WHERE
+        clauses) would also help.
+
+        The ut_ methods should ask the dbdef for a default length.
+
+        ut_sqltype (like ut_varchar) should all be defined
+
+        A fallback check method should be provided with uses the
+        dbdef.
+
+        The ut_money method assumes money has two decimal digits.
+
+        The Pg money kludge in the new method only strips `$'.
+
+        The ut_phonen method assumes US-style phone numbers.
+
+        The _quote function should probably use ut_float instead of
+        a regex.
+
+        All the subroutines probably should be methods, here or
+        elsewhere.
+
+SEE ALSO
+        the FS::dbdef manpage, the FS::UID manpage, the DBI manpage
+
+        Adapter::DBI from Ch. 11 of Advanced Perl Programming by
+        Sriram Srinivasan.
+
+HISTORY
+        ivan@voicenet.com 97-jun-2 - 9, 19, 25, 27, 30
+
+        DBI version ivan@sisd.com 97-nov-8 - 12
+
+        cleaned up, added autoloaded $self->any_field calls, moved
+        DBI login stuff to FS::UID ivan@sisd.com 97-nov-21-23
+
+        since AUTO_INCREMENT is MySQL specific, use my own unique
+        number generator (again) ivan@sisd.com 97-dec-4
+
+        untaint $user in unique (web demo hack...bah) make unique
+        skip multiple-field unique's from dbdef ivan@sisd.com 97-
+        dec-11
+
+        merge with FS::Search, which after all was just alternate
+        constructors for FS::Record objects. Makes lots of things
+        cleaner. :) ivan@sisd.com 97-dec-13
+
+        use FS::dbdef::primary key in replace searches, hopefully
+        for all practical purposes the string/number problem in SQL
+        statements should be gone? (SQL bites) ivan@sisd.com 98-jan-
+        20
+
+        Put all SQL statments in $statment before we $sth=$dbh-
+        >prepare( them, for debugging reasons (warn $statement)
+        ivan@sisd.com 98-feb-19
+
+        (sigh)... use dbdef type (char, etc.) instead of a regex to
+        decide what to quote in _quote (more sillines...) SQL bites.
+        ivan@sisd.com 98-feb-20
+
+        more friendly error messages ivan@sisd.com 98-mar-13
+
+        Added import of datasrc from FS::UID to allow Pg6.3 to work
+        Added code to right-trim strings read from Pg6.3 databases
+        Modified 'add' to only insert fields that actually have data
+        Added ut_float to handle floating point numbers (for sales
+        tax). Pg6.3 does not have a "SHOW FIELDS" statement, so I
+        faked it 8). bmccane@maxbaud.net 98-apr-3
+
+        commented out Pg wrapper around `` Modified 'add' to only
+        insert fields that actually have data '' ivan@sisd.com 98-
+        apr-16
+
+        dbdef usage changes ivan@sisd.com 98-jun-1
+
+        sub fields now asks dbdef, not database ivan@sisd.com 98-
+        jun-2
+
+        added debugging method ->_dump ivan@sisd.com 98-jun-16
+
+        use FS::dbdef::primary key in delete searches as well as
+        replace searches (SQL still bites) ivan@sisd.com 98-jun-22
+
+        sub dbdef_table ivan@sisd.com 98-jun-28
+
+        removed Pg wrapper around `` Modified 'add' to only insert
+        fields that actually have data '' ivan@sisd.com 98-jul-14
+
+        sub fields croaks on errors ivan@sisd.com 98-jul-17
+
+        $rc eq '0E0' doesn't mean we couldn't delete for all rdbmss
+        ivan@sisd.com 98-jul-18
+
+        commented out code to right-trim strings read from Pg6.3
+        databases; ChopBlanks is in UID.pm ivan@sisd.com 98-aug-16
+
+        added code (with Pg wrapper) to deal with Pg money fields
+        ivan@sisd.com 98-aug-18
+
+        added pod documentation ivan@sisd.com 98-sep-6
+
diff --git a/htdocs/docs/man/SSH.txt b/htdocs/docs/man/SSH.txt
new file mode 100644 (file)
index 0000000..b6d205b
--- /dev/null
@@ -0,0 +1,63 @@
+NAME
+    FS::SSH - Subroutines to call ssh and scp
+
+SYNOPSIS
+      use FS::SSH qw(ssh scp issh iscp sshopen2 sshopen3);
+
+      ssh($host, $command);
+
+      issh($host, $command);
+
+      scp($source, $destination);
+
+      iscp($source, $destination);
+
+      sshopen2($host, $reader, $writer, $command);
+
+      sshopen3($host, $reader, $writer, $error, $command);
+
+DESCRIPTION
+      Simple wrappers around ssh and scp commands.
+
+SUBROUTINES
+    ssh HOST, COMMAND
+        Calls ssh in batch mode.
+
+    issh HOST, COMMAND
+        Prints the ssh command to be executed, waits for the user to
+        confirm, and (optionally) executes the command.
+
+    scp SOURCE, DESTINATION
+        Calls scp in batch mode.
+
+    iscp SOURCE, DESTINATION
+        Prints the scp command to be executed, waits for the user to
+        confirm, and (optionally) executes the command.
+
+    sshopen2 HOST, READER, WRITER, COMMAND
+        Connects the supplied filehandles to the ssh process (in
+        batch mode).
+
+    sshopen3 HOST, WRITER, READER, ERROR, COMMAND
+        Connects the supplied filehandles to the ssh process (in
+        batch mode).
+
+BUGS
+        Not OO.
+
+        scp stuff should transparantly use rsync-over-ssh instead.
+
+SEE ALSO
+        the ssh manpage, the scp manpage, the IPC::Open2 manpage,
+        the IPC::Open3 manpage
+
+HISTORY
+        ivan@voicenet.com 97-jul-17
+
+        added sshopen2 and sshopen3 ivan@sisd.com 98-mar-9
+
+        added iscp ivan@sisd.com 98-jul-25 now iscp asks y/n, issh
+        and took out path ivan@sisd.com 98-jul-30
+
+        pod ivan@sisd.com 98-sep-21
+
diff --git a/htdocs/docs/man/UID.txt b/htdocs/docs/man/UID.txt
new file mode 100644 (file)
index 0000000..bf9f6b4
--- /dev/null
@@ -0,0 +1,79 @@
+NAME
+    FS::UID - Subroutines for database login and assorted other
+    stuff
+
+SYNOPSIS
+      use FS::UID qw(adminsuidsetup cgisuidsetup dbh datasrc getotaker
+      checkeuid checkruid swapuid);
+
+      adminsuidsetup;
+
+      $cgi = new CGI::Base;
+      $cgi->get;
+      $dbh = cgisuidsetup($cgi);
+
+      $dbh = dbh;
+
+      $datasrc = datasrc;
+
+DESCRIPTION
+    Provides a hodgepodge of subroutines.
+
+SUBROUTINES
+    adminsuidsetup
+        Cleans the environment. Make sure the script is running as
+        freeside, or setuid freeside. Opens a connection to the
+        database. Swaps real and effective UIDs. Returns the DBI
+        database handle (usually you don't need this).
+
+    dbh Returns the DBI database handle.
+
+    datasrc
+        Returns the DBI data source.
+
+    getotaker
+        Returns the current Freeside user. Currently that means the
+        CGI REMOTE_USER, or 'freeside'.
+
+    checkeuid
+        Returns true if effective UID is that of the freeside user.
+
+    checkruid
+        Returns true if the real UID is that of the freeside user.
+
+    swapuid
+        Swaps real and effective UIDs.
+
+BUGS
+    Not OO.
+
+    No capabilities yet. When mod_perl and Authen::DBI are
+    implemented, cgisuidsetup will go away as well.
+
+SEE ALSO
+    the FS::Record manpage, the CGI::Base manpage, the DBI manpage
+
+HISTORY
+    ivan@voicenet.com 97-jun-4 - 9 untaint otaker ivan@voicenet.com
+    97-jul-7
+
+    generalize and auto-get uid (getotaker still needs to be db'ed)
+    ivan@sisd.com 97-nov-10
+
+    &cgisuidsetup logs into database. other cleaning. ivan@sisd.com
+    97-nov-22,23
+
+    &adminsuidsetup logs into database with otaker='freeside' (for
+    automated tasks like billing) ivan@sisd.com 97-dec-13
+
+    added sub datasrc for fs-setup ivan@sisd.com 98-feb-21
+
+    datasrc, user and pass now come from conf/secrets ivan@sisd.com
+    98-jun-28
+
+    added ChopBlanks to DBI call (see man DBI) ivan@sisd.com 98-aug-
+    16
+
+    pod, use FS::Conf, implemented cgisuidsetup as adminsuidsetup,
+    inlined suidsetup ivan@sisd.com 98-sep-12
+
diff --git a/htdocs/docs/man/agent.txt b/htdocs/docs/man/agent.txt
new file mode 100644 (file)
index 0000000..b0317f6
--- /dev/null
@@ -0,0 +1,65 @@
+NAME
+    FS::agent - Object methods for agent records
+
+SYNOPSIS
+      use FS::agent;
+
+      $record = create FS::agent \%hash;
+      $record = create FS::agent { 'column' => 'value' };
+
+      $error = $record->insert;
+
+      $error = $new_record->replace($old_record);
+
+      $error = $record->delete;
+
+      $error = $record->check;
+
+DESCRIPTION
+    An FS::agent object represents an agent. Every customer has an
+    agent. Agents can be used to track things like resellers or
+    salespeople. FS::agent inherits from FS::Record. The following
+    fields are currently supported:
+
+    agemtnum - primary key (assigned automatically for new agents)
+    agent - Text name of this agent
+    typenum - Agent type.  See the FS::agent_type manpage
+    prog - For future use.
+    freq - For future use.
+METHODS
+    create HASHREF
+        Creates a new agent. To add the agent to the database, see
+        the section on "insert".
+
+    insert
+        Adds this agent to the database. If there is an error,
+        returns the error, otherwise returns false.
+
+    delete
+        Deletes this agent from the database. Only agents with no
+        customers can be deleted. If there is an error, returns the
+        error, otherwise returns false.
+
+    replace OLD_RECORD
+        Replaces OLD_RECORD with this one in the database. If there
+        is an error, returns the error, otherwise returns false.
+
+    check
+        Checks all fields to make sure this is a valid agent. If
+        there is an error, returns the error, otherwise returns
+        false. Called by the insert and replace methods.
+
+BUGS
+    It doesn't properly override FS::Record yet.
+
+SEE ALSO
+    the FS::Record manpage, the FS::agent_type manpage, the
+    FS::cust_main manpage, schema.html from the base documentation.
+
+HISTORY
+    Class dealing with agent (resellers)
+
+    ivan@sisd.com 97-nov-13, 97-dec-10
+
+    pod, added check in ->delete ivan@sisd.com 98-sep-22
+
diff --git a/htdocs/docs/man/agent_type.txt b/htdocs/docs/man/agent_type.txt
new file mode 100644 (file)
index 0000000..ea1edec
--- /dev/null
@@ -0,0 +1,72 @@
+NAME
+    FS::agent_type - Object methods for agent_type records
+
+SYNOPSIS
+      use FS::agent_type;
+
+      $record = create FS::agent_type \%hash;
+      $record = create FS::agent_type { 'column' => 'value' };
+
+      $error = $record->insert;
+
+      $error = $new_record->replace($old_record);
+
+      $error = $record->delete;
+
+      $error = $record->check;
+
+DESCRIPTION
+    An FS::agent_type object represents an agent type. Every agent
+    (see the FS::agent manpage) has an agent type. Agent types
+    define which packages (see the FS::part_pkg manpage) may be
+    purchased by customers (see the FS::cust_main manpage), via
+    FS::type_pkgs records (see the FS::type_pkgs manpage).
+    FS::agent_type inherits from FS::Record. The following fields
+    are currently supported:
+
+    typenum - primary key (assigned automatically for new agent types)
+    atype - Text name of this agent type
+METHODS
+    create HASHREF
+        Creates a new agent type. To add the agent type to the
+        database, see the section on "insert".
+
+    insert
+        Adds this agent type to the database. If there is an error,
+        returns the error, otherwise returns false.
+
+    delete
+        Deletes this agent type from the database. Only agent types
+        with no agents can be deleted. If there is an error, returns
+        the error, otherwise returns false.
+
+    replace OLD_RECORD
+        Replaces OLD_RECORD with this one in the database. If there
+        is an error, returns the error, otherwise returns false.
+
+    check
+        Checks all fields to make sure this is a valid agent type.
+        If there is an error, returns the error, otherwise returns
+        false. Called by the insert and replace methods.
+
+BUGS
+    It doesn't properly override FS::Record yet.
+
+SEE ALSO
+    the FS::Record manpage, the FS::agent manpage, the FS::type_pkgs
+    manpage, the FS::cust_main manpage, the FS::part_pkg manpage,
+    schema.html from the base documentation.
+
+HISTORY
+    Class for the different sets of allowable packages you can
+    assign to an agent.
+
+    ivan@sisd.com 97-nov-13
+
+    ut_ FS::Record methods ivan@sisd.com 97-dec-10
+
+    Changed 'type' to 'atype' because Pg6.3 reserves the type word
+    bmccane@maxbaud.net 98-apr-3
+
+    pod, added check in delete ivan@sisd.com 98-sep-21
+
diff --git a/htdocs/docs/man/cust_bill.txt b/htdocs/docs/man/cust_bill.txt
new file mode 100644 (file)
index 0000000..9762dd3
--- /dev/null
@@ -0,0 +1,140 @@
+NAME
+    FS::cust_bill - Object methods for cust_bill records
+
+SYNOPSIS
+      use FS::cust_bill;
+
+      $record = create FS::cust_bill \%hash;
+      $record = create FS::cust_bill { 'column' => 'value' };
+
+      $error = $record->insert;
+
+      $error = $new_record->replace($old_record);
+
+      $error = $record->delete;
+
+      $error = $record->check;
+
+      ( $total_previous_balance, @previous_cust_bill ) = $record->previous;
+
+      @cust_bill_pkg_objects = $cust_bill->cust_bill_pkg;
+
+      ( $total_previous_credits, @previous_cust_credit ) = $record->cust_credit;
+
+      @cust_pay_objects = $cust_bill->cust_pay;
+
+      @lines = $cust_bill->print_text;
+      @lines = $cust_bill->print_text $time;
+
+DESCRIPTION
+    An FS::cust_bill object represents an invoice. FS::cust_bill
+    inherits from FS::Record. The following fields are currently
+    supported:
+
+    invnum - primary key (assigned automatically for new invoices)
+    custnum - customer (see the FS::cust_main manpage)
+    _date - specified as a UNIX timestamp; see the section on "time" in the perlfunc manpage.  Also see
+    the Time::Local manpage and the Date::Parse manpage for conversion functions.
+    charged - amount of this invoice
+    owed - amount still outstanding on this invoice, which is charged minus
+    all payments (see the FS::cust_pay manpage).
+    printed - how many times this invoice has been printed automatically
+    (see the section on "collect" in the FS::cust_main manpage).
+METHODS
+    create HASHREF
+        Creates a new invoice. To add the invoice to the database,
+        see the section on "insert". Invoices are normally created
+        by calling the bill method of a customer object (see the
+        FS::cust_main manpage).
+
+    insert
+        Adds this invoice to the database ("Posts" the invoice). If
+        there is an error, returns the error, otherwise returns
+        false.
+
+        When adding new invoices, owed must be charged (or null, in
+        which case it is automatically set to charged).
+
+    delete
+        Currently unimplemented. I don't remove invoices because
+        there would then be no record you ever posted this invoice
+        (which is bad, no?)
+
+    replace OLD_RECORD
+        Replaces the OLD_RECORD with this one in the database. If
+        there is an error, returns the error, otherwise returns
+        false.
+
+        Only owed and printed may be changed. Owed is normally
+        updated by creating and inserting a payment (see the
+        FS::cust_pay manpage). Printed is normally updated by
+        calling the collect method of a customer object (see the
+        FS::cust_main manpage).
+
+    check
+        Checks all fields to make sure this is a valid invoice. If
+        there is an error, returns the error, otherwise returns
+        false. Called by the insert and replace methods.
+
+    previous
+        Returns a list consisting of the total previous balance for
+        this customer, followed by the previous outstanding invoices
+        (as FS::cust_bill objects also).
+
+    cust_bill_pkg
+        Returns the line items (see the FS::cust_bill_pkg manpage)
+        for this invoice.
+
+    cust_credit
+        Returns a list consisting of the total previous credited
+        (see the FS::cust_credit manpage) for this customer,
+        followed by the previous outstanding credits
+        (FS::cust_credit objects).
+
+    cust_pay
+        Returns all payments (see the FS::cust_pay manpage) for this
+        invoice.
+
+    print_text [TIME];
+        Returns an ASCII invoice, as a list of lines.
+
+        TIME an optional value used to control the printing of
+        overdue messages. The default is now. It isn't the date of
+        the invoice; that's the `_date' field. It is specified as a
+        UNIX timestamp; see the section on "time" in the perlfunc
+        manpage. Also see the Time::Local manpage and the
+        Date::Parse manpage for conversion functions.
+
+BUGS
+    The delete method.
+
+    It doesn't properly override FS::Record yet.
+
+    print_text formatting (and some logic :/) is in source as a
+    format declaration, which needs to be slurped in from a file.
+    the fork is rather kludgy as well. It could be cleaned with
+    swrite from man perlform, and the picture could be put in a
+    /var/spool/freeside/conf file. Also number of lines ($=).
+
+    missing print_ps for a nice postscript copy (maybe HylaFAX-
+    cover-page-style or something similar so the look can be
+    completely customized?)
+
+    There is an off-by-one error in print_text which causes a visual
+    error: "Page 1 of 2" printed on some single-page invoices?
+
+SEE ALSO
+    the FS::Record manpage, the FS::cust_main manpage, the
+    FS::cust_pay manpage, the FS::cust_bill_pkg manpage, the
+    FS::cust_credit manpage, schema.html from the base
+    documentation.
+
+HISTORY
+    ivan@voicenet.com 97-jul-1
+
+    small fix for new API ivan@sisd.com 98-mar-14
+
+    charges can be negative ivan@sisd.com 98-jul-13
+
+    pod, ingegrate with FS::Invoice ivan@sisd.com 98-sep-20
+
diff --git a/htdocs/docs/man/cust_bill_pkg.txt b/htdocs/docs/man/cust_bill_pkg.txt
new file mode 100644 (file)
index 0000000..1ca4b8c
--- /dev/null
@@ -0,0 +1,72 @@
+NAME
+    FS::cust_bill_pkg - Object methods for cust_bill_pkg records
+
+SYNOPSIS
+      use FS::cust_bill_pkg;
+
+      $record = create FS::cust_bill_pkg \%hash;
+      $record = create FS::cust_bill_pkg { 'column' => 'value' };
+
+      $error = $record->insert;
+
+      $error = $new_record->replace($old_record);
+
+      $error = $record->delete;
+
+      $error = $record->check;
+
+DESCRIPTION
+    An FS::cust_bill_pkg object represents an invoice line item.
+    FS::cust_bill_pkg inherits from FS::Record. The following fields
+    are currently supported:
+
+    invnum - invoice (see the FS::cust_bill manpage)
+    pkgnum - package (see the FS::cust_pkg manpage)
+    setup - setup fee
+    recur - recurring fee
+    sdate - starting date of recurring fee
+    edate - ending date of recurring fee
+    sdate and edate are specified as UNIX timestamps; see the
+    section on "time" in the perlfunc manpage. Also see the
+    Time::Local manpage and the Date::Parse manpage for conversion
+    functions.
+
+METHODS
+    create HASHREF
+        Creates a new line item. To add the line item to the
+        database, see the section on "insert". Line items are
+        normally created by calling the bill method of a customer
+        object (see the FS::cust_main manpage).
+
+    insert
+        Adds this line item to the database. If there is an error,
+        returns the error, otherwise returns false.
+
+    delete
+        Currently unimplemented. I don't remove line items because
+        there would then be no record the items ever existed (which
+        is bad, no?)
+
+    replace OLD_RECORD
+        Currently unimplemented. This would be even more of an
+        accounting nightmare than deleteing the items. Just don't do
+        it.
+
+    check
+        Checks all fields to make sure this is a valid line item. If
+        there is an error, returns the error, otherwise returns
+        false. Called by the insert method.
+
+BUGS
+    It doesn't properly override FS::Record yet.
+
+SEE ALSO
+    the FS::Record manpage, the FS::cust_bill manpage, the
+    FS::cust_pkg manpage, the FS::cust_main manpage, schema.html
+    from the base documentation.
+
+HISTORY
+    ivan@sisd.com 98-mar-13
+
+    pod ivan@sisd.com 98-sep-21
+
diff --git a/htdocs/docs/man/cust_credit.txt b/htdocs/docs/man/cust_credit.txt
new file mode 100644 (file)
index 0000000..84591ee
--- /dev/null
@@ -0,0 +1,75 @@
+NAME
+    FS::cust_credit - Object methods for cust_credit records
+
+SYNOPSIS
+      use FS::cust_credit;
+
+      $record = create FS::cust_credit \%hash;
+      $record = create FS::cust_credit { 'column' => 'value' };
+
+      $error = $record->insert;
+
+      $error = $new_record->replace($old_record);
+
+      $error = $record->delete;
+
+      $error = $record->check;
+
+DESCRIPTION
+    An FS::cust_credit object represents a credit. FS::cust_credit
+    inherits from FS::Record. The following fields are currently
+    supported:
+
+    crednum - primary key (assigned automatically for new credits)
+    custnum - customer (see the FS::cust_main manpage)
+    amount - amount of the credit
+    credited - how much of this credit that is still outstanding, which is
+    amount minus all refunds (see the FS::cust_refund manpage).
+    _date - specified as a UNIX timestamp; see the section on "time" in the perlfunc manpage.  Also see
+    the Time::Local manpage and the Date::Parse manpage for conversion functions.
+    otaker - order taker (assigned automatically, see the FS::UID manpage)
+    reason - text
+METHODS
+    create HASHREF
+        Creates a new credit. To add the credit to the database, see
+        the section on "insert".
+
+    insert
+        Adds this credit to the database ("Posts" the credit). If
+        there is an error, returns the error, otherwise returns
+        false.
+
+        When adding new invoices, credited must be amount (or null,
+        in which case it is automatically set to amount).
+
+    delete
+        Currently unimplemented.
+
+    replace OLD_RECORD
+        Replaces the OLD_RECORD with this one in the database. If
+        there is an error, returns the error, otherwise returns
+        false.
+
+        Only credited may be changed. Credited is normally updated
+        by creating and inserting a refund (see the FS::cust_refund
+        manpage).
+
+    check
+        Checks all fields to make sure this is a valid credit. If
+        there is an error, returns the error, otherwise returns
+        false. Called by the insert and replace methods.
+
+BUGS
+    The delete method.
+
+    It doesn't properly override FS::Record yet.
+
+SEE ALSO
+    the FS::Record manpage, the FS::cust_refund manpage, the
+    FS::cust_bill manpage, schema.html from the base documentation.
+
+HISTORY
+    ivan@sisd.com 98-mar-17
+
+    pod, otaker from FS::UID ivan@sisd.com 98-sep-21
+
diff --git a/htdocs/docs/man/cust_main.txt b/htdocs/docs/man/cust_main.txt
new file mode 100644 (file)
index 0000000..df78487
--- /dev/null
@@ -0,0 +1,200 @@
+NAME
+    FS::cust_main - Object methods for cust_main records
+
+SYNOPSIS
+      use FS::cust_main;
+
+      $record = create FS::cust_main \%hash;
+      $record = create FS::cust_main { 'column' => 'value' };
+
+      $error = $record->insert;
+
+      $error = $new_record->replace($old_record);
+
+      $error = $record->delete;
+
+      $error = $record->check;
+
+      @cust_pkg = $record->all_pkgs;
+
+      @cust_pkg = $record->ncancelled_pkgs;
+
+      $error = $record->bill;
+      $error = $record->bill %options;
+      $error = $record->bill 'time' => $time;
+
+      $error = $record->collect;
+      $error = $record->collect %options;
+      $error = $record->collect 'invoice_time'   => $time,
+                                'batch_card'     => 'yes',
+                                'report_badcard' => 'yes',
+                              ;
+
+DESCRIPTION
+    An FS::cust_main object represents a customer. FS::cust_main
+    inherits from FS::Record. The following fields are currently
+    supported:
+
+    custnum - primary key (assigned automatically for new customers)
+    agentnum - agent (see the FS::agent manpage)
+    refnum - referral (see the FS::part_referral manpage)
+    first - name
+    last - name
+    ss - social security number (optional)
+    company - (optional)
+    address1
+    address2 - (optional)
+    city
+    county - (optional, see the FS::cust_main_county manpage)
+    state - (see the FS::cust_main_county manpage)
+    zip
+    country - (see the FS::cust_main_county manpage)
+    daytime - phone (optional)
+    night - phone (optional)
+    payby - `CARD' (credit cards), `BILL' (billing), or `COMP' (free)
+    payinfo - card number, P.O.#, or comp issuer (4-8 lowercase alphanumerics; think username)
+    paydate - expiration date, mm/yyyy, m/yyyy, mm/yy or m/yy
+    payname - name on card or billing name
+    tax - tax exempt, empty or `Y'
+    otaker - order taker (assigned automatically, see the FS::UID manpage)
+METHODS
+    create HASHREF
+        Creates a new customer. To add the customer to the database,
+        see the section on "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 *hash* method.
+
+    insert
+        Adds this customer to the database. If there is an error,
+        returns the error, otherwise returns false.
+
+    delete
+        Currently unimplemented. Maybe cancel all of this customer's
+        packages (cust_pkg)?
+
+        I don't remove the customer record in the database because
+        there would then be no record the customer ever existed
+        (which is bad, no?)
+
+    replace OLD_RECORD
+        Replaces the OLD_RECORD with this one in the database. If
+        there is an error, returns the error, otherwise returns
+        false.
+
+    check
+        Checks all fields to make sure this is a valid customer
+        record. If there is an error, returns the error, otherwise
+        returns false. Called by the insert and repalce methods.
+
+    all_pkgs
+        Returns all packages (see the FS::cust_pkg manpage) for this
+        customer.
+
+    ncancelled_pkgs
+        Returns all non-cancelled packages (see the FS::cust_pkg
+        manpage) for this customer.
+
+    bill OPTIONS
+        Generates invoices (see the FS::cust_bill manpage) for this
+        customer. Usually used in conjunction with the collect
+        method.
+
+        The only currently available option is `time', which bills
+        the customer as if it were that time. It is specified as a
+        UNIX timestamp; see the section on "time" in the perlfunc
+        manpage). Also see the Time::Local manpage and the
+        Date::Parse manpage for conversion functions.
+
+        If there is an error, returns the error, otherwise returns
+        false.
+
+    collect OPTIONS
+        (Attempt to) collect money for this customer's outstanding
+        invoices (see the FS::cust_bill manpage). Usually used after
+        the bill method.
+
+        Depending on the value of `payby', this may print an invoice
+        (`BILL'), charge a credit card (`CARD'), or just add any
+        necessary (pseudo-)payment (`COMP').
+
+        If there is an error, returns the error, otherwise returns
+        false.
+
+        Currently available options are:
+
+        invoice_time - Use this time when deciding when to print
+        invoices and late notices on those invoices. The default is
+        now. It is specified as a UNIX timestamp; see the section on
+        "time" in the perlfunc manpage). Also see the Time::Local
+        manpage and the Date::Parse manpage for conversion
+        functions.
+
+        batch_card - Set this true to batch cards (see the
+        cust_pay_batch manpage). By default, cards are processed
+        immediately, which will generate an error if CyberCash is
+        not installed.
+
+        report_badcard - Set this true if you want bad card
+        transactions to return an error. By default, they don't.
+
+    total_owed
+        Returns the total owed for this customer on all invoices
+        (see the FS::cust_bill manpage).
+
+    total_credited
+        Returns the total credits (see the FS::cust_credit manpage)
+        for this customer.
+
+    balance
+        Returns the balance for this customer (total owed minus
+        total credited).
+
+BUGS
+    The delete method.
+
+    It doesn't properly override FS::Record yet.
+
+    hfields should be removed.
+
+    Bill and collect options should probably be passed as references
+    instead of a list.
+
+    CyberCash v2 forces us to define some variables in package main.
+
+SEE ALSO
+    the FS::Record manpage, the FS::cust_pkg manpage, the
+    FS::cust_bill manpage, the FS::cust_credit manpage the
+    FS::cust_pay_batch manpage, the FS::agent manpage, the
+    FS::part_referral manpage, the FS::cust_main_county manpage, the
+    FS::UID manpage, schema.html from the base documentation.
+
+HISTORY
+    ivan@voicenet.com 97-jul-28
+
+    Changed to standard Business::CreditCard no more TableUtil
+    EXPORT_OK FS::Record's hfields removed unique calls and locking
+    (not needed here now) wrapped the (now) optional fields in if
+    statements in sub check (notyetdone!) ivan@sisd.com 97-nov-12
+
+    updated paydate with SQL-type date info ivan@sisd.com 98-mar-5
+
+    Added export of datasrc from UID.pm for Pg6.3 changed 'day' to
+    'daytime' because Pg6.3 reserves the day word
+    bmccane@maxbaud.net 98-apr-3
+
+    in ->create, s/svc_acct/cust_main/, now it should actually
+    eliminate the warnings it was meant to ivan@sisd.com 98-jul-16
+
+    don't require a phone number and allow '/' in company names
+    ivan@sisd.com 98-jul-18
+
+    use ut_ and rewrite &check, &*_pkgs ivan@sisd.com 98-sep-5
+
+    pod, merge with FS::Bill (about time!), total_owed,
+    total_credited and balance methods, cleaned collect method,
+    source modifications no longer necessary to enable cybercash,
+    cybercash v3 support, don't need to import
+    FS::UID::{datasrc,checkruid} ivan@sisd.com 98-sep-19-21
+
diff --git a/htdocs/docs/man/cust_main_county.txt b/htdocs/docs/man/cust_main_county.txt
new file mode 100644 (file)
index 0000000..8e99397
--- /dev/null
@@ -0,0 +1,67 @@
+NAME
+    FS::cust_main_county - Object methods for cust_main_county
+    objects
+
+SYNOPSIS
+      use FS::cust_main_county;
+
+      $record = create FS::cust_main_county \%hash;
+      $record = create FS::cust_main_county { 'column' => 'value' };
+
+      $error = $record->insert;
+
+      $error = $new_record->replace($old_record);
+
+      $error = $record->delete;
+
+      $error = $record->check;
+
+DESCRIPTION
+    An FS::cust_main_county object represents a tax rate, defined by
+    locale. FS::cust_main_county inherits from FS::Record. The
+    following fields are currently supported:
+
+    taxnum - primary key (assigned automatically for new tax rates)
+    state
+    county
+    tax - percentage
+METHODS
+    create HASHREF
+        Creates a new tax rate. To add the tax rate to the database,
+        see the section on "insert".
+
+    insert
+        Adds this tax rate to the database. If there is an error,
+        returns the error, otherwise returns false.
+
+    delete
+        Deletes this tax rate from the database. If there is an
+        error, returns the error, otherwise returns false.
+
+    replace OLD_RECORD
+        Replaces the OLD_RECORD with this one in the database. If
+        there is an error, returns the error, otherwise returns
+        false.
+
+    check
+        Checks all fields to make sure this is a valid tax rate. If
+        there is an error, returns the error, otherwise returns
+        false. Called by the insert and replace methods.
+
+BUGS
+    It doesn't properly override FS::Record yet.
+
+    A country field (and possibly a currency field) should be added.
+
+SEE ALSO
+    the FS::Record manpage, the FS::cust_main manpage, the
+    FS::cust_bill manpage, schema.html from the base documentation.
+
+HISTORY
+    ivan@voicenet.com 97-dec-16
+
+    Changed check for 'tax' to use the new ut_float subroutine
+    bmccane@maxbaud.net 98-apr-3
+
+    pod ivan@sisd.com 98-sep-21
+
diff --git a/htdocs/docs/man/cust_pay.txt b/htdocs/docs/man/cust_pay.txt
new file mode 100644 (file)
index 0000000..9f28d08
--- /dev/null
@@ -0,0 +1,66 @@
+NAME
+    FS::cust_pay - Object methods for cust_pay objects
+
+SYNOPSIS
+      use FS::cust_pay;
+
+      $record = create FS::cust_pay \%hash;
+      $record = create FS::cust_pay { 'column' => 'value' };
+
+      $error = $record->insert;
+
+      $error = $new_record->replace($old_record);
+
+      $error = $record->delete;
+
+      $error = $record->check;
+
+DESCRIPTION
+    An FS::cust_pay object represents a payment. FS::cust_pay
+    inherits from FS::Record. The following fields are currently
+    supported:
+
+    paynum - primary key (assigned automatically for new payments)
+    invnum - Invoice (see the FS::cust_bill manpage)
+    paid - Amount of this payment
+    _date - specified as a UNIX timestamp; see the section on "time" in the perlfunc manpage.  Also see
+    the Time::Local manpage and the Date::Parse manpage for conversion functions.
+    payby - `CARD' (credit cards), `BILL' (billing), or `COMP' (free)
+    payinfo - card number, P.O.#, or comp issuer (4-8 lowercase alphanumerics; think username)
+    paybatch - text field for tracking card processing
+METHODS
+    create HASHREF
+        Creates a new payment. To add the payment to the databse,
+        see the section on "insert".
+
+    insert
+        Adds this payment to the databse, and updates the invoice
+        (see the FS::cust_bill manpage).
+
+    delete
+        Currently unimplemented (accounting reasons).
+
+    replace OLD_RECORD
+        Currently unimplemented (accounting reasons).
+
+    check
+        Checks all fields to make sure this is a valid payment. If
+        there is an error, returns the error, otherwise returns
+        false. Called by the insert method.
+
+BUGS
+    It doesn't properly override FS::Record yet.
+
+    Delete and replace methods.
+
+SEE ALSO
+    the FS::Record manpage, the FS::cust_bill manpage, schema.html
+    from the base documentation.
+
+HISTORY
+    ivan@voicenet.com 97-jul-1 - 25 - 29
+
+    new api ivan@sisd.com 98-mar-13
+
+    pod ivan@sisd.com 98-sep-21
+
diff --git a/htdocs/docs/man/cust_pkg.txt b/htdocs/docs/man/cust_pkg.txt
new file mode 100644 (file)
index 0000000..5409083
--- /dev/null
@@ -0,0 +1,150 @@
+NAME
+    FS::cust_pkg - Object methods for cust_pkg objects
+
+SYNOPSIS
+      use FS::cust_pkg;
+
+      $record = create FS::cust_pkg \%hash;
+      $record = create FS::cust_pkg { 'column' => 'value' };
+
+      $error = $record->insert;
+
+      $error = $new_record->replace($old_record);
+
+      $error = $record->delete;
+
+      $error = $record->check;
+
+      $error = $record->cancel;
+
+      $error = $record->suspend;
+
+      $error = $record->unsuspend;
+
+      $error = FS::cust_pkg::order( $custnum, \@pkgparts );
+      $error = FS::cust_pkg::order( $custnum, \@pkgparts, \@remove_pkgnums ] );
+
+DESCRIPTION
+    An FS::cust_pkg object represents a customer billing item.
+    FS::cust_pkg inherits from FS::Record. The following fields are
+    currently supported:
+
+    pkgnum - primary key (assigned automatically for new billing items)
+    custnum - Customer (see the FS::cust_main manpage)
+    pkgpart - Billing item definition (see the FS::part_pkg manpage)
+    setup - date
+    bill - date
+    susp - date
+    expire - date
+    cancel - date
+    otaker - order taker (assigned automatically if null, see the FS::UID manpage)
+    Note: setup, bill, susp, expire and cancel are specified as UNIX
+    timestamps; see the section on "time" in the perlfunc manpage.
+    Also see the Time::Local manpage and the Date::Parse manpage for
+    conversion functions.
+
+METHODS
+    create HASHREF
+        Create a new billing item. To add the item to the database,
+        see the section on "insert".
+
+    insert
+        Adds this billing item to the database ("Orders" the item).
+        If there is an error, returns the error, otherwise returns
+        false.
+
+    delete
+        Currently unimplemented. You don't want to delete billing
+        items, because there would then be no record the customer
+        ever purchased the item. Instead, see the cancel method.
+
+        sub delete { return "Can't delete cust_pkg records!"; }
+
+    replace OLD_RECORD
+        Replaces the OLD_RECORD with this one in the database. If
+        there is an error, returns the error, otherwise returns
+        false.
+
+        Currently, custnum, setup, bill, susp, expire, and cancel
+        may be changed.
+
+        pkgpart may not be changed, but see the order subroutine.
+
+        setup and bill are normally updated by calling the bill
+        method of a customer object (see the FS::cust_main manpage).
+
+        suspend is normally updated by the suspend and unsuspend
+        methods.
+
+        cancel is normally updated by the cancel method (and also
+        the order subroutine in some cases).
+
+    check
+        Checks all fields to make sure this is a valid billing item.
+        If there is an error, returns the error, otherwise returns
+        false. Called by the insert and replace methods.
+
+    cancel
+        Cancels and removes all services (see the FS::cust_svc
+        manpage and the FS::part_svc manpage) in this package, then
+        cancels the package itself (sets the cancel field to now).
+
+        If there is an error, returns the error, otherwise returns
+        false.
+
+    suspend
+        Suspends all services (see the FS::cust_svc manpage and the
+        FS::part_svc manpage) in this package, then suspends the
+        package itself (sets the susp field to now).
+
+        If there is an error, returns the error, otherwise returns
+        false.
+
+    unsuspend
+        Unsuspends all services (see the FS::cust_svc manpage and
+        the FS::part_svc manpage) in this package, then unsuspends
+        the package itself (clears the susp field).
+
+        If there is an error, returns the error, otherwise returns
+        false.
+
+SUBROUTINES
+    order CUSTNUM, PKGPARTS_ARYREF, [ REMOVE_PKGNUMS_ARYREF ]
+        CUSTNUM is a customer (see the FS::cust_main manpage)
+
+        PKGPARTS is a list of pkgparts specifying the the billing
+        item definitions (see the FS::part_pkg manpage) to order for
+        this customer. Duplicates are of course permitted.
+
+        REMOVE_PKGNUMS is an optional list of pkgnums specifying the
+        billing items to remove for this customer. The services (see
+        the FS::cust_svc manpage) are moved to the new billing
+        items. An error is returned if this is not possible (see the
+        FS::pkg_svc manpage).
+
+BUGS
+    It doesn't properly override FS::Record yet.
+
+    sub order is not OO. Perhaps it should be moved to FS::cust_main
+    and made so?
+
+    In sub order, the @pkgparts array (passed by reference) is
+    clobbered.
+
+    Also in sub order, no money is adjusted. Once FS::part_pkg
+    defines a standard method to pass dates to the recur_prog
+    expression, it should do so.
+
+SEE ALSO
+    the FS::Record manpage, the FS::cust_main manpage, the
+    FS::part_pkg manpage, the FS::cust_svc manpage , the FS::pkg_svc
+    manpage, schema.html from the base documentation
+
+HISTORY
+    ivan@voicenet.com 97-jul-1 - 21
+
+    fixed for new agent->agent_type->type_pkgs in &order
+    ivan@sisd.com 98-mar-7
+
+    pod ivan@sisd.com 98-sep-21
+
diff --git a/htdocs/docs/man/cust_refund.txt b/htdocs/docs/man/cust_refund.txt
new file mode 100644 (file)
index 0000000..392a0b5
--- /dev/null
@@ -0,0 +1,66 @@
+NAME
+    FS::cust_refund - Object method for cust_refund objects
+
+SYNOPSIS
+      use FS::cust_refund;
+
+      $record = create FS::cust_refund \%hash;
+      $record = create FS::cust_refund { 'column' => 'value' };
+
+      $error = $record->insert;
+
+      $error = $new_record->replace($old_record);
+
+      $error = $record->delete;
+
+      $error = $record->check;
+
+DESCRIPTION
+    An FS::cust_refund represents a refund. FS::cust_refund inherits
+    from FS::Record. The following fields are currently supported:
+
+    refundnum - primary key (assigned automatically for new refunds)
+    crednum - Credit (see the FS::cust_credit manpage)
+    refund - Amount of the refund
+    _date - specified as a UNIX timestamp; see the section on "time" in the perlfunc manpage.  Also see
+    the Time::Local manpage and the Date::Parse manpage for conversion functions.
+    payby - `CARD' (credit cards), `BILL' (billing), or `COMP' (free)
+    payinfo - card number, P.O.#, or comp issuer (4-8 lowercase alphanumerics; think username)
+    otaker - order taker (assigned automatically, see the FS::UID manpage)
+METHODS
+    create HASHREF
+        Creates a new refund. To add the refund to the database, see
+        the section on "insert".
+
+    insert
+        Adds this refund to the database, and updates the credit
+        (see the FS::cust_credit manpage).
+
+    delete
+        Currently unimplemented (accounting reasons).
+
+    replace OLD_RECORD
+        Currently unimplemented (accounting reasons).
+
+    check
+        Checks all fields to make sure this is a valid refund. If
+        there is an error, returns the error, otherwise returns
+        false. Called by the insert method.
+
+BUGS
+    It doesn't properly override FS::Record yet.
+
+    Delete and replace methods.
+
+SEE ALSO
+    the FS::Record manpage, the FS::cust_credit manpage, schema.html
+    from the base documentation.
+
+HISTORY
+    ivan@sisd.com 98-mar-18
+
+    ->create had wrong tablename ivan@sisd.com 98-jun-16 (finish
+    me!)
+
+    pod and finish up ivan@sisd.com 98-sep-21
+
diff --git a/htdocs/docs/man/cust_svc.txt b/htdocs/docs/man/cust_svc.txt
new file mode 100644 (file)
index 0000000..d863ea8
--- /dev/null
@@ -0,0 +1,72 @@
+NAME
+    FS::cust_svc - Object method for cust_svc objects
+
+SYNOPSIS
+      use FS::cust_svc;
+
+      $record = create FS::cust_svc \%hash
+      $record = create FS::cust_svc { 'column' => 'value' };
+
+      $error = $record->insert;
+
+      $error = $new_record->replace($old_record);
+
+      $error = $record->delete;
+
+      $error = $record->check;
+
+DESCRIPTION
+    An FS::cust_svc represents a service. FS::cust_svc inherits from
+    FS::Record. The following fields are currently supported:
+
+    svcnum - primary key (assigned automatically for new services)
+    pkgnum - Package (see the FS::cust_pkg manpage)
+    svcpart - Service definition (see the FS::part_svc manpage)
+METHODS
+    create HASHREF
+        Creates a new service. To add the refund to the database,
+        see the section on "insert". Services are normally created
+        by creating FS::svc_ objects (see the FS::svc_acct manpage,
+        the FS::svc_domain manpage, and the FS::svc_acct_sm manpage,
+        among others).
+
+    insert
+        Adds this service to the database. If there is an error,
+        returns the error, otherwise returns false.
+
+    delete
+        Deletes this service from the database. If there is an
+        error, returns the error, otherwise returns false.
+
+        Called by the cancel method of the package (see the
+        FS::cust_pkg manpage).
+
+    replace OLD_RECORD
+        Replaces the OLD_RECORD with this one in the database. If
+        there is an error, returns the error, otherwise returns
+        false.
+
+    check
+        Checks all fields to make sure this is a valid service. If
+        there is an error, returns the error, otehrwise returns
+        false. Called by the insert and replace methods.
+
+BUGS
+    Behaviour of changing the svcpart of cust_svc records is
+    undefined and should possibly be prohibited, and pkg_svc records
+    are not checked.
+
+    pkg_svc records are not checket in general (here).
+
+SEE ALSO
+    the FS::Record manpage, the FS::cust_pkg manpage, the
+    FS::part_svc manpage, the FS::pkg_svc manpage, schema.html from
+    the base documentation
+
+HISTORY
+    ivan@voicenet.com 97-jul-10,14
+
+    no TableUtil, no FS::Lock ivan@sisd.com 98-mar-7
+
+    pod ivan@sisd.com 98-sep-21
+
diff --git a/htdocs/docs/man/dbdef.txt b/htdocs/docs/man/dbdef.txt
new file mode 100644 (file)
index 0000000..6f1215a
--- /dev/null
@@ -0,0 +1,80 @@
+NAME
+    FS::dbdef - Database objects
+
+SYNOPSIS
+      use FS::dbdef;
+
+      $dbdef = new FS::dbdef (@dbdef_table_objects);
+      $dbdef = load FS::dbdef "filename";
+
+      $dbdef->save("filename");
+
+      $dbdef->addtable($dbdef_table_object);
+
+      @table_names = $dbdef->tables;
+
+      $FS_dbdef_table_object = $dbdef->table;
+
+DESCRIPTION
+    FS::dbdef objects are collections of FS::dbdef_table objects and
+    represnt a database (a collection of tables).
+
+METHODS
+    new TABLE, TABLE, ...
+        Creates a new FS::dbdef object
+
+    load FILENAME
+        Loads an FS::dbdef object from a file.
+
+    save FILENAME
+        Saves an FS::dbdef object to a file.
+
+    addtable TABLE
+        Adds this FS::dbdef_table object.
+
+    tables
+        Returns the names of all tables.
+
+    table TABLENAME
+        Returns the named FS::dbdef_table object.
+
+BUGS
+        Each FS::dbdef object should have a name which corresponds
+        to its name within the SQL database engine.
+
+SEE ALSO
+        the FS::dbdef_table manpage, the FS::Record manpage,
+
+HISTORY
+        beginning of abstraction into a class (not really)
+
+        ivan@sisd.com 97-dec-4
+
+        added primary_key ivan@sisd.com 98-jan-20
+
+        added datatype (very kludgy and needs to be cleaned)
+        ivan@sisd.com 98-feb-21
+
+        perltrap (sigh) masked by mysql 3.20->3,21 ivan@sisd.com 98-
+        mar-2
+
+        Change 'type' to 'atype' in agent_type Changed attributes to
+        special words which are changed in fs-setup ie. double(10,2)
+        <=> MONEYTYPE Changed order of some of the field definitions
+        because Pg6.3 is picky Changed 'day' to 'daytime' in
+        cust_main Changed type of tax from tinyint to real Change
+        'password' to '_password' in svc_acct Pg6.3 does not allow
+        'field char(x) NULL' bmccane@maxbaud.net 98-apr-3
+
+        rewrite: now properly OO. See also
+        FS::dbdef_{table,column,unique,index}
+
+        ivan@sisd.com 98-apr-17
+
+        gained some extra functions ivan@sisd.com 98-may-11
+
+        now knows how to Freeze and Thaw itself ivan@sisd.com 98-
+        jun-2
+
+        pod ivan@sisd.com 98-sep-23
+
diff --git a/htdocs/docs/man/dbdef_colgroup.txt b/htdocs/docs/man/dbdef_colgroup.txt
new file mode 100644 (file)
index 0000000..a7eebc6
--- /dev/null
@@ -0,0 +1,51 @@
+NAME
+    FS::dbdef_colgroup - Column group objects
+
+SYNOPSIS
+      use FS::dbdef_colgroup;
+
+      $colgroup = new FS::dbdef_colgroup ( $lol );
+      $colgroup = new FS::dbdef_colgroup (
+        [
+          [ 'single_column' ],
+          [ 'multiple_columns', 'another_column', ],
+        ]
+      );
+
+      @sql_lists = $colgroup->sql_list;
+
+      @singles = $colgroup->singles;
+
+DESCRIPTION
+    FS::dbdef_colgroup objects represent sets of sets of columns.
+
+METHODS
+    new Creates a new FS::dbdef_colgroup object.
+
+    sql_list
+        Returns a flat list of comma-separated values, for SQL
+        statements.
+
+    singles
+        Returns a flat list of all single item lists.
+
+BUGS
+SEE ALSO
+    the FS::dbdef_table manpage, the FS::dbdef_unique manpage, the
+    FS::dbdef_index manpage, the FS::dbdef_column manpage, the
+    FS::dbdef manpage, the perldsc manpage
+
+HISTORY
+    class for dealing with groups of groups of columns (used as a
+    base class by FS::dbdef_{unique,index} )
+
+    ivan@sisd.com 98-apr-19
+
+    added singles, fixed sql_list to skip empty lists ivan@sisd.com
+    98-jun-2
+
+    untaint things we're returning in sub singels ivan@sisd.com 98-
+    jun-4
+
+    pod ivan@sisd.com 98-sep-24
+
diff --git a/htdocs/docs/man/dbdef_column.txt b/htdocs/docs/man/dbdef_column.txt
new file mode 100644 (file)
index 0000000..93e2395
--- /dev/null
@@ -0,0 +1,69 @@
+NAME
+    FS::dbdef_column - Column object
+
+SYNOPSIS
+      use FS::dbdef_column;
+
+      $column_object = new FS::dbdef_column ( $name, $sql_type, '' );
+      $column_object = new FS::dbdef_column ( $name, $sql_type, 'NULL' );
+      $column_object = new FS::dbdef_column ( $name, $sql_type, '', $length );
+      $column_object = new FS::dbdef_column ( $name, $sql_type, 'NULL', $length );
+
+      $name = $column_object->name;
+      $column_object->name ( 'name' );
+
+      $name = $column_object->type;
+      $column_object->name ( 'sql_type' );
+
+      $name = $column_object->null;
+      $column_object->name ( 'NOT NULL' );
+
+      $name = $column_object->length;
+      $column_object->name ( $length );
+
+      $sql_line = $column->line;
+      $sql_line = $column->line $datasrc;
+
+DESCRIPTION
+    FS::dbdef::column objects represend columns in tables (see the
+    FS::dbdef_table manpage).
+
+METHODS
+    new Creates a new FS::dbdef_column object.
+
+    name
+        Returns or sets the column name.
+
+    type
+        Returns or sets the column type.
+
+    null
+        Returns or sets the column null flag.
+
+    type
+        Returns or sets the column length.
+
+    line [ $datasrc ]
+        Returns an SQL column definition.
+
+        If passed a DBI $datasrc specifying the DBD::mysql manpage,
+        will use MySQL-specific syntax. Non-standard syntax for
+        other engines (if applicable) may also be supported in the
+        future.
+
+BUGS
+SEE ALSO
+    the FS::dbdef_table manpage, the FS::dbdef manpage, the DBI
+    manpage
+
+HISTORY
+    class for dealing with column definitions
+
+    ivan@sisd.com 98-apr-17
+
+    now methods can be used to get or set data ivan@sisd.com 98-may-
+    11
+
+    mySQL-specific hack for null (what should be default?)
+    ivan@sisd.com 98-jun-2
+
diff --git a/htdocs/docs/man/dbdef_index.txt b/htdocs/docs/man/dbdef_index.txt
new file mode 100644 (file)
index 0000000..8cf339b
--- /dev/null
@@ -0,0 +1,27 @@
+NAME
+    FS::dbdef_unique.pm - Index object
+
+SYNOPSIS
+      use FS::dbdef_index;
+
+        # see FS::dbdef_colgroup methods
+
+DESCRIPTION
+    FS::dbdef_unique objects represent the (non-unique) indices of a
+    table (the FS::dbdef_table manpage). FS::dbdef_unique inherits
+    from FS::dbdef_colgroup.
+
+BUGS
+    Is this empty subclass needed?
+
+SEE ALSO
+    the FS::dbdef_colgroup manpage, the FS::dbdef_record manpage,
+    the FS::Record manpage
+
+HISTORY
+    class for dealing with index definitions
+
+    ivan@sisd.com 98-apr-19
+
+    pod ivan@sisd.com 98-sep-24
+
diff --git a/htdocs/docs/man/dbdef_table.txt b/htdocs/docs/man/dbdef_table.txt
new file mode 100644 (file)
index 0000000..25e010d
--- /dev/null
@@ -0,0 +1,94 @@
+NAME
+    FS::dbdef_table - Table objects
+
+SYNOPSIS
+      use FS::dbdef_table;
+
+      $dbdef_table = new FS::dbdef_table (
+        "table_name",
+        "primary_key",
+        $FS_dbdef_unique_object,
+        $FS_dbdef_index_object,
+        @FS_dbdef_column_objects,
+      );
+
+      $dbdef_table->addcolumn ( $FS_dbdef_column_object );
+
+      $table_name = $dbdef_table->name;
+      $dbdef_table->name ("table_name");
+
+      $table_name = $dbdef_table->primary_keye;
+      $dbdef_table->primary_key ("primary_key");
+
+      $FS_dbdef_unique_object = $dbdef_table->unique;
+      $dbdef_table->unique ( $FS_dbdef_unique_object );
+
+      $FS_dbdef_index_object = $dbdef_table->index;
+      $dbdef_table->index ( $FS_dbdef_index_object );
+
+      @column_names = $dbdef->columns;
+
+      $FS_dbdef_column_object = $dbdef->column;
+
+      @sql_statements = $dbdef->sql_create_table;
+      @sql_statements = $dbdef->sql_create_table $datasrc;
+
+DESCRIPTION
+    FS::dbdef_table objects represent a single database table.
+
+METHODS
+    new Creates a new FS::dbdef_table object.
+
+    addcolumn
+        Adds this FS::dbdef_column object.
+
+    name
+        Returns or sets the table name.
+
+    primary_key
+        Returns or sets the primary key.
+
+    unique
+        Returns or sets the FS::dbdef_unique object.
+
+    index
+        Returns or sets the FS::dbdef_index object.
+
+    columns
+        Returns a list consisting of the names of all columns.
+
+    column "column"
+        Returns the column object (see the FS::dbdef_column manpage)
+        for "column".
+
+    sql_create_table [ $datasrc ]
+        Returns an array of SQL statments to create this table.
+
+        If passed a DBI $datasrc specifying the DBD::mysql manpage,
+        will use MySQL-specific syntax. Non-standard syntax for
+        other engines (if applicable) may also be supported in the
+        future.
+
+BUGS
+SEE ALSO
+    the FS::dbdef manpage, the FS::dbdef_unique manpage, the
+    FS::dbdef_index manpage, the FS::dbdef_unique manpage, the DBI
+    manpage
+
+HISTORY
+    class for dealing with table definitions
+
+    ivan@sisd.com 98-apr-18
+
+    gained extra functions (should %columns be an IxHash?)
+    ivan@sisd.com 98-may-11
+
+    sql_create_table returns a list of statments, not just one, and
+    now it does indices (plus mysql hack) ivan@sisd.com 98-jun-2
+
+    untaint primary_key... hmm. is this a hack around a bigger
+    problem? looks like, did the same thing singles in colgroup!
+    ivan@sisd.com 98-jun-4
+
+    pod ivan@sisd.com 98-sep-24
+
diff --git a/htdocs/docs/man/dbdef_unique.txt b/htdocs/docs/man/dbdef_unique.txt
new file mode 100644 (file)
index 0000000..0e4f015
--- /dev/null
@@ -0,0 +1,27 @@
+NAME
+    FS::dbdef_unique.pm - Unique object
+
+SYNOPSIS
+      use FS::dbdef_unique;
+
+      # see FS::dbdef_colgroup methods
+
+DESCRIPTION
+    FS::dbdef_unique objects represent the unique indices of a
+    database table (the FS::dbdef_table manpage). FS::dbdef_unique
+    inherits from FS::dbdef_colgroup.
+
+BUGS
+    Is this empty subclass needed?
+
+SEE ALSO
+    the FS::dbdef_colgroup manpage, the FS::dbdef_record manpage,
+    the FS::Record manpage
+
+HISTORY
+    class for dealing with unique definitions
+
+    ivan@sisd.com 98-apr-19
+
+    pod ivan@sisd.com 98-sep-24
+
diff --git a/htdocs/docs/man/index.html b/htdocs/docs/man/index.html
new file mode 100644 (file)
index 0000000..4f33dd4
--- /dev/null
@@ -0,0 +1,48 @@
+<head>
+  <title>Perl API</title>
+</head>
+<body>
+  <h1>Perl API</h1>
+  <ul>
+<li><a href="agent.txt">FS::agent</a>
+<li><a href="agent_type.txt">FS::agent_type</a>
+<li><a href="cust_bill.txt">FS::cust_bill</a>
+<li><a href="cust_bill_pkg.txt">FS::cust_bill_pkg</a>
+<li><a href="cust_credit.txt">FS::cust_credit</a>
+<li><a href="cust_main.txt">FS::cust_main</a>
+<li><a href="cust_main_county.txt">FS::cust_main_county</a>
+<li><a href="cust_pay.txt">FS::cust_pay</a>
+<li><a href="cust_pkg.txt">FS::cust_pkg</a>
+<li><a href="cust_refund.txt">FS::cust_refund</a>
+<li><a href="cust_svc.txt">FS::cust_svc</a>
+<li><a href="part_pkg.txt">FS::part_pkg</a>
+<li><a href="part_referral.txt">FS::part_referral</a>
+<li><a href="part_svc.txt">FS::part_svc</a>
+<li><a href="pkg_svc.txt">FS::pkg_svc</a>
+<li><a href="svc_acct.txt">FS::svc_acct</a>
+<li><a href="svc_acct_pop.txt">FS::svc_acct_pop</a>
+<li><a href="svc_acct_sm.txt">FS::svc_acct_sm</a>
+<li><a href="svc_domain.txt">FS::svc_domain</a>
+<li><a href="type_pkgs.txt">FS::type_pkgs</a>
+</ul>
+<br>
+<ul>
+<li><a href="Bill.txt">FS::Bill</a>
+<li><a href="CGI.txt">FS::CGI</a>
+<li><a href="Conf.txt">FS::Conf</a>
+<li><a href="Invoice.txt">FS::Invoice</a>
+<li><a href="Record.txt">FS::Record</a>
+<li><a href="SSH.txt">FS::SSH</a>
+<li><a href="UID.txt">FS::UID</a>
+</ul>
+<br>
+<ul>
+<li><a href="dbdef.txt">FS::dbdef</a>
+<li><a href="dbdef_colgroup.txt">FS::dbdef_colgroup</a>
+<li><a href="dbdef_column.txt">FS::dbdef_column</a>
+<li><a href="dbdef_index.txt">FS::dbdef_index</a>
+<li><a href="dbdef_table.txt">FS::dbdef_table</a>
+<li><a href="dbdef_unique.txt">FS::dbdef_unique</a>
+
+<ul>
+</body>
diff --git a/htdocs/docs/man/part_pkg.txt b/htdocs/docs/man/part_pkg.txt
new file mode 100644 (file)
index 0000000..dc1bce4
--- /dev/null
@@ -0,0 +1,73 @@
+NAME
+    FS::part_pkg - Object methods for part_pkg objects
+
+SYNOPSIS
+      use FS::part_pkg;
+
+      $record = create FS::part_pkg \%hash
+      $record = create FS::part_pkg { 'column' => 'value' };
+
+      $error = $record->insert;
+
+      $error = $new_record->replace($old_record);
+
+      $error = $record->delete;
+
+      $error = $record->check;
+
+DESCRIPTION
+    An FS::part_pkg represents a billing item definition.
+    FS::part_pkg inherits from FS::Record. The following fields are
+    currently supported:
+
+    pkgpart - primary key (assigned automatically for new billing item definitions)
+    pkg - Text name of this billing item definition (customer-viewable)
+    comment - Text name of this billing item definition (non-customer-viewable)
+    setup - Setup fee
+    freq - Frequency of recurring fee
+    recur - Recurring fee
+    setup and recur are evaluated as Safe perl expressions. You can
+    use numbers just as you would normally. More advanced semantics
+    are not yet defined.
+
+METHODS
+    create HASHREF
+        Creates a new billing item definition. To add the billing
+        item definition to the database, see the section on
+        "insert".
+
+    insert
+        Adds this billing item definition to the database. If there
+        is an error, returns the error, otherwise returns false.
+
+    delete
+        Currently unimplemented.
+
+    replace OLD_RECORD
+        Replaces OLD_RECORD with this one in the database. If there
+        is an error, returns the error, otherwise returns false.
+
+    check
+        Checks all fields to make sure this is a valid billing item
+        definition. If there is an error, returns the error,
+        otherwise returns false. Called by the insert and replace
+        methods.
+
+BUGS
+    It doesn't properly override FS::Record yet.
+
+    The delete method is unimplemented.
+
+    setup and recur semantics are not yet defined (and are
+    implemented in FS::cust_bill. hmm.).
+
+SEE ALSO
+    the FS::Record manpage, the FS::cust_pkg manpage, the
+    FS::type_pkgs manpage, the FS::pkg_svc manpage, the Safe
+    manpage. schema.html from the base documentation.
+
+HISTORY
+    ivan@sisd.com 97-dec-5
+
+    pod ivan@sisd.com 98-sep-21
+
diff --git a/htdocs/docs/man/part_referral.txt b/htdocs/docs/man/part_referral.txt
new file mode 100644 (file)
index 0000000..5349963
--- /dev/null
@@ -0,0 +1,63 @@
+NAME
+    FS::part_referral - Object methods for part_referral objects
+
+SYNOPSIS
+      use FS::part_referral;
+
+      $record = create FS::part_referral \%hash
+      $record = create FS::part_referral { 'column' => 'value' };
+
+      $error = $record->insert;
+
+      $error = $new_record->replace($old_record);
+
+      $error = $record->delete;
+
+      $error = $record->check;
+
+DESCRIPTION
+    An FS::part_referral represents a referral - where a customer
+    heard of your services. This can be used to track the
+    effectiveness of a particular piece of advertising, for example.
+    FS::part_referral inherits from FS::Record. The following fields
+    are currently supported:
+
+    refnum - primary key (assigned automatically for new referrals)
+    referral - Text name of this referral
+METHODS
+    create HASHREF
+        Creates a new referral. To add the referral to the database,
+        see the section on "insert".
+
+    insert
+        Adds this referral to the database. If there is an error,
+        returns the error, otherwise returns false.
+
+    delete
+        Currently unimplemented.
+
+    replace OLD_RECORD
+        Replaces OLD_RECORD with this one in the database. If there
+        is an error, returns the error, otherwise returns false.
+
+    check
+        Checks all fields to make sure this is a valid referral. If
+        there is an error, returns the error, otherwise returns
+        false. Called by the insert and replace methods.
+
+BUGS
+    It doesn't properly override FS::Record yet.
+
+    The delete method is unimplemented.
+
+SEE ALSO
+    the FS::Record manpage, the FS::cust_main manpage, schema.html
+    from the base documentation.
+
+HISTORY
+    Class dealing with referrals
+
+    ivan@sisd.com 98-feb-23
+
+    pod ivan@sisd.com 98-sep-21
+
diff --git a/htdocs/docs/man/part_svc.txt b/htdocs/docs/man/part_svc.txt
new file mode 100644 (file)
index 0000000..680944e
--- /dev/null
@@ -0,0 +1,69 @@
+NAME
+    FS::part_svc - Object methods for part_svc objects
+
+SYNOPSIS
+      use FS::part_svc;
+
+      $record = create FS::part_referral \%hash
+      $record = create FS::part_referral { 'column' => 'value' };
+
+      $error = $record->insert;
+
+      $error = $new_record->replace($old_record);
+
+      $error = $record->delete;
+
+      $error = $record->check;
+
+DESCRIPTION
+    An FS::part_svc represents a service definition. FS::part_svc
+    inherits from FS::Record. The following fields are currently
+    supported:
+
+    svcpart - primary key (assigned automatically for new service definitions)
+    svc - text name of this service definition
+    svcdb - table used for this service.  See the FS::svc_acct manpage,
+    the FS::svc_domain manpage, and the FS::svc_acct_sm manpage, among others.
+    *svcdb*__*field* - Default or fixed value for *field* in *svcdb*.
+    *svcdb*__*field*_flag - defines *svcdb*__*field* action: null, `D' for default, or `F' for fixed
+METHODS
+    create HASHREF
+        Creates a new service definition. To add the service
+        definition to the database, see the section on "insert".
+
+    insert
+        Adds this service definition to the database. If there is an
+        error, returns the error, otherwise returns false.
+
+    delete
+        Currently unimplemented.
+
+    replace OLD_RECORD
+        Replaces OLD_RECORD with this one in the database. If there
+        is an error, returns the error, otherwise returns false.
+
+    check
+        Checks all fields to make sure this is a valid service
+        definition. If there is an error, returns the error,
+        otherwise returns false. Called by the insert and replace
+        methods.
+
+BUGS
+    It doesn't properly override FS::Record yet.
+
+    Delete is unimplemented.
+
+SEE ALSO
+    the FS::Record manpage, the FS::part_pkg manpage, the
+    FS::pkg_svc manpage, the FS::cust_svc manpage, the FS::svc_acct
+    manpage, the FS::svc_acct_sm manpage, the FS::svc_domain
+    manpage, schema.html from the base documentation.
+
+HISTORY
+    ivan@sisd.com 97-nov-14
+
+    data checking/untainting calls into FS::Record added
+    ivan@sisd.com 97-dec-6
+
+    pod ivan@sisd.com 98-sep-21
+
diff --git a/htdocs/docs/man/pkg_svc.txt b/htdocs/docs/man/pkg_svc.txt
new file mode 100644 (file)
index 0000000..bde0043
--- /dev/null
@@ -0,0 +1,61 @@
+NAME
+    FS::pkg_svc - Object methods for pkg_svc records
+
+SYNOPSIS
+      use FS::pkg_svc;
+
+      $record = create FS::pkg_svc \%hash;
+      $record = create FS::pkg_svc { 'column' => 'value' };
+
+      $error = $record->insert;
+
+      $error = $new_record->replace($old_record);
+
+      $error = $record->delete;
+
+      $error = $record->check;
+
+DESCRIPTION
+    An FS::pkg_svc record links a billing item definition (see the
+    FS::part_pkg manpage) to a service definition (see the
+    FS::part_svc manpage). FS::pkg_svc inherits from FS::Record. The
+    following fields are currently supported:
+
+    pkgpart - Billing item definition (see the FS::part_pkg manpage)
+    svcpart - Service definition (see the FS::part_svc manpage)
+    quantity - Quantity of this service definition that this billing item
+    definition includes
+METHODS
+    create HASHREF
+        Create a new record. To add the record to the database, see
+        the section on "insert".
+
+    insert
+        Adds this record to the database. If there is an error,
+        returns the error, otherwise returns false.
+
+    delete
+        Deletes this record from the database. If there is an error,
+        returns the error, otherwise returns false.
+
+    replace OLD_RECORD
+        Replaces OLD_RECORD with this one in the database. If there
+        is an error, returns the error, otherwise returns false.
+
+    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.
+
+BUGS
+    It doesn't properly override FS::Record yet.
+
+SEE ALSO
+    the FS::Record manpage, the FS::part_pkg manpage, the
+    FS::part_svc manpage, schema.html from the base documentation.
+
+HISTORY
+    ivan@voicenet.com 97-jul-1 added hfields ivan@sisd.com 97-nov-13
+
+    pod ivan@sisd.com 98-sep-22
+
diff --git a/htdocs/docs/man/svc_acct.txt b/htdocs/docs/man/svc_acct.txt
new file mode 100644 (file)
index 0000000..1c9caf5
--- /dev/null
@@ -0,0 +1,168 @@
+NAME
+    FS::svc_acct - Object methods for svc_acct records
+
+SYNOPSIS
+      use FS::svc_acct;
+
+      $record = create FS::svc_acct \%hash;
+      $record = create FS::svc_acct { 'column' => 'value' };
+
+      $error = $record->insert;
+
+      $error = $new_record->replace($old_record);
+
+      $error = $record->delete;
+
+      $error = $record->check;
+
+      $error = $record->suspend;
+
+      $error = $record->unsuspend;
+
+      $error = $record->cancel;
+
+DESCRIPTION
+    An FS::svc_acct object represents an account. FS::svc_acct
+    inherits from FS::Record. The following fields are currently
+    supported:
+
+    svcnum - primary key (assigned automatcially for new accounts)
+    username
+    _password - generated if blank
+    popnum - Point of presence (see the FS::svc_acct_pop manpage)
+    uid
+    gid
+    finger - GECOS
+    dir - set automatically if blank (and uid is not)
+    shell
+    quota - (unimplementd)
+    slipip - IP address
+    radius_*Radius_Attribute* - *Radius-Attribute*
+METHODS
+    create HASHREF
+        Creates a new account. To add the account to the database,
+        see the section on "insert".
+
+    insert
+        Adds this account to the database. If there is an error,
+        returns the error, otherwise returns false.
+
+        The additional fields pkgnum and svcpart (see the
+        FS::cust_svc manpage) should be defined. An FS::cust_svc
+        record will be created and inserted.
+
+        If the configuration value (see the FS::Conf manpage)
+        shellmachine exists, and the username, uid, and dir fields
+        are defined, the command
+
+          useradd -d $dir -m -s $shell -u $uid $username
+
+        is executed on shellmachine via ssh. This behaviour can be
+        surpressed by setting $FS::svc_acct::nossh_hack true.
+
+    delete
+        Deletes this account from the database. If there is an
+        error, returns the error, otherwise returns false.
+
+        The corresponding FS::cust_svc record will be deleted as
+        well.
+
+        If the configuration value (see the FS::Conf manpage)
+        shellmachine exists, the command:
+
+          userdel $username
+
+        is executed on shellmachine via ssh. This behaviour can be
+        surpressed by setting $FS::svc_acct::nossh_hack true.
+
+    replace OLD_RECORD
+        Replaces OLD_RECORD with this one in the database. If there
+        is an error, returns the error, otherwise returns false.
+
+        If the configuration value (see the FS::Conf manpage)
+        shellmachine exists, and the dir field has changed, the
+        command:
+
+          [ -d $old_dir ] && (
+            chmod u+t $old_dir;
+            umask 022;
+            mkdir $new_dir;
+            cd $old_dir;
+            find . -depth -print | cpio -pdm $new_dir;
+            chmod u-t $new_dir;
+            chown -R $uid.$gid $new_dir;
+            rm -rf $old_dir
+          )
+
+        is executed on shellmachine via ssh. This behaviour can be
+        surpressed by setting $FS::svc_acct::nossh_hack true.
+
+    suspend
+        Suspends this account by prefixing *SUSPENDED* to the
+        password. If there is an error, returns the error, otherwise
+        returns false.
+
+        Called by the suspend method of FS::cust_pkg (see the
+        FS::cust_pkg manpage).
+
+    unsuspend
+        Unsuspends this account by removing *SUSPENDED* from the
+        password. If there is an error, returns the error, otherwise
+        returns false.
+
+        Called by the unsuspend method of FS::cust_pkg (see the
+        FS::cust_pkg manpage).
+
+    cancel
+        Just returns false (no error) for now.
+
+        Called by the cancel method of FS::cust_pkg (see the
+        FS::cust_pkg manpage).
+
+    check
+        Checks all fields to make sure this is a valid service. If
+        there is an error, returns the error, otherwise returns
+        false. Called by the insert and replace methods.
+
+        Sets any fixed values; see the FS::part_svc manpage.
+
+BUGS
+    It doesn't properly override FS::Record yet.
+
+    The remote commands should be configurable.
+
+    The create method should set defaults from part_svc (like the
+    check method sets fixed values).
+
+SEE ALSO
+    the FS::Record manpage, the FS::Conf manpage, the FS::cust_svc
+    manpage, the FS::part_svc manpage, the FS::cust_pkg manpage, the
+    FS::SSH manpage, the ssh manpage, the FS::svc_acct_pop manpage,
+    schema.html from the base documentation.
+
+HISTORY
+    ivan@voicenet.com 97-jul-16 - 21
+
+    rewrite (among other things, now know about part_svc)
+    ivan@sisd.com 98-mar-8
+
+    Changed 'password' to '_password' because Pg6.3 reserves the
+    password word bmccane@maxbaud.net 98-apr-3
+
+    username length and shell no longer hardcoded ivan@sisd.com 98-
+    jun-28
+
+    eww but needed: ignore uid duplicates for 'fax' and 'hylafax'
+    ivan@sisd.com 98-jun-29
+
+    $nossh_hack ivan@sisd.com 98-jul-13
+
+    protections against UID/GID of 0 for incorrectly-setup RDBMSs
+    (also in bin/svc_acct.export) ivan@sisd.com 98-jul-13
+
+    arbitrary radius attributes ivan@sisd.com 98-aug-13
+
+    /var/spool/freeside/conf/shellmachine ivan@sisd.com 98-aug-13
+
+    pod and FS::conf ivan@sisd.com 98-sep-22
+
diff --git a/htdocs/docs/man/svc_acct_pop.txt b/htdocs/docs/man/svc_acct_pop.txt
new file mode 100644 (file)
index 0000000..ac09654
--- /dev/null
@@ -0,0 +1,65 @@
+NAME
+    FS::svc_acct_pop - Object methods for svc_acct_pop records
+
+SYNOPSIS
+      use FS::svc_acct_pop;
+
+      $record = create FS::svc_acct_pop \%hash;
+      $record = create FS::svc_acct_pop { 'column' => 'value' };
+
+      $error = $record->insert;
+
+      $error = $new_record->replace($old_record);
+
+      $error = $record->delete;
+
+      $error = $record->check;
+
+DESCRIPTION
+    An FS::svc_acct object represents an point of presence.
+    FS::svc_acct_pop inherits from FS::Record. The following fields
+    are currently supported:
+
+    popnum - primary key (assigned automatically for new accounts)
+    city
+    state
+    ac - area code
+    exch - exchange
+METHODS
+    create HASHREF
+        Creates a new point of presence (if only it were that
+        easy!). To add the point of presence to the database, see
+        the section on "insert".
+
+    insert
+        Adds this point of presence to the databaes. If there is an
+        error, returns the error, otherwise returns false.
+
+    delete
+        Currently unimplemented.
+
+    replace OLD_RECORD
+        Replaces OLD_RECORD with this one in the database. If there
+        is an error, returns the error, otherwise returns false.
+
+    check
+        Checks all fields to make sure this is a valid point of
+        presence. If there is an error, returns the error, otherwise
+        returns false. Called by the insert and replace methods.
+
+BUGS
+    It doesn't properly override FS::Record yet.
+
+    It should be renamed to part_pop.
+
+SEE ALSO
+    the FS::Record manpage, the svc_acct manpage, schema.html from
+    the base documentation.
+
+HISTORY
+    Class dealing with pops
+
+    ivan@sisd.com 98-mar-8
+
+    pod ivan@sisd.com 98-sep-23
+
diff --git a/htdocs/docs/man/svc_acct_sm.txt b/htdocs/docs/man/svc_acct_sm.txt
new file mode 100644 (file)
index 0000000..e9940af
--- /dev/null
@@ -0,0 +1,121 @@
+NAME
+    FS::svc_acct_sm - Object methods for svc_acct_sm records
+
+SYNOPSIS
+      use FS::svc_acct_sm;
+
+      $record = create FS::svc_acct_sm \%hash;
+      $record = create FS::svc_acct_sm { 'column' => 'value' };
+
+      $error = $record->insert;
+
+      $error = $new_record->replace($old_record);
+
+      $error = $record->delete;
+
+      $error = $record->check;
+
+      $error = $record->suspend;
+
+      $error = $record->unsuspend;
+
+      $error = $record->cancel;
+
+DESCRIPTION
+    An FS::svc_acct object represents a virtual mail alias.
+    FS::svc_acct inherits from FS::Record. The following fields are
+    currently supported:
+
+    svcnum - primary key (assigned automatcially for new accounts)
+    domsvc - svcnum of the virtual domain (see the FS::svc_domain manpage)
+    domuid - uid of the target account (see the FS::svc_acct manpage)
+    domuser - virtual username
+METHODS
+    create HASHREF
+        Creates a new virtual mail alias. To add the virtual mail
+        alias to the database, see the section on "insert".
+
+    insert
+        Adds this virtual mail alias to the database. If there is an
+        error, returns the error, otherwise returns false.
+
+        The additional fields pkgnum and svcpart (see the
+        FS::cust_svc manpage) should be defined. An FS::cust_svc
+        record will be created and inserted.
+
+        If the configuration values (see the FS::Conf manpage)
+        shellmachine and qmailmachines exist, and domuser is `*'
+        (meaning a catch-all mailbox), the command:
+
+          [ -e $dir/.qmail-$qdomain-default ] || {
+            touch $dir/.qmail-$qdomain-default;
+            chown $uid:$gid $dir/.qmail-$qdomain-default;
+          }
+
+        is executed on shellmachine via ssh (see the section on
+        "EXTENSION ADDRESSES" in the dot-qmail manpage). This
+        behaviour can be surpressed by setting
+        $FS::svc_acct_sm::nossh_hack true.
+
+    delete
+        Deletes this virtual mail alias from the database. If there
+        is an error, returns the error, otherwise returns false.
+
+        The corresponding FS::cust_svc record will be deleted as
+        well.
+
+    replace OLD_RECORD
+        Replaces OLD_RECORD with this one in the database. If there
+        is an error, returns the error, otherwise returns false.
+
+    suspend
+        Just returns false (no error) for now.
+
+        Called by the suspend method of FS::cust_pkg (see the
+        FS::cust_pkg manpage).
+
+    unsuspend
+        Just returns false (no error) for now.
+
+        Called by the unsuspend method of FS::cust_pkg (see the
+        FS::cust_pkg manpage).
+
+    cancel
+        Just returns false (no error) for now.
+
+        Called by the cancel method of FS::cust_pkg (see the
+        FS::cust_pkg manpage).
+
+    check
+        Checks all fields to make sure this is a valid virtual mail
+        alias. If there is an error, returns the error, otherwise
+        returns false. Called by the insert and replace methods.
+
+        Sets any fixed values; see the FS::part_svc manpage.
+
+BUGS
+    It doesn't properly override FS::Record yet.
+
+    The remote commands should be configurable.
+
+SEE ALSO
+    the FS::Record manpage, the FS::Conf manpage, the FS::cust_svc
+    manpage, the FS::part_svc manpage, the FS::cust_pkg manpage, the
+    FS::svc_acct manpage, the FS::svc_domain manpage, the FS::SSH
+    manpage, the ssh manpage, the dot-qmail manpage, schema.html
+    from the base documentation.
+
+HISTORY
+    ivan@voicenet.com 97-jul-16 - 21
+
+    rewrite ivan@sisd.com 98-mar-10
+
+    s/qsearchs/qsearch/ to eliminate warning ivan@sisd.com 98-apr-19
+
+    uses conf/shellmachine and has an nossh_hack ivan@sisd.com 98-
+    jul-14
+
+    s/\./:/g in .qmail-domain:com ivan@sisd.com 98-aug-13
+
+    pod, FS::Conf, moved .qmail file from check to insert 98-sep-23
+
diff --git a/htdocs/docs/man/svc_domain.txt b/htdocs/docs/man/svc_domain.txt
new file mode 100644 (file)
index 0000000..03d3dbc
--- /dev/null
@@ -0,0 +1,131 @@
+NAME
+    FS::svc_domain - Object methods for svc_domain records
+
+SYNOPSIS
+      use FS::svc_domain;
+
+      $record = create FS::svc_domain \%hash;
+      $record = create FS::svc_domain { 'column' => 'value' };
+
+      $error = $record->insert;
+
+      $error = $new_record->replace($old_record);
+
+      $error = $record->delete;
+
+      $error = $record->check;
+
+      $error = $record->suspend;
+
+      $error = $record->unsuspend;
+
+      $error = $record->cancel;
+
+DESCRIPTION
+    An FS::svc_domain object represents a domain. FS::svc_domain
+    inherits from FS::Record. The following fields are currently
+    supported:
+
+    svcnum - primary key (assigned automatically for new accounts)
+    domain
+METHODS
+    create HASHREF
+        Creates a new domain. To add the domain to the database, see
+        the section on "insert".
+
+    insert
+        Adds this domain to the database. If there is an error,
+        returns the error, otherwise returns false.
+
+        The additional fields *pkgnum* and *svcpart* (see the
+        FS::cust_svc manpage) should be defined. An FS::cust_svc
+        record will be created and inserted.
+
+        The additional field *action* should be set to *N* for new
+        domains or *M* for transfers.
+
+        A registration or transfer email will be submitted unless
+        $FS::svc_domain::whois_hack is true.
+
+    delete
+        Deletes this domain from the database. If there is an error,
+        returns the error, otherwise returns false.
+
+        The corresponding FS::cust_svc record will be deleted as
+        well.
+
+    replace OLD_RECORD
+        Replaces OLD_RECORD with this one in the database. If there
+        is an error, returns the error, otherwise returns false.
+
+    suspend
+        Just returns false (no error) for now.
+
+        Called by the suspend method of FS::cust_pkg (see the
+        FS::cust_pkg manpage).
+
+    unsuspend
+        Just returns false (no error) for now.
+
+        Called by the unsuspend method of FS::cust_pkg (see the
+        FS::cust_pkg manpage).
+
+    cancel
+        Just returns false (no error) for now.
+
+        Called by the cancel method of FS::cust_pkg (see the
+        FS::cust_pkg manpage).
+
+    check
+        Checks all fields to make sure this is a valid domain. If
+        there is an error, returns the error, otherwise returns
+        false. Called by the insert and replace methods.
+
+        Sets any fixed values; see the FS::part_svc manpage.
+
+    _whois
+        Executes the command:
+
+          whois do $domain
+
+        and returns the output.
+
+        (Always returns *No match for domian "$domain".* if
+        $FS::svc_domain::whois_hack is set true.)
+
+    submit_internic
+        Submits a registration email for this domain.
+
+BUGS
+    It doesn't properly override FS::Record yet.
+
+    All BIND/DNS fields should be included (and exported).
+
+    All registries should be supported.
+
+    Not all configuration access is through FS::Conf!
+
+    Should change action to a real field.
+
+SEE ALSO
+    the FS::Record manpage, the FS::Conf manpage, the FS::cust_svc
+    manpage, the FS::part_svc manpage, the FS::cust_pkg manpage, the
+    FS::SSH manpage, the ssh manpage, the dot-qmail manpage,
+    schema.html from the base documentation, config.html from the
+    base documentation.
+
+HISTORY
+    ivan@voicenet.com 97-jul-21
+
+    rewrite ivan@sisd.com 98-mar-10
+
+    add internic bits ivan@sisd.com 98-mar-14
+
+    Changed 'day' to 'daytime' because Pg6.3 reserves the day word
+    bmccane@maxbaud.net 98-apr-3
+
+    /var/spool/freeside/conf/registries/internic/, Mail::Internet,
+    etc. ivan@sisd.com 98-jul-17-19
+
+    pod, some FS::Conf (not complete) ivan@sisd.com 98-sep-23
+
diff --git a/htdocs/docs/man/type_pkgs.txt b/htdocs/docs/man/type_pkgs.txt
new file mode 100644 (file)
index 0000000..9822b48
--- /dev/null
@@ -0,0 +1,55 @@
+NAME
+    FS::type_pkgs - Object methods for type_pkgs records
+
+SYNOPSIS
+      use FS::type_pkgs;
+
+      $record = create FS::type_pkgs \%hash;
+      $record = create FS::type_pkgs { 'column' => 'value' };
+
+      $error = $record->insert;
+
+      $error = $new_record->replace($old_record);
+
+      $error = $record->delete;
+
+      $error = $record->check;
+
+DESCRIPTION
+    An FS::type_pkgs record links an agent type (see the
+    FS::agent_type manpage) to a billing item definition (see the
+    FS::part_pkg manpage). FS::type_pkgs inherits from FS::Record.
+    The following fields are currently supported:
+
+    typenum - Agent type, see the FS::agent_type manpage
+    pkgpart - Billing item definition, see the FS::part_pkg manpage
+METHODS
+    create HASHREF
+        Create a new record. To add the record to the database, see
+        the section on "insert".
+
+    insert
+        Adds this record to the database. If there is an error,
+        returns the error, otherwise returns false.
+
+    delete
+        Deletes this record from the database. If there is an error,
+        returns the error, otherwise returns false.
+
+    replace OLD_RECORD
+        Replaces OLD_RECORD with this one in the database. If there
+        is an error, returns the error, otherwise returns false.
+
+    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.
+
+HISTORY
+    Defines the relation between agent types and pkgparts (Which
+    pkgparts can the different [types of] agents sell?)
+
+    ivan@sisd.com 97-nov-13
+
+    change to ut_ FS::Record, fixed bugs ivan@sisd.com 97-dec-10
+