Ssmith has submitted this change and it was merged. Change subject: Define common filters in one file ......................................................................
Define common filters in one file Less duplication, easier to add all the filters to all the widgets. Change-Id: I7bc14b8ba486d23a10c4014060c1a00c23c77105 --- M widgets/big-english.js A widgets/common-filters.js M widgets/fraud-gauge.js M widgets/x-by-y.js 4 files changed, 290 insertions(+), 256 deletions(-) Approvals: Ssmith: Looks good to me, approved diff --git a/widgets/big-english.js b/widgets/big-english.js index 22d84f0..10d9ae9 100644 --- a/widgets/big-english.js +++ b/widgets/big-english.js @@ -1,34 +1,12 @@ -var config = require( '../config.js' ); +var commonFilters = require( './common-filters.js' ), + config = require( '../config.js' ); module.exports = { name: 'big-english', query: 'select count(*) as donations, sum(total_amount) as usd_total,\n IF( day(receive_date) = day(utc_timestamp()) and hour(receive_date) = hour(utc_timestamp()), CEILING(TIMESTAMPDIFF(SECOND, MIN(receive_date), MAX(receive_date))/60), 60) as minutes, sum(total_amount)/IF( day(receive_date) = day(utc_timestamp()) and hour(receive_date) = hour(utc_timestamp()), CEILING(TIMESTAMPDIFF(SECOND, MIN(receive_date), MAX(receive_date))/60), 60)/60 as usd_per_second, DAY(receive_date) as day, HOUR(receive_date) as hour from ' + config.civicrmDb + '.civicrm_contribution cc [[WHERE]] GROUP BY DAY(receive_date), HOUR(receive_date) ORDER BY day ASC, hour ASC;', mainTableAlias: 'cc', optionalJoins: {}, - filters: { - Year: { - table: 'cc', - func: 'YEAR', - column: 'receive_date', - display: 'Year', - type: 'number' - }, - Month: { - table: 'cc', - func: 'MONTH', - column: 'receive_date', - display: 'Month', - type: 'number' - }, - Amount: { - table: 'cc', - column : 'total_amount', - display : 'Amount', - type : 'number', - min : 0, - max : 10000 - } - }, + filters: commonFilters.civicrmContribution, defaultFilter: { type: 'and', left: { diff --git a/widgets/common-filters.js b/widgets/common-filters.js new file mode 100644 index 0000000..1ca2ef9 --- /dev/null +++ b/widgets/common-filters.js @@ -0,0 +1,267 @@ +/* + * Use these to extend() your widget's filters. Note that some filters are + * defined for multiple tables. Extend with the filter set of your primary + * table last to make sure you get the correct version. + */ + +module.exports = { + civicrmContribution: { + DT: { + table: 'cc', + column : 'receive_date', + display: 'Date', + type: 'datetime', + //TODO: dynamic min/max + min: '2005-01-01', + max: '2099-12-31' + }, + Year: { + table: 'cc', + func: 'YEAR', + column: 'receive_date', + display: 'Year', + type: 'number', + canGroup: true + }, + Month: { + table: 'cc', + func: 'MONTH', + column: 'receive_date', + display: 'Month', + type: 'number', + canGroup: true + }, + Day: { + table: 'cc', + func: 'DAY', + column: 'receive_date', + display: 'Year', + type: 'number', + canGroup: true + }, + Hour: { + table: 'cc', + func: 'HOUR', + column: 'receive_date', + display: 'Hour', + type: 'number', + canGroup: true + }, + YearsAgo: { + table: 'cc', + column : 'receive_date', + func: 'timestampdiff(YEAR, [[COL]], utc_timestamp())', + display: 'Years ago', + type: 'number', + min: 0, + max: 12 + }, + MonthsAgo: { + table: 'cc', + column : 'receive_date', + func: 'timestampdiff(MONTH, [[COL]], utc_timestamp())', + display: 'Months ago', + type: 'number', + min: 0, + max: 10000 + }, + DaysAgo: { + table: 'cc', + column : 'receive_date', + func: 'timestampdiff(DAY, [[COL]], utc_timestamp())', + display: 'Days ago', + type: 'number', + min: 0, + max: 10000 + }, + Amount: { + table: 'cc', + column : 'total_amount', + display : 'Amount', + type : 'number', + min : 0, + max : 10000 + }, + Country: { + table: 'pi', + column: 'country', + display: 'Country', + type: 'dropdown', + values: [ 'AE', 'AF', 'AL', 'AM', 'AO', 'AR', 'AT', 'AU', 'AW', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BG', 'BH', 'BJ', 'BM', 'BN', 'BO', 'BR', 'BS', 'CA', 'CH', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CW', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DO', 'DZ', 'EC', 'EE', 'EG', 'ES', 'FR', 'GB', 'GE', 'GH', 'GR', 'GT', 'GU', 'HK', 'HN', 'HR', 'HU', 'IE', 'IL', 'IM', 'IN', 'IS', 'IT', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LI', 'LK', 'LR', 'LT', 'LU', 'LV', 'MA', 'ME', 'MG', 'MK', 'MN', 'MR', 'MT', 'MX', 'MY', 'MZ', 'NC', 'NE', 'NG', 'NI', 'NL', 'NO', 'NP', 'NZ', 'OM', 'PA', 'PE', 'PH', 'PK', 'PL', 'PR', 'PS', 'PT', 'QA', 'RO', 'RS', 'SC', 'SE', 'SG', 'SI', 'SV', 'TH', 'TN', 'TW', 'TZ', 'UA', 'US', 'UY', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', 'XX', 'ZA', 'ZM' ], + canGroup: true + }, + Action: { + table: 'pf', + column: 'validation_action', + func: 'COALESCE([[COL]], \'no action\')', + display: 'Validation Action', + type: 'dropdown', + values: [ 'process', 'reject' ], + canGroup: true + }, + Status: { + table: 'cc', + column: 'contribution_status_id', + display: 'Contribution Status', + type: 'dropdown', + values: [ '1', '2', '3', '4', '5', '6', '7', '8', '9' ], + labels: [ 'Completed', 'Pending', 'Cancelled', 'Failed', 'In Progress', 'Overdue', 'Settled', 'Paid', 'Refunded' ], + canGroup: true + } + }, + contributionTracking: { + Source: { + table: 'ct', + column: 'utm_source', + display: 'Source', + type: 'text', + canGroup: true + }, + Campaign: { + table: 'ct', + column: 'utm_campaign', + display: 'Campaign', + type: 'text', + canGroup: true + }, + Medium: { + table: 'ct', + column: 'utm_medium', + display: 'Medium', + type: 'dropdown', + values: [ 'sitenotice', 'sidebar', 'email', 'spontaneous', 'wmfWikiRedirect', 'SocialMedia', 'WaysToGive', 'event', 'externalbanner', 'outage' ], + canGroup: true + }, + Referrer: { + table: 'ct', + column : 'referrer', + display : 'Referrer', + type : 'text' + } + }, + paymentsInitial: { + Currency: { + table: 'pi', + column : 'currency_code', + display : 'Currency', + type : 'dropdown', + //TODO: get values dynamically + values : [ 'AED', 'ARS', 'AUD', 'BBD', 'BDT', 'BGN', 'BHD', 'BMD', 'BOB', 'BRL', 'CAD', 'CHF', 'CLP', 'CNY', 'COP', 'CRC', 'CZK', 'DKK', 'DOP', 'DZD', 'EGP', 'EUR', 'GBP', 'GTQ', 'HKD', 'HNL', 'HRK', 'HUF', 'IDR', 'ILS', 'INR', 'JMD', 'JOD', 'JPY', 'KES', 'KRW', 'KZT', 'LKR', 'LTL', 'MAD', 'MKD', 'MXN', 'MYR', 'NIO', 'NOK', 'NZD', 'OMR', 'PAB', 'PEN', 'PHP', 'PKR', 'PLN', 'QAR', 'RON', 'RUB', 'SAR', 'SEK', 'SGD', 'THB', 'TRY', 'TTD', 'TWD', 'UAH', 'USD', 'UYU', 'VEF', 'XCD', 'ZAR' ], + canGroup: true + }, + Method: { + table: 'pi', + column: 'payment_method', + display: 'Method', + type: 'dropdown', + values: [ 'cc', 'paypal', 'rtbt', 'amazon', 'dd', 'ew', 'obt', 'bt'], + canGroup: true + }, + Gateway: { + table: 'pi', + column: 'gateway', + display: 'Gateway', + type: 'dropdown', + values: [ 'globalcollect', 'worldpay', 'amazon', 'paypal' ], + canGroup: true + }, + Amount: { + table: 'pi', + column : 'amount', + display : 'Amount', + type : 'number', + min : 0, + max : 10000 + } + }, + paymentsFraud: { + DT: { + table: 'pf', + column : 'date', + display: 'Date', + type: 'datetime', + //TODO: dynamic min/max + min: '2005-01-01', + max: '2099-12-31' + }, + Year: { + table: 'pf', + func: 'YEAR', + column: 'date', + display: 'Year', + type: 'number', + canGroup: true + }, + Month: { + table: 'pf', + func: 'MONTH', + column: 'date', + display: 'Month', + type: 'number', + canGroup: true + }, + Day: { + table: 'pf', + func: 'DAY', + column: 'date', + display: 'Year', + type: 'number', + canGroup: true + }, + Hour: { + table: 'pf', + func: 'HOUR', + column: 'date', + display: 'Hour', + type: 'number', + canGroup: true + }, + YearsAgo: { + table: 'pf', + column : 'date', + func: 'timestampdiff(YEAR, [[COL]], utc_timestamp())', + display: 'Years ago', + type: 'number', + min: 0, + max: 12 + }, + MonthsAgo: { + table: 'pf', + column : 'date', + func: 'timestampdiff(MONTH, [[COL]], utc_timestamp())', + display: 'Months ago', + type: 'number', + min: 0, + max: 10000 + }, + DaysAgo: { + table: 'pf', + column : 'date', + func: 'timestampdiff(DAY, [[COL]], utc_timestamp())', + display: 'Days ago', + type: 'number', + min: 0, + max: 10000 + }, + Method: { + table: 'pf', + column: 'payment_method', + display: 'Method', + type: 'dropdown', + values: [ 'cc', 'paypal', 'rtbt', 'amazon', 'dd', 'ew', 'obt', 'bt'] + }, + Gateway: { + table: 'pf', + column: 'gateway', + display: 'Gateway', + type: 'dropdown', + values: [ 'globalcollect', 'worldpay' ] + }, + Score: { + table: 'pf', + column: 'risk_score', + display: 'Score', + type: 'number' + } + } +}; diff --git a/widgets/fraud-gauge.js b/widgets/fraud-gauge.js index 64e3434..fae6ebe 100644 --- a/widgets/fraud-gauge.js +++ b/widgets/fraud-gauge.js @@ -1,3 +1,11 @@ +var extend = require( 'node.extend' ), + commonFilters = require( './common-filters.js' ), + filters = {}; + +extend( filters, commonFilters.contributionTracking ); +extend( filters, commonFilters.paymentsInitial ); +extend( filters, commonFilters.paymentsFraud ); + module.exports = { name: 'fraud', query: 'SELECT AVG(CASE pf.validation_action WHEN \'reject\' THEN 100 ELSE 0 END) AS fraud_percent\nFROM payments_fraud pf [[JOINS]] [[WHERE]]', @@ -10,76 +18,5 @@ text: 'LEFT JOIN drupal.contribution_tracking ct ON ct.id = pf.contribution_tracking_id' } }, - filters: { - Currency: { - table: 'pi', - column : 'currency_code', - display : 'Currency', - type : 'dropdown', - //TODO: get values dynamically - values : [ 'AED', 'ARS', 'AUD', 'BBD', 'BDT', 'BGN', 'BHD', 'BMD', 'BOB', 'BRL', 'CAD', 'CHF', 'CLP', 'CNY', 'COP', 'CRC', 'CZK', 'DKK', 'DOP', 'DZD', 'EGP', 'EUR', 'GBP', 'GTQ', 'HKD', 'HNL', 'HRK', 'HUF', 'IDR', 'ILS', 'INR', 'JMD', 'JOD', 'JPY', 'KES', 'KRW', 'KZT', 'LKR', 'LTL', 'MAD', 'MKD', 'MXN', 'MYR', 'NIO', 'NOK', 'NZD', 'OMR', 'PAB', 'PEN', 'PHP', 'PKR', 'PLN', 'QAR', 'RON', 'RUB', 'SAR', 'SEK', 'SGD', 'THB', 'TRY', 'TTD', 'TWD', 'UAH', 'USD', 'UYU', 'VEF', 'XCD', 'ZAR' ] - }, - Method: { - table: 'pf', - column: 'payment_method', - display: 'Method', - type: 'dropdown', - values: [ 'cc', 'paypal', 'rtbt', 'amazon', 'dd', 'ew', 'obt', 'bt'] - }, - Source: { - table: 'ct', - column: 'utm_source', - display: 'Source', - type: 'text' - }, - Campaign: { - table: 'ct', - column: 'utm_campaign', - display: 'Campaign', - type: 'text' - }, - Medium: { - table: 'ct', - column: 'utm_medium', - display: 'Medium', - type: 'dropdown', - values: [ 'sitenotice', 'sidebar', 'email', 'spontaneous', 'wmfWikiRedirect', 'SocialMedia', 'WaysToGive', 'event', 'externalbanner', 'outage' ] - }, - Referrer: { - table: 'ct', - column : 'referrer', - display : 'Referrer', - type : 'text' - }, - Gateway: { - table: 'pf', - column: 'gateway', - display: 'Gateway', - type: 'dropdown', - values: [ 'globalcollect', 'worldpay' ] - }, - Score: { - table: 'pf', - column: 'risk_score', - display: 'Score', - type: 'number' - }, - DT: { - table: 'pf', - column : 'date', - display: 'Date', - type: 'datetime', - //TODO: dynamic min/max - min: '2005-01-01', - max: '2099-12-31' - }, - Amount: { - table: 'pi', - column : 'amount', - display : 'Amount', - type : 'number', - min : 0, - max : 10000 - } - } -}; \ No newline at end of file + filters: filters +}; diff --git a/widgets/x-by-y.js b/widgets/x-by-y.js index 7bd09d2..af4bf9d 100644 --- a/widgets/x-by-y.js +++ b/widgets/x-by-y.js @@ -1,4 +1,12 @@ -var config = require( '../config.js' ); +var extend = require( 'node.extend' ), + commonFilters = require( './common-filters.js' ), + config = require( '../config.js' ), + filters = {}; + +extend( filters, commonFilters.paymentsFraud ); +extend( filters, commonFilters.paymentsInitial ); +extend( filters, commonFilters.contributionTracking ); +extend( filters, commonFilters.civicrmContribution ); module.exports = { name: 'x-by-y', @@ -17,161 +25,5 @@ requires: [ 'ct', 'pi' ] } }, - filters: { - Year: { - table: 'cc', - func: 'YEAR', - column: 'receive_date', - display: 'Year', - type: 'number', - canGroup: true - }, - Month: { - table: 'cc', - func: 'MONTH', - column: 'receive_date', - display: 'Month', - type: 'number', - canGroup: true - }, - Day: { - table: 'cc', - func: 'DAY', - column: 'receive_date', - display: 'Year', - type: 'number', - canGroup: true - }, - Hour: { - table: 'cc', - func: 'HOUR', - column: 'receive_date', - display: 'Hour', - type: 'number', - canGroup: true - }, - Amount: { - table: 'cc', - column : 'total_amount', - display : 'Amount', - type : 'number', - min : 0, - max : 10000 - }, - Currency: { - table: 'pi', - column : 'currency_code', - display : 'Currency', - type : 'dropdown', - //TODO: get values dynamically - values : [ 'AED', 'ARS', 'AUD', 'BBD', 'BDT', 'BGN', 'BHD', 'BMD', 'BOB', 'BRL', 'CAD', 'CHF', 'CLP', 'CNY', 'COP', 'CRC', 'CZK', 'DKK', 'DOP', 'DZD', 'EGP', 'EUR', 'GBP', 'GTQ', 'HKD', 'HNL', 'HRK', 'HUF', 'IDR', 'ILS', 'INR', 'JMD', 'JOD', 'JPY', 'KES', 'KRW', 'KZT', 'LKR', 'LTL', 'MAD', 'MKD', 'MXN', 'MYR', 'NIO', 'NOK', 'NZD', 'OMR', 'PAB', 'PEN', 'PHP', 'PKR', 'PLN', 'QAR', 'RON', 'RUB', 'SAR', 'SEK', 'SGD', 'THB', 'TRY', 'TTD', 'TWD', 'UAH', 'USD', 'UYU', 'VEF', 'XCD', 'ZAR' ], - canGroup: true - }, - Method: { - table: 'pi', - column: 'payment_method', - display: 'Method', - type: 'dropdown', - values: [ 'cc', 'paypal', 'rtbt', 'amazon', 'dd', 'ew', 'obt', 'bt'], - canGroup: true - }, - Source: { - table: 'ct', - column: 'utm_source', - display: 'Source', - type: 'text', - canGroup: true - }, - Campaign: { - table: 'ct', - column: 'utm_campaign', - display: 'Campaign', - type: 'text', - canGroup: true - }, - Medium: { - table: 'ct', - column: 'utm_medium', - display: 'Medium', - type: 'dropdown', - values: [ 'sitenotice', 'sidebar', 'email', 'spontaneous', 'wmfWikiRedirect', 'SocialMedia', 'WaysToGive', 'event', 'externalbanner', 'outage' ], - canGroup: true - }, - Referrer: { - table: 'ct', - column : 'referrer', - display : 'Referrer', - type : 'text' - }, - Gateway: { - table: 'pi', - column: 'gateway', - display: 'Gateway', - type: 'dropdown', - values: [ 'globalcollect', 'worldpay', 'amazon', 'paypal' ], - canGroup: true - }, - DT: { - table: 'cc', - column : 'receive_date', - display: 'Date', - type: 'datetime', - //TODO: dynamic min/max - min: '2005-01-01', - max: '2099-12-31' - }, - Country: { - table: 'pi', - column: 'country', - display: 'Country', - type: 'dropdown', - values: [ 'AE', 'AF', 'AL', 'AM', 'AO', 'AR', 'AT', 'AU', 'AW', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BG', 'BH', 'BJ', 'BM', 'BN', 'BO', 'BR', 'BS', 'CA', 'CH', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CW', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DO', 'DZ', 'EC', 'EE', 'EG', 'ES', 'FR', 'GB', 'GE', 'GH', 'GR', 'GT', 'GU', 'HK', 'HN', 'HR', 'HU', 'IE', 'IL', 'IM', 'IN', 'IS', 'IT', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LI', 'LK', 'LR', 'LT', 'LU', 'LV', 'MA', 'ME', 'MG', 'MK', 'MN', 'MR', 'MT', 'MX', 'MY', 'MZ', 'NC', 'NE', 'NG', 'NI', 'NL', 'NO', 'NP', 'NZ', 'OM', 'PA', 'PE', 'PH', 'PK', 'PL', 'PR', 'PS', 'PT', 'QA', 'RO', 'RS', 'SC', 'SE', 'SG', 'SI', 'SV', 'TH', 'TN', 'TW', 'TZ', 'UA', 'US', 'UY', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', 'XX', 'ZA', 'ZM' ], - canGroup: true - }, - Action: { - table: 'pf', - column: 'validation_action', - func: 'COALESCE([[COL]], \'no action\')', - display: 'Validation Action', - type: 'dropdown', - values: [ 'process', 'reject' ], - canGroup: true - }, - Status: { - table: 'cc', - column: 'contribution_status', - display: 'Contribution Status', - type: 'dropdown', - values: [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ], - labels: [ 'Completed', 'Pending', 'Cancelled', 'Failed', 'In Progress', 'Overdue', 'Settled', 'Paid', 'Refunded' ], - canGroup: true - }, - YearsAgo: { - table: 'cc', - column : 'receive_date', - func: 'timestampdiff(YEAR, [[COL]], utc_timestamp())', - display: 'Years ago', - type: 'number', - min: 0, - max: 12 - }, - MonthsAgo: { - table: 'cc', - column : 'receive_date', - func: 'timestampdiff(MONTH, [[COL]], utc_timestamp())', - display: 'Months ago', - type: 'number', - min: 0, - max: 10000 - }, - DaysAgo: { - table: 'cc', - column : 'receive_date', - func: 'timestampdiff(DAY, [[COL]], utc_timestamp())', - display: 'Days ago', - type: 'number', - min: 0, - max: 10000 - } - } + filters: filters }; -- To view, visit https://gerrit.wikimedia.org/r/200092 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I7bc14b8ba486d23a10c4014060c1a00c23c77105 Gerrit-PatchSet: 3 Gerrit-Project: wikimedia/fundraising/dash Gerrit-Branch: master Gerrit-Owner: Ejegg <eeggles...@wikimedia.org> Gerrit-Reviewer: Ssmith <ssm...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits