private void OnCommencing(object sender, EventArgs e) { dataToWriteToDb = null; // sanitise the variable names and remove duplicates List <string> variableNames = new List <string>(); variableNames.Add("Parent.Name as Zone"); variableNames.Add("[Clock].Today"); if (VariableNames != null && VariableNames.Count() > 0) { if (VariableNames.Count() > 1) { Summary.WriteWarning(this, String.Format("Multiple resource groups not permitted in ReportResourceLedger [{0}]\nAdditional entries have been ignored", this.Name)); } for (int i = 0; i < 1; i++) { // each variable name is now a ResourceGroup bool isDuplicate = StringUtilities.IndexOfCaseInsensitive(variableNames, this.VariableNames[i].Trim()) != -1; if (!isDuplicate && this.VariableNames[i] != string.Empty) { // check it is a ResourceGroup CLEMModel model = Resources.GetResourceGroupByName(this.VariableNames[i]) as CLEMModel; if (model == null) { Summary.WriteWarning(this, String.Format("Invalid resource group [{0}] in ReportResourceBalances [{1}]\nEntry has been ignored", this.VariableNames[i], this.Name)); } else { if (model.GetType() == typeof(Ruminant)) { variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.ID as uID"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.Breed as Breed"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.HerdName as Herd"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.GenderAsString as Sex"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.Age as Age"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.Weight as Weight"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.SaleFlagAsString as Reason"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.PopulationChangeDirection as Change"); } else { variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.Gain as Gain"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.Loss * -1.0 as Loss"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ResourceType as Resource"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.Activity as Activity"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ActivityType as ActivityType"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.Reason as Reason"); } } } } events.Subscribe("[Resources]." + this.VariableNames[0] + ".TransactionOccurred", DoOutputEvent); } base.VariableNames = variableNames.ToArray(); this.FindVariableMembers(); }
public bool Validate(string value, out string errorMessage, int columnIndex) { if (columnIndex < 0 || columnIndex > VariableNames.Count()) { throw new ArgumentOutOfRangeException("column index is out of range"); } bool valid = false; errorMessage = string.Empty; if (VariableHasType <double>(columnIndex)) { if (string.IsNullOrWhiteSpace(value)) { valid = true; } else { double val; valid = double.TryParse(value, out val); if (!valid) { errorMessage = "Invalid Value (Valid Value Format: \"" + FormatPatterns.GetDoubleFormatPattern() + "\")"; } } } else if (VariableHasType <string>(columnIndex)) { valid = value != null; if (!valid) { errorMessage = "Invalid Value (string must not be null)"; } } else if (VariableHasType <DateTime>(columnIndex)) { DateTime date; valid = DateTime.TryParse(value, out date); if (!valid) { errorMessage = "Invalid Value (Valid Value Format: \"" + CultureInfo.CurrentCulture.DateTimeFormat + "\""; } } else { throw new ArgumentException("column " + columnIndex + " contains a non supported type."); } return(valid); }
private void OnCommencing(object sender, EventArgs e) { dataToWriteToDb = null; // sanitise the variable names and remove duplicates List <string> variableNames = new List <string> { "[Clock].Today" }; if (VariableNames != null && VariableNames.Count() > 0) { if (VariableNames.Count() > 1) { Summary.WriteWarning(this, String.Format("Multiple resource groups not permitted in ReportResourceLedger [{0}]\nAdditional entries have been ignored", this.Name)); } for (int i = 0; i < 1; i++) { // each variable name is now a ResourceGroup bool isDuplicate = StringUtilities.IndexOfCaseInsensitive(variableNames, this.VariableNames[i].Trim()) != -1; if (!isDuplicate && this.VariableNames[i] != string.Empty) { // check it is a ResourceGroup CLEMModel model = Resources.GetResourceGroupByName(this.VariableNames[i]) as CLEMModel; if (model == null) { Summary.WriteWarning(this, String.Format("Invalid resource group [{0}] in ReportResourceBalances [{1}]\nEntry has been ignored", this.VariableNames[i], this.Name)); } else { bool pricingIncluded = false; if (model.GetType() == typeof(RuminantHerd)) { pricingIncluded = Apsim.ChildrenRecursively(model, typeof(AnimalPricing)).Count() > 0; variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.ID as uID"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.Breed as Breed"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.HerdName as Herd"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.GenderAsString as Sex"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.Age as Age"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.Weight as Weight"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.SaleFlagAsString as Reason"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.PopulationChangeDirection as Change"); // ToDo: add pricing for ruminants including buy and sell pricing // Needs update in CLEMResourceTypeBase and link between ResourcePricing and AnimalPricing. } else { pricingIncluded = Apsim.ChildrenRecursively(model, typeof(ResourcePricing)).Count() > 0; variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.Gain as Gain"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.Loss * -1.0 as Loss"); // get all converters for this type of resource var converterList = Apsim.ChildrenRecursively(model, typeof(ResourceUnitsConverter)).Select(a => a.Name).Distinct(); if (converterList != null) { foreach (var item in converterList) { variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ConvertTo(" + item + ",\"gain\") as " + item + "_Gain"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ConvertTo(" + item + ",\"loss\") as " + item + "_Loss"); } } // add pricing if (pricingIncluded) { variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ConvertTo(\"$\",\"gain\") as Price_Gain"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ConvertTo(\"$\",\"loss\") as Price_Loss"); } variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ResourceType.Name as Resource"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.Activity.Name as Activity"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.Reason as Reason"); } } } } events.Subscribe("[Resources]." + this.VariableNames[0] + ".TransactionOccurred", DoOutputEvent); } // Tidy up variable/event names. VariableNames = variableNames.ToArray(); VariableNames = TidyUpVariableNames(); EventNames = TidyUpEventNames(); this.FindVariableMembers(); }
public int k() { return(VariableNames.Count()); }
private void OnCommencing(object sender, EventArgs e) { int lossModifier = 1; if (ReportLossesAsNegative) { lossModifier = -1; } // check if running from a CLEM.Market bool market = (FindAncestor <Zone>().GetType() == typeof(Market)); dataToWriteToDb = null; // sanitise the variable names and remove duplicates List <string> variableNames = new List <string> { "[Clock].Today as Date" }; if (VariableNames != null && VariableNames.Count() > 0) { if (VariableNames.Count() > 1) { Summary.WriteWarning(this, String.Format("Multiple resource groups not permitted in ReportResourceLedger [{0}]\r\nAdditional entries have been ignored", this.Name)); } for (int i = 0; i < 1; i++) { // each variable name is now a ResourceGroup bool isDuplicate = StringUtilities.IndexOfCaseInsensitive(variableNames, this.VariableNames[i].Trim()) != -1; if (!isDuplicate && this.VariableNames[i] != string.Empty) { // check it is a ResourceGroup CLEMModel model = Resources.GetResourceGroupByName(this.VariableNames[i]) as CLEMModel; if (model == null) { Summary.WriteWarning(this, String.Format("Invalid resource group [{0}] in ReportResourceBalances [{1}]\r\nEntry has been ignored", this.VariableNames[i], this.Name)); } else { bool pricingIncluded = false; if (model.GetType() == typeof(RuminantHerd)) { pricingIncluded = model.FindAllDescendants <AnimalPricing>().Where(a => a.Enabled).Count() > 0; variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.ID as uID"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.Breed as Breed"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.Gender as Sex"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.Age as Age"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.Weight as Weight"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.AdultEquivalent as AE"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.SaleFlag as Category"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.HerdName as RelatesTo"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ExtraInformation.PopulationChangeDirection as Change"); // ToDo: add pricing for ruminants including buy and sell pricing // Needs update in CLEMResourceTypeBase and link between ResourcePricing and AnimalPricing. } else { pricingIncluded = model.FindAllDescendants <ResourcePricing>().Where(a => a.Enabled).Count() > 0; if (ReportStyle == ReportTransactionStyle.GainAndLossColumns) { variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.Gain as Gain"); variableNames.Add("[Resources]." + this.VariableNames[i] + $".LastTransaction.Loss * {lossModifier} as Loss"); } else { variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.TransactionType as Type"); variableNames.Add("[Resources]." + this.VariableNames[i] + $".LastTransaction.AmountModifiedForLoss({ReportLossesAsNegative}) as Amount"); } // get all converters for this type of resource if (IncludeConversions) { var converterList = model.FindAllDescendants <ResourceUnitsConverter>().Select(a => a.Name).Distinct(); if (converterList != null) { foreach (var item in converterList) { if (ReportStyle == ReportTransactionStyle.GainAndLossColumns) { variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ConvertTo(" + item + $",\"gain\",{ReportLossesAsNegative}) as " + item + "_Gain"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ConvertTo(" + item + $",\"loss\",{ReportLossesAsNegative}) as " + item + "_Loss"); } else { variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ConvertTo(" + item + $"\", {ReportLossesAsNegative}) as " + item + "_Amount"); } } } } // add pricing if (IncludePrice && pricingIncluded) { if (ReportStyle == ReportTransactionStyle.GainAndLossColumns) { variableNames.Add("[Resources]." + this.VariableNames[i] + $".LastTransaction.ConvertTo(\"$gain\",\"gain\", {ReportLossesAsNegative}) as Price_Gain"); variableNames.Add("[Resources]." + this.VariableNames[i] + $".LastTransaction.ConvertTo(\"$loss\",\"loss\", {ReportLossesAsNegative}) as Price_Loss"); } else { variableNames.Add("[Resources]." + this.VariableNames[i] + $".LastTransaction.ConvertTo(\"$gain\", {ReportLossesAsNegative}) as Price_Amount"); } } variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.ResourceType.Name as Resource"); // if this is a multi CLEM model simulation then add a new column with the parent Zone name if (FindAncestor <Simulation>().FindChild <Market>() != null) { variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.Activity.CLEMParentName as Source"); } variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.Activity.Name as Activity"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.RelatesToResource as RelatesTo"); variableNames.Add("[Resources]." + this.VariableNames[i] + ".LastTransaction.Category as Category"); } } } } events.Subscribe("[Resources]." + this.VariableNames[0] + ".TransactionOccurred", DoOutputEvent); } // Tidy up variable/event names. base.VariableNames = variableNames.ToArray(); VariableNames = variableNames.ToArray(); base.VariableNames = TidyUpVariableNames(); VariableNames = base.VariableNames; base.EventNames = TidyUpEventNames(); EventNames = base.EventNames; this.FindVariableMembers(); }