fixed import of ht stats so it doesn't include last month since that is always No...
[eq/.git] / bin / import_ward_data
index 57a7f51ae7dcc9fd5bbca49a35b6425a8c5149b8..a9e70c6f3136a709f74afd4ae9fd72b8c4697bb7 100755 (executable)
@@ -104,36 +104,33 @@ sub print_hash
 
 ######################################################################
 
-# 3RD_INDIV
-#+-------------+------------------+------+-----+---------+----------------+
-#| Field       | Type             | Null | Key | Default | Extra          |
-#+-------------+------------------+------+-----+---------+----------------+
-#| indiv       | int(16) unsigned |      | PRI | NULL    | auto_increment |
-#| indiv_id    | int(16) unsigned |      |     | NULL    |                |
-#| name        | varchar(60)      | YES  |     | NULL    |                |
-#| phone       | varchar(12)      | YES  |     | NULL    |                |
-#| email       | varchar(120)     | YES  |     | NULL    |                |
-#| priesthood  | enum             | YES  |     | NULL    |                |
-#| ppi_pri     | int(10) unsigned | YES  |     | 1       |                |
-#| ppi_notes   | varchar(128)     | YES  |     | NULL    |                |
-#| hti_pri     | int(10) unsigned | YES  |     | 1       |                |
-#| hti_notes   | varchar(128)     | YES  |     | NULL    |                |
-#| attending   | tinyint(1)       | YES  |     | 0       |                |
-#| valid       | tinyint(1)       | YES  |     | NULL    |                |
-#+-------------+------------------+------+-----+---------+----------------+
-sub update_tc_indiv_table
+# TC_INDIVIDUAL
+#+----------------------+------------------+------+-----+---------+----------------+
+#| Field                | Type             | Null | Key | Default | Extra          |
+#+----------------------+------------------+------+-----+---------+----------------+
+#| individual           | int(16) unsigned |      | PRI | NULL    | auto_increment |
+#| mls_id               | int(16) unsigned |      |     | NULL    |                |
+#| name                 | varchar(60)      | YES  |     | NULL    |                |
+#| phone                | varchar(12)      | YES  |     | NULL    |                |
+#| email                | varchar(120)     | YES  |     | NULL    |                |
+#| priesthood           | enum             | YES  |     | NULL    |                |
+#| scheduling_priority  | int(10) unsigned | YES  |     | 30      |                |
+#| attending            | tinyint(1)       | YES  |     | 0       |                |
+#| valid                | tinyint(1)       | YES  |     | NULL    |                |
+#+----------------------+------------------+------+-----+---------+----------------+
+sub update_tc_individual_table
 {
-       print "\n-> Updating tc_indiv table\n";
+       print "\n-> Updating tc_individual table\n";
 
        # Set all records to be invalid. Only mark them as valid if they appear on the new list.
-       $sth = $dbh->prepare("update tc_indiv set valid=0");
+       $sth = $dbh->prepare("update tc_individual set valid=0");
        $sth->execute or die "-E- DB error: $DBI::errstr\n";
 
        foreach $index (keys %membership_data)
        {
                $hashref = $membership_data{$index};
                $id = $membership_data{$index}{'Indiv ID'};
-               $indiv_name = $membership_data{$index}{'Preferred Name'};
+               $individual_name = $membership_data{$index}{'Preferred Name'};
                $address = $membership_data{$index}{'Street 1'};
                if($membership_data{$index}{'Street 2'} ne "") { 
                        $address .= " " . $membership_data{$index}{'Street 2'};
@@ -141,71 +138,75 @@ sub update_tc_indiv_table
                $phone = $membership_data{$index}{'Household Phone'};
                $priesthood = $membership_data{$index}{'Priesthood'};
                $hhposition = $membership_data{$index}{'HH Position'};
-               $organization = $organization_by_id{$id};
+               $steward = ""; # This will be set correctly in a later method
+               # Set the default stewardship if the "Organization data per member.csv" isn't available.
+               # Only validate priesthood holders that match the $default_stewardship since 
+               # we don't have any other data available to us to make this call if we don't have the report.
+               if((! -e "$datadir/Organization\ class\ per\ member.csv") && ($priesthood =~ /$default_stewardship/i)) { 
+                       $steward = "$default_stewardship";
+               }
                $attending = 0;
                if(($organization =~ /Elders/) ||
                   ($organization =~ /Young Men/) ||
                   ($organization =~ /Sunday School/) ||
                   ($organization =~ /Primary/)
-                  ) { $attending = 1; }
+                 ) { $attending = 1; }
                if($phone =~ /(\d\d\d-\d\d\d\d)/) { $phone = "$areacode-$1"; }
                if($phone =~ /^\(\d\d\d\) (\d\d\d-\d\d\d\d)/) { $phone = "$1-$2"; }
                $email = $membership_data{$index}{'indiv E-mail'};
                if ($email eq "") { $email = $membership_data{$index}{'Household E-mail'}; }
-               $sth = $dbh->prepare("select * from tc_indiv where name=\"$indiv_name\"");
+               $sth = $dbh->prepare("select * from tc_individual where name=\"$individual_name\"");
                $sth->execute or die "-E- DB error: $DBI::errstr\n";
                my @data = ();
                while($sqlhashref = $sth->fetchrow_hashref) { push(@data, $sqlhashref); }
                my $rows = scalar @data;
                if($rows == 0) {
-                       # No existing records found for this indiv, make a new entry
-                       print "   Adding new indiv: $indiv_name\n";
-                       $sth = $dbh->prepare("insert into tc_indiv values (NULL,'$id',\"$indiv_name\",'$address','$phone','$email','','$hhposition','$priesthood','','$default_interview_pri','','$default_interview_pri','',$attending,1)");
+                       # No existing records found for this individual, make a new entry
+                       print "   Adding new individual: $individual_name\n";
+                       $sth = $dbh->prepare("insert into tc_individual values (NULL,'$id',\"$individual_name\",'$address','$phone','$email','$hhposition','$priesthood','$steward',NULL,$attending,1)");
                        $sth->execute or die "-E- DB error: $DBI::errstr\n";
                } elsif($rows == 1) {
-                       # An existing record was found for this indiv, update it
-                       print "   Updating existing indiv: $indiv_name\n";
-                       $sth = $dbh->prepare("update tc_indiv set valid=1 where name=\"$indiv_name\"");
+                       # An existing record was found for this individual, update it
+                       print "   Updating existing individual: $individual_name\n";
+                       $sth = $dbh->prepare("update tc_individual set valid=1 where name=\"$individual_name\"");
                        $sth->execute or die "-E- DB error: $DBI::errstr\n";
                        if($phone ne "") { 
-                               $sth = $dbh->prepare("update tc_indiv set phone='$phone' where name=\"$indiv_name\"");
+                               $sth = $dbh->prepare("update tc_individual set phone='$phone' where name=\"$individual_name\"");
                        } else {
-                               $sth = $dbh->prepare("update tc_indiv set phone=NULL where name=\"$indiv_name\"");
+                               $sth = $dbh->prepare("update tc_individual set phone=NULL where name=\"$individual_name\"");
                        }
                        $sth->execute or die "-E- DB error: $DBI::errstr\n";
                        if($address ne "") { 
-                               $sth = $dbh->prepare("update tc_indiv set address='$address' where name=\"$indiv_name\"");
+                               $sth = $dbh->prepare("update tc_individual set address='$address' where name=\"$individual_name\"");
                        } else {
-                               $sth = $dbh->prepare("update tc_indiv set address=NULL where name=\"$indiv_name\"");
+                               $sth = $dbh->prepare("update tc_individual set address=NULL where name=\"$individual_name\"");
                        }
                        $sth->execute or die "-E- DB error: $DBI::errstr\n";
-                       $sth = $dbh->prepare("update tc_indiv set attending='$attending' where name=\"$indiv_name\"");
+                       $sth = $dbh->prepare("update tc_individual set attending='$attending' where name=\"$individual_name\"");
                        $sth->execute or die "-E- DB error: $DBI::errstr\n";
-                       $sth = $dbh->prepare("update tc_indiv set indiv_id='$id' where name=\"$indiv_name\"");
+                       $sth = $dbh->prepare("update tc_individual set mls_id='$id' where name=\"$individual_name\"");
                        $sth->execute or die "-E- DB error: $DBI::errstr\n";
-                       $sth = $dbh->prepare("update tc_indiv set priesthood='$priesthood' where name=\"$indiv_name\"");
+                       $sth = $dbh->prepare("update tc_individual set priesthood='$priesthood' where name=\"$individual_name\"");
                        $sth->execute or die "-E- DB error: $DBI::errstr\n";
-                       $sth = $dbh->prepare("update tc_indiv set email='$email' where name=\"$indiv_name\"");
+                       $sth = $dbh->prepare("update tc_individual set email='$email' where name=\"$individual_name\"");
                        $sth->execute or die "-E- DB error: $DBI::errstr\n";
-                       $sth = $dbh->prepare("update tc_indiv set hh_position='$hhposition' where name=\"$indiv_name\"");
+                       $sth = $dbh->prepare("update tc_individual set hh_position='$hhposition' where name=\"$individual_name\"");
                        $sth->execute or die "-E- DB error: $DBI::errstr\n";
                } else {
                        # More than one record was found. Error! This shouldn't happen.
-                       print "   -E- More than one record found ($rows) for indiv: $indiv_name\n";
+                       print "   -E- More than one record found ($rows) for individual: $individual_name\n";
                }
        }
        $sth->finish();
 }
 
-# 3RD_CALLING
+# TC_CALLING
 #+--------------+------------------+------+-----+---------+-------+
 #| Field        | Type             | Null | Key | Default | Extra |
 #+--------------+------------------+------+-----+---------+-------+
-#| indiv_id     | int(16) unsigned | YES  |     | NULL    |       |
 #| name         | varchar(30)      | YES  |     | NULL    |       |
 #| organization | varchar(30)      | YES  |     | NULL    |       |
 #| position     | varchar(30)      | YES  |     | NULL    |       |
-#| sequence     | int(16) unsigned | YES  |     | NULL    |       |
 #| sustained    | date             | YES  |     | NULL    |       |
 #+--------------+------------------+------+-----+---------+-------+
 sub update_tc_calling_table()
@@ -222,63 +223,32 @@ sub update_tc_calling_table()
 
        foreach $index (keys %organization_data)
        {
-               $indiv_id = $organization_data{$index}{'Indiv ID'};
                $name = $organization_data{$index}{'Indiv Name'};
                $name =~ s/\'/\\'/g; #'
                $organization = $organization_data{$index}{'Organization'};
                $organization_by_name{$name} = $organization;
+               $indiv_id = $organization_data{$index}{'Indiv ID'};
                $organization_by_id{$indiv_id} = $organization;
                $position = $organization_data{$index}{'Position'};
-               $sequence = $organization_data{$index}{'Org Seq'};
                $sustained = $organization_data{$index}{'Sustained'};
                $sustained =~ /(\S+) (\d+)/; $month=$1; $year=$2;
                if($name eq "") { next; }
                print "   Adding new Calling: $name -> $position\n";
-               $sth = $dbh->prepare("insert into tc_calling values ('$indiv_id','$name','$organization','$position','$sequence','$month $year')");
+               $sth = $dbh->prepare("insert into tc_calling values ('$name','$organization','$position','$month $year')");
                $sth->execute or die "-E- DB error: $DBI::errstr\n";
        }
 }
 
-# 3RD_DISTRICT
-#+------------+------------------+------+-----+---------+-------+
-#| Field      | Type             | Null | Key | Default | Extra |
-#+------------+------------------+------+-----+---------+-------+
-#| district   | int(16) unsigned |      | PRI | 0       |       |
-#| name       | varchar(30)      | YES  |     | NULL    |       |
-#| supervisor | int(16) unsigned | YES  |     | NULL    |       |
-#| valid      | tinyint(1)       | YES  |     | NULL    |       |
-#+------------+------------------+------+-----+---------+-------+
-sub update_tc_district_table
-{
-    # Districts should be created by hand. This subroutine only
-    # updates the supervisor's ID in each district.
-    print "\n-> Updating tc_district table\n";
-    $sth = $dbh->prepare("select * from tc_district");
-    $sth->execute or die "-E- DB error: $DBI::errstr\n";
-    while($sqlhashref = $sth->fetchrow_hashref) {
-       $supervisor_name = $sqlhashref->{name};
-       $district = $sqlhashref->{district};
-       $sth2 = $dbh->prepare("select * from tc_indiv where name='$supervisor_name'");
-       $sth2->execute or die "-E- DB error: $DBI::errstr\n";
-       $sqlhashref2 = $sth2->fetchrow_hashref;
-       $supervisor_id = $sqlhashref2->{indiv};
-       $sth2->finish();
-       $sth2 = $dbh->prepare("update tc_district set supervisor='$supervisor_id' where district='$district'");
-       $sth2->execute or die "-E- DB error: $DBI::errstr\n";
-       $sth2->finish();
-    }
-    $sth->finish();
-}
-
-# 3RD_COMPANIONSHIP
-#+---------------+------------------+------+-----+---------+-------+
-#| Field         | Type             | Null | Key | Default | Extra |
-#+---------------+------------------+------+-----+---------+-------+
-#| companionship | int(16) unsigned |      |     | 0       |       |
-#| indiv         | int(16) unsigned | YES  |     | NULL    |       |
-#| district      | int(16) unsigned | YES  |     | NULL    |       |
-#| valid         | tinyint(1)       | YES  |     | NULL    |       |
-#+---------------+------------------+------+-----+---------+-------+
+# TC_COMPANIONSHIP
+#+----------------------+------------------+------+-----+---------+-------+
+#| Field                | Type             | Null | Key | Default | Extra |
+#+----------------------+------------------+------+-----+---------+-------+
+#| companionship        | int(16) unsigned |      |     | 0       |       |
+#| individual           | int(16) unsigned | YES  |     | NULL    |       |
+#| district             | int(16) unsigned | YES  |     | NULL    |       |
+#| scheduling_priority  | int(10) unsigned | YES  |     | 30      |       |
+#| valid                | tinyint(1)       | YES  |     | NULL    |       |
+#+----------------------+------------------+------+-----+---------+-------+
 sub update_tc_companionship_table
 {
        print "\n-> Updating tc_companionship table\n";
@@ -293,34 +263,34 @@ sub update_tc_companionship_table
                foreach $key (keys %$hashref) {
                        if($key =~ /Quorum/i && $hometeaching_data{$index}{$key} =~ /Elders/i) {
                                foreach $field ("Home Teacher 1","Home Teacher 2") {
-                                       $indiv_name = $hometeaching_data{$index}{$field};
-                                       if($indiv_name eq "") { next; }
-                                       $sth2 = $dbh->prepare("select * from tc_indiv where name='$indiv_name'");
+                                       $individual_name = $hometeaching_data{$index}{$field};
+                                       if($individual_name eq "") { next; }
+                                       $sth2 = $dbh->prepare("select * from tc_individual where name='$individual_name'");
                                        $sth2->execute or die "-E- DB error: $DBI::errstr\n";
                                        $sqlhashref2 = $sth2->fetchrow_hashref;
-                                       $indiv = $sqlhashref2->{indiv};
+                                       $individual = $sqlhashref2->{individual};
                                        $id = $hometeaching_data{$index}{'Comp ID'};
                                        $district = $hometeaching_data{$index}{'HT District'};
-                                       $sth = $dbh->prepare("select * from tc_companionship where indiv='$indiv' and companionship='$id'");
+                                       $sth = $dbh->prepare("select * from tc_companionship where individual='$individual' and companionship='$id'");
                                        $sth->execute or die "-E- DB error: $DBI::errstr\n";
                                        my @data = ();
                                        while($sqlhashref = $sth->fetchrow_hashref) { push(@data, $sqlhashref); }
                                        my $rows = scalar @data;
                                        if($rows == 0) {
                                                # No existing records found for this companionship, make a new entry
-                                               print "   Adding Companion to companionship: $indiv_name -> $id\n";
-                                               $sth = $dbh->prepare("insert into tc_companionship values ($id,'$indiv','$district',1)");
+                                               print "   Adding Companion to companionship: $individual_name -> $id\n";
+                                               $sth = $dbh->prepare("insert into tc_companionship values ($id,'$individual','$district',NULL,1)");
                                                $sth->execute or die "-E- DB error: $DBI::errstr\n";
                                        } else {
                                                # An existing companionship was found for this companionship, update it
                                                $sth2 = $dbh->prepare("select * from tc_companionship where district='$district' and companionship='$id'");
                                                $sth2->execute or die "-E- DB error: $DBI::errstr\n";
-                                               print "   Updating Companionship with indiv: $indiv_name ($indiv) -> $id\n";
-                                               $sth = $dbh->prepare("update tc_companionship set district='$district' where indiv='$indiv' and companionship='$id'");
+                                               print "   Updating Companionship with individual: $individual_name ($individual) -> $id\n";
+                                               $sth = $dbh->prepare("update tc_companionship set district='$district' where individual='$individual' and companionship='$id'");
                                                $sth->execute or die "-E- DB error 'district': $DBI::errstr\n";
-                                               $sth = $dbh->prepare("update tc_companionship set indiv='$indiv' where indiv='$indiv' and companionship='$id'");
-                                               $sth->execute or die "-E- DB error 'indiv': $DBI::errstr\n";
-                                               $sth = $dbh->prepare("update tc_companionship set valid=1 where indiv='$indiv' and companionship='$id'");
+                                               $sth = $dbh->prepare("update tc_companionship set individual='$individual' where individual='$individual' and companionship='$id'");
+                                               $sth->execute or die "-E- DB error 'individual': $DBI::errstr\n";
+                                               $sth = $dbh->prepare("update tc_companionship set valid=1 where individual='$individual' and companionship='$id'");
                                                $sth->execute or die "-E- DB error 'valid': $DBI::errstr\n";
                                        }
                                        $sth->finish();
@@ -331,106 +301,86 @@ sub update_tc_companionship_table
        }
 }
 
-# 3RD_FAMILY
-#+---------------+------------------+------+-----+---------+-------+
-#| Field         | Type             | Null | Key | Default | Extra |
-#+---------------+------------------+------+-----+---------+-------+
-#| family        | int(16) unsigned |      | PRI | 0       |   A   |
-#| hofh_id       | int(16) unsigned | YES  |     | NULL    |       |
-#| name          | varchar(30)      | YES  |     | NULL    |       |
-#| name_id       | varchar(30)      | YES  |     | NULL    |       |
-#| indiv_id      | int(16) unsigned | YES  |     | NULL    |       |
-#| companionship | int(16) unsigned | YES  |     | NULL    |       |
-#| visit_pri     | int(10) unsigned | YES  |     | 1       |       |
-#| visit_notes   | varchar(128)     | YES  |     | NULL    |       |
-#| valid         | tinyint(1)       | YES  |     | NULL    |       |
-#+---------------+------------------+------+-----+---------+-------+
+# TC_FAMILY
+#+----------------------+------------------+------+-----+---------+-------+
+#| Field                | Type             | Null | Key | Default | Extra |
+#+----------------------+------------------+------+-----+---------+-------+
+#| family               | int(16) unsigned |      | PRI | 0       |   A   |
+#| individual           | int(16) unsigned | YES  |     | NULL    |       |
+#| companionship        | int(16) unsigned | YES  |     | NULL    |       |
+#| scheduling_priority  | int(10) unsigned | YES  |     | 30      |       |
+#| valid                | tinyint(1)       | YES  |     | NULL    |       |
+#+----------------------+------------------+------+-----+---------+-------+
 sub update_tc_family_table
 {
        print "\n-> Updating tc_family table\n";
 
        # Set all records to be invalid. Only mark them as valid if they appear on the new list.
-       $sth = $dbh->prepare("update tc_family set valid=0");
-       $sth->execute or die "-E- DB error: $DBI::errstr\n";
-       $sth = $dbh->prepare("update tc_family set companionship=0");
+       $sth = $dbh->prepare("update tc_family set valid=0 and companionship=0");
        $sth->execute or die "-E- DB error: $DBI::errstr\n";
 
-       foreach $index (keys %membership_data)
-       {
-               $hashref = $membership_data{$index};
-               foreach $key (keys %$hashref) {
-                       if($key =~ /HH Position/i && $membership_data{$index}{$key} =~ /Head of Household/i) {
-                               $family_name = $membership_data{$index}{'Preferred Name'};
-                               $family_name =~ s/\'/\\'/g; #'
-                               $id = $membership_data{$index}{'HofH ID'};
-                               $name_id = uc($family_name);
-
-                               # Find out how many families match this family's name
-                               $sth = $dbh->prepare("select * from tc_family where name_id='$name_id'");
-                               $sth->execute or die "-E- DB error: $DBI::errstr\n";
-                               my @data = ();
-                               while($sqlhashref = $sth->fetchrow_hashref) { push(@data, $sqlhashref); }
-                               my $rows = scalar @data;
-
-                               if($rows == 0) {
-                                       # No existing records found for this family, make a new entry
-                                       print "   Adding new Family: $family_name\n";
-                                       $sth = $dbh->prepare("insert into tc_family values (NULL,$id,'$family_name','$name_id','0','0','$default_visit_pri','',1)");
-                                       $sth->execute or die "-E- DB error: $DBI::errstr\n";
-                               } elsif($rows == 1) {
-                                       # An existing record was found for this family, update it
-                                       print "   Updating existing family: $family_name\n";
-                                       $sth = $dbh->prepare("update tc_family set hofh_id=$id where name_id='$name_id'");
-                                       $sth->execute or die "-E- DB error: $DBI::errstr\n";
-                                       $sth = $dbh->prepare("update tc_family set valid=1 where name_id='$name_id'");
-                                       $sth->execute or die "-E- DB error: $DBI::errstr\n";
-                               } else {
-                                       # More than one record was found. Error! This shouldn't happen.
-                                       print "   -E- More than one record found ($rows) for family name: $family_name\n";
-                               }
+       # find head of households in tc_individual
+       $sth = $dbh->prepare("SELECT * FROM tc_individual WHERE hh_position='Head of Household' and valid=1");
+       $sth->execute or die "-E- DB error: $DBI::errstr\n";
+       my @individual_data = ();
+       while ($sqlhashref = $sth->fetchrow_hashref) { push(@individual_data, $sqlhashref); }
+       my $individual_count = scalar @individual_data;
+       for($i=0;$i<$individual_count;$i++) {
+               $individual = $individual_data[$i]{'individual'};
+               $name = $individual_data[$i]{'name'};
+               
+               $sth2 = $dbh->prepare("SELECT * FROM tc_family WHERE individual='$individual'");
+               $sth2->execute or die "-E- DB error: $DBI::errstr\n";
+               
+               my @data = ();
+               while($sqlhashref2 = $sth2->fetchrow_hashref) { push(@data, $sqlhashref2); }
+               my $rows = scalar @data;
 
-                               # Now update the indiv_id field for this family
-                               $sth = $dbh->prepare("select * from tc_indiv WHERE name='$family_name'");
-                               $sth->execute or die "-E- DB error: $DBI::errstr\n";
-                               while($sqlhashref = $sth->fetchrow_hashref) {
-                                       $indiv_id = $sqlhashref->{indiv};
-                                       print "   Updating family indiv_id: $family_name -> $indiv_id\n";
-                                       $sth = $dbh->prepare("update tc_family set indiv_id=$indiv_id where name_id='$name_id'");
-                                       $sth->execute or die "-E- DB error: $DBI::errstr\n";
+               if($rows == 0) {
+                       # No existing records found for this family, make a new entry
+                       print "   Adding new Family: $name\n";
+                       $sth2 = $dbh->prepare("INSERT INTO tc_family VALUES (NULL,'$individual','0',NULL,1)");
+                       $sth2->execute or die "-E- DB error: $DBI::errstr\n";
+               } elsif($rows == 1) {
+                       # An existing record was found for this family, update it
+                       print "   Updating existing family: $name\n";
+                       $sth2 = $dbh->prepare("UPDATE tc_family SET valid='1' WHERE individual='$individual'");
+                       $sth2->execute or die "-E- DB error: $DBI::errstr\n";
+               } else {
+                       # More than one record was found. Error! This shouldn't happen.
+                       print "   -E- More than one record found ($rows) for family name: $name\n";
+               }
+               
+               # Now update the hometeaching field for this family
+               foreach $index (keys %hometeaching_data)
+               {
+                       $hashref = $hometeaching_data{$index};
+                       foreach $key (keys %$hashref) {
+                               if($hometeaching_data{$index}{'Household'} =~ /(\S+)\s+(\S+),\s+(\S+)\s+(.*)/) {
+                                       $a = $1; $b = $2; $c = $3; $d = $4;
+                                       if($name =~ /$a/ && $hometeaching_data{$index}{'Household'} !~ /$name/i) { 
+                                               print "I: Adjusting hometeaching match from: $hometeaching_data{$index}{'Household'} to $a, $c $d\n";
+                                               $hometeaching_data{$index}{'Household'} = "$a, $c $d";
+                                       }
                                }
-
-                               # Now update the hometeaching field for this family
-                               foreach $index (keys %hometeaching_data)
+                               if($key =~ /Quorum/i &&
+                                  $hometeaching_data{$index}{$key} =~ /Elders/i &&
+                                  $hometeaching_data{$index}{'Household'} =~ /$name/i &&
+                                  $data[0]->{companionship} != $hometeaching_data{$index}{'Comp ID'}
+                                 )
                                {
-                                       $hashref = $hometeaching_data{$index};
-                                       foreach $key (keys %$hashref) {
-                                               if($hometeaching_data{$index}{'Household'} =~ /(\S+)\s+(\S+),\s+(\S+)\s+(.*)/) {
-                                                       $a = $1; $b = $2; $c = $3; $d = $4;
-                                                       if($family_name =~ /$a/ && $hometeaching_data{$index}{'Household'} !~ /$family_name/i) { 
-                                                               print "I: Adjusting hometeaching match from: $hometeaching_data{$index}{'Household'} to $a, $c $d\n";
-                                                               $hometeaching_data{$index}{'Household'} = "$a, $c $d";
-                                                       }
-                                               }
-                                               if($key =~ /Quorum/i &&
-                                                  $hometeaching_data{$index}{$key} =~ /Elders/i &&
-                                                  $hometeaching_data{$index}{'Household'} =~ /$family_name/i &&
-                                                  $data[0]->{companionship} != $hometeaching_data{$index}{'Comp ID'}
-                                                  )
-                                               {
-                                                       print "   Updating hometeaching assignment for $family_name family\n";
-                                                       $companionship = $hometeaching_data{$index}{'Comp ID'};
-                                                       $sth = $dbh->prepare("update tc_family set companionship='$companionship' where name_id='$name_id'");
-                                                       $sth->execute or die "-E- DB error: $DBI::errstr\n";
-                                               }
-                                       }
+                                       print "   Updating hometeaching assignment for $name family\n";
+                                       $companionship = $hometeaching_data{$index}{'Comp ID'};
+                                       $sth2 = $dbh->prepare("update tc_family set companionship='$companionship' where individual='$individual'");
+                                       $sth2->execute or die "-E- DB error: $DBI::errstr\n";
                                }
-                               $sth->finish();
                        }
                }
+               $sth->finish();
        }
 }
 
-# 3RD_VISIT
+# TC_VISIT
 #+----------------+------------------+------+-----+---------+-------+
 #| Field          | Type             | Null | Key | Default | Extra |
 #+----------------+------------------+------+-----+---------+-------+
@@ -452,6 +402,8 @@ sub update_tc_visit_table
        ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime();
        my %visit_status = ('X', 'y', '-', 'n', '', '');
        
+       $sth = $dbh->prepare("TRUNCATE TABLE tc_visit");
+       $sth->execute or die "-E- DB error: $DBI::errstr\n";
        foreach $index (keys %hometeaching_stats_data)
        {
                $hashref = $hometeaching_stats_data{$index};
@@ -461,7 +413,7 @@ sub update_tc_visit_table
                print "   Updating visit data: $family_name\n";
 
                # get family id from tc_family
-               $sth = $dbh->prepare("select * from tc_family where name=\"$family_name\" and valid=1");
+               $sth = $dbh->prepare("SELECT * FROM tc_family AS tf JOIN tc_individual AS ti WHERE tf.individual=ti.individual AND ti.name=\"$family_name\" AND tf.valid=1");
                $sth->execute or die "-E- DB error: $DBI::errstr\n";
                my @family_data = ();
                while($sqlhashref = $sth->fetchrow_hashref) { push(@family_data, $sqlhashref); }
@@ -498,7 +450,7 @@ sub update_tc_visit_table
                #print "$month_header\n";
                #print $hometeaching_stats_data{$index}{$month_header};
                #print "\n";
-               foreach $i (reverse(0..$#history)) {
+               foreach $i (reverse(0..$#history-1)) {
                        # went back a calendar year, decrement $data_year
                        if ($months{$data_months[$i]} > $data_month)
                        {
@@ -546,7 +498,7 @@ sub check_for_changed_ids
 
        foreach $oldindex (keys %$oldhashref)
        {
-               $indiv_id = $oldhashref->{$oldindex}{'Indiv ID'};
+               $mls_id = $oldhashref->{$oldindex}{'Indiv ID'};
                $hofh_id  = $oldhashref->{$oldindex}{'HofH ID'};
                $full_name = $oldhashref->{$oldindex}{'Full Name'};
                $hh_position = $oldhashref->{$oldindex}{'HH Position'};
@@ -555,9 +507,9 @@ sub check_for_changed_ids
                foreach $newindex (keys %$newhashref)
                {
                        if($newhashref->{$newindex}{'Full Name'} eq $full_name &&
-                          $indiv_id != $newhashref->{$newindex}{'Indiv ID'})
+                          $mls_id != $newhashref->{$newindex}{'Indiv ID'})
                        {
-                               print "-W- Indiv ID for $full_name changed from $indiv_id to $newhashref->{$newindex}{'Indiv ID'}\n";
+                               print "-W- Indiv ID for $full_name changed from $mls_id to $newhashref->{$newindex}{'Indiv ID'}\n";
                                $found_problem = 1;
                        }
 
@@ -573,41 +525,9 @@ sub check_for_changed_ids
        return $found_problem;
 }
 
-sub update_family_in_tc_indiv_table
-{
-       print "\n-> Updating family info in tc_indiv table\n";
-
-       foreach $index (keys %membership_data)
-       {
-               $hashref = $membership_data{$index};
-
-               # get some information from hash about this individual
-               $name = $membership_data{$index}{'Preferred Name'};
-               $hofh_id = $membership_data{$index}{'HofH ID'};
-
-               # Find the family id for this individual's HofH_id
-               $sth = $dbh->prepare("select * from tc_family where hofh_id=$hofh_id and valid=1");
-               $sth->execute or die "-E- DB error: $DBI::errstr\n";
-               my @family_data = ();
-               while($sqlhashref = $sth->fetchrow_hashref) { push(@family_data, $sqlhashref); }
-               my $family_rows = scalar @family_data;
-               if($family_rows > 0) { 
-                       $family_id = $family_data[0]->{'family'};
-
-                       print "   Updating family data for: $name\n";
-
-                       # write the family id to the individual's data in tc_indiv
-                       $sth = $dbh->prepare("update tc_indiv set family='$family_id' where name=\"$name\""); 
-                       $sth->execute or die "-E- DB error: $DBI::errstr\n";
-               } else {
-                       $family_id = 0; 
-               }
-       }
-}
-
 sub update_organization_class_data
 {
-       print "\n-> Updating organization class info in tc_indiv table\n";
+       print "\n-> Updating organization class info in tc_individual table\n";
 
        foreach $index (keys %organization_class_data)
        {
@@ -617,17 +537,103 @@ sub update_organization_class_data
 
                if ($org_class =~ m/Elder/i) {
                        #print "   $name:  Elder\n";
-                       $sth = $dbh->prepare("update tc_indiv set steward='Elder' where name=\"$name\"");
+                       $sth = $dbh->prepare("update tc_individual set steward='Elder' where name=\"$name\"");
                        $sth->execute or die "-E- DB error: $DBI::errstr\n";
                }
                if ($org_class =~ m/High Priest/i) {
                        #print "   $name:  High Priest\n";
-                       $sth = $dbh->prepare("update tc_indiv set steward='High Priest' where name=\"$name\"");
+                       $sth = $dbh->prepare("update tc_individual set steward='High Priest' where name=\"$name\"");
                        $sth->execute or die "-E- DB error: $DBI::errstr\n";
                }
        }
 }
 
+sub update_tc_scheduling_priority_table
+{
+       print "\n-> Updating scheduling priority table\n";
+       
+       # individuals
+       $sth = $dbh->prepare("select * from tc_individual where steward='$default_stewardship' and valid=1");
+       $sth->execute or die "-E- DB error: $DBI::errstr\n";
+       while($sqlhashref = $sth->fetchrow_hashref) {
+               $individual = $sqlhashref->{individual};
+               $scheduling_priority = $sqlhashref->{scheduling_priority};
+               if ($scheduling_priority == 'NULL')
+               {
+                       $sth2 = $dbh->prepare("insert into tc_scheduling_priority values (NULL, 30, '')");
+                       $sth2->execute or die "-E- DB error: $DBI::errstr\n";
+                       $scheduling_priority = $dbh->last_insert_id(NULL,NULL,'tc_scheduling_priority',NULL);
+                       $sth2 = $dbh->prepare("update tc_individual set scheduling_priority=$scheduling_priority where individual=$individual");
+                       $sth2->execute or die "-E- DB error: $DBI::errstr\n";
+               }
+       }
+       &remove_obsolete_scheduling_priority("tc_individual");
+       
+       # families
+       $sth = $dbh->prepare("select tf.scheduling_priority, tf.family from tc_family AS tf JOIN tc_individual AS ti ON tf.individual=ti.individual and ti.steward='$default_stewardship' and tf.valid=1");
+       $sth->execute or die "-E- DB error: $DBI::errstr\n";
+       while($sqlhashref = $sth->fetchrow_hashref) {
+               $family = $sqlhashref->{family};
+               $scheduling_priority = $sqlhashref->{scheduling_priority};
+               #print "$family   $scheduling_priority\n";
+               if ($scheduling_priority == 'NULL')
+               {
+                       $sth2 = $dbh->prepare("insert into tc_scheduling_priority values (NULL, 30, '')");
+                       $sth2->execute or die "-E- DB error: $DBI::errstr\n";
+                       $scheduling_priority = $dbh->last_insert_id(NULL,NULL,'tc_scheduling_priority',NULL);
+                       $sth2 = $dbh->prepare("update tc_family set scheduling_priority=$scheduling_priority where family=$family");
+                       $sth2->execute or die "-E- DB error: $DBI::errstr\n";
+               }
+       }
+       &remove_obsolete_scheduling_priority("tc_family");
+       
+       # companionships
+       $sth = $dbh->prepare("select tc.individual, tc.scheduling_priority from tc_companionship AS tc JOIN tc_individual AS ti ON tc.individual=ti.individual and (ti.steward='$default_stewardship' or ti.steward='') and tc.valid=1");
+       $sth->execute or die "-E- DB error: $DBI::errstr\n";
+       while($sqlhashref = $sth->fetchrow_hashref) {
+               $individual = $sqlhashref->{individual};
+               $scheduling_priority = $sqlhashref->{scheduling_priority};
+               #print "$individual   $scheduling_priority\n";
+               if ($scheduling_priority == 'NULL')
+               {
+                       $sth2 = $dbh->prepare("insert into tc_scheduling_priority values (NULL, 30, '')");
+                       $sth2->execute or die "-E- DB error: $DBI::errstr\n";
+                       $scheduling_priority = $dbh->last_insert_id(NULL,NULL,'tc_scheduling_priority',NULL);
+                       $sth2 = $dbh->prepare("update tc_companionship set scheduling_priority=$scheduling_priority where individual=$individual");
+                       $sth2->execute or die "-E- DB error: $DBI::errstr\n";
+               }
+       }
+       &remove_obsolete_scheduling_priority("tc_companionship");
+}
+
+sub remove_obsolete_scheduling_priority
+{
+       my $table_name = $_[0];
+
+       #print "\n-> Cleaning $table_name\n";
+       
+       #$sth = $dbh->prepare("SELECT scheduling_priority FROM $table_name where scheduling_priority IS NOT NULL AND valid=0");
+       $sth = $dbh->prepare("SELECT * FROM $table_name WHERE valid=0");
+       $sth->execute or die "-E- DB error: $DBI::errstr\n";
+       while($sqlhashref = $sth->fetchrow_hashref) {
+               $scheduling_priority = $sqlhashref->{scheduling_priority};
+               $individual = $sqlhashref->{individual};
+               #$name = $sqlhashref->{name};
+               if ($scheduling_priority != "NULL") {
+                       #print "$name\n";
+                       # set scheduling_priority to NULL
+                       #print "UPDATE $table_name SET scheduling_priority=NULL WHERE individual=$individual\n";
+                       $sth2 = $dbh->prepare("UPDATE $table_name SET scheduling_priority=NULL WHERE individual=$individual");
+                       $sth2->execute or die "-E- DB error: $DBI::errstr\n";
+                       
+                       # remove entry from tc_scheduling_priority
+                       #print "DELETE FROM tc_scheduling_priority WHERE scheduling_priority=$scheduling_priority\n";
+                       $sth2 = $dbh->prepare("DELETE FROM tc_scheduling_priority WHERE scheduling_priority=$scheduling_priority");
+                       $sth2->execute or die "-E- DB error: $DBI::errstr\n";
+               }
+       }
+}
+
 ######################################################################
 # MAIN
 ######################################################################
@@ -663,13 +669,14 @@ if(defined $opt_o) {
 
 ###################################################
 # Process command line options
+our $datadir;
 if(defined $opt_n) { $datadir = $opt_n; }
 else { $datadir = shift(@ARGV); }
 print "\n-> Processing all ward data files in $datadir\n";
 
 ###################################################
 # Parse Ward Data Files
-&csv_to_hash("$datadir/Organization\ class\ per\ member.csv", \%organization_class_data);
+&optional_csv_to_hash("$datadir/Organization\ class\ per\ member.csv", \%organization_class_data);
 &csv_to_hash("$datadir/Membership.csv",\%membership_data);
 &csv_to_hash("$datadir/HomeTeaching.csv",\%hometeaching_data);
 &csv_to_hash("$datadir/Organization.csv",\%organization_data);
@@ -690,15 +697,14 @@ if($opt_v) {
 
 if($opt_s) { $dbh->disconnect(); exit; }
 
-# Now update the various eq DB tables
+# Now update the various DB tables
 &update_tc_calling_table();
-&update_tc_indiv_table();
-&update_tc_district_table();
+&update_tc_individual_table();
 &update_tc_companionship_table();
 &update_tc_family_table();
 &update_tc_visit_table();
-&update_family_in_tc_indiv_table();
 &update_organization_class_data();
+&update_tc_scheduling_priority_table();
 
 print "\n-> Import Successful! DONE...\n";