public void DeteleAndPersistOtherIncome()
        {
            //Prepare Other Income
            var expectedOtherIncome = CreateOtherIncome();

            mTaxReturnData.TaxData = JsonConvert.SerializeObject(expectedOtherIncome);

            //Persist Other Income
            mUserData.userId        = mUserId;
            mUserData.TaxReturnData = JsonConvert.SerializeObject(mTaxReturnData);
            var expectedOtherIncomeData = mOtherIncomeRepository.PersistOtherIncome(mUserData);

            //Delete Other Income
            var userDTO = new UserDTO {
                UserId = mUserId, UserDataId = expectedOtherIncomeData.Item1
            };
            const OtherIncomeType otherIncomeType = OtherIncomeType.AlaskaDividendIncome;

            mOtherIncomeRepository.DeleteAndPersistOtherIncome(userDTO.UserId, userDTO.UserDataId, otherIncomeType);

            //Get Other Income
            string taxObject         = mTaxReturnRepository.GetTaxReturnDatabyUserDataId(expectedOtherIncomeData.Item1, mUserId);
            var    actualOtherIncome = JsonConvert.DeserializeObject <BusinessObject.Tax1040>(taxObject).Income.OtherIncome;

            Assert.IsNull(actualOtherIncome.AlaskaPermanentFundDividend);
        }
        /// <summary>
        /// Delete and then Persist Form1099G.
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="userDataId"></param>
        /// <param name="form1099GId"></param>
        /// <param name="errorMessageList"></param>
        public void DeleteAndPersistOtherIncome(long userId, long userDataId, OtherIncomeType otherIncomeType)
        {
            JTL.Tax1040.BusinessObject.Tax1040 taxObject;
            try
            {
                //Retrieving TaxObject from database
                taxObject = Utilities.GetTaxObjectByUserIdAndUserDataId(userId, userDataId);

                //Converting Json to Form1099G by DeSerializing
                if (taxObject != null && taxObject.Income != null && taxObject.Income.OtherIncome != null)
                {
                    switch (otherIncomeType)
                    {
                    case OtherIncomeType.SocialSecurityAndRailRoadBenefits:
                        taxObject.Income.OtherIncome.SSB          = null;
                        taxObject.Income.OtherIncome.RRB          = null;
                        taxObject.Income.OtherIncome.HasSsbAndRrb = false;
                        // Clear the Error messages
                        messageRepository.ClearErrorMessages(taxObject.ErrorMessages, Constants.TOPIC_OTHER_INCOME_SSB_RRB);

                        //Vincent - 17 June, 2014 - Clear Eligibility HardStopper Errors.
                        messageRepository.ClearErrorMessages(taxObject.ErrorMessages, Constants.TOPIC_OTHER_INCOME, 0, "OtherIncome_ER2");
                        //Yogalakshmi - 2nd July 2014 - To clear the datas in SSB & RRB Worksheet when the records are deleted.
                        if (taxObject.F1040EZ != null && taxObject.F1040EZ.F1040EZWorkSheets != null &&
                            taxObject.F1040EZ.F1040EZWorkSheets.SSBWorkSheet != null)
                        {
                            taxObject.F1040EZ.F1040EZWorkSheets.SSBWorkSheet = null;
                            Utilities.PersistTaxObject(userId, userDataId, taxObject);
                        }
                        break;

                    case OtherIncomeType.AlaskaDividendIncome:
                        taxObject.Income.OtherIncome.AlaskaPermanentFundDividend = null;
                        taxObject.Income.OtherIncome.HasAlaskaPermanantFund      = false;
                        // Clear the Error messages
                        messageRepository.ClearErrorMessages(taxObject.ErrorMessages, Constants.TOPIC_OTHER_INCOME_Alaska);

                        break;

                    //Added by prasana on 15.07.2014 after Income spec update 2.3
                    case OtherIncomeType.StateTaxRefund:
                        taxObject.Income.OtherIncome.StateOrLocalIncomeTaxRefunds          = null;
                        taxObject.Income.OtherIncome.HasStateTaxRefund                     = false;
                        taxObject.Income.OtherIncome.HasStateAndLocalTaxDeductionPriorYear = false;
                        // Clear the Error messages
                        messageRepository.ClearErrorMessages(taxObject.ErrorMessages, Constants.TOPIC_OTHER_INCOME_State_And_Local);
                        break;
                    }

                    //10Jul2014 Sathish added coded to check Taxable Income Eligibility
                    dynamic input = new Microsoft.Activities.Extensions.WorkflowArguments();
                    input.Tax1040Object = taxObject;

                    //Obtain the List of Error Messages from DB.
                    //var errorMessagesFromDB = messageRepository.GetErrorMessages();
                    var errorMessagesFromDB = HttpRuntime.Cache["ErrorMessageCollection"] as Dictionary <string, ErrorMessage>;
                    var errorMessagesAll    = new ErrorMessages(errorMessagesFromDB);
                    //Assisn error message list into workflow input param.
                    input.ErrorMessages = errorMessagesAll;

                    //10Jul2014 Sathish added coded to check Taxable Income Eligibility
                    taxObject.ErrorMessages.RemoveAll(em => em.ErrorCode == Constants.TAX_AND_WRAP_UP_TAXABLE_INCOME);
                    var taxableIncome = Microsoft.Activities.Extensions.WorkflowArguments.FromDictionary(WorkflowInvoker.Invoke
                                                                                                             (new F1040EZTaxableIncomeEligibilityCheck(), input));

                    //02-Sep-2014 Bhavani Audit functionality implementation

                    var topicName = string.Empty;
                    switch (otherIncomeType)
                    {
                    case OtherIncomeType.AlaskaDividendIncome:
                        topicName = Constants.TOPIC_OTHER_INCOME_Alaska;
                        break;

                    case OtherIncomeType.StateTaxRefund:
                        topicName = Constants.TOPIC_OTHER_INCOME_State_And_Local;
                        break;

                    case OtherIncomeType.SocialSecurityAndRailRoadBenefits:
                        topicName = Constants.TOPIC_OTHER_INCOME_SSB_RRB;
                        break;
                    }
                    var description = "Delete OtherIncome: " + otherIncomeType + ", ClassName: {0}, Method Name: {1}";
                    Utilities.PersistAuditInfo(userId, userDataId, description, GetType().Name, Constants.Tab_INCOME, topicName);
                }


                //Persist latest TaxObject.
                taxReturnDataService.PersistTaxReturnData(userId, string.Empty, Utilities.ConvertTaxObjectToJSON(taxObject), string.Empty, userDataId);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }