private static string GetCommaDelimitedListValue(string consumerClass, AgencyObject obj, Func <AgencyRateStructure, AgencyList> fnGetList, string key, string dependsOn = null)
        {
            AgencyRateStructure rateStructure = GetRateStructure(obj, consumerClass);

            return(rateStructure != null
                ? string.Join(", ", GetValueList(fnGetList(rateStructure), key, dependsOn))
                : null);
        }
        private static string GetFirstListValue(string consumerClass, AgencyObject obj, Func <AgencyRateStructure, AgencyList> fnGetList, string key, string dependsOn = null)
        {
            AgencyRateStructure rateStructure = GetRateStructure(obj, consumerClass);

            return(rateStructure != null
                ? GetValueList(fnGetList(rateStructure), key, dependsOn).FirstOrDefault()
                : null);
        }
        static void Main(string[] args)
        {
            string       outputPath   = Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\'))), "Agencies.xlsx");
            const string allFilesPath = @"C:\Code\Open-Water-Rate-Specification\full_utility_rates\California";

            List <string> fileNames = Directory.GetDirectories(allFilesPath).Select(x => Directory.GetFiles(x).FirstOrDefault()).Where(x => x != null).ToList();

            List <AgencyObject> objects = new List <AgencyObject>();

            foreach (var fileName in fileNames)
            {
                AgencyObject agencyObject = new AgencyObject();
                objects.Add(agencyObject);
                using (StringReader reader = new StringReader(File.ReadAllText(fileName)))
                {
                    var deserializer = new DeserializerBuilder().Build();
                    var yamlObject   = deserializer.Deserialize(reader);

                    var serializer = new SerializerBuilder().JsonCompatible().Build();
                    var json       = serializer.Serialize(yamlObject);

                    JObject jItems = JObject.Parse(json);
                    foreach (KeyValuePair <string, JToken> jItem in jItems)
                    {
                        if (jItem.Key.Equals("metadata", StringComparison.InvariantCultureIgnoreCase))
                        {
                            agencyObject.Metadata = ParseMetadata(jItem.Value);
                        }
                        else if (jItem.Key.Equals("rate_structure", StringComparison.InvariantCultureIgnoreCase))
                        {
                            agencyObject.RateStructures = ParseRateStructure(jItem.Value);
                        }
                        else if (jItem.Key.Equals("capacity_charge", StringComparison.InvariantCultureIgnoreCase))
                        {
                            agencyObject.CapacityCharge = ParseAgencyList(jItem.Value);
                        }
                        else
                        {
                        }
                    }
                }
            }
            ExportToExcelFile(outputPath, objects);
        }
 private static AgencyRateStructure GetRateStructure(AgencyObject obj, string consumerClass)
 {
     return(obj != null?obj.RateStructures.FirstOrDefault(x => x.ConsumerClass == consumerClass) : null);
 }