<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>db/migrate/20091025205706_add_alternate_barcode_id_to_families.rb</filename>
    </added>
    <added>
      <filename>test/unit/family_test.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -31,7 +31,8 @@ class FamiliesController &lt; ApplicationController
     if params[:legacy_id]
       @family = Family.find_by_legacy_id(params[:id])
     elsif params[:barcode_id]
-      @family = Family.find_by_barcode_id_and_deleted(params[:id], false)
+      @family = Family.find_by_barcode_id_and_deleted(params[:id], false) ||
+        Family.find_by_alternate_barcode_id_and_deleted(params[:id], false)
     else
       @family = Family.find_by_id(params[:id])
     end
@@ -101,7 +102,7 @@ class FamiliesController &lt; ApplicationController
         format.xml  { render :xml =&gt; @family.to_xml } if can_export?
         format.js do # only used by barcode entry right now
           render :update do |page|
-            page.replace_html :notice, &quot;Family saved. Assigned number: #{@family.barcode_id}&quot;
+            page.replace_html :notice, &quot;Family saved.&quot;
             page[:notice].show
           end
         end</diff>
      <filename>app/controllers/families_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -51,14 +51,40 @@ class Family &lt; ActiveRecord::Base
   sharable_attributes :mobile_phone, :address, :anniversary
   
   validates_uniqueness_of :barcode_id, :allow_nil =&gt; true
-  validates_length_of :barcode_id, :in =&gt; 10..50, :allow_nil =&gt; true
-  validates_format_of :barcode_id, :with =&gt; /^\d+$/, :allow_nil =&gt; true
+  validates_uniqueness_of :alternate_barcode_id, :allow_nil =&gt; true
+  validates_length_of :barcode_id, :alternate_barcode_id, :in =&gt; 10..50, :allow_nil =&gt; true
+  validates_format_of :barcode_id, :alternate_barcode_id, :with =&gt; /^\d+$/, :allow_nil =&gt; true
+  
+  validates_each [:barcode_id, :alternate_barcode_id] do |record, attribute, value|
+    if attribute.to_s == 'barcode_id' and record.barcode_id
+      if record.barcode_id == record.alternate_barcode_id
+        record.errors.add(attribute, 'cannot be same as alternate barcode id')
+      elsif Family.count('*', :conditions =&gt; ['alternate_barcode_id = ?', record.barcode_id]) &gt; 0
+        record.errors.add(attribute, 'is already taken')
+      end
+    elsif attribute.to_s == 'alternate_barcode_id' and record.alternate_barcode_id
+      if Family.count('*', :conditions =&gt; ['barcode_id = ?', record.alternate_barcode_id]) &gt; 0
+        record.errors.add(attribute, 'is already taken')
+      end
+    end
+    # if barcode_id and (barcode_id == alternate_barcode_id or Family.count('*', :conditions =&gt; ['alternate_barcode_id = ?', barcode_id]) &gt; 0)
+    #       errors.add(:barcode_id, 'cannot be same as alternate barcode id')
+    #     end
+    #     if alternate_barcode_id and (alternate_barcode_id == barcode_id or Family.count('*', :conditions =&gt; ['barcode_id = ?', alternate_barcode_id]) &gt; 0)
+    #       errors.add(:alternate_barcode_id, 'cannot be same as barcode id')
+    #     end
+  end
   
   def barcode_id=(b)
     write_attribute(:barcode_id, b.to_s.strip.any? ? b : nil)
     write_attribute(:barcode_assigned_at, Time.now.utc)
   end
   
+  def alternate_barcode_id=(b)
+    write_attribute(:alternate_barcode_id, b.to_s.strip.any? ? b : nil)
+    write_attribute(:barcode_assigned_at, Time.now.utc)
+  end
+  
   def address
     address1.to_s + (address2.to_s.any? ? &quot;\n#{address2}&quot; : '')
   end</diff>
      <filename>app/models/family.rb</filename>
    </modified>
    <modified>
      <diff>@@ -9,7 +9,10 @@
       &lt;span title=&quot;&lt;%= @family.barcode_assigned_at.to_s %&gt;&quot;&gt;
         &lt;%= time_ago_in_words @family.barcode_assigned_at %&gt; ago
       &lt;/span&gt;
+      &lt;br/&gt;
     &lt;% end %&gt;
+    &lt;%= link_to_function 'alternate card &amp;raquo;', &quot;Element.show('family_alternate_barcode_id');Element.hide(this);&quot;, :class =&gt; 'discreet' %&gt;
+    &lt;%= form.text_field :alternate_barcode_id, :size =&gt; 15, :style =&gt; 'display:none;' %&gt;
   &lt;/p&gt;
   &lt;p&gt;&lt;em&gt;Remember, this card number is not to be written down or given to any
     unauthorized persons.&lt;/em&gt;&lt;/p&gt;</diff>
      <filename>app/views/families/_barcode_entry.erb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>9f43aad3685353d701c50904c3ebaefa85a16e87</id>
    </parent>
  </parents>
  <author>
    <name>Tim Morgan</name>
    <email>tim@timmorgan.org</email>
  </author>
  <url>http://github.com/seven1m/onebody/commit/24198f5c0f820fee73ac6c3859829f882e7360bd</url>
  <id>24198f5c0f820fee73ac6c3859829f882e7360bd</id>
  <committed-date>2009-10-25T15:03:16-07:00</committed-date>
  <authored-date>2009-10-25T15:03:16-07:00</authored-date>
  <message>Alternate barcode id for families.</message>
  <tree>5749fdd581cf701b67445a552bd84ba5083a98fe</tree>
  <committer>
    <name>Tim Morgan</name>
    <email>tim@timmorgan.org</email>
  </committer>
</commit>
