fix certain problems with third-party payment, #23579
[freeside.git] / FS / FS / Schema.pm
index 1794c12..49e8bd7 100644 (file)
@@ -3,7 +3,7 @@ package FS::Schema;
 use vars qw(@ISA @EXPORT_OK $DEBUG $setup_hack %dbdef_cache);
 use subs qw(reload_dbdef);
 use Exporter;
-use DBIx::DBSchema 0.43; #0.43 for foreign keys
+use DBIx::DBSchema 0.44; #for foreign keys with MATCH / ON DELETE/UPDATE
 use DBIx::DBSchema::Table;
 use DBIx::DBSchema::Column;
 use DBIx::DBSchema::Index;
@@ -466,7 +466,7 @@ sub tables_hashref {
   my $char_d = 80; #default maxlength for text fields
 
   #my(@date_type)  = ( 'timestamp', '', ''     );
-  my @date_type  = ( 'int', 'NULL', ''     );
+  my @date_type = ( 'int', 'NULL', ''     );
   my @perl_type = ( 'text', 'NULL', ''  ); 
   my @money_type = ( 'decimal',   '', '10,2' );
   my @money_typen = ( 'decimal',   'NULL', '10,2' );
@@ -937,6 +937,30 @@ sub tables_hashref {
                         ],
     },
 
+    'cust_event_fee' => {
+      'columns' => [
+        'eventfeenum', 'serial', '', '', '', '',
+        'eventnum',       'int', '', '', '', '',
+        'billpkgnum',     'int', 'NULL', '', '', '',
+        'feepart',        'int', '', '', '', '',
+        'nextbill',      'char', 'NULL',  1, '', '',
+      ],
+      'primary_key'  => 'eventfeenum', # I'd rather just use eventnum
+      'unique' => [ [ 'billpkgnum' ], [ 'eventnum' ] ], # one-to-one link
+      'index'  => [ [ 'feepart' ] ],
+      'foreign_keys' => [
+                          { columns => [ 'eventnum' ],
+                            table   => 'cust_event',
+                          },
+                          { columns => [ 'billpkgnum' ],
+                            table   => 'cust_bill_pkg',
+                          },
+                          { columns => [ 'feepart' ],
+                            table   => 'part_fee',
+                          },
+                        ],
+    },
+
     'cust_bill_pkg' => {
       'columns' => [
         'billpkgnum',          'serial',     '',      '', '', '', 
@@ -959,6 +983,7 @@ sub tables_hashref {
         'freq',               'varchar', 'NULL', $char_d, '', '',
         'quantity',               'int', 'NULL',      '', '', '',
         'hidden',                'char', 'NULL',       1, '', '',
+        'feepart',                'int', 'NULL',      '', '', '',
       ],
       'primary_key'  => 'billpkgnum',
       'unique'       => [],
@@ -975,6 +1000,9 @@ sub tables_hashref {
                             table      => 'part_pkg',
                             references => [ 'pkgpart' ],
                           },
+                          { columns    => [ 'feepart' ],
+                            table      => 'part_fee',
+                          },
                         ],
     },
 
@@ -988,7 +1016,7 @@ sub tables_hashref {
         'format',  'char', 'NULL', 1, '', '',
         'classnum', 'int', 'NULL', '', '', '',
         'duration', 'int', 'NULL', '',  0, '',
-        'phonenum', 'varchar', 'NULL', 25, '', '',
+        'phonenum', 'varchar', 'NULL', 255, '', '', # has to hold a service label
         'accountcode', 'varchar',  'NULL',      20, '', '',
         'startdate',  @date_type, '', '', 
         'regionname', 'varchar', 'NULL', $char_d, '', '',
@@ -1003,12 +1031,12 @@ sub tables_hashref {
                           { columns    => [ 'billpkgnum' ],
                             table      => 'cust_bill_pkg',
                           },
-                          { columns    => [ 'pkgnum' ],
-                            table      => 'cust_pkg',
-                          },
-                          { columns    => [ 'invnum' ],
-                            table      => 'cust_bill',
-                          },
+                          #{ columns    => [ 'pkgnum' ],
+                          #  table      => 'cust_pkg',
+                          #},
+                          #{ columns    => [ 'invnum' ],
+                          #  table      => 'cust_bill',
+                          #},
                           { columns    => [ 'classnum' ],
                             table      => 'usage_class',
                           },
@@ -1017,7 +1045,7 @@ sub tables_hashref {
 
     'cust_bill_pkg_display' => {
       'columns' => [
-        'billpkgdisplaynum', 'serial', '', '', '', '', 
+        'billpkgdisplaynum', 'serial', '', '', '', '',
         'billpkgnum', 'int', '', '', '', '', 
         'section',  'varchar', 'NULL', $char_d, '', '', 
         #'unitsetup', @money_typen, '', '',     #override the linked real one?
@@ -1036,6 +1064,35 @@ sub tables_hashref {
                         ],
     },
 
+    'cust_bill_pkg_fee' => {
+      'columns' => [
+        'billpkgfeenum',    'serial', '', '', '', '',
+        'billpkgnum',          'int', '', '', '', '',
+        'base_invnum',       'int', '', '', '', '',
+        'base_billpkgnum',   'int', 'NULL', '', '', '',
+        'amount',        @money_type,         '', '',
+      ],
+      'primary_key' => 'billpkgfeenum',
+      'unique'      => [],
+      'index'       => [ ['billpkgnum'],
+                         ['base_invnum'],
+                         ['base_billpkgnum'],
+                       ],
+      'foreign_keys' => [
+                          { columns     => [ 'billpkgnum' ],
+                            table       => 'cust_bill_pkg',
+                          },
+                          { columns     => [ 'base_billpkgnum' ],
+                            table       => 'cust_bill_pkg',
+                            references  => [ 'billpkgnum' ],
+                          },
+                          { columns     => [ 'base_invnum' ],
+                            table       => 'cust_bill',
+                            references  => [ 'invnum' ],
+                          },
+                        ],
+    },
+
     'cust_bill_pkg_tax_location' => {
       'columns' => [
         'billpkgtaxlocationnum', 'serial',     '',      '', '', '',
@@ -1060,9 +1117,9 @@ sub tables_hashref {
                           { columns    => [ 'billpkgnum' ],
                             table      => 'cust_bill_pkg',
                           },
-                          { columns    => [ 'pkgnum' ],
-                            table      => 'cust_pkg',
-                          },
+                          #{ columns    => [ 'pkgnum' ],
+                          #  table      => 'cust_pkg',
+                          #}, # taxes can apply to fees
                           { columns    => [ 'locationnum' ],
                             table      => 'cust_location',
                           },
@@ -1138,9 +1195,10 @@ sub tables_hashref {
                           { columns    => [ 'invnum' ],
                             table      => 'cust_bill_void',
                           },
-                          { columns    => [ 'pkgnum' ],
-                            table      => 'cust_pkg',
-                          },
+                          #pkgnum 0 and -1 are used for special things
+                          #{ columns    => [ 'pkgnum' ],
+                          #  table      => 'cust_pkg',
+                          #},
                           { columns    => [ 'pkgpart_override' ],
                             table      => 'part_pkg',
                             references => [ 'pkgpart' ],
@@ -1162,7 +1220,7 @@ sub tables_hashref {
         'format',  'char', 'NULL', 1, '', '',
         'classnum', 'int', 'NULL', '', '', '',
         'duration', 'int', 'NULL', '',  0, '',
-        'phonenum', 'varchar', 'NULL', 25, '', '',
+        'phonenum', 'varchar', 'NULL', 255, '', '',
         'accountcode', 'varchar',  'NULL',      20, '', '',
         'startdate',  @date_type, '', '', 
         'regionname', 'varchar', 'NULL', $char_d, '', '',
@@ -1175,12 +1233,12 @@ sub tables_hashref {
                           { columns    => [ 'billpkgnum' ],
                             table      => 'cust_bill_pkg_void',
                           },
-                          { columns    => [ 'pkgnum' ],
-                            table      => 'cust_pkg',
-                          },
-                          { columns    => [ 'invnum' ],
-                            table      => 'cust_bill',
-                          },
+                          #{ columns    => [ 'pkgnum' ],
+                          #  table      => 'cust_pkg',
+                          #},
+                          #{ columns    => [ 'invnum' ],
+                          #  table      => 'cust_bill',
+                          #},
                           { columns    => [ 'classnum' ],
                             table      => 'usage_class',
                           },
@@ -1284,11 +1342,12 @@ sub tables_hashref {
         'commission_agentnum', 'int', 'NULL', '', '', '', #
         'commission_salesnum', 'int', 'NULL', '', '', '', #
         'commission_pkgnum',   'int', 'NULL', '', '', '', #
+        'credbatch',    'varchar', 'NULL', $char_d, '', '',
       ],
       'primary_key'  => 'crednum',
       'unique'       => [],
       'index'        => [ ['custnum'], ['_date'], ['usernum'], ['eventnum'],
-                          ['commission_salesnum'],
+                          ['commission_salesnum'], ['credbatch'],
                         ],
       'foreign_keys' => [
                           { columns    => [ 'custnum' ],
@@ -1462,8 +1521,10 @@ sub tables_hashref {
         'stateid_state', 'varchar', 'NULL', $char_d, '', '', 
         'national_id', 'varchar', 'NULL', $char_d, '', '',
         'birthdate' ,@date_type, '', '', 
-        'spouse_birthdate' ,@date_type, '', '', 
-        'anniversary_date' ,@date_type, '', '', 
+        'spouse_last',  'varchar', 'NULL', 2*$char_d, '', '',
+        'spouse_first', 'varchar', 'NULL', $char_d, '', '',
+        'spouse_birthdate', @date_type, '', '', 
+        'anniversary_date', @date_type, '', '', 
         'signupdate',@date_type, '', '', 
         'dundate',   @date_type, '', '', 
         'company',  'varchar', 'NULL', $char_d, '', '', 
@@ -1621,32 +1682,6 @@ sub tables_hashref {
                         ],
     },
 
-    'cust_recon' => {  # (some sort of not-well understood thing for OnPac)
-      'columns' => [
-        'reconid',      'serial',  '',          '', '', '', 
-        'recondate',    @date_type,                 '', '', 
-        'custnum',      'int'   ,  '',          '', '', '', 
-        'agentnum',     'int',     '',          '', '', '', 
-        'last',         'varchar', '',     $char_d, '', '', 
-        'first',        'varchar', '',     $char_d, '', '', 
-        'address1',     'varchar', '',     $char_d, '', '', 
-        'address2',     'varchar', 'NULL', $char_d, '', '', 
-        'city',         'varchar', '',     $char_d, '', '', 
-        'state',        'varchar', 'NULL', $char_d, '', '', 
-        'zip',          'varchar', 'NULL',      10, '', '', 
-        'pkg',          'varchar', 'NULL', $char_d, '', '', 
-        'adjourn',      @date_type,                 '', '',
-        'status',       'varchar', 'NULL',      10, '', '', 
-        'agent_custid', 'varchar',  '',    $char_d, '', '',
-        'agent_pkg',    'varchar', 'NULL', $char_d, '', '', 
-        'agent_adjourn', @date_type,                '', '',
-        'comments',     'text',    'NULL',      '', '', '', 
-      ],
-      'primary_key' => 'reconid',
-      'unique' => [],
-      'index' => [],
-    },
-
     'contact_class' => {
       'columns' => [
         'classnum',    'serial',   '',      '', '', '', 
@@ -1671,7 +1706,10 @@ sub tables_hashref {
         'first',     'varchar',     '', $char_d, '', '', 
         'title',     'varchar', 'NULL', $char_d, '', '', #eg Head Bottle Washer
         'comment',   'varchar', 'NULL',     255, '', '', 
-        'disabled',     'char', 'NULL',       1, '', '', 
+        'selfservice_access',    'char', 'NULL',       1, '', '',
+        '_password',          'varchar', 'NULL', $char_d, '', '',
+        '_password_encoding', 'varchar', 'NULL', $char_d, '', '',
+        'disabled',              'char', 'NULL',       1, '', '', 
       ],
       'primary_key'  => 'contactnum',
       'unique'       => [],
@@ -1735,7 +1773,8 @@ sub tables_hashref {
         'emailaddress',   'varchar', '', $char_d, '', '',
       ],
       'primary_key'  => 'contactemailnum',
-      'unique'       => [ [ 'contactnum', 'emailaddress' ], ],
+      #'unique'       => [ [ 'contactnum', 'emailaddress' ], ],
+      'unique'       => [ [ 'emailaddress' ], ],
       'index'        => [],
       'foreign_keys' => [
                           { columns    => [ 'contactnum' ],
@@ -1899,6 +1938,26 @@ sub tables_hashref {
                         ],
     },
 
+    'cust_main_credit_limit' => {
+      'columns' => [
+        'creditlimitnum',   'serial', '', '', '', '',
+        'custnum',             'int', '', '', '', '', 
+        '_date',          @date_type,         '', '', 
+        'amount',       @money_typen,         '', '',
+        #'amount_currency', 'char', 'NULL',  3, '', '',
+        'credit_limit', @money_typen,         '', '',
+        #'credit_limit_currency', 'char', 'NULL',  3, '', '',
+      ],
+      'primary_key'  => 'creditlimitnum',
+      'unique'       => [],
+      'index'        => [ ['custnum'], ],
+      'foreign_keys' => [
+                          { columns    => [ 'custnum' ],
+                            table      => 'cust_main',
+                          },
+                        ],
+    },
+
     'cust_main_note' => {
       'columns' => [
         'notenum',  'serial',  '',     '', '', '', 
@@ -2173,11 +2232,12 @@ sub tables_hashref {
 
         'pkgnum', 'int', 'NULL', '', '', '', #desired pkgnum for pkg-balances
         'status',       'varchar',     '', $char_d, '', '', 
-        'session_id',   'varchar', 'NULL', $char_d, '', '', #only need 32
+        'session_id',   'varchar', 'NULL', 1024, '', '', # SHA-512-hex
         'statustext',   'text',    'NULL',  '', '', '', 
         'gatewaynum',   'int',     'NULL',  '', '', '',
         #'cust_balance', @money_type,            '', '',
         'paynum',       'int',     'NULL',  '', '', '',
+        'void_paynum',  'int',     'NULL',  '', '', '',
         'jobnum',    'bigint',     'NULL',  '', '', '', 
         'invnum',       'int',     'NULL',  '', '', '',
         'manual',       'char',    'NULL',   1, '', '',
@@ -2200,6 +2260,10 @@ sub tables_hashref {
                           { columns    => [ 'paynum' ],
                             table      => 'cust_pay',
                           },
+                          { columns    => [ 'void_paynum' ],
+                            table      => 'cust_pay_void',
+                            references => [ 'paynum' ],
+                          },
                           { columns    => [ 'jobnum' ],
                             table      => 'queue',
                           },
@@ -2509,7 +2573,7 @@ sub tables_hashref {
         'manual_flag',        'char', 'NULL',  1, '', '', 
         'no_auto',            'char', 'NULL',  1, '', '', 
         'quantity',            'int', 'NULL', '', '', '',
-        'agent_pkgid',         'int', 'NULL', '', '', '',
+        'agent_pkgid',     'varchar', 'NULL', $char_d, '', '',
         'waive_setup',        'char', 'NULL',  1, '', '', 
         'recur_show_zero',    'char', 'NULL',  1, '', '',
         'setup_show_zero',    'char', 'NULL',  1, '', '',
@@ -2791,7 +2855,8 @@ sub tables_hashref {
         'currency',       'char', 'NULL',       3, '', '',
         'otaker',       'varchar',   'NULL',   32, '', '', 
         'usernum',   'int', 'NULL', '', '', '',
-        'reason',       'varchar',   '',   $char_d, '', '', 
+        'reason',       'varchar',   'NULL',   $char_d, '', '', 
+        'reasonnum',   'int', 'NULL', '', '', '',
         'payby',        'char',   '',     4, '', '', # CARD/BILL/COMP, should
                                                      # be index into payby
                                                      # table eventually
@@ -2815,6 +2880,9 @@ sub tables_hashref {
                           { columns    => [ 'usernum' ],
                             table      => 'access_user',
                           },
+                          { columns    => [ 'reasonnum' ],
+                            table      => 'reason',
+                          },
                           { columns    => [ 'gatewaynum' ],
                             table      => 'payment_gateway',
                           },
@@ -2923,11 +2991,11 @@ sub tables_hashref {
                         ],
     },
 
-   'part_pkg' => {
+    'part_pkg' => {
       'columns' => [
         'pkgpart',       'serial',    '',   '', '', '', 
         'pkg',           'varchar',   '',   $char_d, '', '', 
-        'comment',       'varchar',   '', 2*$char_d, '', '', 
+        'comment',       'varchar', 'NULL', 2*$char_d, '', '', 
         'promo_code',    'varchar', 'NULL', $char_d, '', '', 
         'freq',          'varchar',   '',   $char_d, '', '', #billing frequency
         'setuptax',      'char', 'NULL', 1, '', '', 
@@ -2952,11 +3020,12 @@ sub tables_hashref {
         'successor',     'int',     'NULL', '', '', '',
         'family_pkgpart','int',     'NULL', '', '', '',
         'delay_start',   'int',     'NULL', '', '', '',
+        'agent_pkgpartid', 'varchar', 'NULL', 20, '', '',
       ],
       'primary_key'  => 'pkgpart',
       'unique'       => [],
       'index'        => [ [ 'promo_code' ], [ 'disabled' ], [ 'classnum' ],
-                          [ 'agentnum' ], ['no_auto'],
+                          [ 'agentnum' ], ['no_auto'], ['agent_pkgpartid'],
                         ],
       'foreign_keys' => [
                           { columns    => [ 'classnum' ],
@@ -3031,6 +3100,123 @@ sub tables_hashref {
       'index'       => [],
     },
 
+    'part_pkg_usageprice' => {
+      'columns' => [
+        'usagepricepart', 'serial',      '',      '', '', '',
+        'pkgpart',           'int',      '',      '', '', '',
+        'price',          @money_type,                '', '', 
+        'currency',         'char',  'NULL',       3, '', '',
+        'action',        'varchar',      '', $char_d, '', '',
+        'target',        'varchar',      '', $char_d, '', '',
+        'amount',        'varchar',      '', $char_d, '', '',
+      ],
+      'primary_key'  => 'usagepricepart',
+      'unique'       => [ [ 'pkgpart', 'currency', 'target' ] ],
+      'index'        => [ [ 'pkgpart' ] ],
+      'foreign_keys' => [
+                          { columns    => [ 'pkgpart' ],
+                            table      => 'part_pkg',
+                          },
+                        ],
+    },
+
+    'cust_pkg_usageprice' => {
+      'columns' => [
+        'usagepricenum', 'serial',      '',      '', '', '',
+        'pkgnum',           'int',      '',      '', '', '',
+        'usagepricepart',   'int',      '',      '', '', '',
+        'quantity',         'int',      '',      '', '', '',
+      ],
+      'primary_key'  => 'usagepricenum',
+      'unique'       => [ [ 'pkgnum', 'usagepricepart' ] ],
+      'index'        => [ [ 'pkgnum' ] ],
+      'foreign_keys' => [
+                          { columns    => [ 'pkgnum' ],
+                            table      => 'cust_pkg',
+                          },
+                          { columns    => [ 'usagepricepart' ],
+                            table      => 'part_pkg_usageprice',
+                          },
+                        ],
+    },
+
+    'part_fee' => {
+      'columns' => [
+        'feepart',       'serial',    '',   '', '', '',
+        'itemdesc',      'varchar',   '',   $char_d,   '', '',
+        'comment',       'varchar', 'NULL', 2*$char_d, '', '',
+        'disabled',      'char',    'NULL',  1, '', '',
+        'classnum',      'int',     'NULL', '', '', '',
+        'taxclass',      'varchar', 'NULL', $char_d, '', '',
+        'taxproductnum', 'int',     'NULL', '', '', '',
+        'pay_weight',    'real',    'NULL', '', '', '',
+        'credit_weight', 'real',    'NULL', '', '', '',
+        'agentnum',      'int',     'NULL', '', '', '',
+        'amount',   @money_type,                '', '', 
+        'percent',     'decimal',    '', '7,4', '', '',
+        'basis',         'varchar',  '',    16, '', '',
+        'minimum',    @money_typen,             '', '',
+        'maximum',    @money_typen,             '', '',
+        'limit_credit',  'char',    'NULL',  1, '', '',
+        'setuprecur',    'char',     '',     5, '', '',
+        'taxable',       'char',    'NULL',  1, '', '',
+      ],
+      'primary_key'  => 'feepart',
+      'unique'       => [],
+      'index'        => [ [ 'disabled' ], [ 'classnum' ], [ 'agentnum' ]
+                        ],
+      'foreign_keys' => [
+                          { columns    => [ 'classnum' ],
+                            table      => 'pkg_class',
+                          },
+                          { columns    => [ 'taxproductnum' ],
+                            table      => 'part_pkg_taxproduct',
+                          },
+                          { columns    => [ 'agentnum' ],
+                            table      => 'agent',
+                          },
+                        ],
+    },
+
+    'part_fee_msgcat' => {
+      'columns' => [
+        'feepartmsgnum',  'serial',     '',        '', '', '',
+        'feepart',           'int',     '',        '', '', '',
+        'locale',        'varchar',     '',        16, '', '',
+        'itemdesc',      'varchar',     '',   $char_d, '', '', #longer/no limit?
+        'comment',       'varchar', 'NULL', 2*$char_d, '', '', #longer/no limit?
+      ],
+      'primary_key'  => 'feepartmsgnum',
+      'unique'       => [ [ 'feepart', 'locale' ] ],
+      'index'        => [],
+      'foreign_keys' => [
+                          { columns    => [ 'feepart' ],
+                            table      => 'part_fee',
+                          },
+                        ],
+    },
+
+    'part_fee_usage' => {
+      'columns' => [
+        'feepartusagenum','serial',     '',        '', '', '',
+        'feepart',           'int',     '',        '', '', '',
+        'classnum',          'int',     '',        '', '', '',
+        'amount',   @money_type,                '', '',
+        'percent',     'decimal',    '', '7,4', '', '',
+      ],
+      'primary_key'  => 'feepartusagenum',
+      'unique'       => [ [ 'feepart', 'classnum' ] ],
+      'index'        => [],
+      'foreign_keys' => [
+                          { columns    => [ 'feepart' ],
+                            table      => 'part_fee',
+                          },
+                          { columns    => [ 'classnum' ],
+                            table      => 'usage_class',
+                          },
+                        ],
+    },
+
     'part_pkg_link' => {
       'columns' => [
         'pkglinknum',  'serial',   '',      '', '', '',
@@ -3655,8 +3841,8 @@ sub tables_hashref {
         'classname', 'varchar', '', $char_d, '', '',
       ],
       'primary_key' => 'classnum',
-      'unique' => [ ],
-      'index'  => [ ],
+      'unique' => [],
+      'index'  => [],
     },
 
     'hardware_type' => {
@@ -3683,8 +3869,8 @@ sub tables_hashref {
         'disabled',    'char', 'NULL',   1, '', '', 
       ],
       'primary_key' => 'statusnum',
-      'unique' => [ ],
-      'index'  => [ ],
+      'unique' => [],
+      'index'  => [],
     },
 
     'domain_record' => {
@@ -3889,7 +4075,8 @@ sub tables_hashref {
       'index'        => [],
       'foreign_keys' => [
                           { columns    => [ 'svcnum' ],
-                            table      => 'svc_broadband',
+                            table      => 'svc_broadband',#no? could be _acct?
+                                                          #remove or cust_svc?
                           },
                         ],
     },
@@ -3953,6 +4140,7 @@ sub tables_hashref {
       'foreign_keys' => [
                           { columns    => [ 'jobnum' ],
                             table      => 'queue',
+                            on_delete  => 'CASCADE',
                           },
                         ],
     },
@@ -3973,6 +4161,7 @@ sub tables_hashref {
                           { columns    => [ 'depend_jobnum' ],
                             table      => 'queue',
                             references => [ 'jobnum' ],
+                            on_delete  => 'CASCADE',
                           },
                         ],
     },
@@ -4266,15 +4455,27 @@ sub tables_hashref {
       'unique'       => [ [ 'blocknum', 'routernum' ] ],
       'index'        => [],
       'foreign_keys' => [
-                          { columns    => [ 'routernum' ],
-                            table      => 'router',
-                          },
+                          #{ columns    => [ 'routernum' ],
+                            table      => 'router',
+                          #},
                           { columns    => [ 'agentnum' ],
                             table      => 'agent',
                           },
                         ],
     },
 
+    'addr_range' => {
+      'columns' => [
+        'rangenum', 'serial', '', '', '', '',
+        'start',    'varchar', '', 15, '', '',
+        'length',   'int', '', '', '', '',
+        'status',   'varchar', 'NULL', 32, '', '',
+      ],
+      'primary_key' => 'rangenum',
+      'unique'      => [],
+      'index'       => [],
+    },
+
     'svc_broadband' => {
       'columns' => [
         'svcnum',                  'int',     '',        '', '', '', 
@@ -4848,11 +5049,12 @@ sub tables_hashref {
 
     'pkg_category' => {
       'columns' => [
-        'categorynum',   'serial',  '', '', '', '', 
-        'categoryname',  'varchar', '', $char_d, '', '', 
-        'weight',         'int', 'NULL',  '', '', '',
-        'condense',      'char', 'NULL',   1, '', '', 
-        'disabled',      'char', 'NULL',   1, '', '', 
+        'categorynum',        'serial',     '',      '', '', '', 
+        'categoryname',      'varchar',     '', $char_d, '', '', 
+        'weight',                'int', 'NULL',      '', '', '',
+        'ticketing_queueid',     'int', 'NULL',      '', '', '', 
+        'condense',             'char', 'NULL',       1, '', '', 
+        'disabled',             'char', 'NULL',       1, '', '', 
       ],
       'primary_key' => 'categorynum',
       'unique' => [],
@@ -4897,8 +5099,10 @@ sub tables_hashref {
         'lastapp',     'varchar',  '', $char_d, \"''", '', 
         'lastdata',    'varchar',  '',     255, \"''", '', 
 
-        #currently only opensips
+        #currently only opensips & voipswitch
         'src_ip_addr', 'varchar',  'NULL',  15,    '', '',
+
+        #currently only opensips
         'dst_ip_addr', 'varchar',  'NULL',  15,    '', '',
 
         #currently only u4:
@@ -4967,6 +5171,10 @@ sub tables_hashref {
         'charged_party_imsi',  'varchar', 'NULL', $char_d, '', '',
 
         'upstream_price',      'decimal', 'NULL',  '10,5', '', '', 
+
+        #currently only voipswitch
+        #'upstream_rate',      'decimal', 'NULL',  '10,5', '', '', 
+
         'upstream_src_regionname', 'varchar', 'NULL', $char_d, '', '',
         'upstream_dst_regionname', 'varchar', 'NULL', $char_d, '', '',
 
@@ -5272,6 +5480,44 @@ sub tables_hashref {
       'index'  => [],
     },
 
+    'sched_item' => {
+      'columns' => [
+        'itemnum',   'serial',      '', '', '', '', 
+        'usernum',      'int',  'NULL', '', '', '', 
+        #'itemname', 'varchar', $char_d, '', '', '',
+        'disabled',    'char',  'NULL',  1, '', '', 
+      ],
+      'primary_key'  => 'itemnum',
+      'unique'       => [ [ 'usernum' ] ],
+      'index'        => [],
+      'foreign_keys' => [
+                          { columns    => [ 'usernum' ],
+                            table      => 'access_user',
+                          },
+                        ],
+    },
+
+    #'sched_item_class'
+
+    'sched_avail' => {
+      'columns' => [
+        'availnum',      'serial', '', '', '', '', 
+        'itemnum',          'int', '', '', '', '',
+        'wday',             'int', '', '', '', '',
+        'stime',            'int', '', '', '', '',
+        'etime',            'int', '', '', '', '',
+        'override_date',    @date_type,    '', '',
+      ],
+      'primary_key'  => 'availnum',
+      'unique'       => [],
+      'index'        => [],
+      'foreign_keys' => [
+                          { columns    => [ 'itemnum' ],
+                            table      => 'sched_item',
+                          },
+                        ],
+    },
+
     'svc_phone' => {
       'columns' => [
         'svcnum',                         'int',     '',      '', '', '', 
@@ -5596,6 +5842,64 @@ sub tables_hashref {
                         ],
     },
 
+    'pbx_extension' => {
+      'columns' => [
+        'extensionnum',  'serial',     '',      '', '', '',
+        'svcnum',           'int',     '',      '', '', '',
+        'extension',    'varchar',     '', $char_d, '', '',
+        'pin',          'varchar', 'NULL', $char_d, '', '',
+        'sip_password', 'varchar', 'NULL', $char_d, '', '',
+        'phone_name',   'varchar', 'NULL', $char_d, '', '',
+      ],
+      'primary_key'  => 'extensionnum',
+      'unique'       => [ [ 'svcnum', 'extension' ] ],
+      'index'        => [ [ 'svcnum' ] ],
+      'foreign_keys' => [
+                          { columns    => [ 'svcnum' ],
+                            table      => 'svc_pbx',
+                          },
+                        ],
+    },
+
+    'pbx_device' => {
+      'columns' => [
+        'devicenum', 'serial',     '', '', '', '',
+        'devicepart',   'int',     '', '', '', '',
+        'svcnum',       'int',     '', '', '', '', 
+        'mac_addr', 'varchar', 'NULL', 12, '', '', 
+      ],
+      'primary_key'  => 'devicenum',
+      'unique'       => [ [ 'mac_addr' ], ],
+      'index'        => [ [ 'devicepart' ], [ 'svcnum' ], ],
+      'foreign_keys' => [
+                          { columns    => [ 'devicepart' ],
+                            table      => 'part_device',
+                          },
+                          { columns    => [ 'svcnum' ],
+                            table      => 'svc_pbx',
+                          },
+                        ],
+    },
+
+    'extension_device' => {
+      'columns' => [
+        'extensiondevicenum', 'serial', '', '', '', '',
+        'extensionnum',          'int', '', '', '', '',
+        'devicenum',             'int', '', '', '', '',
+      ],
+      'primary_key'  => 'extensiondevicenum',
+      'unique'       => [ [ 'extensionnum', 'devicenum' ] ],
+      'index'        => [],#both?  which way do we need to query?
+      'foreign_keys' => [
+                          { columns  => [ 'extensionnum' ],
+                            table    => 'pbx_extension',
+                          },
+                          { columns  => [ 'devicenum' ],
+                            table    => 'pbx_device',
+                          },
+                        ],
+    },
+
     'svc_mailinglist' => { #svc_group?
       'columns' => [
         'svcnum',            'int',     '',            '', '', '', 
@@ -5754,7 +6058,7 @@ sub tables_hashref {
     'cust_msg' => {
       'columns' => [
         'custmsgnum', 'serial',     '',     '', '', '',
-        'custnum',       'int',     '',     '', '', '',
+        'custnum',       'int', 'NULL',     '', '', '',
         'msgnum',        'int', 'NULL',     '', '', '',
         '_date',    @date_type,                 '', '',
         'env_from',  'varchar', 'NULL',    255, '', '',
@@ -5763,6 +6067,7 @@ sub tables_hashref {
         'body',         'blob', 'NULL',     '', '', '',
         'error',     'varchar', 'NULL',    255, '', '',
         'status',    'varchar',     '',$char_d, '', '',
+        'msgtype',   'varchar', 'NULL',     16, '', '',
       ],
       'primary_key'  => 'custmsgnum',
       'unique'       => [ ],
@@ -5909,21 +6214,82 @@ sub tables_hashref {
     'svc_alarm' => {
       'columns' => [
         'svcnum',          'int',      '',      '', '', '', 
-        'alarm_system', 'varchar',     '', $char_d, '', '', # dropdowns?
-        'alarm_type',   'varchar',     '', $char_d, '', '', #
+        'alarmsystemnum',  'int',      '',      '', '', '',
+        'alarmtypenum',    'int',      '',      '', '', '',
+        'alarmstationnum', 'int',      '',      '', '', '',
         'acctnum',      'varchar',     '', $char_d, '', '',
         '_password',    'varchar',     '', $char_d, '', '',
         'location',     'varchar', 'NULL', $char_d, '', '',
-        #cs
-        #rep
+        #installer (rep)
       ],
       'primary_key'  => 'svcnum',
-      'unique'       => [], #system/type/acctnum??
+      'unique'       => [],
       'index'        => [],
       'foreign_keys' => [
                           { columns    => [ 'svcnum' ],
                             table      => 'cust_svc',
                           },
+                          { columns    => [ 'alarmsystemnum' ],
+                            table      => 'alarm_system',
+                          },
+                          { columns    => [ 'alarmtypenum' ],
+                            table      => 'alarm_type',
+                          },
+                          { columns    => [ 'alarmstationnum' ],
+                            table      => 'alarm_station',
+                          },
+                        ],
+    },
+
+    'alarm_system' => { #vendors
+      'columns' => [
+        'alarmsystemnum',  'serial',     '',      '', '', '',
+        'agentnum',           'int', 'NULL',      '', '', '',
+        'systemname',     'varchar',     '', $char_d, '', '',
+        'disabled',          'char', 'NULL',       1, '', '', 
+      ],
+      'primary_key' => 'alarmsystemnum',
+      'unique'      => [ ['agentnum', 'systemname'] ],
+      'index'       => [ ['agentnum'], ['disabled'] ],
+      'foreign_keys' => [
+                          { columns    => [ 'agentnum' ],
+                            table      => 'agent',
+                          },
+                        ],
+    },
+
+    'alarm_type' => { #inputs and outputs
+      'columns' => [
+        'alarmtypenum', 'serial',     '',      '', '', '',
+        'agentnum',        'int', 'NULL',      '', '', '',
+        'inputs',          'int',     '', '', '', '',
+        'outputs',         'int',     '', '', '', '',
+        'disabled',       'char', 'NULL',       1, '', '', 
+      ],
+      'primary_key' => 'alarmtypenum',
+      'unique'      => [ ['agentnum', 'inputs', 'outputs'] ],
+      'index'       => [ ['agentnum'], ['disabled'] ],
+      'foreign_keys' => [
+                          { columns    => [ 'agentnum' ],
+                            table      => 'agent',
+                          },
+                        ],
+    },
+
+    'alarm_station' => { #central station (where the alarm reports to)
+      'columns' => [
+        'alarmstationnum', 'serial',     '',      '', '', '',
+        'agentnum',           'int', 'NULL',      '', '', '',
+        'stationname',    'varchar',     '', $char_d, '', '',
+        'disabled',          'char', 'NULL',       1, '', '', 
+      ],
+      'primary_key' => 'alarmstationnum',
+      'unique'      => [ ['agentnum', 'stationname'], ],
+      'index'       => [ ['agentnum'], ['disabled'] ],
+      'foreign_keys' => [
+                          { columns    => [ 'agentnum' ],
+                            table      => 'agent',
+                          },
                         ],
     },
 
@@ -5974,6 +6340,78 @@ sub tables_hashref {
       'index'  => [],
     },
 
+    'svc_conferencing' => {
+      'columns' => [
+        'svcnum',            'int',     '',      '', '', '',
+        'conf_id',           'int', 'NULL',      '', '', '', #"system assigned"
+        'conf_name',     'varchar',     '', $char_d, '', '',
+        'conf_password', 'varchar',     '', $char_d, '', '',
+        'access_code',   'varchar',     '',      16, '', '',
+        'duration',          'int',     '',      '', '', '',
+        'participants',      'int',     '',      '', '', '',
+        'conftypenum',       'int',     '',      '', '', '',
+        'confqualitynum',    'int',     '',      '', '', '',
+        'opt_recording',    'char', 'NULL',       1, '', '',
+        'opt_sip',          'char', 'NULL',       1, '', '',
+        'opt_phone',        'char', 'NULL',       1, '', '',
+      ],
+      'primary_key' => 'svcnum',
+      'unique' => [],
+      'index'  => [],
+      'foreign_keys' => [
+                          { columns => [ 'svcnum' ],
+                            table   => 'cust_svc',
+                          },
+                          { columns => [ 'conftypenum' ],
+                            table   => 'conferencing_type',
+                          },
+                          { columns => [ 'confqualitynum' ],
+                            table   => 'conferencing_quality',
+                          },
+                        ],
+    },
+
+    'conferencing_type' => {
+      'columns' => [
+        'conftypenum',  'int',     '',      '', '', '',
+        'typeid'      , 'int',     '',      '', '', '',
+        'typename', 'varchar',     '', $char_d, '', '',
+        'disabled',    'char', 'NULL',       1, '', '', 
+      ],
+      'primary_key' => 'conftypenum',
+      'unique'      => [ [ 'typeid', 'disabled' ], [ 'typename', 'disabled' ] ],
+      'index'       => [],
+    },
+
+    'conferencing_quality' => {
+      'columns' => [
+        'confqualitynum',  'int',     '',      '', '', '',
+        'qualityid'      , 'int',     '',      '', '', '',
+        'qualityname', 'varchar',     '', $char_d, '', '',
+        'disabled',       'char', 'NULL',       1, '', '', 
+      ],
+      'primary_key' => 'confqualitynum',
+      'unique'      => [ [ 'qualityid', 'disabled' ], [ 'qualityname', 'disabled' ] ],
+      'index'       => [],
+    },
+
+    'svc_video' => {
+      'columns' => [
+        'svcnum',            'int', '', '', '', '',
+        'smartcard_num', 'varchar', '', 16, '', '',
+        'mac_addr',      'varchar', '', 12, '', '', 
+        'duration',          'int', '', '', '', '',
+      ],
+      'primary_key' => 'svcnum',
+      'unique' => [], # [ 'smartcard_num' ], [ 'mac_addr' ], ],
+      'index'  => [],
+      'foreign_keys' => [
+                          { columns => [ 'svcnum' ],
+                            table   => 'cust_svc',
+                          },
+                        ],
+    },
+
     'vend_main' => {
       'columns' => [
         'vendnum',   'serial',     '',      '', '', '',
@@ -6117,21 +6555,9 @@ sub tables_hashref {
         'latexnotes',           'text',     'NULL', '', '', '',
         'latexfooter',          'text',     'NULL', '', '', '',
         'latexsummary',         'text',     'NULL', '', '', '',
-        'latexcoupon',          'text',     'NULL', '', '', '',
         'latexsmallfooter',     'text',     'NULL', '', '', '',
         'latexreturnaddress',   'text',     'NULL', '', '', '',
-        'latextopmargin',       'varchar',  'NULL', 16, '', '',
-        'latexheadsep',         'varchar',  'NULL', 16, '', '',
-        'latexaddresssep',      'varchar',  'NULL', 16, '', '',
-        'latextextheight',      'varchar',  'NULL', 16, '', '',
-        'latexextracouponspace','varchar',  'NULL', 16, '', '',
-        'latexcouponfootsep',   'varchar',  'NULL', 16, '', '',
-        'latexcouponamountenclosedsep', 'varchar',  'NULL', 16, '', '',
-        'latexcoupontoaddresssep',      'varchar',  'NULL', 16, '', '',
-        'latexverticalreturnaddress',      'char',  'NULL',  1, '', '',
-        'latexcouponaddcompanytoaddress',  'char',  'NULL',  1, '', '',
-        'logo_png',             'blob',     'NULL', '', '', '',
-        'logo_eps',             'blob',     'NULL', '', '', '',
+        'with_latexcoupon',     'char',     'NULL', '1', '', '',
         'lpr',                  'varchar',  'NULL', $char_d, '', '',
       ],
       'primary_key'  => 'confnum',