// POST: api/Participant
        public IHttpActionResult PostPerson(ParticipantViewModel participant)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            //Add HouseholdId
            if (participant.HouseholdId == null)
            {
                var household = new Household();
                household.AddressStreet     = participant.Street;
                household.AddressSuburb     = participant.Suburb;
                household.AddressPostcode   = participant.Postcode;
                household.AddressState      = participant.State;
                household.PhoneHome         = participant.PhoneHome;
                household.LastConfirmedBy   = participant.LastConfirmedBy;
                household.LastConfirmedWhen = participant.LastConfirmedWhen;
                household.AddresseeId       = participant.HouseholdAddressee;
                household.ActiveAddress     = household.ActiveAddress;
                db.Households.Add(household);
                db.SaveChanges();

                participant.HouseholdId = db.Households.Max(x => x.HouseholdId);
            }

            //Add Participant
            var mapper = new ParticipantMapper();
            var person = mapper.GetParticipantModel(participant);

            db.People.Add(person);
            db.SaveChanges();

            if (participant.StudyId != 0)
            {
                //Add in Linked Stuby Table
                var linkedStudy = new LinkSubjectsStudy();
                linkedStudy.PersonId = db.People.Max(x => x.PersonId);
                linkedStudy.StudyId  = participant.StudyId;
                db.LinkSubjectsStudies.Add(linkedStudy);
                db.SaveChanges();
            }

            //Add household members
            foreach (var member in participant.HouseholdMembers)
            {
                member.HouseholdId = participant.HouseholdId;
                member.Gender      = member.Gender == "M" ? "Male" : (member.Gender == "F" ? "Female" : "");
                var familyMember = mapper.GetParticipantModel(member);
                db.People.Add(familyMember);
                db.SaveChanges();
            }



            return(Ok(participant));
        }
        public IHttpActionResult PutPerson(int id, ParticipantViewModel participant)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != participant.PersonId)
            {
                return(BadRequest());
            }
            var mapper = new ParticipantMapper();
            var person = mapper.GetParticipantModel(participant);

            if (participant.StudyId != 0)
            {
                var linkedStudy = db.LinkSubjectsStudies.Where(l => l.PersonId == participant.PersonId && l.StudyId == participant.StudyId).FirstOrDefault();
                //Study Detail
                linkedStudy.Status = participant.StudyParticipationStatus;
                linkedStudy.OfficialSubjectStudyNum = participant.OfficialSubjectStudyNum;
                linkedStudy.WithdrawnReason         = participant.Reason;
                linkedStudy.WithdrawnReasonOther    = participant.ReasonOther;
                linkedStudy.EffFrom = participant.EffectiveFrom;
                linkedStudy.EffTo   = participant.EffectiveTo;
                linkedStudy.OfficialSubjectStudyNum = participant.OfficialSubjectStudyNum;
                db.Entry(linkedStudy).State         = EntityState.Modified;
            }

            if (participant.HouseholdId.HasValue)
            {
                //Household Detail
                var household = db.Households.Where(h => h.HouseholdId == participant.HouseholdId).FirstOrDefault();
                household.AddressStreet     = participant.Street;
                household.AddressSuburb     = participant.Suburb;
                household.AddressPostcode   = participant.Postcode;
                household.AddressState      = participant.State;
                household.PhoneHome         = participant.PhoneHome;
                household.LastConfirmedBy   = participant.LastConfirmedBy;
                household.LastConfirmedWhen = participant.LastConfirmedWhen;
                household.AddresseeId       = participant.HouseholdAddressee;
                household.ActiveAddress     = participant.ActiveAddress?1:0;
                db.Entry(household).State   = EntityState.Modified;
            }


            db.Entry(person).State = EntityState.Modified;



            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!PersonExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }