public static bool Filter(object obj) { try { if (obj != null && obj is RsnVM) { RsnVM rsnVM = obj as RsnVM; var mainVM = ((App.Current.MainWindow as MainWindow).DataContext as MainVM); if (mainVM != null && mainVM.TanVM != null) { var selectedRxn = mainVM.TanVM.SelectedReaction; if (selectedRxn != null && selectedRxn.SelectedStage != null && rsnVM.Reaction.Id == selectedRxn.Id) { if (selectedRxn.SelectedStage.DisplayOrder == 1) { return(rsnVM.Stage == null || rsnVM.Stage.DisplayOrder == 1); } else if (selectedRxn.SelectedStage.DisplayOrder > 1) { return(rsnVM.Stage != null && rsnVM.Stage.DisplayOrder == selectedRxn.SelectedStage.DisplayOrder); } } } } return(false); } catch (System.Exception ex) { Log.This(ex); return(false); } }
public static bool ValidateRsnReactionLevel(ReactionVM ReactionVM, StageVM StageVM, RsnLevel RsnLevel, string CVT, string FreeText, List <RsnVM> Rsns, out string outMsg, RsnVM EditingRsn = null) { if (RsnLevel == RsnLevel.STAGE) { if (!string.IsNullOrEmpty(CVT) && string.IsNullOrEmpty(FreeText)) { outMsg = "Stage Level CVT Used, Then Freetext is mandatory.."; return(false); } else if (!string.IsNullOrEmpty(FreeText)) { if (!ValidateRsnEditArea(FreeText, ReactionVM, StageVM, RsnLevel, out outMsg)) { return(false); } } else { outMsg = "Stage Level Information missed in Freetext Term... / Ends with some Special characters"; return(false); } } var reactionRsns = Rsns.Where(rsn => rsn.Reaction != null && rsn.Reaction.Id == ReactionVM.Id); bool OnlyOneFreeTextInReactionLevel = (CVT == String.Empty && RsnLevel == RsnLevel.REACTION && Rsns.Any(r => r.Reaction != null && r.Reaction.Id == ReactionVM.Id && (EditingRsn != null ? r.Id != EditingRsn.Id : true) && r.Stage == null && r.CvtText == String.Empty)) ? false : true; if (OnlyOneFreeTextInReactionLevel) { bool OnlyOneFreeTextInStageLevel = (CVT == String.Empty && RsnLevel == RsnLevel.STAGE && Rsns.Any(r => r.Reaction != null && (EditingRsn != null ? r.Id != EditingRsn.Id : true) && r.Reaction.Id == ReactionVM.Id && r.Stage != null && r.Stage.Id == StageVM.Id && r.CvtText == String.Empty)) ? false : true; if (OnlyOneFreeTextInStageLevel) { if (!String.IsNullOrEmpty(CVT) && reactionRsns.Where(r => (EditingRsn != null ? r.Id != EditingRsn.Id : true) && r.CvtText.SafeEqualsLower(CVT)).Any()) { var SelectedRSNTerm = reactionRsns.Where(r => (EditingRsn != null ? r.Id != EditingRsn.Id : true) && r.CvtText == CVT).FirstOrDefault(); outMsg = "Selected CVT " + (!String.IsNullOrEmpty(CVT) ? CVT : FreeText) + " Already used in " + (SelectedRSNTerm?.Stage != null ? SelectedRSNTerm?.Stage.Name : SelectedRSNTerm.Reaction.DisplayName); return(false); } if (!string.IsNullOrEmpty(FreeText)) { var splittedFreetexts = FreeText.Split(new String[] { RsnLevel == RsnLevel.REACTION ? ", " : "), " }, StringSplitOptions.RemoveEmptyEntries).Select(c => FreeTextWithOutStageInfo(c)); foreach (var item in splittedFreetexts) { if (S.CommentDictionary.CVT.Where(cvt => item.Trim().SafeEqualsLower(cvt.CVTS.Trim())).Any()) { outMsg = $"Selected FreeText contains CVT term \"{item}\""; return(false); } var result = reactionRsns.Where(r => (EditingRsn != null ? r.Id != EditingRsn.Id : true) && ((!String.IsNullOrEmpty(r.FreeText) && r.FreeText.Split(new String[] { r.IsRXN ? ", " : "), " }, StringSplitOptions.RemoveEmptyEntries).Where(eachText => FreeTextWithOutStageInfo(eachText).SafeEqualsLower(item)).Any()) || ((!string.IsNullOrEmpty(r.CvtText)) && item.SafeEqualsLower(r.CvtText.Trim())))); if (!string.IsNullOrEmpty(item) && result != null && result.Any()) { var SelectedRSNTerm = result.FirstOrDefault(); outMsg = "Selected FreeText " + item + " Already used in " + (SelectedRSNTerm?.Stage != null ? SelectedRSNTerm?.Stage.Name : SelectedRSNTerm.Reaction.DisplayName); return(false); } } } outMsg = string.Empty; return(true); } else { outMsg = "Only One Stage Level Free Text Is Allowed With out CVT . ."; return(false); } } else { outMsg = "Only One Reaction Level Free Text Is Allowed With out CVT . ."; return(false); } }
public static ViewAnalogousVM GenerateNewAnalogousReactions( ReactionVM SelectedReaction, bool IsReactantsSelected, bool IsSolventsSelected, bool IsAgentsSelected, bool IsCatalystSelected, bool IspHSelected, bool IsTempSelected, bool IsTimeSelected, bool IsPressureSelected, bool IsRSNSelected, int ReactionsCountToCopy, int IndexToAdd ) { ViewAnalogousVM vm = new ViewAnalogousVM(); var mainViewModel = ((MainWindow)(App.Current.MainWindow)).DataContext as MainVM; mainViewModel.ProgressText = "Creating Analogous Reacions . ."; try { vm.SelectedMasterReaction = SelectedReaction; List <ReactionParticipantVM> allParticipants = new List <ReactionParticipantVM>(); List <RsnVM> tanRsns = new List <RsnVM>(); List <ReactionVM> tanReactions = new List <ReactionVM>(); var tanParticipants = new List <ReactionParticipantVM>(); if (IsReactantsSelected) { var reactants = mainViewModel.TanVM.ReactionParticipants.OfType(ParticipantType.Reactant); allParticipants.AddRange(reactants); } if (IsSolventsSelected) { var solvents = mainViewModel.TanVM.ReactionParticipants.OfType(ParticipantType.Solvent); allParticipants.AddRange(solvents); } if (IsAgentsSelected) { var agents = mainViewModel.TanVM.ReactionParticipants.OfType(ParticipantType.Agent); allParticipants.AddRange(agents); } if (IsCatalystSelected) { var catalysts = mainViewModel.TanVM.ReactionParticipants.OfType(ParticipantType.Catalyst); allParticipants.AddRange(catalysts); } for (int i = 0; i < ReactionsCountToCopy; i++) { var reaction = new ReactionVM { DisplayOrder = ++IndexToAdd, Id = Guid.NewGuid(), TanVM = SelectedReaction.TanVM, AnalogousVMId = SelectedReaction.Id }; #region Stages var stages = new List <StageVM>(); foreach (var masterStage in SelectedReaction.Stages) { bool ValidStage = true; var analogousStage = new StageVM { Id = Guid.NewGuid(), ReactionVm = reaction }; var Conditions = new List <StageConditionVM>(); if (masterStage.Conditions != null) { foreach (var selectedCondition in masterStage.Conditions) { var condition = new StageConditionVM { DisplayOrder = selectedCondition.DisplayOrder, Id = Guid.NewGuid(), PH = IspHSelected ? selectedCondition.PH : "", Pressure = IsPressureSelected ? selectedCondition.Pressure : "", StageId = analogousStage.Id, Temperature = IsTempSelected ? selectedCondition.Temperature : "", Time = IsTimeSelected ? selectedCondition.Time : "", TIME_TYPE = IsTimeSelected ? selectedCondition.TIME_TYPE : "", PRESSURE_TYPE = IsPressureSelected ? selectedCondition.PRESSURE_TYPE : "", TEMP_TYPE = IsTempSelected ? selectedCondition.TEMP_TYPE : "", PH_TYPE = IspHSelected ? selectedCondition.PH_TYPE : "", }; if ((IspHSelected && !string.IsNullOrEmpty(selectedCondition.PH)) || (IsPressureSelected && !string.IsNullOrEmpty(selectedCondition.Pressure)) || (IsTempSelected && !string.IsNullOrEmpty(selectedCondition.Temperature)) || (IsTimeSelected && !string.IsNullOrEmpty(selectedCondition.Time))) { Conditions.Add(condition); } } analogousStage.SetConditions(Conditions); } var stageParticipants = (from sp in allParticipants where sp.StageVM.Id == masterStage.Id select sp).ToList(); foreach (var stageParticipant in stageParticipants) { var newParticipant = new ReactionParticipantVM { ChemicalType = stageParticipant.ChemicalType, DisplayOrder = stageParticipant.DisplayOrder, Name = stageParticipant.Name, Num = stageParticipant.Num, ParticipantType = stageParticipant.ParticipantType, ReactionVM = reaction, Reg = stageParticipant.Reg, StageVM = analogousStage, TanChemicalId = stageParticipant.TanChemicalId, Yield = stageParticipant.Yield, Id = Guid.NewGuid() }; tanParticipants.Add(newParticipant); } if (IsRSNSelected) { var stagersnList = (from rsn in mainViewModel.TanVM.Rsns where rsn.Reaction.Id == SelectedReaction.Id && rsn.Stage != null && rsn.Stage.Id == masterStage.Id select rsn).ToList(); foreach (var rsn in stagersnList) { var newRsn = new RsnVM { CvtText = rsn.CvtText, Reaction = reaction, IsRXN = rsn.IsRXN, Stage = analogousStage, FreeText = rsn.FreeText, Id = Guid.NewGuid(), IsIgnorableInDelivery = rsn.IsIgnorableInDelivery, DisplayOrder = rsn.DisplayOrder, ReactionParticipantId = rsn.ReactionParticipantId, SelectedChemical = rsn.SelectedChemical }; tanRsns.Add(newRsn); } } if ((analogousStage.Conditions == null || !analogousStage.Conditions.Any()) && (tanParticipants == null || !tanParticipants.Where(tp => tp.StageVM != null && tp.StageVM.Id == analogousStage.Id).Any()) && (tanRsns == null || !tanRsns.Where(tp => tp.Stage != null && tp.Stage.Id == analogousStage.Id).Any()) && !mainViewModel.TanVM.ReactionParticipants.OfReactionAndStage(SelectedReaction.Id, masterStage.Id).OfType(ParticipantType.Reactant).Any()) { ValidStage = false; } if (ValidStage) { stages.Add(analogousStage); } } #endregion reaction.SetStages(stages, 0, false, true); tanReactions.Add(reaction); var reactionParticipants = (from sp in allParticipants where sp.ReactionVM.Id == SelectedReaction.Id && sp.StageVM == null select sp).ToList(); foreach (var participant in reactionParticipants) { var newParticipant = new ReactionParticipantVM { ChemicalType = participant.ChemicalType, DisplayOrder = participant.DisplayOrder, Name = participant.Name, Num = participant.Num, ParticipantType = participant.ParticipantType, ReactionVM = reaction, Reg = participant.Reg, StageVM = null, TanChemicalId = participant.TanChemicalId, Yield = participant.Yield, Id = Guid.NewGuid() }; tanParticipants.Add(newParticipant); } if (IsRSNSelected) { var reationrsnList = (from rsn in mainViewModel.TanVM.Rsns where rsn.Reaction.Id == SelectedReaction.Id && rsn.Stage == null select rsn).ToList(); foreach (var rsn in reationrsnList) { var newRsn = new RsnVM { CvtText = rsn.CvtText, Reaction = reaction, FreeText = rsn.FreeText, IsRXN = rsn.IsRXN, Stage = null, Id = Guid.NewGuid(), SelectedChemical = rsn.SelectedChemical, ReactionParticipantId = rsn.ReactionParticipantId, DisplayOrder = rsn.DisplayOrder, IsIgnorableInDelivery = rsn.IsIgnorableInDelivery }; tanRsns.Add(newRsn); } } } foreach (var participant in tanParticipants) { vm.AllParticipants.Add(participant); vm.ReactionParticipants.Add(participant); } vm.Rsns.Clear(); foreach (var rsn in tanRsns) { vm.Rsns.Add(rsn); } foreach (var reaction in tanReactions) { vm.AnalogousReactions.Add(reaction); } } catch (Exception ex) { AppErrorBox.ShowErrorMessage("Can't Create Analogous Reactions", ex.Message); } return(vm); }
public static bool ValidateAndAddRsn(string FreeText, string CVT, List <RsnVM> Rsns, List <CvtVM> CVTData, ReactionVM ReactionVM, StageVM StageVM, RsnLevel RsnLevel, Regex regex, RSNWindowVM RSNWindowVM, RsnVM EditingRsn = null) { try { if (!string.IsNullOrEmpty(FreeText.Trim()) || !string.IsNullOrEmpty(CVT)) { string freetextREstring = S.RegularExpressions.Where(re => re.RegulerExpressionFor == ProductTracking.Models.Core.RegulerExpressionFor.FreeText).Select(re => re.Expression).FirstOrDefault(); Regex FreetextRE = new Regex(freetextREstring); var SPLList = new List <string> { "==", "%%", ",,", "((", "))", "{{", "}}", "++", "//", "\\", "::", ";;", "--", "..", " ", "''", "<<", ">>", "**", "@@", "[[", "]]", ", ,", ").", ".,", " ." }; if (!string.IsNullOrEmpty(FreeText) && SPLList.Where(spl => FreeText.Contains(spl)).FirstOrDefault() != null) { AppInfoBox.ShowInfoMessage($"Freetext contains invalid repetation of special Characters <SPL Char Start>{SPLList.Where(spl => FreeText.Contains(spl)).FirstOrDefault()}</SPL Char End>."); //MessageBox.Show($"Freetext contains invalid repetation of special Characters {SPLList.Where(spl => FreeText.Contains(spl)).FirstOrDefault()}.", "Reactions", MessageBoxButton.OK, MessageBoxImage.Information); return(false); } if (!string.IsNullOrEmpty(FreeText) && FreeText.Contains("), ") && StageVM != null && RsnLevel == RsnLevel.STAGE) { string[] list = FreeText.Split(new string[] { "), " }, StringSplitOptions.RemoveEmptyEntries); foreach (var freetext in list) { string newText = !freetext.EndsWith(")") ? $"{freetext})" : freetext; if (regex.IsMatch(newText)) { List <int> data = PressureValidations.GetStageDisplayOrdersFromFreetexts(new List <RsnVM> { new ViewModels.RsnVM { Reaction = ReactionVM, Stage = StageVM, FreeText = newText } }, ReactionVM, FreeTextWithOutStageInfo(newText)); if (!data.Contains(StageVM.DisplayOrder) && RsnLevel == RsnLevel.STAGE) { AppInfoBox.ShowInfoMessage("Comma and space allowed only after stage information"); return(false); } } else { AppInfoBox.ShowInfoMessage($"Invalid freetext '{newText}'"); return(false); } } } if (!string.IsNullOrEmpty(FreeText) && FreeText.Contains(",")) { string[] list = FreeText.Split(','); for (int i = 1; i < list.Length; i++) { if (!Regex.IsMatch(list[i], @"^\s|\d")) { AppInfoBox.ShowInfoMessage("invalid freetext. It contains extra characters"); return(false); } } } if (!string.IsNullOrEmpty(FreeText) && FreeText.Contains(", ") && FreeText.ToLower().Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries).GroupBy(s => FreeTextWithOutStageInfo(s)).SelectMany(grp => grp.Skip(1)).Count() > 0) { AppInfoBox.ShowInfoMessage("FreeText Contains duplicates."); return(false); } if (!string.IsNullOrEmpty(FreeText) && FreeText.Contains(", ") && FreeText.ToLower().Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries).Where(s => s.EndsWith(".")).Count() > 0) { AppInfoBox.ShowInfoMessage("FreeText Contains .(Period)"); return(false); } if (RsnLevel == RsnLevel.STAGE && StageVM == null) { AppInfoBox.ShowInfoMessage("Please Select Stage to Add Stage RSN"); return(false); } if (RsnLevel == RsnLevel.REACTION && !String.IsNullOrEmpty(FreeText) && FreeText.Contains("(stage")) { AppInfoBox.ShowInfoMessage("Reaction Level stage information Not allowed"); return(false); } if (!string.IsNullOrEmpty(FreeText) && !FreetextRE.IsMatch(FreeText)) { AppInfoBox.ShowInfoMessage("FreeText Contains special characters."); return(false); } if (EditingRsn != null) { bool OnlyOneFreeTextInReactionLevel = (CVT == String.Empty && RsnLevel == RsnLevel.REACTION && Rsns.Any(r => r.Reaction != null && r.Reaction.Id == ReactionVM.Id && (EditingRsn != null ? r.Id != EditingRsn.Id : true) && r.Stage == null && r.CvtText == String.Empty)) ? false : true; if (OnlyOneFreeTextInReactionLevel) { bool OnlyOneFreeTextInStageLevel = (CVT == String.Empty && RsnLevel == RsnLevel.STAGE && Rsns.Any(r => r.Reaction != null && (EditingRsn != null ? r.Id != EditingRsn.Id : true) && r.Reaction.Id == ReactionVM.Id && r.Stage != null && r.Stage.Id == StageVM.Id && r.CvtText == String.Empty)) ? false : true; if (OnlyOneFreeTextInStageLevel) { if (!String.IsNullOrEmpty(CVT) && Rsns.Where(r => r.Reaction.Id == ReactionVM.Id && (EditingRsn != null ? r.Id != EditingRsn.Id : true) && r.CvtText != string.Empty && r.CvtText == CVT).Count() > 0) { var SelectedRSNTerm = Rsns.Where(r => r.Reaction.Id == ReactionVM.Id && (EditingRsn != null ? r.Id != EditingRsn.Id : true) && r.CvtText == CVT).FirstOrDefault(); AppInfoBox.ShowInfoMessage("Selected CVT " + (!String.IsNullOrEmpty(CVT) ? CVT : FreeText) + " Already used in " + (SelectedRSNTerm?.Stage != null ? SelectedRSNTerm?.Stage.Name : SelectedRSNTerm.Reaction.Name)); return(false); } if (!string.IsNullOrEmpty(FreeText)) { var splittedFreetexts = FreeText.Split(new String[] { ", " }, StringSplitOptions.RemoveEmptyEntries).Select(c => FreeTextWithOutStageInfo(c)); foreach (var item in splittedFreetexts) { if (CVTData.Where(cvt => item.Trim().SafeEqualsLower(cvt.Text.Trim()) && !cvt.Text.Trim().SafeEqualsLower(CVT.Trim())).Count() > 0) { AppInfoBox.ShowInfoMessage($"Selected FreeText contains CVT \"{item}\""); return(false); } if (!string.IsNullOrEmpty(item) && Rsns.Where(r => r.Reaction.Id == ReactionVM.Id && (EditingRsn != null ? r.Id != EditingRsn.Id : true) && ((!String.IsNullOrEmpty(r.FreeText) && r.FreeText.Split(new String[] { ", " }, StringSplitOptions.RemoveEmptyEntries).Where(c => FreeTextWithOutStageInfo(c).Trim().SafeEqualsLower(item.Trim())).Count() > 0) || (!string.IsNullOrEmpty(r.CvtText) && item.Trim().SafeContainsLower(r.CvtText.Trim())))).Count() > 0) { var SelectedRSNTerm = Rsns.Where(r => r.Reaction.Id == ReactionVM.Id && (EditingRsn != null ? r.Id != EditingRsn.Id : true) && ((!String.IsNullOrEmpty(r.FreeText) && r.FreeText.Split(new String[] { ", " }, StringSplitOptions.RemoveEmptyEntries).Where(c => FreeTextWithOutStageInfo(c).Trim().SafeEqualsLower(item.Trim())).Count() > 0) || (!string.IsNullOrEmpty(r.CvtText) && item.Trim().SafeContainsLower(r.CvtText.Trim())))).FirstOrDefault(); AppInfoBox.ShowInfoMessage("Selected FreeText " + FreeText + " Already used in " + (SelectedRSNTerm?.Stage != null ? SelectedRSNTerm?.Stage.Name : SelectedRSNTerm.Reaction.Name)); return(false); } } } if (RsnLevel == RsnLevel.STAGE) { if (!string.IsNullOrEmpty(CVT) && string.IsNullOrEmpty(FreeText)) { AppInfoBox.ShowInfoMessage("Stage Level CVT Used, Then Freetext is mandatory.."); return(false); } else if (!string.IsNullOrEmpty(FreeText) && regex.IsMatch(FreeText)) { string outMsg = string.Empty; if (!ValidateRsnEditArea(FreeText, regex, ReactionVM, StageVM, out outMsg)) { AppInfoBox.ShowInfoMessage(outMsg); return(false); } return(true); } else { AppInfoBox.ShowInfoMessage("Stage Level Information missed in Freetext Term... / Ends with some Special characters"); return(false); } } return(true); } else { AppInfoBox.ShowInfoMessage("Only One Stage Level Free Text Is Allowed With out CVT . ."); return(false); } } else { AppInfoBox.ShowInfoMessage("Only One Reaction Level Free Text Is Allowed With out CVT . ."); return(false); } } else { if (!String.IsNullOrEmpty(CVT) || !String.IsNullOrEmpty(FreeText)) { bool OnlyOneFreeTextInReactionLevel = (CVT == String.Empty && RsnLevel == RsnLevel.REACTION && Rsns.Any(r => r.Reaction != null && r.Reaction.Id == ReactionVM.Id && r.Stage == null && string.IsNullOrEmpty(r.CvtText))) ? false : true; if (OnlyOneFreeTextInReactionLevel) { bool OnlyOneFreeTextInStageLevel = (CVT == String.Empty && RsnLevel == RsnLevel.STAGE && Rsns.Any(r => r.Reaction != null && r.Reaction.Id == ReactionVM.Id && r.Stage != null && r.Stage.Id == StageVM.Id && string.IsNullOrEmpty(r.CvtText))) ? false : true; if (OnlyOneFreeTextInStageLevel) { if (!String.IsNullOrEmpty(CVT) && Rsns.Where(r => r.Reaction.Id == ReactionVM.Id && r.CvtText.SafeEqualsLower(CVT)).Count() > 0) { var SelectedRSNTerm = Rsns.Where(r => r.Reaction.Id == ReactionVM.Id && r.CvtText.SafeEqualsLower(CVT)).FirstOrDefault(); AppInfoBox.ShowInfoMessage("Selected CVT " + (!String.IsNullOrEmpty(CVT) ? CVT : FreeText) + " Already used in " + (SelectedRSNTerm?.Stage != null ? SelectedRSNTerm?.Stage.Name : SelectedRSNTerm.Reaction.Name)); return(false); } if (!string.IsNullOrEmpty(FreeText)) { var splittedFreetexts = FreeText.Split(new String[] { ", " }, StringSplitOptions.RemoveEmptyEntries).Select(c => FreeTextWithOutStageInfo(c)); foreach (var item in splittedFreetexts) { if (CVTData.Where(cvt => item.Trim().SafeEqualsLower(cvt.Text.Trim()) && !cvt.Text.Trim().SafeEqualsLower(CVT.Trim())).Count() > 0) { AppInfoBox.ShowInfoMessage($"Selected FreeText contains CVT \"{item}\""); return(false); } if (!string.IsNullOrEmpty(item) && Rsns.Where(r => r.Reaction.Id == ReactionVM.Id && ((!String.IsNullOrEmpty(r.FreeText) && r.FreeText.Split(new String[] { ", " }, StringSplitOptions.RemoveEmptyEntries).Where(c => FreeTextWithOutStageInfo(c).Trim().SafeEqualsLower(item.Trim())).Count() > 0) || (!string.IsNullOrEmpty(r.CvtText) && item.Trim().SafeContainsLower(r.CvtText.Trim())))).Count() > 0) { var SelectedRSNTerm = Rsns.Where(r => r.Reaction.Id == ReactionVM.Id && ((!String.IsNullOrEmpty(r.FreeText) && r.FreeText.Split(new String[] { ", " }, StringSplitOptions.RemoveEmptyEntries).Where(c => FreeTextWithOutStageInfo(c).Trim().SafeEqualsLower(item.Trim())).Count() > 0) || (!string.IsNullOrEmpty(r.CvtText) && item.Trim().SafeContainsLower(r.CvtText.Trim())))).FirstOrDefault(); AppInfoBox.ShowInfoMessage($"Selected FreeText '{FreeText}' Already used in {(SelectedRSNTerm?.Stage != null ? SelectedRSNTerm?.Stage.Name : SelectedRSNTerm.Reaction.Name)}"); return(false); } } } if (RsnLevel == RsnLevel.STAGE) { if (!string.IsNullOrEmpty(CVT) && string.IsNullOrEmpty(FreeText)) { AppInfoBox.ShowInfoMessage("Stage Level CVT Used, Then Freetext is mandatory.."); return(false); } else if (!string.IsNullOrEmpty(FreeText) && regex.IsMatch(FreeText)) { string OutMsg = string.Empty; if (!ValidateRsnEditArea(FreeText, regex, ReactionVM, StageVM, out OutMsg)) { AppErrorBox.ShowErrorMessage(OutMsg, String.Empty); return(false); } return(true); } else { AppInfoBox.ShowInfoMessage("Stage Level Information missed in Freetext Term..."); return(false); } } return(true); } else { AppInfoBox.ShowInfoMessage("Only One Stage Level Free Text Is Allowed With out CVT . ."); return(false); } } else { AppInfoBox.ShowInfoMessage("Only One Reaction Level Free Text Is Allowed With out CVT . ."); return(false); } } return(false); } if (Rsns.Where(rsn => rsn.CvtText.SafeEqualsLower(S.ENZYMIC_CVT)).Count() > 0 && Rsns.Where(rsn => rsn.CvtText.SafeEqualsLower(S.BIOTRANSFORMATION_CVT)).Count() == 0) { var enzymicRSN = Rsns.Where(rsn => rsn.CvtText.SafeEqualsLower(S.ENZYMIC_CVT)).FirstOrDefault(); string freeTextToAdd = !string.IsNullOrEmpty(enzymicRSN.FreeText) ? StageInfoWithOutFreeText(enzymicRSN.FreeText, regex) : string.Empty; Rsns.Add(new RsnVM { CvtText = S.BIOTRANSFORMATION_CVT, FreeText = $"{S.BIOTRANSFORMATION_FREETEXT} {freeTextToAdd}", IsRXN = true, Stage = enzymicRSN.Stage != null ? enzymicRSN.Stage : null, Reaction = ReactionVM, RSNWindowVM = RSNWindowVM, Id = Guid.NewGuid() }); } //ClearEditForm.Execute(this); } else { AppInfoBox.ShowInfoMessage("Either CVT or FreeText mandatory to save RSN"); } return(true); } catch (Exception ex) { Log.This(ex); AppErrorBox.ShowErrorMessage(ex.Message, ex.ToString()); return(false); } }