public void Add8000Chemical(TanChemicalVM newChemical) { try { var mainViewModel = (App.Current.MainWindow as MainWindow).DataContext as MainVM; if (TanChemicalVMList != null) { //generate new 8000 number int seriesNumber = 8001; var maxSeriesNumChecmical = TanChemicalVMList. Where(rp => rp.ChemicalType == ChemicalType.S8000) .OrderBy(rp => rp.NUM).LastOrDefault(); if (maxSeriesNumChecmical != null && maxSeriesNumChecmical.NUM < 8499) { seriesNumber = maxSeriesNumChecmical.NUM + 1; } else if (maxSeriesNumChecmical != null && maxSeriesNumChecmical.NUM >= 8499) { seriesNumber = 7001; var _7000SeriesNumChecmical = TanChemicalVMList. Where(rp => rp.ChemicalType == ChemicalType.S8000 && rp.NUM < 8000) .OrderBy(rp => rp.NUM).LastOrDefault(); if (_7000SeriesNumChecmical != null && _7000SeriesNumChecmical.NUM < 8500) { seriesNumber = _7000SeriesNumChecmical.NUM + 1; } } TanChemicalVM c = new TanChemicalVM(); c.ChemicalType = ChemicalType.S8000; c.RegNumber = String.Empty; c.SearchName = string.IsNullOrEmpty(newChemical.Name) ? (string.IsNullOrEmpty(newChemical.GenericName) ? newChemical.CompoundNo : newChemical.GenericName) : newChemical.Name; c.Name = string.IsNullOrEmpty(newChemical.Name) ? (string.IsNullOrEmpty(newChemical.GenericName) ? newChemical.CompoundNo : newChemical.GenericName) : newChemical.Name; c.NUM = seriesNumber; c.InChiKey = newChemical.InChiKey; c.ChemicalmataData = newChemical.ChemicalmataData; c.CompoundNo = newChemical.CompoundNo; c.GenericName = newChemical.GenericName; c.Id = newChemical.Id; c.ChemicalmataData = newChemical.ChemicalmataData; c.MolString = newChemical.MolString; c.MolFormula = newChemical.MolFormula; TanChemicalVMList.Add(c); mainViewModel.S8000Chemicals.Add(c); TanChemical tanchemical = (from p in mainViewModel.TanVM.TanChemicals where p.Id == newChemical.Id select p).FirstOrDefault(); if (tanchemical == null) { TanChemicalsCrud.AddTanChemicalToList(mainViewModel.TanVM.TanChemicals, c, mainViewModel.TanVM.Id); } mainViewModel.TanVM.PerformAutoSave("8000 chemical generated"); Clear8000EditArea(); SelectedTabIndex = 0; } } catch (Exception ex) { Log.This(ex); } }
public static ReactionParticipantVM AlreadyContains(TanChemical selectedChemical, ViewAnalogousVM analogousreactionVM, ReactionVM SelectedReaction, ParticipantType participantType, [Optional] List <ReactionParticipantVM> ReactionParticipant, [Optional] List <RsnVM> Rsn, [Optional] bool BulkValidation) { try { var ReactionParticipants = ReactionParticipant == null?analogousreactionVM.ReactionParticipants.OfReaction(SelectedReaction.Id) : ReactionParticipant; var Rsns = Rsn == null?analogousreactionVM.Rsns.OfReaction(SelectedReaction.Id, true).ToList() : Rsn; var chemicalName = new Models.TanChemicalVM { Id = selectedChemical.Id, Name = selectedChemical.Name, NUM = selectedChemical.NUM, RegNumber = selectedChemical.RegNumber }; var groupedValidations = S.GetGroupedCVTs(); if (ReactionParticipants.Count() > 0) { if (participantType == ParticipantType.Product) { var existingProducts = ReactionParticipants.OfReaction(SelectedReaction.Id).OfNumOrReg(selectedChemical.NUM, selectedChemical.RegNumber); if (existingProducts != null && existingProducts.Any()) { return(existingProducts.FirstOrDefault()); } } else if (SelectedReaction.SelectedStage != null) { #region Reactant Validations if (participantType == ParticipantType.Reactant) { var stageReactants = ReactionParticipants.OfReactionAndStage(SelectedReaction.Id, SelectedReaction.SelectedStage.Id).OfNumOrReg(selectedChemical.NUM, selectedChemical.RegNumber).OfExceptTypes(ParticipantType.Solvent); if (stageReactants != null && stageReactants.OfType(ParticipantType.Reactant).Any()) { return(stageReactants.FirstOrDefault()); } List <int> StageNumbers = new List <int>(); if (SelectedReaction.Stages.Count > 1) { StageNumbers = PressureValidations.GetStageDisplayOrdersFromFreetexts(Rsns, SelectedReaction, S.DUAL_ROLE_STRING); } else if (Rsns.Where(rsn => rsn.Reaction.Id == SelectedReaction.Id && rsn.Stage == null && rsn.CvtText.SafeEqualsLower(S.DUAL_ROLE_STRING)).Any()) { StageNumbers.Add(1); } if (stageReactants != null && stageReactants.OfExceptTypes(ParticipantType.Reactant).Any()) { if (!StageNumbers.Contains(SelectedReaction.SelectedStage.DisplayOrder)) { return(stageReactants.OfExceptTypes(ParticipantType.Reactant).FirstOrDefault()); } else { var rsnVM = Rsns.Where(rsn => rsn.Reaction.Id == SelectedReaction.Id && rsn.SelectedChemical == null && (rsn.FreeText.SafeContainsLower(S.DUAL_ROLE_STRING) || rsn.CvtText.SafeEqualsLower(S.DUAL_ROLE_STRING))).FirstOrDefault(); if (rsnVM != null) { rsnVM.SelectedChemical = chemicalName; } } } var Products = ReactionParticipants.OfReactionOfType(SelectedReaction.Id, ParticipantType.Product).OfNum(selectedChemical.NUM); if (Products != null && Products.Any()) { return(Products.FirstOrDefault()); } var AmdProducts = ReactionParticipants.OfReactionOfType(SelectedReaction.Id, ParticipantType.Product).Where(ro => ro.Reg == selectedChemical.RegNumber && ro.Num != selectedChemical.NUM); if (AmdProducts != null && AmdProducts.Any()) { string msg = $"Selected chemical with same Reg and different num already involved in {AmdProducts.FirstOrDefault().ReactionVM.DisplayName} as a Product. Do you want to still add as Reactant?"; DialogResult dialogResult = System.Windows.Forms.MessageBox.Show(msg, "Reactions", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (dialogResult == DialogResult.No) { return(AmdProducts.FirstOrDefault()); } } var otherstageReactants = ReactionParticipants.OfReactionAndExceptStage(SelectedReaction.Id, SelectedReaction.SelectedStage.Id) .OfNumOrReg(selectedChemical.NUM, selectedChemical.RegNumber) .OfExceptTypes(ParticipantType.Solvent, ParticipantType.Product) .GroupBy(p => p.ParticipantType) .ToDictionary(p => p.Key, p => p.ToList()); var duplicate = ValidateWithCVT1(otherstageReactants, Rsns, SelectedReaction, chemicalName, ParticipantType.Reactant); if (duplicate != null) { return(duplicate); } } #endregion #region Solvent Validation if (participantType == ParticipantType.Solvent) { var InStageSolvents = ReactionParticipants.OfReactionAndStage(SelectedReaction.Id, SelectedReaction.SelectedStage.Id).OfExceptTypes(ParticipantType.Reactant).OfNumOrReg(selectedChemical.NUM, selectedChemical.RegNumber); if (InStageSolvents != null && InStageSolvents.OfType(ParticipantType.Solvent).Any()) { return(InStageSolvents.FirstOrDefault()); } List <int> StageNumbers = new List <int>(); if (SelectedReaction.Stages.Count > 1) { StageNumbers = PressureValidations.GetStageDisplayOrdersFromFreetexts(Rsns, SelectedReaction, S.DUAL_ROLE_STRING); } else if (Rsns.Where(rsn => rsn.Reaction.Id == SelectedReaction.Id && rsn.Stage == null && rsn.CvtText.SafeEqualsLower(S.DUAL_ROLE_STRING)).Any()) { StageNumbers.Add(1); } if (InStageSolvents != null && InStageSolvents.OfExceptTypes(ParticipantType.Solvent).Any()) { if (!StageNumbers.Contains(SelectedReaction.SelectedStage.DisplayOrder)) { return(InStageSolvents.OfExceptTypes(ParticipantType.Solvent).FirstOrDefault()); } else { var rsnVM = Rsns.Where(rsn => rsn.Reaction.Id == SelectedReaction.Id && rsn.SelectedChemical == null && (rsn.FreeText.SafeContainsLower(S.DUAL_ROLE_STRING) || rsn.CvtText.SafeEqualsLower(S.DUAL_ROLE_STRING))).FirstOrDefault(); if (rsnVM != null) { rsnVM.SelectedChemical = chemicalName; } } } var Products = ReactionParticipants.OfReactionOfType(SelectedReaction.Id, ParticipantType.Product).OfNumOrReg(selectedChemical.NUM, selectedChemical.RegNumber); if (Products != null && Products.Any()) { return(Products.FirstOrDefault()); } var otherthanProductsAndSolvents = ReactionParticipants.OfReactionAndExceptStage(SelectedReaction.Id, SelectedReaction.SelectedStage.Id) .OfNumOrReg(selectedChemical.NUM, selectedChemical.RegNumber) .OfExceptTypes(ParticipantType.Solvent, ParticipantType.Reactant, ParticipantType.Product) .GroupBy(p => p.ParticipantType) .ToDictionary(p => p.Key, p => p.ToList()); var duplicate = ValidateWithCVT1(otherthanProductsAndSolvents, Rsns, SelectedReaction, chemicalName, ParticipantType.Solvent); if (duplicate != null) { return(duplicate); } } #endregion #region Catalyst Validations if (participantType == ParticipantType.Catalyst) { var InStageCatalysts = ReactionParticipants.OfReactionAndStage(SelectedReaction.Id, SelectedReaction.SelectedStage.Id).OfNumOrReg(selectedChemical.NUM, selectedChemical.RegNumber); if (InStageCatalysts != null && InStageCatalysts.OfType(ParticipantType.Catalyst).Any()) { return(InStageCatalysts.FirstOrDefault()); } List <int> StageNumbers = new List <int>(); if (SelectedReaction.Stages.Count > 1) { StageNumbers = PressureValidations.GetStageDisplayOrdersFromFreetexts(Rsns, SelectedReaction, S.DUAL_ROLE_STRING); } else if (Rsns.Where(rsn => rsn.Reaction.Id == SelectedReaction.Id && rsn.Stage == null && rsn.CvtText.SafeEqualsLower(S.DUAL_ROLE_STRING)).Any()) { StageNumbers.Add(1); } if (InStageCatalysts != null && InStageCatalysts.OfExceptTypes(ParticipantType.Catalyst).Any()) { if (!StageNumbers.Contains(SelectedReaction.SelectedStage.DisplayOrder)) { return(InStageCatalysts.OfExceptTypes(ParticipantType.Catalyst).FirstOrDefault()); } else { var rsnVM = Rsns.Where(rsn => rsn.Reaction.Id == SelectedReaction.Id && rsn.SelectedChemical == null && (rsn.FreeText.SafeContainsLower(S.DUAL_ROLE_STRING) || rsn.CvtText.SafeEqualsLower(S.DUAL_ROLE_STRING))).FirstOrDefault(); if (rsnVM != null) { rsnVM.SelectedChemical = chemicalName; } } } var Products = ReactionParticipants.OfReactionOfType(SelectedReaction.Id, ParticipantType.Product).OfNumOrReg(selectedChemical.NUM, selectedChemical.RegNumber); if (Products != null && Products.Any()) { return(Products.FirstOrDefault()); } var otherThanCatalysts = ReactionParticipants.OfReactionAndExceptStage(SelectedReaction.Id, SelectedReaction.SelectedStage.Id) .OfNumOrReg(selectedChemical.NUM, selectedChemical.RegNumber) .OfExceptTypes(ParticipantType.Catalyst, ParticipantType.Product) .GroupBy(p => p.ParticipantType) .ToDictionary(p => p.Key, p => p.ToList()); var duplicate = ValidateWithCVT1(otherThanCatalysts, Rsns, SelectedReaction, chemicalName, ParticipantType.Catalyst); if (duplicate != null) { return(duplicate); } } #endregion #region Agent Validations if (participantType == ParticipantType.Agent) { var InStageAgents = ReactionParticipants.OfReactionAndStage(SelectedReaction.Id, SelectedReaction.SelectedStage.Id).OfNumOrReg(selectedChemical.NUM, selectedChemical.RegNumber); if (InStageAgents != null && InStageAgents.OfType(ParticipantType.Agent).Any()) { return(InStageAgents.FirstOrDefault()); } List <int> StageNumbers = new List <int>(); if (SelectedReaction.Stages.Count > 1) { StageNumbers = PressureValidations.GetStageDisplayOrdersFromFreetexts(Rsns, SelectedReaction, S.DUAL_ROLE_STRING); } else if (Rsns.Where(rsn => rsn.Reaction.Id == SelectedReaction.Id && rsn.Stage == null && rsn.CvtText.SafeEqualsLower(S.DUAL_ROLE_STRING)).Any()) { StageNumbers.Add(1); } if (InStageAgents != null && InStageAgents.OfExceptTypes(ParticipantType.Agent).Any()) { if (!StageNumbers.Contains(SelectedReaction.SelectedStage.DisplayOrder)) { return(InStageAgents.OfExceptTypes(ParticipantType.Agent).FirstOrDefault()); } else { var rsnVM = Rsns.Where(rsn => rsn.Reaction.Id == SelectedReaction.Id && rsn.SelectedChemical == null && (rsn.FreeText.SafeContainsLower(S.DUAL_ROLE_STRING) || rsn.CvtText.SafeEqualsLower(S.DUAL_ROLE_STRING))).FirstOrDefault(); if (rsnVM != null) { rsnVM.SelectedChemical = chemicalName; } } } var Products = ReactionParticipants.OfReactionOfType(SelectedReaction.Id, ParticipantType.Product).OfNumOrReg(selectedChemical.NUM, selectedChemical.RegNumber); if (Products != null && Products.Any()) { return(Products.FirstOrDefault()); } var otherStageAgents = ReactionParticipants.OfReactionAndExceptStage(SelectedReaction.Id, SelectedReaction.SelectedStage.Id) .OfNumOrReg(selectedChemical.NUM, selectedChemical.RegNumber) .OfExceptTypes(ParticipantType.Agent, ParticipantType.Product) .GroupBy(p => p.ParticipantType) .ToDictionary(p => p.Key, p => p.ToList()); var duplicate = ValidateWithCVT1(otherStageAgents, Rsns, SelectedReaction, chemicalName, ParticipantType.Agent); if (duplicate != null) { return(duplicate); } } #endregion } else { return(null); } } return(null); } catch (Exception ex) { Log.This(ex); return(null); } }
public static List <ReactionParticipantVM> ParticipantOfNUMOrReg(this List <ReactionParticipantVM> participants, TanChemical tanChemical, ReactionVM reaction) { if (participants == null) { return(null); } return(participants.Where(p => (p.Num == tanChemical.NUM || p.Reg == tanChemical.RegNumber) && p.ReactionVM.Id == reaction.Id && p.StageVM != null && reaction.SelectedStage != null && p.StageVM.Id == reaction.SelectedStage.Id ).ToList()); }
public void AddParticipant(object participant) { try { var StartTime = DateTime.Now; Debug.WriteLine($"Add Participant Started at {StartTime.DMYHMT()}"); var mainViewModel = (App.Current.MainWindow as MainWindow).DataContext as MainVM; if (SelectedTanChemicalVM != null && mainViewModel.TanVM != null && mainViewModel.IsParticipatTypeSelected) { if (S.AllowedDuplicateChemicals.Where(c => SelectedTanChemicalVM.SearchName.Contains(c)).Count() > 0) { var ListOfNames = SelectedTanChemicalVM.SearchName.Split(new string[] { "; " }, StringSplitOptions.RemoveEmptyEntries); DuplicateNamesList dnList = new Views.DuplicateNamesList(); (dnList.DataContext as DuplicateNamesVM).DuplicateNamesView = new ObservableCollection <Names>(ListOfNames.Select(s => new Names { Name = s })); dnList.ShowDialog(); if ((dnList.DataContext as DuplicateNamesVM).DialogStatus) { SelectedTanChemicalVM.Name = (dnList.DataContext as DuplicateNamesVM).SelectedName.Name; } else { return; } } if (SelectedTanChemicalVM.RegNumber == "5137553") { AppInfoBox.ShowInfoMessage("You can't add Aliquat 336. If still you want please Add RSN as 'Aliquat 336 Used'"); return; } if (SelectedTanChemicalVM.RegNumber == "69849452") { AppInfoBox.ShowInfoMessage("Davis reagent (REGNUM: 69849452) cannot be used in RSD, please capture in RSN"); return; } //this is required only for 8500 series. All other series will have Num values. if (SelectedTanChemicalVM != null && SelectedTanChemicalVM.NUM == 0) { var numChemical = TanChemicalVMList.Where(cn => cn.ChemicalType == ChemicalType.NUM && cn.RegNumber == SelectedTanChemicalVM.RegNumber).FirstOrDefault(); if (numChemical != null) { StringBuilder sb = new StringBuilder(); sb.Append($"Selected chemical already Present in NUMS section with num {numChemical.NUM}"); AppInfoBox.ShowInfoMessage(sb.ToString()); return; } SelectedTanChemicalVM.Id = Guid.NewGuid(); var maxNum = TanChemicalVMList. Where(rp => rp.ChemicalType == ChemicalType.S8500). Select(rp => rp.NUM). Max(); if (maxNum > 0) { SelectedTanChemicalVM.NUM = maxNum + 1; } else { SelectedTanChemicalVM.NUM = 8501; } TanChemical tanchemical = (from p in mainViewModel.TanVM.TanChemicals where p.RegNumber == SelectedTanChemicalVM.RegNumber select p).FirstOrDefault(); if (tanchemical == null) { TanChemicalsCrud.AddTanChemicalToList(mainViewModel.TanVM.TanChemicals, SelectedTanChemicalVM, mainViewModel.TanVM.Id); } if (!AddAsParticipant) { mainViewModel.TanVM.PerformAutoSave("8500 Chemical Added"); } } var chemical = TanChemicalVMList.Where(cn => cn.ChemicalType == ChemicalType.NUM && cn.RegNumber == SelectedTanChemicalVM.RegNumber && SelectedTanChemicalVM.ChemicalType != ChemicalType.NUM).FirstOrDefault(); if (chemical != null) { SelectedTanChemicalVM = chemical; } if (SelectedTanChemicalVM.RegNumber == "30525894" && SelectedTanChemicalVM.ChemicalType == ChemicalType.NUM) { SelectedTanChemicalVM = TanChemicalVMList.Where(cn => cn.ChemicalType == ChemicalType.S9000 && cn.RegNumber == "50000").FirstOrDefault(); SelectedTanChemicalVM.Name = S.PARA_FORM; } Debug.WriteLine($"Before adding Participant to Json {System.DateTime.Now}"); if (SelectedTanChemicalVM != null && AddAsParticipant) { (App.Current.MainWindow as MainWindow).ChemicalNameAdded(SelectedTanChemicalVM); } ReactionValidations.AddJonesReAgentRSN(mainViewModel.TanVM); Debug.WriteLine($"After adding Participant to Json {System.DateTime.Now}"); Debug.WriteLine($"Add Participant Done in {(DateTime.Now - StartTime).TotalSeconds} seconds"); } } catch (Exception ex) { Log.This(ex); } }
public static Tuple <TanChemicalVM, ObservableCollection <ImagesVM> > GetTanChemicalVMFromTanchemical(TanChemical num) { var chemical = new TanChemicalVM(); var images = new ObservableCollection <ImagesVM>(); Tuple <TanChemicalVM, ObservableCollection <ImagesVM> > returnObjet; try { chemical.ChemicalType = num.ChemicalType; chemical.MolString = num.MolString; chemical.RegNumber = num.RegNumber; chemical.ImagePath = num.ChemicalType == ChemicalType.NUM ? num.FirstImagePath : num.ImagePath; chemical.AllImagePaths = num.Substancepaths.Select(s => s.ImagePath).Distinct().ToList(); if (chemical.AllImagePaths == null || chemical.AllImagePaths.Count() == 0) { images.Add(new ImagesVM { ChemicalType = num.ChemicalType, ImagePath = null, MolString = num.MolString, RegNumber = num.RegNumber }); } else { foreach (var path in chemical.AllImagePaths) { images.Add(new ImagesVM { ChemicalType = num.ChemicalType, ImagePath = path, MolString = num.MolString, RegNumber = num.RegNumber }); } } } catch (Exception ex) { Log.This(ex); } returnObjet = new Tuple <TanChemicalVM, ObservableCollection <ImagesVM> >(chemical, images); return(returnObjet); }