public ActionResult Edit(int CaseID, [Bind(Prefix = "PersonData")] Models.vw_PersonData PersonData, [Bind(Prefix = "Edit.CasePartyViewModels")] CasePartyViewModels CasePartyViewModels)
        {
            if (!CasePartyViewModels.OriginalPartyType.HasValue)
            {
                ModelState.AddModelError("OriginalPartyType", JIC.Base.Resources.Messages.RequiredErrorMessage);
            }
            if (!ModelState.IsValid)
            {
                return(CPartialView(PrepareCasePartiesViewModel(CaseID, PersonData, CasePartyViewModels)));
            }

            if (CasePartyViewModels.PartyType != CasePartyViewModels.OriginalPartyType)
            {
                using (var Transaction = this.DataContext.Database.BeginTransaction())
                {
                    var PartyData            = PartiesService.GetCaseDefect(CaseID, CasePartyViewModels.id, CasePartyViewModels.OriginalPartyType);
                    var DeleteStatus         = PartiesService.DeleteCaseDefect(CaseID, CasePartyViewModels.id, CasePartyViewModels.OriginalPartyType);
                    vw_CaseDefectData defect = new vw_CaseDefectData()
                    {
                        CaseID = CaseID,
                        ID     = CasePartyViewModels.id,
                        IsCivilRightProsecutor = CasePartyViewModels.IsCivilRightProsecutor,
                        //NationalID = this.NationalID,
                        Order = CasePartyViewModels.PartiesOrder,
                        //Name = PartyName,
                        DefectType      = CasePartyViewModels.PartyType,
                        Crimes          = CasePartyViewModels.CrimeTypes,
                        DefendantStatus = CasePartyViewModels.DefendantStatus
                    };
                    var AddStatus = PartiesService.AddCaseDefect(new vw_CaseDefectData
                    {
                        CaseID                 = CaseID,
                        Crimes                 = CasePartyViewModels.CrimeTypes,
                        DefectType             = CasePartyViewModels.PartyType,
                        IsCivilRightProsecutor = CasePartyViewModels.IsCivilRightProsecutor,
                        PersonID               = PartyData.PersonID,
                        DefendantStatus        = CasePartyViewModels.DefendantStatus ?? 0,
                    });
                    //var AddStatus = PartiesService.AddCaseDefect(defect);
                    if (DeleteStatus == DeleteDefectStatus.Deleted && AddStatus == SaveDefectsStatus.Saved)
                    {
                        Transaction.Commit();
                    }
                    ViewBag.SavedEdite = true;
                    return(CPartialView(PrepareCasePartiesViewModel(CaseID, PersonData, CasePartyViewModels)).WithErrorMessages(JIC.Base.Resources.Messages.OperationNotCompleted));
                }
            }
            else
            {
                using (var Transaction = this.DataContext.Database.BeginTransaction())
                {
                    //Get PartyOriginalData
                    var CasePartyData = PartiesService.GetCaseDefect(CaseID, CasePartyViewModels.id, CasePartyViewModels.PartyType);

                    //UpdatePersonData
                    Base.Views.vw_PersonData personData = PersonData.ToPersonData();
                    personData.ID = CasePartyData.PersonID;
                    var PersonStatus = PersonService.EditPerson(personData);

                    //Update Case Parties Data
                    var CaseDefect = CasePartyViewModels.ToCaseDefectView();
                    CaseDefect.CaseID   = CaseID;
                    CaseDefect.PersonID = personData.ID;
                    var DefectStatus = PartiesService.EditCaseDefect(CaseDefect);

                    //If Party Exist in both Defendant and Victim we Needs to Update the Other As well
                    var PersonParties = PartiesService.GetDefectsByCaseID(CaseID).Where(party => party.PersonID == CasePartyData.PersonID && party.DefectType != CasePartyViewModels.PartyType).ToList();
                    foreach (var party in PersonParties)
                    {
                        PartiesService.EditCaseDefect(new vw_CaseDefectData
                        {
                            CaseID                 = party.CaseID,
                            Crimes                 = party.Crimes.Select(crime => crime.ID).ToList(),
                            DefectType             = party.DefectType,
                            DefendantStatus        = party.Status,
                            IsCivilRightProsecutor = party.IsCivilRightProsecutor,
                            Order    = party.Order,
                            PersonID = personData.ID,
                            ID       = party.ID
                        });
                    }
                    if (PersonStatus == PersonStatus.SuccefullSave && DefectStatus == SaveDefectsStatus.Saved)
                    {
                        Transaction.Commit();
                        ViewBag.SavedEdite = true;
                        return(CPartialView(PrepareCasePartiesViewModel(CaseID, PersonData, CasePartyViewModels)).WithSuccessMessages(JIC.Base.Resources.Messages.OperationCompletedSuccessfully));
                    }
                    else
                    {
                        return(CPartialView(PrepareCasePartiesViewModel(CaseID, PersonData, CasePartyViewModels)).WithErrorMessages(JIC.Base.Resources.Messages.OperationNotCompleted));
                    }
                }
            }
            // JavaScript("$(document).trigger('Parties:UpdateSuccefull');");
        }