private static IEnumerable<ModuleStatusItem> ExecGetDetailsByArea(Period period, string areaName, string sproc,
     Func<IDataReader, List<ModuleStatusItem>> loadFunc)
 {
     using (var connection = DBHelper.DefaultConnection)
     {
         return connection.CreateCommand()
                          .ForProcedure(sproc, p => p.WithParam("@Period", period.Text, size: 100, unicode: false)
                                                     .WithParam("@PeriodYear", period.Year)
                                                     .WithParam("@AreaName", areaName, size: 100, unicode: false))
                          .ExecuteReader(loadFunc);
     }
 }
 public IEnumerable<ModuleStatusItem> GetDetailsByArea(Period period, ReportingScope currentScope, string areaName)
 {
     switch (currentScope)
     {
         case ReportingScope.Company:
             return ExecGetDetailsByArea(period, areaName, @"ReportingGetDetailsByAreaCompany", LoadGetDetailsByAreaDefault);
         case ReportingScope.Region:
             return ExecGetDetailsByArea(period, areaName, @"ReportingGetDetailsByAreaRegion", LoadGetDetailsByAreaDefault);
         case ReportingScope.Zone:
             return ExecGetDetailsByArea(period, areaName, @"ReportingGetDetailsByAreaZone", LoadGetDetailsByAreaDefault);
         case ReportingScope.District:
             return ExecGetDetailsByArea(period, areaName, @"ReportingGetDetailsByAreaDistrict", LoadGetDetailsByAreaDistrict);
         default:
             throw new NotImplementedException("This method has not yet been implemented for the passed currentScope.");
     }
 }