Skip to content
Snippets Groups Projects
Commit 5d86176b authored by eileen's avatar eileen
Browse files

CRM-12642 add time to membership receive_date fields, move date_time handling...

CRM-12642 add time to membership receive_date fields, move date_time handling to Form for re-usability
parent 64071bf8
No related branches found
Tags 4.3.5
No related merge requests found
...@@ -76,6 +76,21 @@ class CRM_Core_Form extends HTML_QuickForm_Page { ...@@ -76,6 +76,21 @@ class CRM_Core_Form extends HTML_QuickForm_Page {
*/ */
protected $_renderer; protected $_renderer;
/**
* An array to hold a list of datefields on the form
* so that they can be converted to ISO in a consistent manner
*
* @var array
*
* e.g on a form declare $_dateFields = array(
* 'receive_date' => array('default' => 'now'),
* );
* then in postProcess call $this->convertDateFieldsToMySQL($formValues)
* to have the time field re-incorporated into the field & 'now' set if
* no value has been passed in
*/
protected $_dateFields = array();
/** /**
* cache the smarty template for efficiency reasons * cache the smarty template for efficiency reasons
* *
...@@ -1218,6 +1233,34 @@ class CRM_Core_Form extends HTML_QuickForm_Page { ...@@ -1218,6 +1233,34 @@ class CRM_Core_Form extends HTML_QuickForm_Page {
$this->setDefaults(array($name => $defaultCurrency)); $this->setDefaults(array($name => $defaultCurrency));
} }
/**
* Convert all date fields within the params to mysql date ready for the
* BAO layer. In this case fields are checked against the $_datefields defined for the form
* and if time is defined it is incorporated
*
* @param array $params input params from the form
*
* @todo it would probably be better to work on $this->_params than a passed array
* @todo standardise the format which dates are passed to the BAO layer in & remove date
* handling from BAO
*/
function convertDateFieldsToMySQL(&$params){
foreach ($this->_dateFields as $fieldName => $specs){
if(!empty($params[$fieldName])){
$params[$fieldName] = CRM_Utils_Date::isoToMysql(
CRM_Utils_Date::processDate(
$params[$fieldName],
CRM_Utils_Array::value("{$fieldName}_time", $params), TRUE)
);
}
else{
if(isset($specs['default'])){
$params[$fieldName] = date('YmdHis', strtotime($specs['default']));
}
}
}
}
function removeFileRequiredRules($elementName) { function removeFileRequiredRules($elementName) {
$this->_required = array_diff($this->_required, array($elementName)); $this->_required = array_diff($this->_required, array($elementName));
if (isset($this->_rules[$elementName])) { if (isset($this->_rules[$elementName])) {
......
...@@ -92,6 +92,16 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { ...@@ -92,6 +92,16 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
*/ */
protected $_membershipIDs = array( ); protected $_membershipIDs = array( );
/**
* An array to hold a list of datefields on the form
* so that they can be converted to ISO in a consistent manner
*
* @var array
*/
protected $_dateFields = array(
'receive_date' => array('default' => 'now'),
);
public function preProcess() { public function preProcess() {
//custom data related code //custom data related code
$this->_cdType = CRM_Utils_Array::value('type', $_GET); $this->_cdType = CRM_Utils_Array::value('type', $_GET);
...@@ -235,7 +245,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { ...@@ -235,7 +245,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
$resources->addScriptFile('civicrm', 'templates/CRM/Member/Form/Membership.js'); $resources->addScriptFile('civicrm', 'templates/CRM/Member/Form/Membership.js');
} }
} }
else { else {
$resources = CRM_Core_Resources::singleton(); $resources = CRM_Core_Resources::singleton();
$resources->addScriptFile('civicrm', 'templates/CRM/Member/Form/MembershipStandalone.js'); $resources->addScriptFile('civicrm', 'templates/CRM/Member/Form/MembershipStandalone.js');
$statuses = array(); $statuses = array();
...@@ -719,7 +729,7 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )'; ...@@ -719,7 +729,7 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )';
$this->add('text', 'total_amount', ts('Amount')); $this->add('text', 'total_amount', ts('Amount'));
$this->addRule('total_amount', ts('Please enter a valid amount.'), 'money'); $this->addRule('total_amount', ts('Please enter a valid amount.'), 'money');
$this->addDate('receive_date', ts('Received'), FALSE, array('formatType' => 'activityDate')); $this->addDate('receive_date', ts('Received'), FALSE, array('formatType' => 'activityDateTime'));
$this->add('select', 'payment_instrument_id', $this->add('select', 'payment_instrument_id',
ts('Paid By'), ts('Paid By'),
...@@ -1063,6 +1073,7 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )'; ...@@ -1063,6 +1073,7 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )';
$config = CRM_Core_Config::singleton(); $config = CRM_Core_Config::singleton();
// get the submitted form values. // get the submitted form values.
$this->_params = $formValues = $this->controller->exportValues($this->_name); $this->_params = $formValues = $this->controller->exportValues($this->_name);
$this->convertDateFieldsToMySQL($formValues);
$params = $ids = array(); $params = $ids = array();
...@@ -1168,12 +1179,6 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )'; ...@@ -1168,12 +1179,6 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )';
$$dateVariable = CRM_Utils_Date::processDate($formValues[$dateField]); $$dateVariable = CRM_Utils_Date::processDate($formValues[$dateField]);
} }
$dates = array(
'join_date',
'start_date',
'end_date',
);
$num_terms = CRM_Utils_Array::value('num_terms', $formValues, 1); $num_terms = CRM_Utils_Array::value('num_terms', $formValues, 1);
$calcDates = array(); $calcDates = array();
...@@ -1185,7 +1190,7 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )'; ...@@ -1185,7 +1190,7 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )';
} }
foreach ($calcDates as $memType => $calcDate) { foreach ($calcDates as $memType => $calcDate) {
foreach ($dates as $d) { foreach (array_keys($dateTypes) as $d) {
//first give priority to form values then calDates. //first give priority to form values then calDates.
$date = CRM_Utils_Array::value($d, $formValues); $date = CRM_Utils_Array::value($d, $formValues);
if (!$date) { if (!$date) {
...@@ -1276,11 +1281,8 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )'; ...@@ -1276,11 +1281,8 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )';
$this->assign('is_pay_later', 1); $this->assign('is_pay_later', 1);
} }
if (CRM_Utils_Array::value('receive_date', $params)) {
$formValues['receive_date'] = $params['receive_date'] = CRM_Utils_Date::processDate($params['receive_date']);
}
if (CRM_Utils_Array::value('send_receipt', $formValues)) { if (CRM_Utils_Array::value('send_receipt', $formValues)) {
$params['receipt_date'] = CRM_Utils_Array::value('receive_date', $params); $params['receipt_date'] = CRM_Utils_Array::value('receive_date', $formValues);
} }
//insert financial type name in receipt. //insert financial type name in receipt.
......
...@@ -72,6 +72,16 @@ class CRM_Member_Form_MembershipRenewal extends CRM_Member_Form { ...@@ -72,6 +72,16 @@ class CRM_Member_Form_MembershipRenewal extends CRM_Member_Form {
*/ */
protected $_context; protected $_context;
/**
* An array to hold a list of datefields on the form
* so that they can be converted to ISO in a consistent manner
*
* @var array
*/
protected $_dateFields = array(
'receive_date' => array('default' => 'now'),
);
public function preProcess() { public function preProcess() {
//custom data related code //custom data related code
$this->_cdType = CRM_Utils_Array::value('type', $_GET); $this->_cdType = CRM_Utils_Array::value('type', $_GET);
...@@ -436,7 +446,7 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )'; ...@@ -436,7 +446,7 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )';
$this->add('text', 'total_amount', ts('Amount')); $this->add('text', 'total_amount', ts('Amount'));
$this->addRule('total_amount', ts('Please enter a valid amount.'), 'money'); $this->addRule('total_amount', ts('Please enter a valid amount.'), 'money');
$this->addDate('receive_date', ts('Received'), FALSE, array('formatType' => 'activityDate')); $this->addDate('receive_date', ts('Received'), FALSE, array('formatType' => 'activityDateTime'));
$this->add('text', 'num_terms', ts('Extend Membership by'), array('onchange' => "setPaymentBlock();"), TRUE); $this->add('text', 'num_terms', ts('Extend Membership by'), array('onchange' => "setPaymentBlock();"), TRUE);
$this->addRule('num_terms', ts('Please enter a whole number for how many periods to renew.'), 'integer'); $this->addRule('num_terms', ts('Please enter a whole number for how many periods to renew.'), 'integer');
...@@ -563,12 +573,7 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )'; ...@@ -563,12 +573,7 @@ WHERE id IN ( ' . implode(' , ', array_keys($membershipType)) . ' )';
} }
$now = CRM_Utils_Date::getToday( null, 'YmdHis'); $now = CRM_Utils_Date::getToday( null, 'YmdHis');
if (CRM_Utils_Array::value('receive_date', $this->_params)) { $this->convertDateFieldsToMySQL($formValues);
$formValues['receive_date'] = CRM_Utils_Date::processDate($this->_params['receive_date']);
}
else {
$formValues['receive_date'] = $now;
}
$this->assign('receive_date', $formValues['receive_date']); $this->assign('receive_date', $formValues['receive_date']);
if (CRM_Utils_Array::value('send_receipt', $this->_params)) { if (CRM_Utils_Array::value('send_receipt', $this->_params)) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment