public ActionResult CreateInitialContactRead(int caseID)
        {
            var  varCase   = caseRepository.Find(caseID);
            bool hasAccess = workerroleactionpermissionnewRepository.HasPermission(caseID, CurrentLoggedInWorkerRoleIDs, CurrentLoggedInWorker.ID, varCase.ProgramID, varCase.RegionID, varCase.SubProgramID, varCase.JamatkhanaID, Constants.Areas.CaseManagement, Constants.Controllers.CaseProgressNote, Constants.Actions.CreateInitialContact, true);

            if (!hasAccess)
            {
                WebHelper.CurrentSession.Content.ErrorMessage = "You are not eligible to do this action";
                return(RedirectToAction(Constants.Actions.AccessDenied, Constants.Controllers.Home, new { Area = String.Empty }));
            }
            CaseProgressNote caseprogressnote = caseprogressnoteRepository.FindInitialNoteByCaseID(caseID);

            if (caseprogressnote != null)
            {
                return(RedirectToAction(Constants.Actions.InitialContact, Constants.Controllers.CaseProgressNote, new { caseID = caseID }));
            }
            if (caseprogressnote == null)
            {
                caseprogressnote                 = new CaseProgressNote();
                caseprogressnote.CaseID          = caseID;
                caseprogressnote.ActivityTypeID  = 2;
                caseprogressnote.ContactMethodID = 1;
                ViewBag.DisplayID                = caseRepository.Find(caseID).DisplayID;
            }
            return(View(caseprogressnote));
        }
        public ActionResult Create(int caseID, int?caseMemberID)
        {
            bool hasAccess = workerroleactionpermissionnewRepository.HasPermission(CurrentLoggedInWorkerRoleIDs, Constants.Areas.CaseManagement, Constants.Controllers.CaseProgressNote, Constants.Actions.Create, true);

            if (!hasAccess)
            {
                WebHelper.CurrentSession.Content.ErrorMessage = "You are not eligible to do this action";
                return(RedirectToAction(Constants.Actions.AccessDenied, Constants.Controllers.Home, new { Area = String.Empty }));
            }

            //create a new instance of caseprogressnote
            CaseProgressNote caseProgressNote = new CaseProgressNote();

            caseProgressNote.CaseID           = caseID;
            caseProgressNote.IsInitialContact = false;
            if (caseMemberID.HasValue && caseMemberID.Value > 0)
            {
                caseProgressNote.CaseMemberID = caseMemberID.Value;
                CaseMember caseMember = casememberRepository.Find(caseProgressNote.CaseMemberID);
                if (caseMember != null)
                {
                    ViewBag.DisplayID = caseMember.DisplayID;
                }
            }
            else
            {
                Case varCase = caseRepository.Find(caseID);
                if (varCase != null)
                {
                    ViewBag.DisplayID = varCase.DisplayID;
                }
            }
            return(View(caseProgressNote));
        }
        public ActionResult Read(int noteID, int caseID, int?caseMemberID)
        {
            Case varCase = caseRepository.Find(caseID);

            bool hasAccess = workerroleactionpermissionnewRepository.HasPermission(caseID, CurrentLoggedInWorkerRoleIDs, CurrentLoggedInWorker.ID, varCase.ProgramID, varCase.RegionID, varCase.SubProgramID, varCase.JamatkhanaID, Constants.Areas.CaseManagement, Constants.Controllers.CaseProgressNote, Constants.Actions.Read, true);

            if (!hasAccess)
            {
                WebHelper.CurrentSession.Content.ErrorMessage = "You are not eligible to do this action";
                return(RedirectToAction(Constants.Actions.AccessDenied, Constants.Controllers.Home, new { Area = String.Empty }));
            }

            //find the existing caseprogressnote from database
            CaseProgressNote caseProgressNote = caseprogressnoteRepository.Find(noteID);

            caseProgressNote.CaseID = caseID;
            List <string> MemberList = new List <string>();

            if (caseProgressNote.CaseMemberID > 0)
            {
                MemberList.Add(caseProgressNote.CaseMemberID.ToString());
            }
            else
            {
                var caseProgressNoteMembers = caseProgressNoteMembersRepository.SearchMembers(caseProgressNote.ID);
                if (caseProgressNoteMembers != null && caseProgressNoteMembers.Count > 0)
                {
                    foreach (var item in caseProgressNoteMembers)
                    {
                        MemberList.Add(item.CaseMemberID.ToString());
                    }
                }
            }
            if (MemberList.Count > 0)
            {
                string[] members = MemberList.ToArray();
                caseProgressNote.CaseMembersIds = members;
            }
            if (caseMemberID.HasValue && caseMemberID.Value > 0)
            {
                caseProgressNote.CaseMemberID = caseMemberID.Value;
                CaseMember caseMember = casememberRepository.Find(caseProgressNote.CaseMemberID);
                if (caseMember != null)
                {
                    ViewBag.DisplayID = caseMember.DisplayID;
                }
            }
            else
            {
                //Case varCase = caseRepository.Find(caseID);
                if (varCase != null)
                {
                    ViewBag.DisplayID = varCase.DisplayID;
                }
            }
            //return editor view
            return(View(caseProgressNote));
        }
        public ActionResult EditorAjax(int id, string caseId)
        {
            CaseProgressNote caseprogressnote = null;

            if (id > 0)
            {
                Case varCase   = caseRepository.Find(Convert.ToInt32(caseId));
                bool hasAccess = workerroleactionpermissionnewRepository.HasPermission(Convert.ToInt32(caseId), CurrentLoggedInWorkerRoleIDs, CurrentLoggedInWorker.ID, varCase.ProgramID, varCase.RegionID, varCase.SubProgramID, varCase.JamatkhanaID, Constants.Areas.CaseManagement, Constants.Controllers.CaseProgressNote, Constants.Actions.Edit, true);
                if (!hasAccess)
                {
                    WebHelper.CurrentSession.Content.ErrorMessage = "You are not eligible to do this action";
                    return(RedirectToAction(Constants.Actions.AccessDenied, Constants.Controllers.Home, new { Area = String.Empty }));
                }

                //find an existing caseprogressnote from database
                caseprogressnote = caseprogressnoteRepository.Find(id);
                if (caseprogressnote == null)
                {
                    //throw an exception if id is provided but data does not exist in database
                    return(new HttpStatusCodeResult(System.Net.HttpStatusCode.NotFound, "Case Progress Note not found"));
                }
            }
            else
            {
                //create a new instance if id is not provided
                caseprogressnote        = new CaseProgressNote();
                caseprogressnote.CaseID = caseId.ToInteger(true);
            }

            ViewBag.PossibleCreatedByWorkers     = workerRepository.All;
            ViewBag.PossibleLastUpdatedByWorkers = workerRepository.All;
            ViewBag.PossibleCaseMembers          = casememberRepository.All;
            //ViewBag.PossibleActivityTypes = activitytypeRepository.All;
            ViewBag.PossibleTimeSpents     = timespentRepository.All;
            ViewBag.PossibleContactMethods = contactmethodRepository.All;
            //return the html of editor to display on popup
            return(Content(this.RenderPartialViewToString(Constants.PartialViews.EditorPopUp, caseprogressnote)));
        }
        public ActionResult SaveAjax(CaseProgressNote caseprogressnote)
        {
            //id=0 means add operation, update operation otherwise
            bool isNew = caseprogressnote.ID == 0;

            //validate data
            if (ModelState.IsValid)
            {
                if (caseprogressnote.NoteDate > DateTime.Today)
                {
                    throw new CustomException("Note date can't be future date.");
                }
                try
                {
                    //<JL:Comment:No need to check access again on post. On edit we are already checking permission.>
                    //if (caseprogressnote.ID > 0 && caseprogressnote.CreatedByWorkerID != CurrentLoggedInWorker.ID && CurrentLoggedInWorkerRoleIDs.IndexOf(1) == -1 && (CurrentLoggedInWorkerRoleIDs.IndexOf(SiteConfigurationReader.RegionalManagerRoleID) == -1))
                    //{
                    //    WebHelper.CurrentSession.Content.ErrorMessage = "You are not eligible to do this action";
                    //    return Json(new { success = true, url = Url.Action(Constants.Actions.AccessDenied, Constants.Controllers.Home, new { Area = String.Empty }) });
                    //    //return RedirectToAction(Constants.Actions.AccessDenied, Constants.Controllers.Home, new { Area = String.Empty });
                    //}
                    //</JL:Comment:07/08/2017>

                    caseprogressnote.LastUpdatedByWorkerID = CurrentLoggedInWorker.ID;
                    caseprogressnoteRepository.InsertOrUpdate(caseprogressnote);
                    caseprogressnoteRepository.Save();
                    //Audit log
                    var caseprogressmembers = caseProgressNoteMembersRepository.SearchMembers(caseprogressnote.ID);
                    foreach (var item in caseprogressmembers)
                    {
                        caseProgressNoteMembersRepository.Delete(item);
                    }
                    if (caseprogressnote.CaseMembersIds != null && caseprogressnote.CaseMembersIds.Count() > 0)
                    {
                        foreach (var item in caseprogressnote.CaseMembersIds)
                        {
                            CaseProgressNoteMembers caseProgressNoteMembers = new CaseProgressNoteMembers();
                            caseProgressNoteMembers.CaseMemberID       = Convert.ToInt32(item);
                            caseProgressNoteMembers.CaseProgressNoteID = Convert.ToInt32(caseprogressnote.ID);
                            caseProgressNoteMembersRepository.InsertOrUpdate(caseProgressNoteMembers);
                            caseProgressNoteMembersRepository.Save();
                        }
                    }


                    if (isNew)
                    {
                        caseprogressnote.SuccessMessage = "Case Progress Note has been added successfully";
                    }
                    else
                    {
                        caseprogressnote.SuccessMessage = "Case Progress Note has been updated successfully";
                    }
                }
                catch (CustomException ex)
                {
                    caseprogressnote.ErrorMessage = ex.UserDefinedMessage;
                }
                catch (Exception ex)
                {
                    ExceptionManager.Manage(ex);
                    caseprogressnote.ErrorMessage = Constants.Messages.UnhandelledError;
                }
            }
            else
            {
                foreach (var modelStateValue in ViewData.ModelState.Values)
                {
                    foreach (var error in modelStateValue.Errors)
                    {
                        caseprogressnote.ErrorMessage = error.ErrorMessage;
                        break;
                    }
                    if (caseprogressnote.ErrorMessage.IsNotNullOrEmpty())
                    {
                        break;
                    }
                }
            }
            //return the status message in json
            if (caseprogressnote.ErrorMessage.IsNotNullOrEmpty())
            {
                return(Json(new { success = false, data = this.RenderPartialViewToString(Constants.PartialViews.Alert, caseprogressnote) }));
            }
            else
            {
                return(Json(new { success = true, data = this.RenderPartialViewToString(Constants.PartialViews.Alert, caseprogressnote) }));
            }
        }
        public ActionResult Index(int caseID, int?caseMemberID)
        {
            var  varCase   = caseRepository.Find(caseID);
            bool hasAccess = workerroleactionpermissionnewRepository.HasPermission(caseID, CurrentLoggedInWorkerRoleIDs, CurrentLoggedInWorker.ID, varCase.ProgramID, varCase.RegionID, varCase.SubProgramID, varCase.JamatkhanaID, Constants.Areas.CaseManagement, Constants.Controllers.CaseProgressNote, Constants.Actions.Index, true);

            if (!hasAccess)
            {
                WebHelper.CurrentSession.Content.ErrorMessage = "You are not eligible to do this action";
                return(RedirectToAction(Constants.Actions.AccessDenied, Constants.Controllers.Home, new { Area = String.Empty }));
            }
            CaseProgressNote caseProgressNote = new CaseProgressNote();

            //caseProgressNote.ActivityTypeID = 1;
            caseProgressNote.CaseID = caseID;
            if (caseMemberID.HasValue && caseMemberID > 0)
            {
                caseProgressNote.CaseMemberID = caseMemberID.Value;
                CaseMember caseMember = casememberRepository.Find(caseProgressNote.CaseMemberID);
                if (caseMember != null)
                {
                    ViewBag.DisplayID = caseMember.DisplayID;
                    int muridProfileCount = casememberprofileRepository.All.Count(item => item.CaseMember.CaseID == caseID && item.CaseMemberID == caseMemberID.Value);
                    if (muridProfileCount == 0)
                    {
                        caseProgressNote.ErrorMessage = "There is no profile created for family or family member " + caseMember.FirstName + " " + caseMember.LastName;
                    }
                    else
                    {
                        int assessmentCount = caseassessmentRepository.All.Count(item => item.CaseMember.CaseID == caseID && item.CaseMemberID == caseMemberID.Value);
                        if (assessmentCount == 0)
                        {
                            caseProgressNote.ErrorMessage = "There is no assessment created for family or family member " + caseMember.FirstName + " " + caseMember.LastName;
                        }
                        else
                        {
                            int goalCount = caseGoalRepository.All.Count(item => item.CaseMember.CaseID == caseID && item.CaseMemberID == caseMemberID.Value);
                            if (goalCount == 0)
                            {
                                caseProgressNote.ErrorMessage = "There is no goal identified for family or family member " + caseMember.FirstName + " " + caseMember.LastName;
                            }
                        }
                    }
                }
            }
            else
            {
                caseProgressNote.CaseMemberID = 0;
                int muridProfileCount = casememberprofileRepository.All.Count(item => item.CaseMember.CaseID == caseID);
                if (muridProfileCount == 0)
                {
                    caseProgressNote.ErrorMessage = "There is no profile created for this case";
                }
                else
                {
                    int assessmentCount = caseassessmentRepository.All.Count(item => item.CaseMember.CaseID == caseID);
                    if (assessmentCount == 0)
                    {
                        caseProgressNote.ErrorMessage = "There is no assessment created for this case";
                    }
                    else
                    {
                        int goalCount = caseGoalRepository.All.Count(item => item.CaseMember.CaseID == caseID);
                        if (goalCount == 0)
                        {
                            caseProgressNote.ErrorMessage = "There is no goal identified for this case";
                        }
                    }
                }
            }
            if (caseMemberID.HasValue && caseMemberID.Value > 0)
            {
                caseProgressNote.CaseMemberID = caseMemberID.Value;
                CaseMember caseMember = casememberRepository.Find(caseProgressNote.CaseMemberID);
                if (caseMember != null)
                {
                    ViewBag.DisplayID = caseMember.DisplayID;
                }
            }
            else
            {
                if (varCase == null)
                {
                    varCase = caseRepository.Find(caseID);
                }
                if (varCase != null)
                {
                    ViewBag.DisplayID = varCase.DisplayID;
                }
            }
            return(View(caseProgressNote));
        }
        public ActionResult Edit(CaseProgressNote caseprogressnote, int caseID, int?caseMemberID)
        {
            caseprogressnote.LastUpdatedByWorkerID = CurrentLoggedInWorker.ID;
            try
            {
                //if (caseprogressnote.NoteDate > DateTime.Today)
                //{
                //    throw new CustomException("Note date can't be future date.");
                //}
                //validate data
                if (ModelState.IsValid)
                {
                    //<JL:Comment:No need to check access again on post. On edit we are already checking permission.>
                    //if (caseprogressnote.ID > 0 && caseprogressnote.CreatedByWorkerID != CurrentLoggedInWorker.ID && CurrentLoggedInWorkerRoleIDs.IndexOf(1) == -1 && (CurrentLoggedInWorkerRoleIDs.IndexOf(SiteConfigurationReader.RegionalManagerRoleID) == -1))
                    //{
                    //    WebHelper.CurrentSession.Content.ErrorMessage = "You are not eligible to do this action";
                    //    //return Json(new { success = true, url = Url.Action(Constants.Actions.AccessDenied, Constants.Controllers.Home, new { Area = String.Empty }) });
                    //    return RedirectToAction(Constants.Actions.AccessDenied, Constants.Controllers.Home, new { Area = String.Empty });
                    //}
                    //</JL:Comment:07/08/2017>

                    //call the repository function to save in database
                    caseprogressnoteRepository.InsertOrUpdate(caseprogressnote);
                    caseprogressnoteRepository.Save();
                    if (caseprogressnote.CaseMembersIds != null && caseprogressnote.CaseMembersIds.Count() > 0)
                    {
                        foreach (var item in caseprogressnote.CaseMembersIds)
                        {
                            CaseProgressNoteMembers caseProgressNoteMembers = new CaseProgressNoteMembers();
                            caseProgressNoteMembers.CaseMemberID       = Convert.ToInt32(item);
                            caseProgressNoteMembers.CaseProgressNoteID = Convert.ToInt32(caseprogressnote.ID);
                            caseProgressNoteMembersRepository.InsertOrUpdate(caseProgressNoteMembers);
                            caseProgressNoteMembersRepository.Save();
                        }
                    }

                    //redirect to list page after successful operation
                    if (caseprogressnote.IsInitialContact)
                    {
                        return(RedirectToAction(Constants.Actions.InitialContact, new { caseID = caseprogressnote.CaseID }));
                    }
                    else
                    {
                        return(RedirectToAction(Constants.Actions.Edit, new { noteID = caseprogressnote.ID, caseID = caseprogressnote.CaseID }));
                    }
                }
                else
                {
                    foreach (var modelStateValue in ViewData.ModelState.Values)
                    {
                        foreach (var error in modelStateValue.Errors)
                        {
                            caseprogressnote.ErrorMessage = error.ErrorMessage;
                            break;
                        }
                        if (caseprogressnote.ErrorMessage.IsNotNullOrEmpty())
                        {
                            break;
                        }
                    }
                }
            }
            catch (CustomException ex)
            {
                caseprogressnote.ErrorMessage = ex.UserDefinedMessage;
            }
            catch (Exception ex)
            {
                ExceptionManager.Manage(ex);
                caseprogressnote.ErrorMessage = Constants.Messages.UnhandelledError;
            }
            if (caseMemberID.HasValue && caseMemberID.Value > 0)
            {
                caseprogressnote.CaseMemberID = caseMemberID.Value;
                CaseMember caseMember = casememberRepository.Find(caseprogressnote.CaseMemberID);
                if (caseMember != null)
                {
                    ViewBag.DisplayID = caseMember.DisplayID;
                }
            }
            else
            {
                Case varCase = caseRepository.Find(caseID);
                if (varCase != null)
                {
                    ViewBag.DisplayID = varCase.DisplayID;
                }
            }
            //return view with error message if the operation is failed
            return(View(caseprogressnote));
        }
        public ActionResult Create(CaseProgressNote caseProgressNote, int caseID, int?caseMemberID)
        {
            caseProgressNote.LastUpdatedByWorkerID = CurrentLoggedInWorker.ID;
            try
            {
                //if (caseProgressNote.NoteDate > DateTime.Today)
                //{
                //    throw new CustomException("Note date can't be future date.");
                //}

                //validate data
                if (ModelState.IsValid)
                {
                    caseProgressNote.LastUpdatedByWorkerID = CurrentLoggedInWorker.ID;
                    caseprogressnoteRepository.InsertOrUpdate(caseProgressNote);
                    caseprogressnoteRepository.Save();

                    if (caseProgressNote.IsInitialContact)
                    {
                        if (caseProgressNote.CaseMembersIds != null && caseProgressNote.CaseMembersIds.Count() > 0)
                        {
                            foreach (var item in caseProgressNote.CaseMembersIds)
                            {
                                CaseProgressNoteMembers caseProgressNoteMembers = new CaseProgressNoteMembers();
                                caseProgressNoteMembers.CaseMemberID       = Convert.ToInt32(item);
                                caseProgressNoteMembers.CaseProgressNoteID = Convert.ToInt32(caseProgressNote.ID);
                                caseProgressNoteMembersRepository.InsertOrUpdate(caseProgressNoteMembers);
                                caseProgressNoteMembersRepository.Save();
                            }
                        }
                        else
                        {
                            throw new CustomException("Select atleast one family member");
                        }
                    }
                    else
                    {
                        if (caseProgressNote.CaseMemberID > 0)
                        {
                            CaseProgressNoteMembers caseProgressNoteMembers = new CaseProgressNoteMembers();
                            caseProgressNoteMembers.CaseMemberID       = caseProgressNote.CaseMemberID;
                            caseProgressNoteMembers.CaseProgressNoteID = Convert.ToInt32(caseProgressNote.ID);
                            caseProgressNoteMembersRepository.InsertOrUpdate(caseProgressNoteMembers);
                            caseProgressNoteMembersRepository.Save();
                        }
                        else
                        {
                            throw new CustomException("Please select family or family member");
                        }
                    }
                    //Audit Log
                    if (caseProgressNote.IsInitialContact)
                    {
                        return(RedirectToAction(Constants.Actions.Index, Constants.Controllers.CaseWorker, new { caseID = caseProgressNote.CaseID, caseMemberID = caseMemberID }));
                    }
                    else
                    {
                        return(RedirectToAction(Constants.Actions.Edit, new { noteID = caseProgressNote.ID, caseID = caseProgressNote.CaseID, caseMemberID = caseMemberID }));
                    }
                }
                else
                {
                    foreach (var modelStateValue in ViewData.ModelState.Values)
                    {
                        foreach (var error in modelStateValue.Errors)
                        {
                            caseProgressNote.ErrorMessage = error.ErrorMessage;
                            break;
                        }
                        if (caseProgressNote.ErrorMessage.IsNotNullOrEmpty())
                        {
                            break;
                        }
                    }
                }
            }
            catch (CustomException ex)
            {
                caseProgressNote.ErrorMessage = ex.UserDefinedMessage;
            }
            catch (Exception ex)
            {
                ExceptionManager.Manage(ex);
                caseProgressNote.ErrorMessage = Constants.Messages.UnhandelledError;
            }
            if (caseMemberID.HasValue && caseMemberID.Value > 0)
            {
                caseProgressNote.CaseMemberID = caseMemberID.Value;
                CaseMember caseMember = casememberRepository.Find(caseProgressNote.CaseMemberID);
                if (caseMember != null)
                {
                    ViewBag.DisplayID = caseMember.DisplayID;
                }
            }
            else
            {
                Case varCase = caseRepository.Find(caseID);
                if (varCase != null)
                {
                    ViewBag.DisplayID = varCase.DisplayID;
                }
            }
            return(View(caseProgressNote));
        }