Skip to content

Instantly share code, notes, and snippets.

@djcp
Created May 20, 2014 13:34
Show Gist options
  • Save djcp/7988cfe8b37924d53bd7 to your computer and use it in GitHub Desktop.
Save djcp/7988cfe8b37924d53bd7 to your computer and use it in GitHub Desktop.
angular magic.
diff --git a/app/assets/javascripts/qdw/controllers/home_page_controller.js.coffee b/app/assets/javascripts/qdw/controllers/home_page_controller.js.coffee
index ed7acde..24c8ee3 100644
--- a/app/assets/javascripts/qdw/controllers/home_page_controller.js.coffee
+++ b/app/assets/javascripts/qdw/controllers/home_page_controller.js.coffee
@@ -1,2 +1,3 @@
-qdw.controller 'HomePageCtrl', ($scope, PageConfiguration) ->
+qdw.controller 'HomePageCtrl', ($scope, PageConfiguration, DateFilters) ->
$scope.layout = PageConfiguration.current()
+ DateFilters.hideDateFilters = true
diff --git a/app/assets/javascripts/qdw/controllers/initiatives_page_controller.js.coffee b/app/assets/javascripts/qdw/controllers/initiatives_page_controller.js.coffee
index 5e758c1..c622242 100644
--- a/app/assets/javascripts/qdw/controllers/initiatives_page_controller.js.coffee
+++ b/app/assets/javascripts/qdw/controllers/initiatives_page_controller.js.coffee
@@ -1,5 +1,12 @@
-qdw.controller 'InitiativesPageCtrl', ($scope, $routeParams, PageConfiguration, Initiative) ->
+qdw.controller 'InitiativesPageCtrl', (
+ $scope,
+ $routeParams,
+ PageConfiguration,
+ Initiative,
+ DateFilters,
+) ->
$scope.layout = PageConfiguration.current()
+ DateFilters.hideDateFilters = true
Initiative.get(id: $routeParams.id).then (initiative) ->
$scope.initiative = initiative
diff --git a/app/assets/javascripts/qdw/controllers/sections/entity_comparisons_controller.js.coffee b/app/assets/javascripts/qdw/controllers/sections/entity_comparisons_controller.js.coffee
index 00d6e32..c6d250f 100644
--- a/app/assets/javascripts/qdw/controllers/sections/entity_comparisons_controller.js.coffee
+++ b/app/assets/javascripts/qdw/controllers/sections/entity_comparisons_controller.js.coffee
@@ -4,30 +4,40 @@ qdw.controller 'EntityComparisonsCtrl', (
EntityGroupings,
EntityComparisons,
Flash,
+ DateFilters,
) ->
$scope.populated = false
$scope.$on 'filtersChanged', (event) ->
$scope.populated = false
- _getEntityComparisons($scope.selectedGrouping, $scope.edType)
+ DateFilters.setCachedDates(DateFilters.startDate, DateFilters.endDate)
+ _getEntityComparisons()
$scope.$on 'edTypeChanged', (event, edType) ->
$scope.edType = edType
$scope.populated = false
- _getEntityComparisons($scope.selectedGrouping, $scope.edType)
+ _getEntityComparisons()
$scope.$watch 'selectedGrouping', (newVal, oldVal) ->
return unless newVal
$scope.populated = false
- _getEntityComparisons($scope.selectedGrouping, $scope.edType)
+ _getEntityComparisons()
EntityGroupings.query().then (groupings) ->
$scope.entityGroupings = groupings
$scope.selectedGrouping = groupings[0].name
- _getEntityComparisons = (grouping, edType) =>
- EntityComparisons.get(grouping: grouping, edType: edType).then (comparisons) ->
+ _getEntityComparisons = =>
+ DateFilters.setDateType('Encounter')
+ dates = DateFilters.getResolvedDates()
+ params =
+ grouping: $scope.selectedGrouping,
+ edType: $scope.edType,
+ startDate: dates.startDate,
+ endDate: dates.endDate
+
+ EntityComparisons.get(params).then (comparisons) ->
$scope.entityComparisons = comparisons
if _.isEmpty($scope.entityComparisons.data)
Flash.set 'error', 'No comparison results were found.'
diff --git a/app/assets/javascripts/qdw/controllers/sections/payer_mix_controller.js.coffee b/app/assets/javascripts/qdw/controllers/sections/payer_mix_controller.js.coffee
index bce8d47..4a8f13d 100644
--- a/app/assets/javascripts/qdw/controllers/sections/payer_mix_controller.js.coffee
+++ b/app/assets/javascripts/qdw/controllers/sections/payer_mix_controller.js.coffee
@@ -1,10 +1,21 @@
-qdw.controller 'PayerMixCtrl', ($scope, PayerMix, NormalizeStackedBarData) ->
+qdw.controller 'PayerMixCtrl', (
+ $scope,
+ PayerMix,
+ NormalizeStackedBarData,
+ DateFilters,
+) ->
$scope.populated = false
$scope.yAxisTickOverride = (yAxisValues) -> ''
$scope.toolTipContent = (key, x, y, event) -> "#{key}: #{event.value} #{x}"
_refreshPayerMix = ->
- params = { edType: $scope.edType }
+ DateFilters.setDateType('Encounter')
+ dates = DateFilters.getResolvedDates()
+ params =
+ edType: $scope.edType,
+ startDate: dates.startDate,
+ endDate: dates.endDate
+
PayerMix.query(params).then (payerMix) ->
$scope.data = NormalizeStackedBarData.normalize(payerMix)
$scope.populated = true
@@ -16,6 +27,7 @@ qdw.controller 'PayerMixCtrl', ($scope, PayerMix, NormalizeStackedBarData) ->
$scope.$on 'filtersChanged', (event) ->
$scope.populated = false
+ DateFilters.setCachedDates(DateFilters.startDate, DateFilters.endDate)
_refreshPayerMix()
_refreshPayerMix()
diff --git a/app/assets/javascripts/qdw/controllers/sections/reports_controller.js.coffee b/app/assets/javascripts/qdw/controllers/sections/reports_controller.js.coffee
index ff7dff9..2eaada9 100644
--- a/app/assets/javascripts/qdw/controllers/sections/reports_controller.js.coffee
+++ b/app/assets/javascripts/qdw/controllers/sections/reports_controller.js.coffee
@@ -10,6 +10,7 @@ qdw.controller 'ReportsCtrl', (
filterState,
DateFormatter,
ColumnFilter,
+ DateFilters,
) ->
$scope.populated = false
@@ -43,6 +44,17 @@ qdw.controller 'ReportsCtrl', (
totalServerItems: 'totalServerItems'
useExternalSorting: true
+ initializeDateSelections = (dateType) ->
+ if $scope.viewingFavorite && dateType != 'None'
+ DateFilters.setDateType('Favorite')
+ dates = DateFilters.getResolvedDates()
+ DateFilters.setCachedDates(dates.startDate, dates.endDate)
+ else
+ DateFilters.setDateType(dateType)
+ DateFilters.hideDateFilters = (dateType == 'None')
+ dates = DateFilters.getResolvedDates()
+ DateFilters.setCachedDates(dates.startDate, dates.endDate)
+
$scope.applyColumnarFilters = (columns) ->
return unless $scope.reportData
$scope.columnarFilters =
@@ -74,7 +86,9 @@ qdw.controller 'ReportsCtrl', (
}
columnFilters: $scope.columnarFilters
hiddenColumns: $scope.hiddenColumnNames
- favoriteConfig = favorite: angular.extend(favoriteMetadata, filterState.selected)
+ favoriteConfig = favorite: angular.extend(
+ favoriteMetadata, filterState.selected, DateFilters.getResolvedDates()
+ )
createdFlash = -> Flash.set('success', 'Successfully added to favorites!')
errorFlash = -> Flash.set('error', 'Favorite was not saved, please try again.')
new Favorites(favoriteConfig).save().then createdFlash, errorFlash
@@ -96,13 +110,17 @@ qdw.controller 'ReportsCtrl', (
if inMeasureDetailReport()
Measures.get(id: reportParams.measure_id).then (measure) ->
$scope.reportName = measure.name
+ DateFilters.hideDateFilters = true
else
- Report.getNameForID(reportParams.id).then (reportName) ->
- $scope.reportName = reportName
+ Report.getMetadataForID(reportParams.id).then (report) ->
+ $scope.reportName = report.name
+ initializeDateSelections(report.date_type)
loadReportData = ->
+ aggregrateFilters = _.extend(filterState.selected, DateFilters.getResolvedDates())
params = _.extend(
reportParams,
+ filters: aggregrateFilters,
columnarFilters: $scope.columnarFilters,
$scope.sortOptions,
$scope.pagingOptions
@@ -165,8 +183,7 @@ qdw.controller 'ReportsCtrl', (
if favorite.measureId then measureId = { measure_id: favorite.measureId }
filters = _.pick favorite, 'ageRanges', 'chronicConditions',
'encounterInPeriod', 'facilities', 'providers', 'payers', 'genders',
- 'languages', 'races', 'ethnicities', 'endDate', 'startDate', 'period',
- 'periodType'
+ 'languages', 'races', 'ethnicities', 'period', 'periodType'
filterState.apply(filters)
$scope.$watch 'pagingOptions', ((newVal, oldVal) ->
@@ -207,14 +224,19 @@ qdw.controller 'ReportsCtrl', (
$scope.$on 'filtersChanged', ->
$scope.populated = false
+ DateFilters.setCachedDates(DateFilters.startDate, DateFilters.endDate)
loadReportData()
+ .then loadTableConfig
if $location.path().match /favorite/
$scope.viewingFavorite = true
+ DateFilters.hideDateFilters = false
Favorites.get($routeParams.id).then (favorite) ->
loadFavoriteConfig(favorite)
$scope.hiddenColumnNames = favorite.hiddenColumns
+ DateFilters.setDateType('Favorite')
+ DateFilters.setCachedDates(favorite.startDate, favorite.endDate)
initializeReport(favorite.reportId).then ->
$scope.sortOptions = favorite.sortOptions
unless _(favorite.columnFilters).isEmpty()
diff --git a/app/assets/javascripts/qdw/controllers/utilization_dashboard_controller.js.coffee b/app/assets/javascripts/qdw/controllers/utilization_dashboard_controller.js.coffee
index 960d707..2cf259a 100644
--- a/app/assets/javascripts/qdw/controllers/utilization_dashboard_controller.js.coffee
+++ b/app/assets/javascripts/qdw/controllers/utilization_dashboard_controller.js.coffee
@@ -1,6 +1,18 @@
-qdw.controller 'UtilizationDashboardCtrl', ($scope, PageConfiguration) ->
+qdw.controller 'UtilizationDashboardCtrl', (
+ $scope,
+ PageConfiguration,
+ DateFilters,
+) ->
$scope.layout = PageConfiguration.current()
$scope.edType = 'clinical'
+ DateFilters.hideDateFilters = false
+
+ initializeSelectedDates = ->
+ DateFilters.setDateType('Encounter')
+ dates = DateFilters.getResolvedDates()
+ DateFilters.setCachedDates(dates.startDate, dates.endDate)
+
+ initializeSelectedDates()
$scope.$watch 'edType', ((newVal, oldVal) ->
return if newVal is oldVal
diff --git a/app/assets/javascripts/qdw/directives/date_filter.js.coffee b/app/assets/javascripts/qdw/directives/date_filter.js.coffee
new file mode 100644
index 0000000..7d4d871
--- /dev/null
+++ b/app/assets/javascripts/qdw/directives/date_filter.js.coffee
@@ -0,0 +1,7 @@
+qdw.directive 'dateFilter', (DateFilters)->
+ restrict: 'E'
+ replace: true
+ templateUrl: 'directives/date-filter.html'
+ link: (scope) ->
+ scope.dateSettings = DateFilters
+ scope: {}
diff --git a/app/assets/javascripts/qdw/factories/date_filters.js.coffee b/app/assets/javascripts/qdw/factories/date_filters.js.coffee
new file mode 100644
index 0000000..aeeb737
--- /dev/null
+++ b/app/assets/javascripts/qdw/factories/date_filters.js.coffee
@@ -0,0 +1,49 @@
+qdw.factory 'DateFilters', ($filter)->
+ class DateFilters
+ today = new Date()
+ tenDaysBehind = new Date().setDate(today.getDate()-10)
+ tenDaysForward = new Date().setDate(today.getDate()+10)
+
+ setDateType: (@dateType) ->
+
+ setCachedDates: (startDate, endDate) =>
+ if @dateType is 'Appointment'
+ @startDate = @cachedAppointmentStartDate = startDate
+ @endDate = @cachedAppointmentEndDate = endDate
+ else if @dateType is 'Encounter'
+ @startDate = @cachedEncounterStartDate = startDate
+ @endDate = @cachedEncounterEndDate = endDate
+ else if @dateType is 'Favorite'
+ @startDate = @cachedFavoriteStartDate = startDate
+ @endDate = @cachedFavoriteEndDate = endDate
+
+ getResolvedDates: =>
+ if @cachedEncounterStartDate
+ encounterStartDate = @cachedEncounterStartDate
+ encounterEndDate = @cachedEncounterEndDate
+ else
+ encounterStartDate = tenDaysBehind
+ encounterEndDate = today
+
+ if @cachedAppointmentStartDate
+ appointmentStartDate = @cachedAppointmentStartDate
+ appointmentEndDate = @cachedAppointmentEndDate
+ else
+ appointmentStartDate = today
+ appointmentEndDate = tenDaysForward
+
+ dateTypeMapping =
+ Encounter:
+ startDate: $filter('date')(encounterStartDate, 'yyyy-MM-dd')
+ endDate: $filter('date')(encounterEndDate, 'yyyy-MM-dd')
+ Appointment:
+ startDate: $filter('date')(appointmentStartDate, 'yyyy-MM-dd')
+ endDate: $filter('date')(appointmentEndDate, 'yyyy-MM-dd')
+ Favorite:
+ startDate: $filter('date')(@cachedFavoriteStartDate, 'yyyy-MM-dd')
+ endDate: $filter('date')(@cachedFavoriteEndDate, 'yyyy-MM-dd')
+ None: {}
+
+ dateTypeMapping[@dateType] || dateTypeMapping['Encounter']
+
+ new DateFilters
diff --git a/app/assets/javascripts/qdw/services/entity_comparison.js.coffee b/app/assets/javascripts/qdw/services/entity_comparison.js.coffee
index b3317d8..cee5bf9 100644
--- a/app/assets/javascripts/qdw/services/entity_comparison.js.coffee
+++ b/app/assets/javascripts/qdw/services/entity_comparison.js.coffee
@@ -1,6 +1,7 @@
qdw.factory 'EntityComparisons', ($http, filterState) ->
get: (params) ->
+ filterParams = _.extend(filterState.selected, _(params).pick('startDate', 'endDate'))
comparisonParams =
- { grouping: params.grouping, edType: params.edType, filters: filterState.selected }
+ { grouping: params.grouping, edType: params.edType, filters: filterParams }
$http.post('/api/entity_comparisons', comparisonParams).then (response) ->
{ data: response.data }
diff --git a/app/assets/javascripts/qdw/services/filter_state.js.coffee b/app/assets/javascripts/qdw/services/filter_state.js.coffee
index 965d53f..c0d53af 100644
--- a/app/assets/javascripts/qdw/services/filter_state.js.coffee
+++ b/app/assets/javascripts/qdw/services/filter_state.js.coffee
@@ -14,8 +14,6 @@ qdw.service 'filterState', (
applyingFilterSelections = false
selected =
- startDate: '2011-01-01'
- endDate: '2011-01-11'
encounterInPeriod: false
chronicConditionOperator: '0'
diff --git a/app/assets/javascripts/qdw/services/payer_mix.js.coffee b/app/assets/javascripts/qdw/services/payer_mix.js.coffee
index 5f93203..a985cbd 100644
--- a/app/assets/javascripts/qdw/services/payer_mix.js.coffee
+++ b/app/assets/javascripts/qdw/services/payer_mix.js.coffee
@@ -1,6 +1,7 @@
qdw.service 'PayerMix', ($http, filterState) ->
query: (params) ->
- payerMixParams = { edType: params.edType, filters: filterState.selected }
+ filterParams = _.extend(filterState.selected, _(params).pick('startDate', 'endDate'))
+ payerMixParams = { edType: params.edType, filters: filterParams }
payerMixURL = '/api/payer_mix'
$http.post(payerMixURL, payerMixParams).then (response) ->
response.data
diff --git a/app/assets/javascripts/qdw/services/report.js.coffee b/app/assets/javascripts/qdw/services/report.js.coffee
index 344103e..4fd8b4a 100644
--- a/app/assets/javascripts/qdw/services/report.js.coffee
+++ b/app/assets/javascripts/qdw/services/report.js.coffee
@@ -10,7 +10,7 @@ qdw.factory 'Report', ($http, filterState) ->
get: (params) =>
reportParams =
- filters: filterState.selected
+ filters: params.filters
column_filters: params.columnarFilters
initiative_id: params.initiative_id
measure_id: params.measure_id
@@ -27,14 +27,14 @@ qdw.factory 'Report', ($http, filterState) ->
@exportBase,
report_id: params.id
measure_id: params.measure_id
- filters: filterState.selected
+ filters: params.filters
).then (response) ->
response.data
- getNameForID: (id) =>
+ getMetadataForID: (id) =>
@query().then (reports) ->
report = _.detect reports, (report) -> String(report.id) == String(id)
- if report then report.name
+ if report then report
getMeasureDetailID: =>
@query().then (reports) ->
diff --git a/app/assets/javascripts/qdw/templates/directives/date-filter.html b/app/assets/javascripts/qdw/templates/directives/date-filter.html
new file mode 100644
index 0000000..ce28fa5
--- /dev/null
+++ b/app/assets/javascripts/qdw/templates/directives/date-filter.html
@@ -0,0 +1,5 @@
+<div ng-hide="dateSettings.hideDateFilters">
+ <label for="start-date-picker">Date Range:</label>
+ <input datepicker id="start-date-picker" name="startDate" class="datepicker" ng-model="dateSettings.startDate"></input> to
+ <input datepicker id="end-date-picker" name="endDate" class="datepicker" ng-model="dateSettings.endDate"></input>
+</div>
diff --git a/app/assets/javascripts/qdw/templates/global_filters.html b/app/assets/javascripts/qdw/templates/global_filters.html
index ea15367..b45c475 100644
--- a/app/assets/javascripts/qdw/templates/global_filters.html
+++ b/app/assets/javascripts/qdw/templates/global_filters.html
@@ -19,11 +19,6 @@
</section>
<section id="time-filters" ng-switch on="periodFilter">
- <div id="date-range-filter" ng-switch-when="dates">
- <label for="start-date-picker">Date Range:</label>
- <input datepicker id="start-date-picker" name="startDate" class="datepicker" ng-model="selected.startDate"></input> to
- <input datepicker id="end-date-picker" name="endDate" class="datepicker" ng-model="selected.endDate"></input>
- </div>
<div id="period-filters" ng-switch-when="periods">
<span class="control-group">
<label for="period-type-filter">Period Type:</label>
@@ -38,6 +33,7 @@
<label for="encounter-in-period-filter">Encounter in Period</label>
</span>
</div>
+ <date-filter id="date-range-filter" report-date-type="dateType" deactivated="hideDateFilters"></date-filter>
</section>
</section>
diff --git a/app/models/report.rb b/app/models/report.rb
index 2b1fa07..a229e35 100644
--- a/app/models/report.rb
+++ b/app/models/report.rb
@@ -4,12 +4,13 @@ class Report < ActiveRecord::Base
alias_attribute :name, :ReportName
alias_attribute :proc_name, :ReportSp
alias_attribute :schema, :ReportSpSchema
+ alias_attribute :date_type, :DateType
self.primary_key = 'ReportID'
self.table_name = Rails.application.config.report_table_name
def self.enabled
- select('"ReportID", "ReportName", "ReportSp", "ReportSection", "ReportSpSchema"')
+ select('"ReportID", "ReportName", "ReportSp", "ReportSection", "ReportSpSchema", "DateType"')
.where('"ReportEnabled" = 1')
end
@@ -31,7 +32,7 @@ class Report < ActiveRecord::Base
end
def as_json(options = {})
- super(methods: [:name, :id, :proc_name])
+ super(methods: [:name, :id, :proc_name, :date_type])
end
private
diff --git a/db/migrate/20140408172321_change_period_to_text.rb b/db/migrate/20140408172321_change_period_to_text.rb
new file mode 100644
index 0000000..b7b6bd3
--- /dev/null
+++ b/db/migrate/20140408172321_change_period_to_text.rb
@@ -0,0 +1,5 @@
+class ChangePeriodToText < ActiveRecord::Migration
+ def change
+ change_column :favorites, :period, :text
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 8e3f413..11b07cd 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20140408011538) do
+ActiveRecord::Schema.define(version: 20140408172321) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -40,7 +40,7 @@ ActiveRecord::Schema.define(version: 20140408011538) do
t.text "start_date"
t.text "end_date"
t.integer "period_type"
- t.integer "period"
+ t.text "period"
t.boolean "encounter_in_period"
t.integer "report_id"
t.text "sort_options"
@@ -98,6 +98,7 @@ ActiveRecord::Schema.define(version: 20140408011538) do
t.string "ReportSpSchema"
t.string "ReportSection"
t.integer "ReportEnabled"
+ t.string "DateType"
end
create_table "sessions", force: true do |t|
diff --git a/db/seeds/report_table_seeder.rb b/db/seeds/report_table_seeder.rb
index 3b792a7..cce6968 100644
--- a/db/seeds/report_table_seeder.rb
+++ b/db/seeds/report_table_seeder.rb
@@ -9,7 +9,8 @@ class ReportTableSeeder
"ReportSp" varchar(255),
"ReportSpSchema" varchar(255),
"ReportSection" varchar(255),
- "ReportEnabled" integer
+ "ReportEnabled" integer,
+ "DateType" varchar(255)
);
INSERT INTO #{table_name} (
"ReportID",
@@ -17,22 +18,23 @@ class ReportTableSeeder
"ReportSp",
"ReportSpSchema",
"ReportSection",
- "ReportEnabled"
+ "ReportEnabled",
+ "DateType"
)
VALUES
- (12, 'Significant Event', 'uspReportSignificantEvent','rpt','patient management', 1),
- (13, 'High Cost', 'uspReportHighCost','rpt', 'patient management', 1),
- (14, 'High Risk', 'uspReportHighRisk','rpt', 'patient management', 1),
- (15, 'NonEngaging', 'uspReportNonEngaging','rpt', 'patient management', 1),
- (16, 'Past Visit', 'uspReportPastVisit', 'rpt','patient management', 1),
- (17, 'Patient List', 'uspReportPatientList','rpt', 'patient management', 1),
- (18, 'Upcoming Visit', 'uspReportUpcomingVisit','rpt', 'patient management', 1),
- (19, 'Ed Detail', 'uspReportEdDetail', 'rpt','utilization', 1),
- (4, 'Ed Frequent Flyer Report', 'uspEdFrequentFlyerReport','rpt', 'utilization', 1),
- (21, 'Attribution Mismatch Detail', 'uspReportAttributionMismatchDetail','rpt', 'patient management', 1),
- (10, 'Measure Detail', 'uspGetMeasureDetail','web', 'measures', 1),
- (25, 'Disabled Report', 'uspReportPatientList','rpt', 'patient management', 0),
- (1, 'Scorecard Report', 'uspScorecard_Report','rpt', 'scorecard', 1);|
+ (12, 'Significant Event', 'uspReportSignificantEvent','rpt','patient management', 1, 'Encounter'),
+ (13, 'High Cost', 'uspReportHighCost','rpt', 'patient management', 1, 'Encounter'),
+ (14, 'High Risk', 'uspReportHighRisk','rpt', 'patient management', 1, 'Encounter'),
+ (15, 'NonEngaging', 'uspReportNonEngaging','rpt', 'patient management', 1, 'None'),
+ (16, 'Past Visit', 'uspReportPastVisit', 'rpt','patient management', 1, 'Encounter'),
+ (17, 'Patient List', 'uspReportPatientList','rpt', 'patient management', 1, 'Encounter'),
+ (18, 'Upcoming Visit', 'uspReportUpcomingVisit','rpt', 'patient management', 1, 'Appointment'),
+ (19, 'Ed Detail', 'uspReportEdDetail', 'rpt','utilization', 1, 'Encounter'),
+ (4, 'Ed Frequent Flyer Report', 'uspEdFrequentFlyerReport','rpt', 'utilization', 1, 'Encounter'),
+ (21, 'Attribution Mismatch Detail', 'uspReportAttributionMismatchDetail','rpt', 'patient management', 1, 'Encounter'),
+ (10, 'Measure Detail', 'uspGetMeasureDetail','web', 'measures', 1, 'Encounter'),
+ (25, 'Disabled Report', 'uspReportPatientList','rpt', 'patient management', 0, 'Encounter'),
+ (1, 'Scorecard Report', 'uspScorecard_Report','rpt', 'scorecard', 1, 'Encounter');|
ActiveRecord::Base.connection.execute statements
end
diff --git a/doc/api/samples/reports/4-filtered.json b/doc/api/samples/reports/4-filtered.json
index 74a6cc3..5d18349 100644
--- a/doc/api/samples/reports/4-filtered.json
+++ b/doc/api/samples/reports/4-filtered.json
@@ -1,20 +1,20 @@
[
- {"hidden-PersonID": 2002, "Name": "Haverford, Tom", "Age__int": 26, "Last_Visit_Date__dt": "2013-09-05"},
- {"hidden-PersonID": 2004, "Name": "Gergich, Gary", "Age__int": 53, "Last_Visit_Date__dt": "2013-10-05"},
- {"hidden-PersonID": 2006, "Name": "Haverford, Tom", "Age__int": 26, "Last_Visit_Date__dt": "2013-09-05"},
- {"hidden-PersonID": 2007, "Name": "Knope, Leslie", "Age__int": 35, "Last_Visit_Date__dt": "2013-01-05"},
- {"hidden-PersonID": 2010, "Name": "Knope, Leslie", "Age__int": 35, "Last_Visit_Date__dt": "2013-01-05"},
- {"hidden-PersonID": 2011, "Name": "Swanson, Ron", "Age__int": 45, "Last_Visit_Date__dt": "2005-12-05"},
- {"hidden-PersonID": 2013, "Name": "Knope, Leslie", "Age__int": 35, "Last_Visit_Date__dt": "2013-01-05"},
- {"hidden-PersonID": 2017, "Name": "Swanson, Ron", "Age__int": 45, "Last_Visit_Date__dt": "2005-12-05"},
- {"hidden-PersonID": 2019, "Name": "Knope, Leslie", "Age__int": 35, "Last_Visit_Date__dt": "2013-01-05"},
- {"hidden-PersonID": 2024, "Name": "Haverford, Tom", "Age__int": 26, "Last_Visit_Date__dt": "2013-09-05"},
- {"hidden-PersonID": 2029, "Name": "Swanson, Ron", "Age__int": 45, "Last_Visit_Date__dt": "2005-12-05"},
- {"hidden-PersonID": 2032, "Name": "Swanson, Ron", "Age__int": 45, "Last_Visit_Date__dt": "2005-12-05"},
- {"hidden-PersonID": 2033, "Name": "Haverford, Tom", "Age__int": 26, "Last_Visit_Date__dt": "2013-09-05"},
- {"hidden-PersonID": 2034, "Name": "Knope, Leslie", "Age__int": 35, "Last_Visit_Date__dt": "2013-01-05"},
- {"hidden-PersonID": 2040, "Name": "Knope, Leslie", "Age__int": 35, "Last_Visit_Date__dt": "2013-01-05"},
- {"hidden-PersonID": 2041, "Name": "Swanson, Ron", "Age__int": 45, "Last_Visit_Date__dt": "2005-12-05"},
- {"hidden-PersonID": 2048, "Name": "Haverford, Tom", "Age__int": 26, "Last_Visit_Date__dt": "2013-09-05"},
- {"hidden-PersonID": 2050, "Name": "Happy 50th Birthday", "Age__int": 50, "Last_Visit_Date__dt": "2013-12-19"}
+ {"hidden-PersonID": 2002, "Name": "Haverford, Tom", "Age__int": 26, "Last_Visit_Date__dt": "2013-09-05", "patinfo-Sex": "M"},
+ {"hidden-PersonID": 2004, "Name": "Gergich, Gary", "Age__int": 53, "Last_Visit_Date__dt": "2013-10-05", "patinfo-Sex": "M"},
+ {"hidden-PersonID": 2006, "Name": "Haverford, Tom", "Age__int": 26, "Last_Visit_Date__dt": "2013-09-05", "patinfo-Sex": "M"},
+ {"hidden-PersonID": 2007, "Name": "Knope, Leslie", "Age__int": 35, "Last_Visit_Date__dt": "2013-01-05", "patinfo-Sex": "M"},
+ {"hidden-PersonID": 2010, "Name": "Knope, Leslie", "Age__int": 35, "Last_Visit_Date__dt": "2013-01-05", "patinfo-Sex": "M"},
+ {"hidden-PersonID": 2011, "Name": "Swanson, Ron", "Age__int": 45, "Last_Visit_Date__dt": "2005-12-05", "patinfo-Sex": "M"},
+ {"hidden-PersonID": 2013, "Name": "Knope, Leslie", "Age__int": 35, "Last_Visit_Date__dt": "2013-01-05", "patinfo-Sex": "M"},
+ {"hidden-PersonID": 2017, "Name": "Swanson, Ron", "Age__int": 45, "Last_Visit_Date__dt": "2005-12-05", "patinfo-Sex": "M"},
+ {"hidden-PersonID": 2019, "Name": "Knope, Leslie", "Age__int": 35, "Last_Visit_Date__dt": "2013-01-05", "patinfo-Sex": "M"},
+ {"hidden-PersonID": 2024, "Name": "Haverford, Tom", "Age__int": 26, "Last_Visit_Date__dt": "2013-09-05", "patinfo-Sex": "M"},
+ {"hidden-PersonID": 2029, "Name": "Swanson, Ron", "Age__int": 45, "Last_Visit_Date__dt": "2005-12-05", "patinfo-Sex": "M"},
+ {"hidden-PersonID": 2032, "Name": "Swanson, Ron", "Age__int": 45, "Last_Visit_Date__dt": "2005-12-05", "patinfo-Sex": "M"},
+ {"hidden-PersonID": 2033, "Name": "Haverford, Tom", "Age__int": 26, "Last_Visit_Date__dt": "2013-09-05", "patinfo-Sex": "M"},
+ {"hidden-PersonID": 2034, "Name": "Knope, Leslie", "Age__int": 35, "Last_Visit_Date__dt": "2013-01-05", "patinfo-Sex": "M"},
+ {"hidden-PersonID": 2040, "Name": "Knope, Leslie", "Age__int": 35, "Last_Visit_Date__dt": "2013-01-05", "patinfo-Sex": "M"},
+ {"hidden-PersonID": 2041, "Name": "Swanson, Ron", "Age__int": 45, "Last_Visit_Date__dt": "2005-12-05", "patinfo-Sex": "M"},
+ {"hidden-PersonID": 2048, "Name": "Haverford, Tom", "Age__int": 26, "Last_Visit_Date__dt": "2013-09-05", "patinfo-Sex": "M"},
+ {"hidden-PersonID": 2050, "Name": "Happy 50th Birthday", "Age__int": 50, "Last_Visit_Date__dt": "2013-12-19", "patinfo-Sex": "M"}
]
diff --git a/spec/features/date_filter_spec.rb b/spec/features/date_filter_spec.rb
new file mode 100644
index 0000000..8580e8e
--- /dev/null
+++ b/spec/features/date_filter_spec.rb
@@ -0,0 +1,95 @@
+require 'spec_helper'
+
+feature 'Time filters appear on correct pages', js: true do
+ scenario 'Only the correct time filters appear on each page type' do
+ create(:page_configuration, :with_initiative_page)
+ create(:page_configuration, :with_report)
+ create(:page_configuration, :with_homepage)
+ sign_in create(:user, :with_full_attributions)
+
+ visit root_path
+ expect(global_filters).to have_only_period_based_filters
+
+ visit cms_aco_initiative_path
+ initiative_on_page.view_report_on_measure
+ wait_for_page_ready do
+ expect(global_filters).to have_only_period_based_filters
+ end
+
+ navigate_to_frequent_flyer
+ wait_for_page_ready do
+ expect(global_filters).to have_only_date_range_filters
+ end
+ end
+end
+
+feature 'Date Ranges', js: true do
+ scenario 'have correct default values for start and end date' do
+ sign_in create(:user, :with_full_attributions)
+ create(:page_configuration, :with_report)
+ create(:page_configuration, :with_utilization_dashboard)
+
+ visit frequent_flyer_report_path
+ expect(date_filters_on_page.start_date).to eq ten_days_behind
+ expect(date_filters_on_page.end_date).to eq today
+
+ visit upcoming_visits_report_path
+ expect(date_filters_on_page.start_date).to eq today
+ expect(date_filters_on_page.end_date).to eq ten_days_forward
+
+ visit non_engaging_report_path
+ expect(date_filters_on_page).to have_no_date_filters
+
+ visit utilization_dashboard_path
+ expect(date_filters_on_page.start_date).to eq ten_days_behind
+ expect(date_filters_on_page.end_date).to eq today
+ end
+
+ scenario 'persist when changing reports types' do
+ sign_in create(:user, :with_full_attributions)
+ create(:page_configuration, :with_report)
+
+ start_date = '1/1/11'
+ end_date = '1/11/11'
+
+ visit frequent_flyer_report_path
+ date_filters_on_page.set_dates(start_date, end_date)
+ global_filters.apply
+
+ navigate_to_upcoming_visit_report
+ wait_for_page_ready(0.5) do
+ expect(date_filters_on_page.start_date).to eq today
+ expect(date_filters_on_page.end_date).to eq ten_days_forward
+ end
+
+ navigate_to_frequent_flyer
+ wait_for_page_ready(0.5) do
+ expect(date_filters_on_page.start_date).to eq start_date
+ expect(date_filters_on_page.end_date).to eq end_date
+ end
+ end
+end
+
+def ten_days_forward
+ (Time.now + 10.days).strftime('%Y-%m-%d')
+end
+
+def ten_days_behind
+ (Time.now - 10.days).strftime('%Y-%m-%d')
+end
+
+def today
+ Time.now.strftime('%Y-%m-%d')
+end
+
+def global_filters
+ @global_filters ||= GlobalFiltersOnPage.new
+end
+
+def initiative_on_page
+ @initiative_on_page ||= Pages::Initiative.new
+end
+
+def date_filters_on_page
+ @date_filters_on_page ||= Pages::DateFilters.new
+end
diff --git a/spec/features/global_filters_spec.rb b/spec/features/global_filters_spec.rb
index b41ef29..4aa5767 100644
--- a/spec/features/global_filters_spec.rb
+++ b/spec/features/global_filters_spec.rb
@@ -27,30 +27,6 @@ feature 'Payer filter exists with options', js: true do
end
end
-feature 'Time filters appear on correct pages', js: true do
- scenario 'Only the correct time filters appear on each page type' do
- sign_in create(:user, :with_full_attributions)
- create(:page_configuration, :with_initiative_page)
-
- visit cms_aco_initiative_path
- expect(global_filters).to have_only_period_based_filters
-
- within initiative_on_page.initiative_card do
- click_link 'Diabetes A1C'
- end
- within initiative_on_page.measure_detail_card do
- click_link 'View details'
- end
- expect(global_filters).to have_only_period_based_filters
-
- navigate_to_utilization_dashboard
- expect(global_filters).to have_only_date_range_filters
-
- navigate_to_frequent_flyer
- expect(global_filters).to have_only_date_range_filters
- end
-end
-
feature 'Demographic filters', js: true do
scenario 'Demographic filters are populated' do
sign_in create(:user)
@@ -65,6 +41,7 @@ feature 'Demographic filters', js: true do
sign_in create(:user, :with_full_attributions)
create(:page_configuration, :with_report)
visit frequent_flyer_report_path
+ global_filters.set_date_filters_to_mockwarehouse_dates
expect(report_on_page).to have_content_in_first_cell('Swanson, Ron')
diff --git a/spec/features/user_saves_a_favorite_report_spec.rb b/spec/features/user_saves_a_favorite_report_spec.rb
index ccc97dc..b164f1f 100644
--- a/spec/features/user_saves_a_favorite_report_spec.rb
+++ b/spec/features/user_saves_a_favorite_report_spec.rb
@@ -42,6 +42,7 @@ feature 'User views Favorites', js: true do
scenario 'a favorite also captures the current filter state' do
visit frequent_flyer_report_path
+ global_filters.set_date_filters_to_mockwarehouse_dates
global_filters.uncheck_all_box('providers')
global_filters.uncheck_all_box('facility')
find('#facilities-filter-label').click
@@ -73,6 +74,7 @@ feature 'User views Favorites', js: true do
scenario 'a favorite also captures the current report sorting and report filters' do
visit frequent_flyer_report_path
+ global_filters.set_date_filters_to_mockwarehouse_dates
name_column = 'Name'
age_column = 'Age'
diff --git a/spec/features/user_views_report_spec.rb b/spec/features/user_views_report_spec.rb
index e47cba3..ab78ee2 100644
--- a/spec/features/user_views_report_spec.rb
+++ b/spec/features/user_views_report_spec.rb
@@ -20,6 +20,7 @@ feature 'user views report', js: true do
ungrouped_person = 'Swanson, Ron'
grouped_person = 'Gergich, Gary'
visit frequent_flyer_report_path
+ global_filters.set_date_filters_to_mockwarehouse_dates
expect(report_on_page).to have_content_in_first_cell(ungrouped_person)
report_on_page.apply_column_grouping_for 'Name'
@@ -34,16 +35,13 @@ feature 'user views report', js: true do
scenario 'user can select a date range' do
visit frequent_flyer_report_path
+ global_filters.set_date_filters_to_mockwarehouse_dates
wait_for_page_ready do
expect(report_on_page).to have_content_in_first_cell 'Swanson, Ron'
end
- global_filters.click_on_date_input_for('startDate')
- global_filters.select_first_of_the_month
- global_filters.click_on_date_input_for('endDate')
- global_filters.navigate_to_next_month
- global_filters.select_first_of_the_month
+ global_filters.adjust_date_range
global_filters.apply
wait_for_page_ready do
@@ -70,6 +68,7 @@ feature 'user views report', js: true do
scenario 'cannot see hidden columns' do
visit frequent_flyer_report_path
+ global_filters.set_date_filters_to_mockwarehouse_dates
expect(report_on_page).to have_no_content 'patinfo-sex'
expect(report_on_page).to have_no_content 'Sex'
@@ -77,6 +76,7 @@ feature 'user views report', js: true do
scenario 'can choose to show hidden columns' do
visit frequent_flyer_report_path
+ global_filters.set_date_filters_to_mockwarehouse_dates
sex_column_number = 5
report_on_page.toggle_column_visibility(sex_column_number, true)
diff --git a/spec/javascripts/qdw/controllers/sections/reports_controller_spec.js.coffee b/spec/javascripts/qdw/controllers/sections/reports_controller_spec.js.coffee
index 2df62ef..1eeab43 100644
--- a/spec/javascripts/qdw/controllers/sections/reports_controller_spec.js.coffee
+++ b/spec/javascripts/qdw/controllers/sections/reports_controller_spec.js.coffee
@@ -15,10 +15,10 @@ describe 'ReportsCtrl', ->
it 'calls the Report service when filters are changed', inject ($controller) ->
reportSpy = jasmine.createSpy('get').andReturn(then: -> then: -> then: ->)
- reportNameSpy = jasmine.createSpy('getNameForID').andReturn(then: ->)
+ reportMetadataSpy = jasmine.createSpy('getMetadataForID').andReturn(then: ->)
reportService =
get: reportSpy
- getNameForID: reportNameSpy
+ getMetadataForID: reportMetadataSpy
dependencies =
$scope: scope
@@ -32,15 +32,15 @@ describe 'ReportsCtrl', ->
scope.$digest()
expect(reportService.get).toHaveBeenCalled()
- expect(reportService.getNameForID).toHaveBeenCalled()
+ expect(reportService.getMetadataForID).toHaveBeenCalled()
describe 'when sorts are applied', ->
it 'calls the report service with correct sortOptions', inject ($controller) ->
reportSpy = jasmine.createSpy('get').andReturn(then: -> then: -> then: ->)
- reportNameSpy = jasmine.createSpy('getNameForID').andReturn(then: ->)
+ reportMetadataSpy = jasmine.createSpy('getMetadataForID').andReturn(then: ->)
reportService =
get: reportSpy
- getNameForID: reportNameSpy
+ getMetadataForID: reportMetadataSpy
sortInfo = { fields: ['name', 'age__int'], directions: ['asc', 'desc'], columns: {} }
dependencies =
@@ -64,10 +64,10 @@ describe 'ReportsCtrl', ->
it 'passes the new paging options to Report', inject ($controller) ->
reportSpy = jasmine.createSpy('get').andReturn(then: -> then: -> then: ->)
- reportNameSpy = jasmine.createSpy('getNameForID').andReturn(then: ->)
+ reportMetadataSpy = jasmine.createSpy('getMetadataForID').andReturn(then: ->)
reportService =
get: reportSpy
- getNameForID: reportNameSpy
+ getMetadataForID: reportMetadataSpy
dependencies =
$scope: scope
diff --git a/spec/javascripts/qdw/services/report_spec.js.coffee b/spec/javascripts/qdw/services/report_spec.js.coffee
index ebb1d5f..97fdf82 100644
--- a/spec/javascripts/qdw/services/report_spec.js.coffee
+++ b/spec/javascripts/qdw/services/report_spec.js.coffee
@@ -8,14 +8,21 @@ describe 'Report', ->
$httpBackend = _$httpBackend_
Report = _Report_
- describe '.getNameForID', ->
- it 'returns the name for the report with given ID', ->
- $httpBackend.expectPOST('/api/reports').respond([{id: 4, name: 'Frequent'}])
+ describe '.getMetadataForID', ->
+ it 'returns the metadata for the report with given ID', ->
+ $httpBackend.expectPOST('/api/reports').respond(
+ [{id: 4, name: 'Frequent Flyer', date_type: 'Encounter'}]
+ )
name = undefined
- Report.getNameForID(4).then (reportName) ->
- name = reportName
+ dateType = undefined
+
+ Report.getMetadataForID(4).then (report) ->
+ name = report.name
+ dateType = report.date_type
$httpBackend.flush()
- expect(name).toEqual 'Frequent'
+
+ expect(name).toEqual 'Frequent Flyer'
+ expect(dateType).toEqual 'Encounter'
describe '.getMeasureDetailID', ->
it 'returns the id for the report with ReportSection = measures', ->
diff --git a/spec/support/features/api_helpers.rb b/spec/support/features/api_helpers.rb
index b05fcd6..0772fcc 100644
--- a/spec/support/features/api_helpers.rb
+++ b/spec/support/features/api_helpers.rb
@@ -11,5 +11,13 @@ module Features
def frequent_flyer_report_path
reports_path(4)
end
+
+ def upcoming_visits_report_path
+ reports_path(18)
+ end
+
+ def non_engaging_report_path
+ reports_path(15)
+ end
end
end
diff --git a/spec/support/features/navigation_helpers.rb b/spec/support/features/navigation_helpers.rb
index e2beffc..efd8e9a 100644
--- a/spec/support/features/navigation_helpers.rb
+++ b/spec/support/features/navigation_helpers.rb
@@ -21,6 +21,13 @@ module Features
end
end
+ def navigate_to_upcoming_visit_report
+ within(menu) do
+ click_link 'Patient Management'
+ click_link 'Upcoming Visit'
+ end
+ end
+
def menu
find('#menu')
end
diff --git a/spec/support/page_objects/date_filters.rb b/spec/support/page_objects/date_filters.rb
new file mode 100644
index 0000000..4a31a69
--- /dev/null
+++ b/spec/support/page_objects/date_filters.rb
@@ -0,0 +1,28 @@
+require_relative 'base'
+
+module Pages
+ class DateFilters < Base
+ def start_date
+ find('#start-date-picker').value
+ end
+
+ def end_date
+ find('#end-date-picker').value
+ end
+
+ def has_no_date_filters?
+ all('#start-date-picker').empty? &&
+ all('#end-date-picker').empty?
+ end
+
+ def set_dates(start_date, end_date)
+ fill_in('startDate', with: start_date)
+ fill_in('endDate', with: end_date)
+ end
+
+ def apply_dates
+ find('#date-range-filter').find_button('Apply').click
+ sleep 0.2
+ end
+ end
+end
diff --git a/spec/support/page_objects/global_filters_on_page.rb b/spec/support/page_objects/global_filters_on_page.rb
index 519a8b3..79e8103 100644
--- a/spec/support/page_objects/global_filters_on_page.rb
+++ b/spec/support/page_objects/global_filters_on_page.rb
@@ -140,6 +140,12 @@ class GlobalFiltersOnPage
choose('condition-and')
end
+ def set_date_filters_to_mockwarehouse_dates
+ fill_in('startDate', with: '2011-01-01')
+ fill_in('endDate', with: '2011-01-11')
+ apply
+ end
+
private
def find_all_option_filter(filter)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment