import torrus 1.0.9
[freeside.git] / FS / FS / Setup.pm
index 17101a7..29ca9a8 100644 (file)
@@ -5,7 +5,7 @@ use vars qw( @ISA @EXPORT_OK );
 use Exporter;
 #use Tie::DxHash;
 use Tie::IxHash;
-use FS::UID qw( dbh );
+use FS::UID qw( dbh driver_name );
 use FS::Record;
 
 use FS::svc_domain;
@@ -45,6 +45,8 @@ sub create_initial_data {
 
   populate_locales();
 
+  populate_duplock();
+
   #initial_data data
   populate_initial_data(%opt);
 
@@ -125,6 +127,18 @@ sub _add_locale {
   die $error if $error;
 }
 
+sub populate_duplock {
+
+  return unless driver_name =~ /^mysql/i;
+
+  my $sth = dbh->prepare(
+    "INSERT INTO duplicate_lock ( lockname ) VALUES ( 'svc_acct' )"
+  ) or die dbh->errstr;
+
+  $sth->execute or die $sth->errstr;
+
+}
+
 sub populate_initial_data {
   my %opt = @_;
 
@@ -132,18 +146,29 @@ sub populate_initial_data {
 
   foreach my $table ( keys %$data ) {
 
+    #warn "popuilating $table\n";
+
     my $class = "FS::$table";
     eval "use $class;";
     die $@ if $@;
 
+    $class->_populate_initial_data(%opt)
+      if $class->can('_populate_initial_data');
+
     my @records = @{ $data->{$table} };
 
     foreach my $record ( @records ) {
+
       my $args = delete($record->{'_insert_args'}) || [];
       my $object = $class->new( $record );
       my $error = $object->insert( @$args );
       die "error inserting record into $table: $error\n"
         if $error;
+
+      #my $pkey = $object->primary_key;
+      #my $pkeyvalue = $object->$pkey();
+      #warn "  inserted $pkeyvalue\n";
+
     }
 
   }
@@ -156,56 +181,70 @@ sub initial_data {
   #tie my %hash, 'Tie::DxHash', 
   tie my %hash, 'Tie::IxHash', 
 
+    #bootstrap user
+    'access_user' => [
+      { 'username'  => 'fs_bootstrap',
+        '_password' => 'changeme', #will trigger warning if you try to enable
+        'last'      => 'User',
+        'first'     => 'Bootstrap',
+        'disabled'  => 'Y',
+      },
+    ],
+
     #superuser group
     'access_group' => [
       { 'groupname' => 'Superuser' },
     ],
 
-    #billing events
-    'part_bill_event' => [
-      { 'payby'     => 'CARD',
-        'event'     => 'Batch card',
-        'seconds'   => 0,
-        'eventcode' => '$cust_bill->batch_card(%options);',
-        'weight'    => 40,
-        'plan'      => 'batch-card',
-      },
-      { 'payby'     => 'BILL',
-        'event'     => 'Send invoice',
-        'seconds'   => 0,
-        'eventcode' => '$cust_bill->send();',
-        'weight'    => 50,
-        'plan'      => 'send',
-      },
-      { 'payby'     => 'DCRD',
-        'event'     => 'Send invoice',
-        'seconds'   => 0,
-        'eventcode' => '$cust_bill->send();',
-        'weight'    => 50,
-        'plan'      => 'send',
-      },
-      { 'payby'     => 'DCHK',
-        'event'     => 'Send invoice',
-        'seconds'   => 0,
-        'eventcode' => '$cust_bill->send();',
-        'weight'    => 50,
-        'plan'      => 'send',
-      },
-      { 'payby'     => 'DCLN',
-        'event'     => 'Suspend',
-        'seconds'   => 0,
-        'eventcode' => '$cust_bill->suspend();',
-        'weight'    => 40,
-        'plan'      => 'suspend',
-      },
-      #{ 'payby'     => 'DCLN',
-      #  'event'     => 'Retriable',
-      #  'seconds'   => 0,
-      #  'eventcode' => '$cust_bill_event->retriable();',
-      #  'weight'    => 60,
-      #  'plan'      => 'retriable',
-      #},
-    ],
+    #reason types
+    'reason_type' => [],
+
+#XXX need default new-style billing events
+#    #billing events
+#    'part_bill_event' => [
+#      { 'payby'     => 'CARD',
+#        'event'     => 'Batch card',
+#        'seconds'   => 0,
+#        'eventcode' => '$cust_bill->batch_card(%options);',
+#        'weight'    => 40,
+#        'plan'      => 'batch-card',
+#      },
+#      { 'payby'     => 'BILL',
+#        'event'     => 'Send invoice',
+#        'seconds'   => 0,
+#        'eventcode' => '$cust_bill->send();',
+#        'weight'    => 50,
+#        'plan'      => 'send',
+#      },
+#      { 'payby'     => 'DCRD',
+#        'event'     => 'Send invoice',
+#        'seconds'   => 0,
+#        'eventcode' => '$cust_bill->send();',
+#        'weight'    => 50,
+#        'plan'      => 'send',
+#      },
+#      { 'payby'     => 'DCHK',
+#        'event'     => 'Send invoice',
+#        'seconds'   => 0,
+#        'eventcode' => '$cust_bill->send();',
+#        'weight'    => 50,
+#        'plan'      => 'send',
+#      },
+#      { 'payby'     => 'DCLN',
+#        'event'     => 'Suspend',
+#        'seconds'   => 0,
+#        'eventcode' => '$cust_bill->suspend();',
+#        'weight'    => 40,
+#        'plan'      => 'suspend',
+#      },
+#      #{ 'payby'     => 'DCLN',
+#      #  'event'     => 'Retriable',
+#      #  'seconds'   => 0,
+#      #  'eventcode' => '$cust_bill_event->retriable();',
+#      #  'weight'    => 60,
+#      #  'plan'      => 'retriable',
+#      #},
+#    ],
     
     #you must create a service definition. An example of a service definition
     #would be a dial-up account or a domain. First, it is necessary to create a
@@ -245,7 +284,7 @@ sub initial_data {
     #which would only sell regular packages of services. Click on View/Edit
     #agent types and Add a new agent type.
     'agent_type' => [
-      { 'atype' => 'internal' },
+      { 'atype' => 'Internal' },
     ],
 
     #Allow this agent type to sell the package you created above.
@@ -319,7 +358,12 @@ sub initial_data {
 
     #not yet....
 
-  #)
+    #usage classes
+    'usage_class' => [],
+
+    #phone types
+    'phone_type' => [],
+
   ;
 
   \%hash;
@@ -331,7 +375,7 @@ sub populate_access {
   use FS::AccessRight;
   use FS::access_right;
 
-  foreach my $rightname ( FS::AccessRight->rights ) {
+  foreach my $rightname ( FS::AccessRight->default_superuser_rights ) {
     my $access_right = new FS::access_right {
       'righttype'   => 'FS::access_group',
       'rightobjnum' => 1, #$supergroup->groupnum,
@@ -436,6 +480,10 @@ sub msgcat_messages {
       'en_US' => 'Username in use',
     },
 
+    'phonenum_in_use' => {
+      'en_US' => 'Phone number in use',
+    },
+
     'illegal_email_invoice_address' => {
       'en_US' => 'Illegal email invoice address',
     },
@@ -483,6 +531,10 @@ sub msgcat_messages {
       'en_US' => 'Driver\'s License State',
     },
 
+    'invalid_domain' => {
+      'en_US' => 'Invalid domain',
+    },
+
   );
 }