public YMCAServiceResponse RegisterChild(Child obj, string member_id)
        {
            YMCAServiceResponse response = new YMCAServiceResponse()
            {
                Error = true
            };

            SqlConnection sql = new SqlConnection(DatabaseConnection);
            SqlCommand    cmd = new SqlCommand("p_child_insert", sql)
            {
                CommandType = CommandType.StoredProcedure
            };

            cmd.Parameters.AddRange(new SqlParameter[]
            {
                new SqlParameter("fname", obj.FirstName),
                new SqlParameter("lname", obj.LastName),
                new SqlParameter("birth_dt", obj.BirthDate),
                new SqlParameter("member_id", member_id)
            });
            try
            {
                sql.Open();
                int child_id = (int)cmd.ExecuteScalar();
                if (child_id > 0)
                {
                    obj.Id           = child_id;
                    response.Error   = false;
                    response.Data    = obj;
                    response.Message = "Successfully registered this child to this member";
                }
                else
                {
                    response.Message = "Unable to register child";
                }
            }
            catch (Exception ex)
            {
                Log(LogType.Error, "Exception Thrown: " + ex.Message);
                response.Message = ex.Message;
            }
            finally
            {
                if (sql.State == ConnectionState.Open)
                {
                    sql.Close();
                }
            }

            return(response);
        }
        public YMCAServiceResponse AssignMember(string member_id, int child_id)
        {
            YMCAServiceResponse response = new YMCAServiceResponse()
            {
                Error   = true,
                Message = "Unable to attach child to member"
            };


            using (SqlConnection db = new SqlConnection(DatabaseConnection))
                using (SqlCommand command = new SqlCommand("p_member_attachChild", db)
                {
                    CommandType = CommandType.StoredProcedure
                })
                {
                    try
                    {
                        db.Open();
                        command.Parameters.AddRange(new SqlParameter[]
                        {
                            new SqlParameter("member_id", member_id),
                            new SqlParameter("child_id", child_id)
                        });

                        int rows = command.ExecuteNonQuery();

                        if (rows <= 0)
                        {
                            throw new Exception("Unable to attach child to member");
                        }

                        response.Error   = false;
                        response.Message = "Successfully added child to member";
                    }
                    catch (Exception ex)
                    {
                        Log(LogType.Error, "Assign Member: " + ex.Message);
                        response.Message = "Assign Member: " + ex.Message;
                    }
                    finally
                    {
                        if (db.State == ConnectionState.Open)
                        {
                            db.Close();
                        }
                    }
                }

            return(response);
        }
        public YMCAServiceResponse RegisterMember(Member newMember)
        {
            Log(LogType.Initialize, "Starting to register a new member");
            YMCAServiceResponse serviceResponse = new YMCAServiceResponse();

            try
            {
                // Connect to the database and add the new member.
                using (SqlConnection connect = new SqlConnection(DatabaseConnection))                {
                    connect.Open();
                    using (SqlCommand command = new SqlCommand("p_member_insert", connect)
                    {
                        CommandType = System.Data.CommandType.StoredProcedure
                    })
                    {
                        command.Parameters.AddRange(new SqlParameter[]
                        {
                            new SqlParameter("id", newMember.MemberId),
                            new SqlParameter("fname", newMember.FirstName),
                            new SqlParameter("lname", newMember.LastName),
                            new SqlParameter("phone", newMember.PhoneNumber),
                            new SqlParameter("barcode", newMember.Barcode),
                            new SqlParameter("pin", newMember.Pin)
                        });
                        Log(LogType.Information, "Sending information to database");
                        command.ExecuteNonQuery();
                    }
                    connect.Close();
                }
                Log(LogType.Information, "Successfully Added the new member");
                serviceResponse.Message = "Successfully added the new member";
            }
            catch (Exception ex)
            {
                Log(LogType.Error, "Exception Thrown: " + ex.Message);
                //serviceResponse.Data = ex;
                serviceResponse.Error   = true;
                serviceResponse.Message = "Error occured when adding the member";
            }
            Log(LogType.Ending, "Exiting Register Member");
            return(serviceResponse);
        }
        public YMCAServiceResponse SignOut(int band)
        {
            YMCAServiceResponse serviceResponse = new YMCAServiceResponse()
            {
                Error   = true,
                Message = "Family was unable to be validated."
            };

            try
            {
                using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["database"].ToString()))
                {
                    connection.Open();
                    using (SqlCommand command = new SqlCommand("p_signout", connection)
                    {
                        CommandType = System.Data.CommandType.StoredProcedure
                    })
                    {
                        command.Parameters.Add(new SqlParameter("band", band));

                        int retval = (int)command.ExecuteScalar();

                        if (retval == 0)
                        {
                            serviceResponse.Error   = false;
                            serviceResponse.Message = "Family was succesfully signed out.";
                        }
                    }
                    connection.Close();
                }
            }
            catch (Exception ex)
            {
                serviceResponse.Data = ex;
            }
            return(serviceResponse);
        }
        public YMCAServiceResponse Validate(string barcode, string pin)
        {
            Log(LogType.Initialize, "Starting to Validate: " + barcode + ";" + pin);
            YMCAServiceResponse response = new YMCAServiceResponse();

            if (barcode.Length != 6 && pin.Length != 4)
            {
                response.Error   = true;
                response.Message = "Data was not provdided in the correct format";
                response.Data    = "Barcode:  " + barcode + ";Pin:  " + pin;

                Log(LogType.Error, "Barcode or Pin not in the correct format");
            }
            else
            {
                SqlConnection connection = new SqlConnection(DatabaseConnection);

                SqlCommand validateCommand = new SqlCommand("p_validate_login", connection)
                {
                    CommandType = CommandType.StoredProcedure
                };

                validateCommand.Parameters.AddRange(new SqlParameter[]
                {
                    new SqlParameter("barcode", barcode),
                    new SqlParameter("pin", pin)
                });

                try
                {
                    Log(LogType.Information, "Validating");
                    connection.Open();

                    DataTable memberInformation = new DataTable();
                    memberInformation.Load(validateCommand.ExecuteReader());

                    int returnCount = memberInformation.Rows.Count;

                    if (returnCount == 1)
                    {
                        validateCommand.CommandText = "p_member_getChildren";
                        validateCommand.Parameters.Clear();
                        validateCommand.Parameters.Add(
                            new SqlParameter("member_id", memberInformation.Rows[0]["member_id"])
                            );

                        DataTable children = new DataTable();
                        children.Load(validateCommand.ExecuteReader());

                        if (children.Rows.Count > 0)
                        {
                            DataRow memberInfo = memberInformation.Rows[0];
                            Member  m          = new Member()
                            {
                                Barcode     = barcode,
                                Pin         = pin,
                                FirstName   = (string)memberInfo["member_first_name"],
                                LastName    = (string)memberInfo["member_last_name"],
                                MemberId    = (string)memberInfo["member_id"],
                                PhoneNumber = (string)memberInfo["member_phone"]
                            };
                        }
                        else
                        {
                            response.Message = "Member has no children to load.  Unable to sign in";
                            Log(LogType.Warning, response.Message);
                            response.Error = true;
                        }
                    }
                    else if (returnCount > 1)
                    {
                        response.Message = "Two members have the same barcode and pin.  Data Integrity Compromised";
                        Log(LogType.Critical, response.Message);
                    }
                    else
                    {
                        response.Message = "Unable to validate member";
                        Log(LogType.Warning, response.Message);
                    }
                }
                catch (Exception ex)
                {
                    string err_message = "Exception Thrown: " + ex.Message;
                    Log(LogType.Error, err_message);
                    response.Message = err_message;
                }
                finally
                {
                    if (connection.State == ConnectionState.Open)
                    {
                        connection.Close();
                    }
                }
            }
            Log(LogType.Ending, "Exiting Validation");

            return(response);
        }