public List <LevyRollDataItem> LoadReportData(DateTime processMonth, string dataPath, List <string> customers, out int period)
        {
            string customerCodeFilter = "";

            if (customers != null && customers.Count > 0)
            {
                for (int x = 0; x < customers.Count; x++)
                {
                    if (x == 0)
                    {
                        customerCodeFilter = "  m.CustomerCode in ('" + customers[x] + "'";
                    }
                    else
                    {
                        customerCodeFilter = customerCodeFilter + ",'" + customers[x] + "'";
                    }
                }
                customerCodeFilter = customerCodeFilter + ")";
            }

            List <LevyRollDataItem> data;
            var    dDate           = new DateTime(processMonth.Year, processMonth.Month, 1);
            string sqlPeriodConfig = PervasiveSqlUtilities.ReadResourceScript("Astrodon.Reports.Scripts.PeriodParameters.sql");

            sqlPeriodConfig = SetDataSource(sqlPeriodConfig, dataPath);
            var            periodData = PervasiveSqlUtilities.FetchPervasiveData(sqlPeriodConfig);
            PeriodDataItem periodItem = null;

            foreach (DataRow row in periodData.Rows)
            {
                periodItem = new PeriodDataItem(row);
                break;
            }
            period = 0;
            try
            {
                period = periodItem.PeriodNumberLookup(dDate);
            }
            catch (Exception err)
            {
                throw err;
            }


            //run the main report query
            string sqlQuery = PervasiveSqlUtilities.ReadResourceScript("Astrodon.Reports.Scripts.LevyRollAllCustomers.sql");

            sqlQuery = SetDataSource(sqlQuery, dataPath);
            if (!string.IsNullOrWhiteSpace(customerCodeFilter))
            {
                sqlQuery = sqlQuery.Replace(" %CUSTOMERCODEFILTER%", " WHERE " + customerCodeFilter);
            }
            else
            {
                sqlQuery = sqlQuery.Replace(" %CUSTOMERCODEFILTER%", "");
            }


            var allMasterAccounts = PervasiveSqlUtilities.FetchPervasiveData(sqlQuery);

            sqlQuery = PervasiveSqlUtilities.ReadResourceScript("Astrodon.Reports.Scripts.LevyRoll.sql");
            sqlQuery = SetDataSource(sqlQuery, dataPath);

            if (!string.IsNullOrWhiteSpace(customerCodeFilter))
            {
                sqlQuery = sqlQuery.Replace(" %CUSTOMERCODEFILTER%", " AND " + customerCodeFilter);
            }
            else
            {
                sqlQuery = sqlQuery.Replace(" %CUSTOMERCODEFILTER%", "");
            }


            var reportDB = PervasiveSqlUtilities.FetchPervasiveData(sqlQuery, new OdbcParameter("@PPeriod", period));

            data = new List <LevyRollDataItem>();
            foreach (DataRow row in reportDB.Rows)
            {
                data.Add(new LevyRollDataItem(row, period));
            }

            foreach (DataRow row in allMasterAccounts.Rows)
            {
                var rowItem         = new LevyRollDataItem(row, period);
                var currentCustomer = data.Where(a => a.CustomerCode == rowItem.CustomerCode).FirstOrDefault();
                if (currentCustomer == null)
                {
                    data.Add(rowItem);
                }
            }

            return(data);
        }