using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.BL.Entities; using Tango.BL.Enumerations; namespace Tango.BL.Dispensing { /// /// Represents a transparent liquid (Diluter) IDS pack dispensing calculator. /// /// [DispensingCalc(IdsPackFormulas.TransparentLiquid)] public class TransparentLiquidDispensingCalc : DispensingCalcBase { /// /// Calculates the required nanoliter per centimeter. /// /// The liquid volume. /// public override double CalculateNanoliterPerCentimeter(LiquidVolume liquidVolume) { if (liquidVolume.Configuration != null && liquidVolume.RML != null && liquidVolume.ProcessParametersTable != null) { double nlPcmSum = liquidVolume.BrushStop.LiquidVolumes.Where(x => (IdsPackFormulas)x.IdsPack.IdsPackFormula.Code == IdsPackFormulas.StandardColor).Sum(x => x.NanoliterPerCentimeter); double minInkUptake = liquidVolume.ProcessParametersTable.MinInkUptake; double virtual_volume = Math.Max(0, minInkUptake - nlPcmSum); return virtual_volume; //(liquidVolume.Volume / 100d) * (Math.Min(liquidVolume.LiquidMaxNanoliterPerCentimeter, liquidVolume.ProcessParametersTable.MinInkUptake)); } else { return 0d; } } /// /// Coerces the specified liquid volume. /// /// The liquid volume. /// public override double CoerceVolume(LiquidVolume liquidVolume) { if (liquidVolume.ProcessParametersTable != null) { //double nlPcmSum = liquidVolume.BrushStop.LiquidVolumes.Where(x => (IdsPackFormulas)x.IdsPack.IdsPackFormula.Code == IdsPackFormulas.StandardColor).Sum(x => x.NanoliterPerCentimeter); //double minInkUptake = liquidVolume.ProcessParametersTable.MinInkUptake; //double volume = ((liquidVolume.LiquidMaxNanoliterPerCentimeter - nlPcmSum) / liquidVolume.LiquidMaxNanoliterPerCentimeter) * 100d; return Math.Max(100d - liquidVolume.BrushStop.LiquidVolumes.Where(x => (IdsPackFormulas)x.IdsPack.IdsPackFormula.Code == IdsPackFormulas.StandardColor).Sum(x => x.Volume), 0); } else { return liquidVolume.Volume; } } } }