/// <summary>
        /// CreatedBy : Nadeeka
        /// CreatedDate: 2016/03/30
        /// 
        /// Insert Dealser User details
        /// 
        /// argument : dealer user (DealerUserModel)
        /// 
        ///         
        /// </summary>
        /// <returns>1</returns>
        public int InsertDealerUser(DealerUserModel dealerUser)
        {
            // if (this.InsertUser(dealerUser) == 1)
            //{                
            DataHandler dataHandler = new DataHandler();
            List<object[]> paramertList = new List<object[]>();
            paramertList.Add(new object[] { "@user_Id", dealerUser.UserId });
            paramertList.Add(new object[] { "@user_name", dealerUser.UserName });
            paramertList.Add(new object[] { "@password", dealerUser.Password });
            paramertList.Add(new object[] { "@first_name", dealerUser.FirstName });
            paramertList.Add(new object[] { "@last_name", dealerUser.LastName });
            paramertList.Add(new object[] { "@email", dealerUser.Email });
            paramertList.Add(new object[] { "@phone_no", dealerUser.PhoneNumber });
            paramertList.Add(new object[] { "@status", dealerUser.Status });
            paramertList.Add(new object[] { "@is_delete", dealerUser.IsDelete });
            paramertList.Add(new object[] { "@created_by", dealerUser.CreatedBy });
            paramertList.Add(new object[] { "@create_Date", DateTime.Now });
            //paramertList.Add(new object[] { "@branch_id", dealerUser.BranchId });
            paramertList.Add(new object[] { "@role_id", dealerUser.RoleId });
            paramertList.Add(new object[] { "@Company_id", dealerUser.Company_Id });
            paramertList.Add(new object[] { "@request_user_id", dealerUser.UserIdForSendReq });
            paramertList.Add(new object[] { "@request_email", dealerUser.UserEmailForSendReq });
            //paramertList.Add(new object[] { "@dealer_company_id ", dealerUser.NonRegCompanyId });
            paramertList.Add(new object[] { "@dealer_branch_id", dealerUser.NonRegBranchId });
            paramertList.Add(new object[] { "@loan_id", dealerUser.LoanId });
            paramertList.Add(new object[] { "@activation_code", dealerUser.ActivationCode });
            paramertList.Add(new object[] { "@report_rights", dealerUser.ReportRights });

            try
            {
                return dataHandler.ExecuteSQLWithIntOutPutParam("spInsertDealerUser", paramertList);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public ActionResult LinkDealer(DealerUserModel user)
        {
            //initialize properties of user object
            user.PhoneNumber = user.PhoneNumber2;
            user.CreatedBy = userData.UserId;
            user.IsDelete = false;
            user.Status = true;
            user.Company_Id = userData.Company_Id;
            user.BranchId = userData.BranchId;
            user.RoleId = 4;
            user.Email = user.NewEmail;

            BranchAccess ba = new BranchAccess();
            Loan loan = new Loan();
            //Check Session["oneLoanDashboard"] is not null
            if (Session["oneLoanDashboard"] != null)
            {
                //convert session object to loan object
                loan = (Loan)Session["oneLoanDashboard"];
                
            }
            //Check Session["loanDashboardJoinDealer"] is not null
            if (Session["loanDashboardJoinDealer"] != null)
            {
                //convert session object to loan object
                loan = (Loan)Session["loanDashboardJoinDealer"];
            }
            //initialize non registered branch id
            user.NonRegBranchId = loan.NonRegBranchId;
            //initialize loan id
            user.LoanId = loan.LoanId;
            //encrypt given password
            string passwordTemp = user.Password;

            UserAccess ua = new UserAccess();

            string newSalt = PasswordEncryption.RandomString();
            user.Password = PasswordEncryption.encryptPassword(user.Password, newSalt);
            user.ActivationCode = Guid.NewGuid().ToString();
            //report rights
            string[] arrList = new string[user.ReportRightsList.Count];
            int k = 0;
            foreach (var y in user.ReportRightsList)
            {
         
                //Check whether a particular report right is given to user
                if (y.active)
                {
                   
                    arrList[k] = y.rightId;
                    k++;
                }
            }
            arrList = arrList.Where(x => !string.IsNullOrEmpty(x)).ToArray();
            user.ReportRights = string.Join(",", arrList);
            //Insert dealer user details and retrieve user id of inserted user
            int newUserId = ua.InsertDealerUser(user);
           //Check user id is not 0
            if (newUserId != 0)
            {
                //Generate email to send username and password to created dealer user                                        
                string body = "Hi " + user.FirstName + "! <br /><br /> Your account has been successfully created. Below in your account detail." +
                              "<br /><br /> User name: " + user.UserName +
                                    "<br /> Password : <b>" + passwordTemp +
                              "<br />Click <a href='www.dfpso.com'>here</a> to activate your account." +
                              "<br /><br/> Thanks,<br /> Admin.";

                Email email = new Email(user.Email);

                Session["abcRol"] = user.RoleId;
                Session["abcBrnc"] = user.BranchId;
                email.SendMail(body, "Account details");
                //insert log record after user is created
                Log log = new Log(userData.UserId, userData.Company_Id, user.BranchId, user.LoanId, "Create Dealer Account", "Inserted Dealer : " + user.UserName, DateTime.Now);

                int islog = (new LogAccess()).InsertLog(log);

                TempData["msg"] = 1;
                return RedirectToAction("LinkDealer");               

            }
            else
            {
                TempData["msg"] = 2;
                return RedirectToAction("LinkDealer");                
            }
        }