public ActionResult Delete(string id)
        {
            if (CurrentUser.UserRole == Enums.UserRole.Viewer || CurrentUser.UserRole == Enums.UserRole.Controller)
            {
                AddMessageInfo("Operation not allow", Enums.MessageInfoType.Error);
                return(RedirectToAction("Index"));
            }

            try
            {
                _poaBll.Delete(id, CurrentUser.USER_ID);
                var poa     = _poaBll.GetById(id);
                var updated = AutoMapper.Mapper.Map <POAViewDetailModel>(poa);
                if (poa.IS_ACTIVE == true)
                {
                    updated.Is_Active = "No";
                }
                else
                {
                    updated.Is_Active = "Yes";
                }
                POAViewDetailModel temp = new POAViewDetailModel();
                SetChanges(updated, poa, temp);
                _uow.SaveChanges();
                TempData[Constans.SubmitType.Delete] = Constans.SubmitMessage.Updated;
            }
            catch (Exception ex)
            {
                TempData[Constans.SubmitType.Delete] = ex.Message;
            }
            return(RedirectToAction("Index"));
        }
        private void SetChanges(POAViewDetailModel origin, BusinessObject.POA poa, POAViewDetailModel detail)
        {
            var convertBooltoString = poa.IS_ACTIVE == true ? "Yes" : "No";

            // For Exciser
            var ExciserData        = _poaExciserService.GetByPoaID(poa.POA_ID);
            var originExciserState = ExciserData.IS_ACTIVE_EXCISER == true ? "Yes" : "No";
            var editExciserState   = detail.IsExciser == true ? "Yes" : "No";

            var changesData = new Dictionary <string, bool>();

            changesData.Add("TITLE", origin.Title == poa.TITLE);
            changesData.Add("LOGIN_AS", origin.UserId == poa.LOGIN_AS);
            changesData.Add("MANAGER_ID", origin.ManagerId == poa.MANAGER_ID);
            changesData.Add("POA_PHONE", origin.PoaPhone == poa.POA_PHONE);
            changesData.Add("POA_EMAIL", origin.Email == poa.POA_EMAIL);
            changesData.Add("POA_ADDRESS", origin.PoaAddress == poa.POA_ADDRESS);
            changesData.Add("ID_CARD", origin.PoaIdCard == poa.ID_CARD);
            changesData.Add("PRINTED_NAME", origin.PoaPrintedName == poa.PRINTED_NAME);
            changesData.Add("IS_ACTIVE", origin.Is_Active.Equals(convertBooltoString));
            //  changesData.Add("IS_ACTIVE_EXCISER", originExciserState == editExciserState);

            foreach (var listChange in changesData)
            {
                if (listChange.Value == false)
                {
                    var changes = new BusinessObject.CHANGES_HISTORY();
                    changes.FORM_TYPE_ID  = Enums.MenuList.POA;
                    changes.FORM_ID       = poa.POA_ID.ToString();
                    changes.FIELD_NAME    = listChange.Key;
                    changes.MODIFIED_BY   = CurrentUser.USER_ID;
                    changes.MODIFIED_DATE = DateTime.Now;
                    switch (listChange.Key)
                    {
                    case "TITLE":
                        changes.OLD_VALUE = origin.Title;
                        changes.NEW_VALUE = poa.TITLE;
                        break;

                    case "LOGIN_AS":
                        changes.OLD_VALUE = origin.UserId == null ? null : _userBll.GetUserById(origin.UserId).USER_ID;
                        changes.NEW_VALUE = string.IsNullOrEmpty(poa.LOGIN_AS) == true ? null : poa.LOGIN_AS;
                        break;

                    case "MANAGER_ID":
                        changes.OLD_VALUE = origin.ManagerId;
                        changes.NEW_VALUE = poa.MANAGER_ID;
                        break;

                    case "POA_PHONE":
                        changes.OLD_VALUE = origin.PoaPhone;
                        changes.NEW_VALUE = poa.POA_PHONE;
                        break;

                    case "POA_EMAIL":
                        changes.OLD_VALUE = origin.Email;
                        changes.NEW_VALUE = poa.POA_EMAIL;
                        break;

                    case "POA_ADDRESS":
                        changes.OLD_VALUE = origin.PoaAddress;
                        changes.NEW_VALUE = poa.POA_ADDRESS;
                        break;

                    case "ID_CARD":
                        changes.OLD_VALUE = origin.PoaIdCard;
                        changes.NEW_VALUE = poa.ID_CARD;
                        break;

                    case "PRINTED_NAME":
                        changes.OLD_VALUE = origin.PoaPrintedName;
                        changes.NEW_VALUE = poa.PRINTED_NAME;
                        break;

                    case "IS_ACTIVE":
                        changes.OLD_VALUE = origin.Is_Active;
                        changes.NEW_VALUE = convertBooltoString;
                        break;
                        //case "IS_ACTIVE_EXCISER":
                        //    changes.OLD_VALUE = originExciserState;
                        //    changes.NEW_VALUE = editExciserState;
                        //    break;
                    }
                    _changesHistoryBll.AddHistory(changes);
                }
            }
        }