public void Calculate() { Protein value = _proteinService.Get(SelectedProject); if (value == null) { return; } Protein protein = value.DeepClone(); if (PreferredDeadlineChecked) { protein.PreferredDays = PreferredDeadline; } if (FinalDeadlineChecked) { protein.MaximumDays = FinalDeadline; } if (KFactorChecked) { protein.KFactor = KFactor; } TimeSpan frameTime = TimeSpan.FromMinutes(TpfMinutes).Add(TimeSpan.FromSeconds(TpfSeconds)); TimeSpan totalTimeByFrame = TimeSpan.FromSeconds(frameTime.TotalSeconds * protein.Frames); TimeSpan totalTimeByUser = totalTimeByFrame; if (TotalWuTimeEnabled) { totalTimeByUser = TimeSpan.FromMinutes(TotalWuTimeMinutes).Add(TimeSpan.FromSeconds(TotalWuTimeSeconds)); // user time is less than total time by frame, not permitted if (totalTimeByUser < totalTimeByFrame) { totalTimeByUser = totalTimeByFrame; } } var decimalPlaces = _prefs.Get <int>(Preference.DecimalPlaces); var values = ProductionCalculator.GetProductionValues(frameTime, protein, totalTimeByUser, totalTimeByFrame); CoreName = protein.Core; SlotType = protein.Core.ToSlotType().ToString(); NumberOfAtoms = protein.NumberOfAtoms; CompletionTime = Math.Round((TotalWuTimeEnabled ? totalTimeByUser.TotalDays : totalTimeByFrame.TotalDays), decimalPlaces); PreferredDeadline = protein.PreferredDays; FinalDeadline = protein.MaximumDays; KFactor = protein.KFactor; BonusMultiplier = Math.Round((TotalWuTimeEnabled ? values.DownloadTimeBonusMulti : values.FrameTimeBonusMulti), decimalPlaces); BaseCredit = values.BaseCredit; TotalCredit = Math.Round((TotalWuTimeEnabled ? values.DownloadTimeBonusCredit : values.FrameTimeBonusCredit), decimalPlaces); BasePpd = values.BasePPD; TotalPpd = Math.Round((TotalWuTimeEnabled ? values.DownloadTimeBonusPPD : values.FrameTimeBonusPPD), decimalPlaces); }