From f02dbfe276a992b3b1c674cc1b4075fd97c875e2 Mon Sep 17 00:00:00 2001
From: Alan Jack Pippin <ajp@pippin.(none)>
Date: Fri, 18 Nov 2005 23:29:50 -0700
Subject: [PATCH] Initial commit

---
 eq.jpg           | Bin 0 -> 71420 bytes
 import_ward_data | 611 +++++++++++++++++++++++++++++++++++++++++++++++
 parse_ward_data  | 136 +++++++++++
 3 files changed, 747 insertions(+)
 create mode 100644 eq.jpg
 create mode 100755 import_ward_data
 create mode 100755 parse_ward_data

diff --git a/eq.jpg b/eq.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5f1886d722345ed8eae5f7ac891300814d4f34ad
GIT binary patch
literal 71420
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

literal 0
HcmV?d00001

diff --git a/import_ward_data b/import_ward_data
new file mode 100755
index 0000000..c3041df
--- /dev/null
+++ b/import_ward_data
@@ -0,0 +1,611 @@
+#!/usr/bin/perl
+
+use DBI;
+use Getopt::Std;
+###################################################
+# GLOBALS
+$dbname = "phpgroupware";
+$dbhost = "192.168.0.2";
+$dbport = 3306;
+$dbuser = "phpgroupware";
+$dbpass = "phpgroupware";
+%hometeaching_data = ();
+%membership_data = ();
+getopts('vsn:o:');
+
+$monthname2num{'Jan'} = '01';
+$monthname2num{'Feb'} = '02';
+$monthname2num{'Mar'} = '03';
+$monthname2num{'Apr'} = '04';
+$monthname2num{'May'} = '05';
+$monthname2num{'Jun'} = '06';
+$monthname2num{'Jul'} = '07';
+$monthname2num{'Aug'} = '08';
+$monthname2num{'Sep'} = '09';
+$monthname2num{'Oct'} = '10';
+$monthname2num{'Nov'} = '11';
+$monthname2num{'Dec'} = '12';
+
+######################################################################
+# SUBROUTINES
+######################################################################
+sub csv_to_hash
+{
+    my ($filename, $hashref) = @_;
+
+    open(FILE,$filename) || die "-E- Could not open $filename for reading\n";
+
+    my $found_header = 0; my $index = 0;
+    while(<FILE>)
+    {
+	$line = $_;
+	@data = split /\",/, $line;
+	if(!$found_header) { @header = @data; $found_header = 1; }
+	else {
+	    foreach $i (0..$#data-1) {
+		$data[$i] =~ s/\"//g;
+		$header[$i] =~ s/\"//g;
+	        $hashref->{$index}{$header[$i]} = $data[$i];
+		#print "$index: $i: $header[$i]: $data[$i]\n";
+	    }
+	    $index++;
+	}
+    }
+    
+    close(FILE);
+}
+
+######################################################################
+sub print_hash
+{
+    my ($hashref) = @_;
+
+    foreach $key (sort {$a <=> $b} keys %$hashref) {
+	print "Index: $key\n";
+	foreach $field (keys %{$hashref->{$key}}) {
+	    print "$field: $hashref->{$key}{$field}\n";
+	}
+	print "\n";
+    }
+}
+
+######################################################################
+
+# EQ_AARONIC
+#+-------+--------------------+------+-----+---------+-------+
+#| Field | Type               | Null | Key | Default | Extra |
+#+-------+--------------------+------+-----+---------+-------+
+#| aaronic | int(16) unsigned |      | PRI | 0       |   A   |
+#| name    | varchar(60)      | YES  |     | NULL    |       |
+#| valid   | tinyint(1)       | YES  |     | NULL    |       |
+#+-------+--------------------+------+-----+---------+-------+
+sub update_eq_aaronic_table
+{
+    print "-> Updating eq_aaronic table\n";
+    foreach $index (keys %membership_data)
+    {
+	$hashref = $membership_data{$index};
+	foreach $key (keys %$hashref) {
+	    if($key =~ /Priesthood/i &&
+	       ($membership_data{$index}{$key} =~ /^Teacher\s*$/i ||
+		$membership_data{$index}{$key} =~ /^Priest\s*$/i)) {
+		$aaronic_name = $membership_data{$index}{'Preferred Name'};
+		$sth = $dbh->prepare("select * from eq_aaronic where name='$aaronic_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 aaronic, make a new entry
+		    print "   Adding new Aaronic: $aaronic_name\n";
+		    $sth = $dbh->prepare("insert into eq_aaronic values (NULL,'$aaronic_name',1)");
+		    $sth->execute or die "-E- DB error: $DBI::errstr\n";
+		} elsif($rows == 1) {
+		    # An existing record was found for this aaronic, update it if it is valid
+		    if($data[0]->{valid} == 1) {
+			print "   Updating existing aaronic: $aaronic_name\n";
+		    }
+		} else {
+		    # More than one record was found. Error! This shouldn't happen.
+		    print "   -E- More than one record found ($rows) for aaronic name: $aaronic_name\n";
+		}
+	    }
+	}
+    }
+    $sth->finish();
+}
+
+# EQ_ELDER
+#+------------+------------------+------+-----+---------+-------+
+#| Field      | Type             | Null | Key | Default | Extra |
+#+------------+------------------+------+-----+---------+-------+
+#| elder      | int(16) unsigned |      | PRI | 0       |   A   |
+#| name       | varchar(60)      | YES  |     | NULL    |       |
+#| valid      | tinyint(1)       | YES  |     | NULL    |       |
+#+------------+------------------+------+-----+---------+-------+
+sub update_eq_elder_table
+{
+    print "-> Updating eq_elder table\n";
+
+    # Set all records to be invalid. Only mark them as valid if they appear on the new list.
+    $sth = $dbh->prepare("update eq_elder set valid=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 =~ /Priesthood/i && $membership_data{$index}{$key} =~ /Elder/i) {
+		$elder_name = $membership_data{$index}{'Preferred Name'};
+		$sth = $dbh->prepare("select * from eq_elder where name='$elder_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 elder, make a new entry
+		    print "   Adding new Elder: $elder_name\n";
+		    $sth = $dbh->prepare("insert into eq_elder values (NULL,'$elder_name',1)");
+		    $sth->execute or die "-E- DB error: $DBI::errstr\n";
+		} elsif($rows == 1) {
+		    # An existing record was found for this elder, update it
+		    print "   Updating existing Elder: $elder_name\n";
+		    $sth = $dbh->prepare("update eq_elder set valid=1 where name='$elder_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 Elder: $elder_name\n";
+		}
+	    }
+	}
+    }
+    $sth->finish();
+}
+
+# EQ_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_eq_district_table
+{
+    # Districts should be created by hand. This subroutine only
+    # updates the supervisor's ID in each district.
+    print "-> Updating eq_district table\n";
+    $sth = $dbh->prepare("select * from eq_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 eq_elder where name='$supervisor_name'");
+	$sth2->execute or die "-E- DB error: $DBI::errstr\n";
+	$sqlhashref2 = $sth2->fetchrow_hashref;
+	$supervisor_id = $sqlhashref2->{elder};
+	$sth2->finish();
+	$sth2 = $dbh->prepare("update eq_district set supervisor='$supervisor_id' where district='$district'");
+	$sth2->execute or die "-E- DB error: $DBI::errstr\n";
+	$sth2->finish();
+    }
+    $sth->finish();
+}
+
+# EQ_COMPANIONSHIP
+#+---------------+------------------+------+-----+---------+-------+
+#| Field         | Type             | Null | Key | Default | Extra |
+#+---------------+------------------+------+-----+---------+-------+
+#| companionship | int(16) unsigned |      |     | 0       |       |
+#| elder         | int(16) unsigned | YES  |     | NULL    |       |
+#| aaronic       | int(16) unsigned | YES  |     | NULL    |       |
+#| district      | int(16) unsigned | YES  |     | NULL    |       |
+#| valid         | tinyint(1)       | YES  |     | NULL    |       |
+#+---------------+------------------+------+-----+---------+-------+
+sub update_eq_companionship_table
+{
+    print "-> Updating eq_companionship table\n";
+
+    # First, mark all existing companionships as invalid in case they have been dissolved
+    $sth = $dbh->prepare("update eq_companionship set valid=0");
+    $sth->execute or die "-E- DB error: $DBI::errstr\n";
+    # Second, mark all the aaronic invalid. We'll only mark the ones as valid that are assigned to hometeach
+    $sth = $dbh->prepare("update eq_aaronic set valid=0");
+    $sth->execute or die "-E- DB error: $DBI::errstr\n";
+    
+    foreach $index (keys %hometeaching_data)
+    {
+	$hashref = $hometeaching_data{$index};
+	foreach $key (keys %$hashref) {
+	    if($key =~ /Quorum/i && $hometeaching_data{$index}{$key} =~ /Elders/i) {
+		foreach $field ("Home Teacher 1","Home Teacher 2") {
+		    $elder_name = $hometeaching_data{$index}{$field};
+		    if($elder_name eq "") { next; }
+		    $sth2 = $dbh->prepare("select * from eq_elder where name='$elder_name'");
+		    $sth2->execute or die "-E- DB error: $DBI::errstr\n";
+		    $sqlhashref2 = $sth2->fetchrow_hashref;
+		    $elder = $sqlhashref2->{elder};
+		    $aaronic = "NULL";
+		    if($elder eq "") {
+			$sth2 = $dbh->prepare("select * from eq_aaronic where name='$elder_name'");
+			$sth2->execute or die "-E- DB error: $DBI::errstr\n";
+			$sqlhashref2 = $sth2->fetchrow_hashref;
+			$aaronic = $sqlhashref2->{aaronic};
+			$elder = "NULL";
+			if($aaronic eq "") { print "-W- Unable to find $elder_name in eq_elder or eq_aaronic tables\n"; }
+		    } 
+		    $id = $hometeaching_data{$index}{'Comp ID'};
+		    $district = $hometeaching_data{$index}{'HT District'};
+		    $sth = $dbh->prepare("select * from eq_companionship where elder='$elder' and aaronic='$aaronic'");
+		    $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 Elder to companionship: $elder_name -> $id\n";
+			$sth = $dbh->prepare("insert into eq_companionship values ($id,'$elder','$aaronic','$district',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 eq_companionship where district='$district' and companionship='$id'");
+			$sth2->execute or die "-E- DB error: $DBI::errstr\n";
+			if($elder ne "NULL") {
+			    print "   Updating Companionship with Elder: $elder_name ($elder) -> $id\n";
+			    $sth = $dbh->prepare("update eq_companionship set district='$district' where elder='$elder'");
+			    $sth->execute or die "-E- DB error: $DBI::errstr\n";
+			    $sth = $dbh->prepare("update eq_companionship set companionship='$id' where elder='$elder'");
+			    $sth->execute or die "-E- DB error: $DBI::errstr\n";
+			    $sth = $dbh->prepare("update eq_companionship set valid=1 where elder='$elder'");
+			    $sth->execute or die "-E- DB error: $DBI::errstr\n";
+			} else {
+			    print "   Updating Companionship with Aaronic: $elder_name ($aaronic) -> $id\n";
+			    $sth = $dbh->prepare("update eq_companionship set district='$district' where aaronic='$aaronic'");
+			    $sth->execute or die "-E- DB error: $DBI::errstr\n";
+			    $sth = $dbh->prepare("update eq_companionship set companionship='$id' where aaronic='$aaronic'");
+			    $sth->execute or die "-E- DB error: $DBI::errstr\n";
+			    $sth = $dbh->prepare("update eq_companionship set valid=1 where aaronic='$aaronic'");
+			    $sth->execute or die "-E- DB error: $DBI::errstr\n";			    
+			    $sth = $dbh->prepare("update eq_aaronic set valid=1 where aaronic='$aaronic'");
+			    $sth->execute or die "-E- DB error: $DBI::errstr\n";
+			}
+		    }
+		    $sth->finish();
+		    $sth2->finish();		    
+		}
+	    }
+	}
+    }
+}
+
+# EQ_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    |       |
+#| companionship | int(16) unsigned | YES  |     | NULL    |       |
+#| valid         | tinyint(1)       | YES  |     | NULL    |       |
+#+---------------+------------------+------+-----+---------+-------+
+sub update_eq_family_table
+{
+    print "-> Updating eq_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 eq_family set valid=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'};
+
+		# Find out how many families match this family's name
+		$sth = $dbh->prepare("select * from eq_family where name='$family_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 family, make a new entry
+		    print "   Adding new Family: $family_name\n";
+		    $sth = $dbh->prepare("insert into eq_family values (NULL,$id,'$family_name','0',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 eq_family set hofh_id=$id where name='$family_name'");
+		    $sth->execute or die "-E- DB error: $DBI::errstr\n";
+		    $sth = $dbh->prepare("update eq_family set valid=1 where name='$family_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 family name: $family_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+(.*)/) {
+			    print "I: Adjusting hometeaching match from: $hometeaching_data{$index}{'Household'} to $1, $3 $4\n";
+			    $hometeaching_data{$index}{'Household'} = "$1, $3 $4";
+			}
+			if($key =~ /Quorum/i &&
+			   $hometeaching_data{$index}{$key} =~ /Elders/i &&
+			   $hometeaching_data{$index}{'Household'} =~ /$family_name/ &&
+			   $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 eq_family set companionship='$companionship' where name='$family_name'");
+			    $sth->execute or die "-E- DB error: $DBI::errstr\n";
+			}
+		    }
+		}
+		$sth->finish();
+	    }
+	}
+    }
+}
+
+# EQ_PARENT
+#+----------+------------------+------+-----+---------+-------+
+#| Field    | Type             | Null | Key | Default | Extra |
+#+----------+------------------+------+-----+---------+-------+
+#| parent   | int(16) unsigned |      | PRI | 0       |   A   |
+#| family   | int(16) unsigned | YES  |     | NULL    |       |
+#| name     | varchar(30)      | YES  |     | NULL    |       |
+#| birthday | date             | YES  |     | NULL    |       |
+#| valid    | tinyint(1)       | YES  |     | NULL    |       |
+#+----------+------------------+------+-----+---------+-------+
+sub update_eq_parent_table
+{
+    print "-> Updating eq_parent table\n";
+
+    # Set all records to be invalid. Only mark them as valid if they appear on the new list.
+    $sth = $dbh->prepare("update eq_parent set valid=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 ||
+	       $membership_data{$index}{$key} =~ /Spouse/i
+	       ) {
+		# Get some information from the hash about this parent
+		$parent_name = $membership_data{$index}{'Preferred Name'};
+		$parent_name =~ s/\'/\\'/g; #'
+		$birthday = $membership_data{$index}{'Birth'};
+		$birthday =~ /(\d+) (\S+) (\d+)/; $day=$1; $month=$monthname2num{$2}; $year=$3;
+		$hofh_id = $membership_data{$index}{'HofH ID'};
+
+		# Find the family id for this parent's HofH_ID.
+		$sth = $dbh->prepare("select * from eq_family where hofh_id='$hofh_id'");
+		$sth->execute or die "-E- DB error: $DBI::errstr\n";
+		$sqlhashref = $sth->fetchrow_hashref();
+		$family_id = $sqlhashref->{'family'};
+
+		# Find out how many parents match this parent's name
+		$sth = $dbh->prepare("select * from eq_parent where name='$parent_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 parent, make a new entry
+		    print "   Adding new Parent: $parent_name\n";
+		    $sth = $dbh->prepare("insert into eq_parent values (NULL,$family_id,'$parent_name','$year-$month-$day',1)");
+		    $sth->execute or die "-E- DB error: $DBI::errstr\n";
+		} elsif($rows == 1) {
+		    # An existing record was found for this parent, update it
+		    print "   Updating existing parent: $parent_name\n";
+		    $sth = $dbh->prepare("update eq_parent set family='$family_id' where name='$parent_name'");
+		    $sth->execute or die "-E- DB error: $DBI::errstr\n";
+		    $sth = $dbh->prepare("update eq_parent set birthday='$year-$month-$day' where name='$parent_name'");
+		    $sth->execute or die "-E- DB error: $DBI::errstr\n";
+		    $sth = $dbh->prepare("update eq_parent set valid=1 where name='$parent_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 with same parent name: $parent_name\n";
+		}
+		$sth->finish();
+	    }
+	}
+    }
+}
+
+# EQ_CHILD
+#+----------+------------------+------+-----+---------+-------+
+#| Field    | Type             | Null | Key | Default | Extra |
+#+----------+------------------+------+-----+---------+-------+
+#| child    | int(16) unsigned |      | PRI | 0       |   A   |
+#| family   | int(16) unsigned | YES  |     | NULL    |       |
+#| name     | varchar(30)      | YES  |     | NULL    |       |
+#| birthday | date             | YES  |     | NULL    |       |
+#| valid    | tinyint(1)       | YES  |     | NULL    |       |
+#+----------+------------------+------+-----+---------+-------+
+sub update_eq_child_table
+{
+    print "-> Updating eq_child table\n";
+
+    # Set all records to be invalid. Only mark them as valid if they appear on the new list.
+    $sth = $dbh->prepare("update eq_child set valid=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} =~ /Other/i ) {
+		$child_name = $membership_data{$index}{'Full Name'};
+		$child_name =~ s/\'/\\'/g; #'
+		$birthday = $membership_data{$index}{'Birth'};
+		$birthday =~ /(\d+) (\S+) (\d+)/; $day=$1; $month=$monthname2num{$2}; $year=$3;
+		$id = $membership_data{$index}{'Indiv ID'};
+		$hofh_id = $membership_data{$index}{'HofH ID'};
+
+		# Find the family id for this child's HofH_ID.
+		$sth = $dbh->prepare("select * from eq_family where hofh_id='$hofh_id'");
+		$sth->execute or die "-E- DB error: $DBI::errstr\n";
+		$sqlhashref = $sth->fetchrow_hashref();
+		$family_id = $sqlhashref->{'family'};
+
+		# Find out how many children have the same name for the same family
+		$sth = $dbh->prepare("select * from eq_child where name='$child_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 child, make a new entry
+		    print "   Adding new Child: $child_name\n";
+		    $sth = $dbh->prepare("insert into eq_child values (NULL,$family_id,'$child_name','$year-$month-$day',1)");
+		    $sth->execute or die "-E- DB error: $DBI::errstr\n";
+		} elsif($rows == 1) {
+		    # An existing record was found for this child, update it
+		    print "   Updating existing child: $child_name\n";
+		    $sth = $dbh->prepare("update eq_child set family='$family_id' where name='$child_name'");
+		    $sth->execute or die "-E- DB error: $DBI::errstr\n";
+		    $sth = $dbh->prepare("update eq_child set birthday='$year-$month-$day' where name='$child_name'");
+		    $sth->execute or die "-E- DB error: $DBI::errstr\n";
+		    $sth = $dbh->prepare("update eq_child set valid=1 where name='$child_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) with same child name: $child_name\n";
+		}
+		$sth->finish();
+	    }
+	}
+    }
+}
+
+######################################################################
+sub check_for_changed_ids
+{
+    # If the Indiv ID & HofH ID has changed between data sets, we could have problems
+    my ($oldhashref, $newhashref) = @_;
+    my $found_problem = 0;
+    
+    foreach $oldindex (keys %$oldhashref)
+    {
+	$indiv_id = $oldhashref->{$oldindex}{'Indiv ID'};
+	$hofh_id  = $oldhashref->{$oldindex}{'HofH ID'};
+	$full_name = $oldhashref->{$oldindex}{'Full Name'};
+	$hh_position = $oldhashref->{$oldindex}{'HH Position'};
+	if($hh_position =~ /Other/i) { next; }
+
+	foreach $newindex (keys %$newhashref)
+	{
+	    if($newhashref->{$newindex}{'Full Name'} eq $full_name &&
+	       $indiv_id != $newhashref->{$newindex}{'Indiv ID'})
+	    {
+		print "-W- Indiv ID for $full_name changed from $indiv_id to $newhashref->{$newindex}{'Indiv ID'}\n";
+		$found_problem = 1;
+	    }
+
+	    if($newhashref->{$newindex}{'Full Name'} eq $full_name &&
+	       $hofh_id != $newhashref->{$newindex}{'HofH ID'})
+	    {
+		print "-W- HofH ID for $full_name changed from $hofh_id to $newhashref->{$newindex}{'HofH ID'}\n";
+		$found_problem = 1;
+	    }
+	}
+    }
+    
+    return $found_problem;
+}
+
+######################################################################
+# MAIN
+######################################################################
+
+###################################################
+# Open a connection to the database
+$dbh=DBI->connect("dbi:mysql:dbname=$dbname;host=$dbhost port=$dbport",$dbuser,$dbpass,{
+    AutoCommit=>0,
+    PrintError=>0}) or print "Connect Failure:".$DBI::errstr."\n" and exit 2;
+
+###################################################
+# Check old directory against new directory to ensure
+# that the Indiv ID & HofH ID have not changed between updates
+if(defined $opt_o) {
+    print "-> Comparing old data files to new ones: $opt_o => $opt_n\n";
+    my %old_membership_data = ();
+    my %new_membership_data = ();
+    &csv_to_hash("$opt_o/Membership.csv",\%old_membership_data);
+    &csv_to_hash("$opt_n/Membership.csv",\%new_membership_data);
+
+    $changed_ids=&check_for_changed_ids(\%old_membership_data, \%new_membership_data);
+    
+    if($changed_ids) {
+	print "\n";
+	print "-E- Some Indiv IDs and HofH IDs have changed for Head of Households between \n";
+	print "    $opt_o and $opt_n data sets.\n";
+	print "    This script is not currently setup to handle this properly.\n";
+	print "\n";
+	print "    Exiting without updating...\n\n";
+	exit;
+    }
+}
+
+###################################################
+# Process command line options
+if(defined $opt_n) { $datadir = $opt_n; }
+else { $datadir = shift(@ARGV); }
+print "-> Processing all ward data files in $datadir\n";
+
+###################################################
+# Parse Ward Data Files
+&csv_to_hash("$datadir/Membership.csv",\%membership_data);
+&csv_to_hash("$datadir/HomeTeaching.csv",\%hometeaching_data);
+
+if($opt_v) {
+    print "-> Membership Data Dump\n\n";
+    &print_hash(\%membership_data);
+    print "-> HomeTeaching Data Dump\n\n";
+    &print_hash(\%hometeaching_data);
+}
+
+if($opt_s) { $dbh->disconnect(); exit; }
+
+# Now update the various eq DB tables
+&update_eq_elder_table();
+&update_eq_aaronic_table();
+&update_eq_district_table();
+&update_eq_companionship_table();
+&update_eq_family_table();
+&update_eq_parent_table();
+&update_eq_child_table();
+
+###################################################
+# Disconnect from the database
+$dbh->disconnect();
+
+######################################################################
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/parse_ward_data b/parse_ward_data
new file mode 100755
index 0000000..82a1730
--- /dev/null
+++ b/parse_ward_data
@@ -0,0 +1,136 @@
+#!/usr/bin/perl
+
+use DBI;
+use Getopt::Std;
+###################################################
+# GLOBALS
+$dbname = "phpgroupware";
+$dbhost = "192.168.0.2";
+$dbport = 3306;
+$dbuser = "phpgroupware";
+$dbpass = "phpgroupware";
+%hometeaching_data = ();
+%membership_data = ();
+getopts('vsn:o:b');
+
+$monthname2num{'Jan'} = '01';
+$monthname2num{'Feb'} = '02';
+$monthname2num{'Mar'} = '03';
+$monthname2num{'Apr'} = '04';
+$monthname2num{'May'} = '05';
+$monthname2num{'Jun'} = '06';
+$monthname2num{'Jul'} = '07';
+$monthname2num{'Aug'} = '08';
+$monthname2num{'Sep'} = '09';
+$monthname2num{'Oct'} = '10';
+$monthname2num{'Nov'} = '11';
+$monthname2num{'Dec'} = '12';
+
+######################################################################
+# SUBROUTINES
+######################################################################
+sub csv_to_hash
+{
+    my ($filename, $hashref) = @_;
+
+    open(FILE,$filename) || die "-E- Could not open $filename for reading\n";
+
+    my $found_header = 0; my $index = 0;
+    while(<FILE>)
+    {
+	$line = $_;
+	@data = split /\",/, $line;
+	if(!$found_header) { @header = @data; $found_header = 1; }
+	else {
+	    foreach $i (0..$#data-1) {
+		$data[$i] =~ s/\"//g;
+		$header[$i] =~ s/\"//g;
+	        $hashref->{$index}{$header[$i]} = $data[$i];
+		#print "$index: $i: $header[$i]: $data[$i]\n";
+	    }
+	    $index++;
+	}
+    }
+    
+    close(FILE);
+}
+
+######################################################################
+sub print_hash
+{
+    my ($hashref) = @_;
+
+    foreach $key (sort {$a <=> $b} keys %$hashref) {
+	print "Index: $key\n";
+	foreach $field (keys %{$hashref->{$key}}) {
+	    print "$field: $hashref->{$key}{$field}\n";
+	}
+	print "\n";
+    }
+}
+
+######################################################################
+sub print_birthdays
+{
+    my ($hashref) = @_;
+
+    foreach $key (sort {$a <=> $b} keys %$hashref) {
+	$name = "";
+	$birthday = "";
+	foreach $field (keys %{$hashref->{$key}}) {
+	    if($field =~ /Full Name/) { $name = $hashref->{$key}{$field}; }
+	    if($field =~ /Birth/) { $birthday = $hashref->{$key}{$field}; }
+	}
+	if($name ne "" && $birthday ne "") { printf "%-30s %-10s\n",$name,$birthday; }
+    }
+}
+
+######################################################################
+# MAIN
+######################################################################
+
+###################################################
+# Open a connection to the database
+$dbh=DBI->connect("dbi:mysql:dbname=$dbname;host=$dbhost port=$dbport",$dbuser,$dbpass,{
+    AutoCommit=>0,
+    PrintError=>0}) or print "Connect Failure:".$DBI::errstr."\n" and exit 2;
+
+###################################################
+# Process command line options
+if(defined $opt_n) { $datadir = $opt_n; }
+else { $datadir = shift(@ARGV); }
+print "-> Processing all ward data files in $datadir\n";
+
+###################################################
+# Parse Ward Data Files
+&csv_to_hash("$datadir/Membership.csv",\%membership_data);
+&csv_to_hash("$datadir/HomeTeaching.csv",\%hometeaching_data);
+
+if($opt_v) {
+    print "-> Membership Data Dump\n\n";
+    &print_hash(\%membership_data);
+    print "-> HomeTeaching Data Dump\n\n";
+    &print_hash(\%hometeaching_data);
+}
+
+if($opt_b) { &print_birthdays(\%membership_data); }
+
+if($opt_s) { $dbh->disconnect(); exit; }
+
+###################################################
+# Disconnect from the database
+$dbh->disconnect();
+
+######################################################################
+
+
+
+
+
+
+
+
+
+
+
+
-- 
2.34.1