From edeee452239729227bcda176b3c8f260c948aaa0 Mon Sep 17 00:00:00 2001 From: eileen Date: Mon, 13 Feb 2017 23:08:10 +1300 Subject: [PATCH] CRM-20011 fix loss of data for yyyy-mm custom field --- js/Common.js | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/js/Common.js b/js/Common.js index df3ddb5fae..fae46f6495 100644 --- a/js/Common.js +++ b/js/Common.js @@ -718,7 +718,7 @@ if (!CRM.vars) CRM.vars = {}; function isValidDate() { // FIXME: parseDate doesn't work with incomplete date formats; skip validation if no month, day or year in format var lowerFormat = settings.dateFormat.toLowerCase(); - if (lowerFormat.indexOf('y') < 0 || lowerFormat.indexOf('m') < 0 || lowerFormat.indexOf('d') < 0) { + if (lowerFormat.indexOf('y') < 0 || lowerFormat.indexOf('m') < 0 || !dateHasDay()) { return true; } try { @@ -728,6 +728,19 @@ if (!CRM.vars) CRM.vars = {}; return false; } } + + /** + * Does the date format contain the day. + * + * @returns {boolean} + */ + function dateHasDay() { + var lowerFormat = settings.dateFormat.toLowerCase(); + if (lowerFormat.indexOf('d') < 0) { + return false; + } + return true; + } function updateInputFields(e, context) { var val = $dataField.val(), time = null; @@ -753,11 +766,16 @@ if (!CRM.vars) CRM.vars = {}; if (context !== 'crmClear') { var val = ''; if ($dateField.val()) { - if (hasDatepicker && isValidDate()) { + if (hasDatepicker && isValidDate() && dateHasDay()) { val = $.datepicker.formatDate('yy-mm-dd', $dateField.datepicker('getDate')); $dateField.removeClass('crm-error'); } else if (!hasDatepicker) { val = $dateField.val() + '-01-01'; + } + else if (!dateHasDay()) { + // This would be a Year-month date (yyyy-mm) + // it could be argued it should not use a datepicker.... + val = $dateField.val() + '-01'; } else { $dateField.addClass('crm-error'); } -- 2.25.1