/// <summary>
        /// Get History
        /// </summary>
        /// <param name="bug"></param>
        /// <returns></returns>
        public DataTable getHistory(BugModel bug)
        {
            DataTable historytable = new DataTable();

            try
            {
                String sql = "SELECT * FROM tbl_history where bug_id=@bug_id ORDER BY updatedate DESC LIMIT 1";

                MySqlConnection conn = DBUtils.GetDBConnection();

                conn.Open();

                MySqlCommand cmd = new MySqlCommand();

                cmd.Connection = conn;

                cmd.CommandText = sql;
                Debug.WriteLine("History Called" + bug.getBUGID());
                // Add and set value for parameter.
                MySqlDataAdapter MyAdapter = new MySqlDataAdapter();
                cmd.Parameters.AddWithValue("@bug_id", bug.getBUGID());
                MyAdapter.SelectCommand = cmd;


                MyAdapter.Fill(historytable);
            }
            catch (Exception e)
            {
                Debug.WriteLine("Error Message: " + e);
                Debug.WriteLine(e.StackTrace);
            }
            return(historytable);
        }
        /// <summary>
        /// Tester Dashboard Load
        /// </summary>
        /// <param name="bug"></param>
        public void populatetesterdashboard(BugModel bug)
        {
            try
            {
                String sql = "select pro.project_name,com.component_name," +
                             "bug.summary,bug.version,bug.severity,bug.os,bug.class,bug.method,bug.linenofrom,bug.linenoto,bug.vcrurl," +
                             "bug.screenshot,bug.bugdesc,bug.code,bug.submittedby,bug.submitteddate,bug.status,bug.assignedto" +
                             " from tbl_project as pro" +
                             " inner join tbl_component as com on pro.project_id = com.project_id " +
                             "inner join tbl_bug as bug on com.component_id = bug.component_id " +
                             "where bug_id = @bug_id";

                MySqlConnection conn = DBUtils.GetDBConnection();

                conn.Open();

                MySqlCommand cmd = new MySqlCommand();

                cmd.Connection = conn;

                cmd.CommandText = sql;
                cmd.Parameters.AddWithValue("@bug_id", bug.getBUGID());


                MySqlDataAdapter MyAdapter = new MySqlDataAdapter();
                MyAdapter.SelectCommand = cmd;
                DataTable dTable = new DataTable();
                MyAdapter.Fill(dTable);

                bug.dtable = dTable;
                bug.setProjectName(dTable.Rows[0][0].ToString());
                bug.setComponentName(dTable.Rows[0][1].ToString());
                bug.setVersion(dTable.Rows[0][3].ToString());
                bug.setSeverity(dTable.Rows[0][4].ToString());

                bug.setClass(dTable.Rows[0][6].ToString());
                bug.setMethod(dTable.Rows[0][7].ToString());
                bug.setlinenofrom(Convert.ToInt32(dTable.Rows[0][8].ToString()));
                bug.setlinenoto(Convert.ToInt32(dTable.Rows[0][9].ToString()));
                bug.setbugdesc(dTable.Rows[0][12].ToString());
                bug.setCode(dTable.Rows[0][13].ToString());
                bug.setVCURL(dTable.Rows[0][10].ToString());



                byte[]       img = (byte[])dTable.Rows[0][11];
                MemoryStream ms  = new MemoryStream(img);
                bug.setImage(System.Drawing.Image.FromStream(ms));


                bug.setStatus(dTable.Rows[0][16].ToString());
                bug.setAssignedTo(dTable.Rows[0][17].ToString());
            }
            catch (Exception e)
            {
                Debug.WriteLine("Error Message: " + e);
                Debug.WriteLine(e.StackTrace);
            }
        }
        /// <summary>
        /// //assign bug
        /// </summary>
        /// <param name="bug"></param>
        /// <returns> flag </returns>
        public bool AssignBug(BugModel bug)
        {
            bool flag = false;

            if (CheckUsername(bug.getAssignedTo()) == false)
            {
                flag = false;
            }
            else
            {
                try {
                    String sql = "update tbl_bug set assignedto = @username, status='assigned' where bug_id = @bug_id";

                    MySqlConnection conn = DBUtils.GetDBConnection();

                    conn.Open();

                    MySqlCommand cmd = new MySqlCommand();

                    cmd.Connection = conn;

                    cmd.CommandText = sql;

                    // Add and set value for parameter.
                    cmd.Parameters.AddWithValue("@username", bug.getAssignedTo());
                    cmd.Parameters.AddWithValue("@bug_id", bug.getBUGID());

                    int rowCount = cmd.ExecuteNonQuery();
                    if (rowCount > 0)
                    {
                        MailService mail = new MailService();
                        flag = mail.sendMail(bug.getAssignedTo());
                    }
                    else
                    {
                        flag = false;
                    }
                }
                catch (Exception e)
                {
                    Debug.WriteLine("Error Message: " + e);
                    Debug.WriteLine(e.StackTrace);
                }
            }



            return(flag);
        }
        private void btnassignbug_Click(object sender, EventArgs e)
        {
            BugModel bug = new BugModel();

            bug.setAssignedTo(this.txtdeveloperusername.Text);
            bug.setBugID(bugid);

            BugController bc = new BugController();

            if (bc.AssignBug(bug) == false)
            {
                MessageBox.Show("Sorry, Bug cannot be assigned to this user. Either Check the privilage or if the user exists.", "Assign Failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                MessageBox.Show("Bug has been assigned and the developer has been notified");
            }
        }
        /// <summary>
        /// Update Bug Information
        /// </summary>
        /// <param name="bug"></param>
        /// <returns></returns>

        public bool UpdateBug(BugModel bug)
        {
            bool flag = false;

            try
            {
                String          sql  = "update tbl_bug set code=@code, status=@status, version=@version where bug_id = @bug_id";
                MySqlConnection conn = DBUtils.GetDBConnection();

                conn.Open();

                MySqlCommand cmd = new MySqlCommand();

                cmd.Connection = conn;

                cmd.CommandText = sql;

                // Add and set value for parameter.
                Debug.WriteLine("UpdateBUg Called");

                cmd.Parameters.AddWithValue("@code", bug.getCode());
                cmd.Parameters.AddWithValue("@status", bug.getStatus());
                cmd.Parameters.AddWithValue("@bug_id", bug.getBUGID());
                cmd.Parameters.AddWithValue("@version", bug.getVersion());
                Debug.WriteLine(bug.getCode() + bug.getStatus() + bug.getBUGID());
                int rowCount = cmd.ExecuteNonQuery();
                if (rowCount > 0)
                {
                    Debug.WriteLine("Updated");

                    flag = setHistory(bug);
                }
                else
                {
                    flag = false;
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine("Error Message: " + e);
                Debug.WriteLine(e.StackTrace);
            }
            return(flag);
        }
        /// <summary>
        /// Get History for Audit
        /// </summary>
        /// <param name="bug"></param>
        public bool setHistory(BugModel bug)
        {
            bool flag = false;

            try {
                String sql = "INSERT INTO `tbl_history`( `bug_id`,`version`, `updatedate`, `updatedby`, `code`, `status`, `remarks`) " +
                             "VALUES (@bug_id,@version,@updatedate,@updatedby,@code,@status,@remarks)";

                MySqlConnection conn = DBUtils.GetDBConnection();

                conn.Open();

                MySqlCommand cmd = new MySqlCommand();

                cmd.Parameters.AddWithValue("@bug_id", bug.getBUGID());
                cmd.Parameters.AddWithValue("@version", bug.getVersion());
                cmd.Parameters.AddWithValue("@updatedate", DateTime.Now.ToString("yyyy-MM-dd H:mm:ss"));
                cmd.Parameters.AddWithValue("@updatedby", bug.getUsername());
                cmd.Parameters.AddWithValue("@code", bug.getCode());
                cmd.Parameters.AddWithValue("@status", bug.getStatus());
                cmd.Parameters.AddWithValue("@remarks", bug.getRemarks());
                Debug.WriteLine("setHistory Called");
                cmd.Connection = conn;

                cmd.CommandText = sql;
                int rowCount = cmd.ExecuteNonQuery();

                if (rowCount > 0)
                {
                    flag = true;
                }
                else
                {
                    flag = false;
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine("Error Message: " + e);
                Debug.WriteLine(e.StackTrace);
            }
            return(flag);
        }
        public bool addProjectComponent(BugModel bug)
        {
            bool flag = false;

            try
            {
                String          sql  = "INSERT INTO `tbl_component`( `component_name`, `component_desc`, `project_id`, `developerusername`) VALUES (@component_name,@component_desc,@project_id,@developerusername)";
                MySqlConnection conn = DBUtils.GetDBConnection();

                conn.Open();

                MySqlCommand cmd = new MySqlCommand();


                Debug.WriteLine("addprojectcomponent Called");
                cmd.Connection = conn;

                cmd.Parameters.AddWithValue("@component_name", bug.getComponentName());
                cmd.Parameters.AddWithValue("@component_desc", bug.getcomponentdesc());
                cmd.Parameters.AddWithValue("@project_id", bug.getprojectid());
                cmd.Parameters.AddWithValue("@developerusername", bug.getUsername());

                cmd.CommandText = sql;
                int rowCount = cmd.ExecuteNonQuery();

                if (rowCount > 0)
                {
                    flag = true;
                }
                else
                {
                    flag = false;
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine("Error Message: " + e);
                Debug.WriteLine(e.StackTrace);
            }
            return(flag);
        }
        private void pbsubmit_Click(object sender, EventArgs e)
        {
            BugModel bug         = new BugModel();
            string   projectname = this.cmbProject.GetItemText(this.cmbProject.SelectedItem);

            bug.setprojectid(bc.getProjectID(projectname));
            bug.setcomponentdesc(this.txtcomponentdescription.Text);
            bug.setComponentName(this.txtcomponentname.Text);
            bug.setUsername(this.txtdeveloper.Text);

            bool flag = bc.addProjectComponent(bug);

            if (flag == true)
            {
                this.Hide();
                MessageBox.Show("Project Component Was Added");
            }
            else
            {
                MessageBox.Show("Sorry, Project Component Could not be Added, Please Try Again");
            }
        }
        private void submit_Click(object sender, EventArgs e)
        {
            BugModel bug = new BugModel();

            bug.setRemarks(this.txtremarks.Text);
            bug.setCode(this.txtupdatecode.Text);
            bug.setStatus(this.cmbStatus.Text);
            bug.setVersion(this.txtversion.Text);
            Debug.WriteLine("Username is:" + username);
            bug.setUsername(username);
            bug.setBugID(bugid);
            BugController bc   = new BugController();
            bool          flag = bc.UpdateBug(bug);

            if (flag == true)
            {
                this.Hide();
                MessageBox.Show("Bug Was Succesfully Updated");
            }
            else if (flag == false)
            {
                MessageBox.Show("Bug could not be updated");
            }
        }
        //report bug
        public bool ReportBug(BugModel bug)
        {
            Bitmap img   = new Bitmap(bug.getImageLocation());
            var    image = imageToByte(img);

            try
            {
                //query to insert bug report to the database

                MySqlConnection conn = DBUtils.GetDBConnection();

                conn.Open();

                MySqlCommand cmd = new MySqlCommand();

                String sql = "INSERT INTO `tbl_bug`( `component_id`, `summary`, `version`, `severity`, `os`," +
                             " `class`, `method`, `linenofrom`, `linenoto`, " +
                             "`vcrurl`, `screenshot`, `bugdesc`, `code`,`submittedby`,`submitteddate`) VALUES (@component_id,@summary,@version,@severity,@os,@class,@method," +
                             "@linenofrom,@linenoto,@vcrurl,@screenshot,@bugdesc,@code,@submittedby,@submitteddate)";


                //adding values to the parameters
                cmd.Parameters.AddWithValue("@component_id", bug.getComponentID());
                cmd.Parameters.AddWithValue("@summary", bug.getSummary());
                cmd.Parameters.AddWithValue("@version", bug.getVersion());
                cmd.Parameters.AddWithValue("@severity", bug.getSeverity());
                cmd.Parameters.AddWithValue("@os", bug.getOS());
                cmd.Parameters.AddWithValue("@class", bug.getClass());
                cmd.Parameters.AddWithValue("@method", bug.getMethod());
                cmd.Parameters.AddWithValue("@linenofrom", bug.getlinenofrom());
                cmd.Parameters.AddWithValue("@linenoto", bug.getlinenoto());
                cmd.Parameters.AddWithValue("@vcrurl", bug.getVCURL());

                //getting image
                var paramUserImage = new MySqlParameter("@screenshot", MySqlDbType.Blob, image.Length);
                paramUserImage.Value = image;

                cmd.Parameters.Add(paramUserImage);

                cmd.Parameters.AddWithValue("@bugdesc", bug.getbugdesc());
                cmd.Parameters.AddWithValue("@code", bug.getCode());
                cmd.Parameters.AddWithValue("@submittedby", submittedby);
                cmd.Parameters.AddWithValue("@submitteddate", DateTime.Now.ToString("yyyy-MM-dd H:mm:ss"));

                cmd.Connection = conn;

                cmd.CommandText = sql;
                int rowCount = cmd.ExecuteNonQuery();
                if (rowCount >= 1)
                {
                    flag = true;
                }
                else
                {
                    flag = false;
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine("Error Message: " + e);
                Debug.WriteLine(e.StackTrace);
            }

            return(flag);
        }