private void CreateRM()
        {
            if (Validation())
            {
                AdvisorStaffBo advisorStaffBo = new AdvisorStaffBo();
                RMVo           rmVo           = new RMVo();
                Random         id             = new Random();
                AdvisorBo      advisorBo      = new AdvisorBo();
                advisorVo = (AdvisorVo)Session["advisorVo"];
                int    branchId;
                string password = id.Next(10000, 99999).ToString();

                rmUserVo.UserType   = "Advisor";
                rmUserVo.Password   = Encryption.Encrypt(password);
                rmUserVo.MiddleName = txtMiddleName.Text.ToString();
                //rmUserVo.LoginId = txtEmail.Text.ToString();
                rmUserVo.LastName  = txtLastName.Text.ToString();
                rmUserVo.FirstName = txtFirstName.Text.ToString();

                rmUserVo.Email = txtEmail.Text.ToString();

                rmVo.Email = txtEmail.Text.ToString();
                if (txtFaxNumber.Text == "")
                {
                    rmVo.Fax = 0;
                }
                else
                {
                    rmVo.Fax = int.Parse(txtFaxNumber.Text.ToString());
                }
                if (txtFaxISD.Text == "")
                {
                    rmVo.FaxIsd = 0;
                }
                else
                {
                    rmVo.FaxIsd = int.Parse(txtFaxISD.Text.ToString());
                }
                if (txtFaxSTD.Text == "")
                {
                    rmVo.FaxStd = 0;
                }
                else
                {
                    rmVo.FaxStd = int.Parse(txtExtSTD.Text.ToString());
                }

                rmVo.FirstName  = txtFirstName.Text.ToString();
                rmVo.LastName   = txtLastName.Text.ToString();
                rmVo.MiddleName = txtMiddleName.Text.ToString();
                rmVo.StaffCode  = txtStaffCode.Text.ToString();
                if (txtMobileNumber.Text.ToString() != "")
                {
                    rmVo.Mobile = Convert.ToInt64(txtMobileNumber.Text.ToString());
                }
                if (!string.IsNullOrEmpty(txtPhDirectISD.Text.ToString()))
                {
                    rmVo.OfficePhoneDirectIsd = int.Parse(txtPhDirectISD.Text.ToString());
                }
                if (!string.IsNullOrEmpty(txtPhDirectPhoneNumber.Text.ToString()))
                {
                    rmVo.OfficePhoneDirectNumber = int.Parse(txtPhDirectPhoneNumber.Text.ToString());
                }

                if (txtPhExtISD.Text == "")
                {
                    rmVo.OfficePhoneExtIsd = 0;
                }
                else
                {
                    rmVo.OfficePhoneExtIsd = int.Parse(txtPhExtISD.Text.ToString());
                }
                if (txtPhExtPhoneNumber.Text == "")
                {
                    rmVo.OfficePhoneExtNumber = 0;
                }
                else
                {
                    rmVo.OfficePhoneExtNumber = int.Parse(txtPhExtPhoneNumber.Text.ToString());
                }
                if (txtExtSTD.Text == "")
                {
                    rmVo.OfficePhoneExtStd = 0;
                }
                else
                {
                    rmVo.OfficePhoneExtStd = int.Parse(txtExtSTD.Text.ToString());
                }
                if (txtPhResiISD.Text == "")
                {
                    rmVo.ResPhoneIsd = 0;
                }
                else
                {
                    rmVo.ResPhoneIsd = int.Parse(txtPhResiISD.Text.ToString());
                }
                if (txtPhResiPhoneNumber.Text == "")
                {
                    rmVo.ResPhoneNumber = 0;
                }
                else
                {
                    rmVo.ResPhoneNumber = int.Parse(txtPhResiPhoneNumber.Text.ToString());
                }
                if (txtResiSTD.Text == "")
                {
                    rmVo.ResPhoneStd = 0;
                }
                else
                {
                    rmVo.ResPhoneStd = int.Parse(txtResiSTD.Text.ToString());
                }
                if (txtPhDirectSTD.Text == "")
                {
                    rmVo.OfficePhoneDirectStd = 0;
                }
                else
                {
                    rmVo.OfficePhoneDirectStd = int.Parse(txtPhDirectSTD.Text.ToString());
                }
                if (ChklistRMBM.Items[0].Selected == true)
                {
                    rmVo.RMRole = "RM";
                }
                else
                {
                    rmVo.RMRole = "BM";
                }
                //rmVo.RMRole = ddlRMRole.SelectedValue.ToString();

                rmVo.AdviserId = advisorVo.advisorId;

                if (txtCTCMonthly.Text != "")
                {
                    rmVo.CTC = Double.Parse(txtCTCMonthly.Text);
                }

                if (chkExternalStaff.Checked)
                {
                    rmVo.IsExternal = 1;
                }
                else
                {
                    rmVo.IsExternal = 0;
                }

                rmIds = advisorStaffBo.CreateCompleteRM(rmUserVo, rmVo, userVo.UserId);

                rmVo.UserId         = rmIds[0];
                Session["rmId"]     = rmIds[1];
                Session["rmUserVo"] = userBo.GetUserDetails(rmVo.UserId);
                Session["userId"]   = rmVo.UserId;
                if (chkMailSend.Checked == true)
                {
                    SendMail();
                }


                //if (rmVo.RMRole == "RM")
                //{
                //    // Create Association for RM
                //    userBo.CreateRoleAssociation(rmVo.UserId, 1001);
                //    // 1001 - RM
                //    // 1000 - Adviser
                //    // 1003 - Customer
                //}
                //else
                //{
                //    // Create Association if BM
                //    userBo.CreateRoleAssociation(rmVo.UserId, 1002);
                //    // 1002 - BM
                //    if (chkRM.Checked)
                //    {
                //        // Create Association for RM
                //        userBo.CreateRoleAssociation(rmVo.UserId, 1001);
                //    }
                //}

                foreach (ListItem Items in ChklistRMBM.Items)
                {
                    if (Items.Selected)
                    {
                        if (Items.Text == "RM")
                        {
                            // Create Association for RM
                            userBo.CreateRoleAssociation(rmVo.UserId, Int16.Parse(Items.Value.ToString()));
                        }
                        else if (Items.Text == "BM")
                        {
                            // Create Association for RM
                            userBo.CreateRoleAssociation(rmVo.UserId, Int16.Parse(Items.Value.ToString()));
                        }
                    }
                }

                string hdnSelectedString = hdnSelectedBranches.Value.ToString();

                if (!string.IsNullOrEmpty(hdnSelectedString))
                {
                    string[] selectedBranchesList = hdnSelectedString.Split(',');

                    foreach (string str in selectedBranchesList)
                    {
                        if (str != "")
                        {
                            advisorBranchBo.CreateRMBranchAssociation(rmIds[1], int.Parse(str), advisorVo.advisorId, advisorVo.advisorId);
                        }
                    }
                }

                ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "pageloadscript", "loadcontrol('ViewRM','none');", true);
            }
        }
        protected void btnSave_Click(object sender, EventArgs e)
        {
            UserBo          userBo         = new UserBo();
            UserVo          userVo         = new UserVo();
            UserVo          userVo2        = new UserVo();
            bool            branchDeletion = true;
            Random          id             = new Random();
            AdvisorBo       advisorBo      = new AdvisorBo();
            AdvisorBranchBo advisorBrBo    = new AdvisorBranchBo();

            bool   blUpdate    = true;
            string association = "";

            try
            {
                if (Validation())
                {
                    userId            = int.Parse(Session["userId"].ToString());
                    userVo            = userBo.GetUserDetails(rmVo.UserId);
                    userVo.Email      = txtEmail.Text.ToString();
                    userVo.FirstName  = txtFirstName.Text.ToString();
                    userVo.LastName   = txtLastName.Text.ToString();
                    userVo.MiddleName = txtMiddleName.Text.ToString();



                    rmVo.RMId  = int.Parse(Session["rmId"].ToString());
                    rmVo.Email = txtEmail.Text.ToString();
                    if (txtFaxNumber.Text == string.Empty || txtFaxNumber.Text == "")
                    {
                        rmVo.Fax = 0;
                    }
                    else
                    {
                        rmVo.Fax = int.Parse(txtFaxNumber.Text.ToString());
                    }
                    if (txtFaxISD.Text == string.Empty || txtFaxISD.Text == "")
                    {
                        rmVo.FaxIsd = 0;
                    }
                    else
                    {
                        rmVo.FaxIsd = int.Parse(txtFaxISD.Text.ToString());
                    }
                    if (txtExtSTD.Text == string.Empty || txtExtSTD.Text == "")
                    {
                        rmVo.FaxStd = 0;
                    }
                    else
                    {
                        rmVo.FaxStd = int.Parse(txtExtSTD.Text.ToString());
                    }
                    rmVo.FirstName  = txtFirstName.Text.ToString();
                    rmVo.LastName   = txtLastName.Text.ToString();
                    rmVo.MiddleName = txtMiddleName.Text.ToString();
                    if (txtMobileNumber.Text == string.Empty || txtMobileNumber.Text == "")
                    {
                        rmVo.Mobile = 0;
                    }
                    else
                    {
                        rmVo.Mobile = Convert.ToInt64(txtMobileNumber.Text.ToString());
                    }
                    if (txtPhDirectISD.Text == string.Empty || txtPhDirectISD.Text == "")
                    {
                        rmVo.OfficePhoneDirectIsd = 0;
                    }
                    else
                    {
                        rmVo.OfficePhoneDirectIsd = int.Parse(txtPhDirectISD.Text.ToString());
                    }
                    if (txtPhDirectPhoneNumber.Text == string.Empty || txtPhDirectPhoneNumber.Text == "")
                    {
                        rmVo.OfficePhoneDirectNumber = 0;
                    }
                    else
                    {
                        rmVo.OfficePhoneDirectNumber = int.Parse(txtPhDirectPhoneNumber.Text.ToString());
                    }
                    if (txtPhDirectSTD.Text == string.Empty || txtPhDirectSTD.Text == "")
                    {
                        rmVo.OfficePhoneDirectStd = 0;
                    }
                    else
                    {
                        rmVo.OfficePhoneDirectStd = int.Parse(txtPhDirectSTD.Text.ToString());
                    }
                    if (txtPhExtISD.Text == string.Empty || txtPhExtISD.Text == "")
                    {
                        rmVo.OfficePhoneExtIsd = 0;
                    }
                    else
                    {
                        rmVo.OfficePhoneExtIsd = int.Parse(txtPhExtISD.Text.ToString());
                    }
                    if (txtPhExtPhoneNumber.Text == string.Empty || txtPhExtPhoneNumber.Text == "")
                    {
                        rmVo.OfficePhoneExtNumber = 0;
                    }
                    else
                    {
                        rmVo.OfficePhoneExtNumber = int.Parse(txtPhExtPhoneNumber.Text.ToString());
                    }
                    if (txtExtSTD.Text == string.Empty || txtExtSTD.Text == "")
                    {
                        rmVo.OfficePhoneExtStd = 0;
                    }
                    else
                    {
                        rmVo.OfficePhoneExtStd = int.Parse(txtExtSTD.Text.ToString());
                    }
                    if (txtPhResiISD.Text == string.Empty || txtPhResiISD.Text == "")
                    {
                        rmVo.ResPhoneIsd = 0;
                    }
                    else
                    {
                        rmVo.ResPhoneIsd = int.Parse(txtPhResiISD.Text.ToString());
                    }
                    if (txtPhResiPhoneNumber.Text == string.Empty || txtPhResiPhoneNumber.Text == "")
                    {
                        rmVo.ResPhoneNumber = 0;
                    }
                    else
                    {
                        rmVo.ResPhoneNumber = int.Parse(txtPhResiPhoneNumber.Text.ToString());
                    }
                    if (txtResiSTD.Text == string.Empty || txtResiSTD.Text == "")
                    {
                        rmVo.ResPhoneStd = 0;
                    }
                    else
                    {
                        rmVo.ResPhoneStd = int.Parse(txtResiSTD.Text.ToString());
                    }
                    if (txtCTC.Text == string.Empty || txtCTC.Text == "")
                    {
                        rmVo.CTC = 0;
                    }
                    else
                    {
                        rmVo.CTC = Convert.ToDouble(txtCTC.Text.Trim());
                    }

                    if (ChklistRMBM.Items[0].Selected == true)
                    {
                        rmVo.RMRole = "RM";
                    }
                    else
                    {
                        rmVo.RMRole = "BM";
                    }

                    if (chkExternalStaff.Checked)
                    {
                        // Check for Internal Associations, if they exist do not update.
                        if (advisorBrBo.CheckInternalBranchAssociations(rmVo.RMId))
                        {
                            association = "internal";
                            blUpdate    = false;
                        }
                        else
                        {
                            rmVo.IsExternal = 1;
                        }
                    }
                    else
                    {
                        // Check for External Associations, if they exist do not update.
                        if (advisorBrBo.CheckExternalBranchAssociations(rmVo.RMId))
                        {
                            association = "external";
                            blUpdate    = false;
                        }
                        else
                        {
                            rmVo.IsExternal = 0;
                        }
                    }



                    //*************Role Association Creation and deletion************************

                    bool     RMBMRole      = false;
                    string[] RoleListArray = rmVo.RMRoleList.Split(new char[] { ',' });
                    foreach (ListItem Items in ChklistRMBM.Items)
                    {
                        if (Items.Text == "RM")
                        {
                            foreach (string Role in RoleListArray)
                            {
                                if (Role == "RM")
                                {
                                    RMBMRole = true;
                                }
                            }
                            // Create Role Association for RM
                            if (RMBMRole == true && Items.Selected == false)
                            {
                                userBo.DeleteRoleAssociation(rmVo.UserId, Int16.Parse(Items.Value.ToString()));
                            }
                            else if (RMBMRole == false && Items.Selected == true)
                            {
                                userBo.CreateRoleAssociation(rmVo.UserId, Int16.Parse(Items.Value.ToString()));
                            }
                            RMBMRole = false;
                        }
                        else if (Items.Text == "BM")
                        {
                            foreach (string Role in RoleListArray)
                            {
                                if (Role == "BM")
                                {
                                    RMBMRole = true;
                                }
                            }
                            // Create Role Association for BM
                            if (RMBMRole == false && Items.Selected == true)
                            {
                                userBo.CreateRoleAssociation(rmVo.UserId, Int16.Parse(Items.Value.ToString()));
                            }
                            else if (RMBMRole == true && Items.Selected == false)
                            {
                                branchHead = advisorBranchBo.CheckBranchHead(rmVo.RMId, 0);
                                if (branchHead == 0)
                                {
                                    userBo.DeleteRoleAssociation(rmVo.UserId, Int16.Parse(Items.Value.ToString()));
                                }
                                else
                                {
                                    ChklistRMBM.Items[1].Selected = true;
                                    ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "Pageloadscript", "alert('BM Role can not be removed as this staff is a Branch Head');", true);
                                }
                            }

                            RMBMRole = false;
                        }
                    }

                    //*************Role Association Creation and deletion************************

                    //Update the User details in the User Table
                    userBo.UpdateUser(userVo);
                    //Update the RM details in the AdvisorRM Table
                    advisorStaffBo.UpdateStaff(rmVo);



                    //**************Branch Association Creation and deletion*********************


                    //string hdnExistingString = hdnExistingBranches.Value.ToString();
                    string hdnSelectedString = hdnSelectedBranches.Value.ToString();
                    //string[] existingBranchesList = hdnExistingString.Split(',');
                    string[]  selectedBranchesList = hdnSelectedString.Split(',');
                    DataTable dtSelectedBranch     = new DataTable();
                    dtSelectedBranch.Columns.Add("Branch");
                    dtSelectedBranch.Columns.Add("BranchId");
                    DataTable  dtAssociated  = new DataTable();
                    List <int> deletedBRList = new List <int>();
                    List <int> addedBRList   = new List <int>();
                    dtAssociated = (DataTable)Session["AssociatedBranch"];
                    if (dtAssociated != null)
                    {
                        foreach (string str in selectedBranchesList)
                        {
                            if (str != "")
                            {
                                dtAssociated.DefaultView.Sort = "BranchId";
                                int i = dtAssociated.DefaultView.Find(str);
                                if (i == (0 - 1))
                                {
                                    addedBRList.Add(int.Parse(str));
                                }
                            }
                            DataRow dr = dtSelectedBranch.NewRow();
                            dr["Branch"]   = str;
                            dr["BranchId"] = str;
                            dtSelectedBranch.Rows.Add(dr);
                        }



                        foreach (DataRow dr in dtAssociated.Rows)
                        {
                            dtSelectedBranch.DefaultView.Sort = "BranchId";
                            int j = dtSelectedBranch.DefaultView.Find(dr["BranchId"].ToString());
                            if (j == (0 - 1))
                            {
                                if (dr["BranchId"].ToString() != "")
                                {
                                    deletedBRList.Add(int.Parse(dr["BranchId"].ToString()));
                                }
                            }
                        }

                        for (int i = 0; i < addedBRList.Count; i++)
                        {
                            advisorBranchBo.CreateRMBranchAssociation(rmVo.RMId, addedBRList[i], advisorVo.advisorId, advisorVo.advisorId);
                        }
                        for (int i = 0; i < deletedBRList.Count; i++)
                        {
                            bool IsBranchDependency = false;
                            IsBranchDependency = advisorBranchBo.CheckRMBranchDependency(rmVo.RMId, deletedBRList[i]);
                            if (IsBranchDependency == true)
                            {
                                branchDeletion = false;
                                ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "Pageloadscript", "alert('Sorry... You need to delete your internal associations first');", true);
                            }
                            else
                            {
                                advisorBranchBo.DeleteBranchAssociation(rmVo.RMId, deletedBRList[i]);
                            }
                        }

                        if (branchDeletion == false)
                        {
                            Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "pageloadscript", "loadcontrol('ViewRMDetails','none');", true);
                        }
                    }
                    else
                    {
                        foreach (string str in selectedBranchesList)
                        {
                            if (str != "")
                            {
                                advisorBranchBo.CreateRMBranchAssociation(rmVo.RMId, int.Parse(str), advisorVo.advisorId, advisorVo.advisorId);
                            }
                        }
                    }
                    //advisorBranchBo.DeleteRMBranchAssociation1(rmIDRef);

                    //**************Branch Association Creation and deletion*********************



                    if (blUpdate)
                    {
                        btnSave.Enabled = false;
                        if (Session["FromAdvisorView"] != null)
                        {
                            if (Session["FromAdvisorView"].ToString() == "FromAdvView")
                            {
                                Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "pageloadscript", "loadcontrol('ViewRM','none');", true);
                            }
                            else
                            {
                                Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "pageloadscript", "loadcontrol('ViewRMDetails','none');", true);
                            }
                            Session.Remove("FromAdvisorView");
                        }
                        else
                        {
                            Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "pageloadscript", "loadcontrol('ViewRM','none');", true);
                        }
                    }
                    else
                    {
                        if (association == "internal")
                        {
                            ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "Pageloadscript", "alert('Sorry... You need to delete your internal associations first');", true);
                        }
                        else if (association == "external")
                        {
                            ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "Pageloadscript", "alert('Sorry... You need to delete your external associations first');", true);
                        }
                    }
                }
            }
            catch (BaseApplicationException Ex)
            {
                throw Ex;
            }
            catch (Exception Ex)
            {
                BaseApplicationException exBase       = new BaseApplicationException(Ex.Message, Ex);
                NameValueCollection      FunctionInfo = new NameValueCollection();

                FunctionInfo.Add("Method", "EditRMDetails.ascx:btnSave_Click()");

                object[] objects = new object[6];

                objects[0] = advisorVo;
                objects[1] = userVo;
                objects[2] = userBo;
                objects[3] = userId;
                objects[4] = rmId;
                objects[5] = userVo2;


                FunctionInfo = exBase.AddObject(FunctionInfo, objects);
                exBase.AdditionalInformation = FunctionInfo;
                ExceptionManager.Publish(exBase);
                throw exBase;
            }
        }