X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FContribute%2FForm%2FContribution.php;h=e6340294e2f39c4a28c98e0a26d69f0b7997ff75;hb=66ea9833cfbb8ea215b2719090bc123746fa72c6;hp=04310298e833ea92ac5380b1e291daf4bdb0dd84;hpb=3bb2efa78052980f557b485e384f5bd1d638dc60;p=civicrm-core.git diff --git a/CRM/Contribute/Form/Contribution.php b/CRM/Contribute/Form/Contribution.php index 04310298e8..e6340294e2 100644 --- a/CRM/Contribute/Form/Contribution.php +++ b/CRM/Contribute/Form/Contribution.php @@ -203,6 +203,13 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP */ protected $statusMessageTitle; + /** + * Explicitly declare the form context. + */ + public function getDefaultContext() { + return 'create'; + } + /** * Set variables up before form is built. */ @@ -418,28 +425,11 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP else { $defaults['refund_trxn_id'] = isset($defaults['trxn_id']) ? $defaults['trxn_id'] : NULL; } - $dates = array( - 'receive_date', - 'receipt_date', - 'cancel_date', - 'thankyou_date', - ); - foreach ($dates as $key) { - if (!empty($defaults[$key])) { - list($defaults[$key], $defaults[$key . '_time']) - = CRM_Utils_Date::setDateDefaults(CRM_Utils_Array::value($key, $defaults), 'activityDateTime'); - } - } if (!$this->_id && empty($defaults['receive_date'])) { - list($defaults['receive_date'], - $defaults['receive_date_time'] - ) = CRM_Utils_Date::setDateDefaults(NULL, 'activityDateTime'); + $defaults['receive_date'] = date('Y-m-d H:i:s'); } - $this->assign('receive_date', CRM_Utils_Date::processDate(CRM_Utils_Array::value('receive_date', $defaults), - CRM_Utils_Array::value('receive_date_time', $defaults) - )); $currency = CRM_Utils_Array::value('currency', $defaults); $this->assign('currency', $currency); // Hack to get currency info to the js layer. CRM-11440. @@ -460,6 +450,23 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP * Build the form object. */ public function buildQuickForm() { + if ($this->_action & CRM_Core_Action::DELETE) { + $this->addButtons(array( + array( + 'type' => 'next', + 'name' => ts('Delete'), + 'spacing' => '         ', + 'isDefault' => TRUE, + ), + array( + 'type' => 'cancel', + 'name' => ts('Cancel'), + ), + ) + ); + return; + } + // FIXME: This probably needs to be done in preprocess if (CRM_Financial_BAO_FinancialType::isACLFinancialTypeStatus() && $this->_action & CRM_Core_Action::UPDATE @@ -592,23 +599,6 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $this->applyFilter('__ALL__', 'trim'); - if ($this->_action & CRM_Core_Action::DELETE) { - $this->addButtons(array( - array( - 'type' => 'next', - 'name' => ts('Delete'), - 'spacing' => '         ', - 'isDefault' => TRUE, - ), - array( - 'type' => 'cancel', - 'name' => ts('Cancel'), - ), - ) - ); - return; - } - //need to assign custom data type and subtype to the template $this->assign('customDataType', 'Contribution'); $this->assign('customDataSubType', $this->_contributionType); @@ -698,15 +688,14 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP } // add various dates - $this->addDateTime('receive_date', ts('Received'), FALSE, array('formatType' => 'activityDateTime')); + $this->addField('receive_date', array('entity' => 'contribution'), FALSE, FALSE); + $this->addField('receipt_date', array('entity' => 'contribution'), FALSE, FALSE); + $this->addField('cancel_date', array('entity' => 'contribution', 'label' => ts('Cancelled / Refunded Date')), FALSE, FALSE); if ($this->_online) { $this->assign('hideCalender', TRUE); } - $this->addDateTime('receipt_date', ts('Receipt Date'), FALSE, array('formatType' => 'activityDateTime')); - $this->addDateTime('cancel_date', ts('Cancelled / Refunded Date'), FALSE, array('formatType' => 'activityDateTime')); - $this->add('textarea', 'cancel_reason', ts('Cancellation / Refund Reason'), $attributes['cancel_reason']); $totalAmount = NULL; @@ -1082,13 +1071,6 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP CRM_Core_Config::singleton()->defaultCurrency ); - if (!empty($this->_params['receive_date'])) { - $this->_params['receive_date'] = CRM_Utils_Date::processDate($this->_params['receive_date'], $this->_params['receive_date_time']); - } - else { - $this->_params['receive_date'] = $now; - } - $this->_params['pcp_display_in_roll'] = CRM_Utils_Array::value('pcp_display_in_roll', $params); $this->_params['pcp_roll_nickname'] = CRM_Utils_Array::value('pcp_roll_nickname', $params); $this->_params['pcp_personal_note'] = CRM_Utils_Array::value('pcp_personal_note', $params); @@ -1134,11 +1116,6 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP if (!empty($this->_params['is_email_receipt'])) { $this->_params['receipt_date'] = $now; } - else { - $this->_params['receipt_date'] = CRM_Utils_Date::processDate($this->_params['receipt_date'], - $params['receipt_date_time'], TRUE - ); - } $this->set('params', $this->_params); @@ -1311,10 +1288,9 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP public function testSubmit($params, $action, $creditCardMode = NULL) { $defaults = array( 'soft_credit_contact_id' => array(), + 'receive_date' => date('Y-m-d H:i:s'), 'receipt_date' => '', - 'receipt_date_time' => '', 'cancel_date' => '', - 'cancel_date_time' => '', 'hidden_Premium' => 1, ); $this->_bltID = 5; @@ -1324,6 +1300,12 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP )); $this->_id = $params['id']; $this->_values = $existingContribution; + if (CRM_Contribute_BAO_Contribution::checkContributeSettings('invoicing')) { + $this->_values['tax_amount'] = civicrm_api3('contribution', 'getvalue', array( + 'id' => $params['id'], + 'return' => 'tax_amount', + )); + } } else { $existingContribution = array(); @@ -1400,7 +1382,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP // as a point of fragility rather than a logical 'if' clause. if ($priceSetId) { CRM_Price_BAO_PriceSet::processAmount($this->_priceSet['fields'], - $submittedValues, $lineItem[$priceSetId]); + $submittedValues, $lineItem[$priceSetId], NULL, $priceSetId); // Unset tax amount for offline 'is_quick_config' contribution. // @todo WHY - quick config was conceived as a quick way to configure contribution forms. // this is an example of 'other' functionality being hung off it. @@ -1414,6 +1396,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP // would cause breakage for negative values in some cases. $submittedValues['total_amount'] = CRM_Utils_Array::value('amount', $submittedValues); } + if ($this->_id) { if ($this->_compId) { if ($this->_context == 'participant') { @@ -1522,7 +1505,11 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP } if (!isset($submittedValues['total_amount'])) { - $submittedValues['total_amount'] = CRM_Utils_Array::value('total_amount', $this->_values) - CRM_Utils_Array::value('tax_amount', $this->_values); + $submittedValues['total_amount'] = CRM_Utils_Array::value('total_amount', $this->_values); + // Avoid tax amount deduction on edit form and keep it original, because this will lead to error described in CRM-20676 + if (!$this->_id) { + $submittedValues['total_amount'] -= CRM_Utils_Array::value('tax_amount', $this->_values, 0); + } } $this->assign('lineItem', !empty($lineItem) && !$isQuickConfig ? $lineItem : FALSE); @@ -1563,10 +1550,12 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP // get the required field value only. - $params = $ids = array(); - - $params['contact_id'] = $this->_contactID; - $params['currency'] = $this->getCurrency($submittedValues); + $params = [ + 'contact_id' => $this->_contactID, + 'currency' => $this->getCurrency($submittedValues), + 'skipCleanMoney' => TRUE, + 'id' => $this->_id, + ]; //format soft-credit/pcp param first CRM_Contribute_BAO_ContributionSoft::formatSoftCreditParams($submittedValues, $this); @@ -1586,10 +1575,6 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $params[$f] = CRM_Utils_Array::value($f, $formValues); } - // CRM-5740 if priceset is used, no need to cleanup money. - if ($priceSetId) { - $params['skipCleanMoney'] = 1; - } $params['revenue_recognition_date'] = NULL; if (!empty($formValues['revenue_recognition_date']) && count(array_filter($formValues['revenue_recognition_date'])) == 2 @@ -1598,17 +1583,6 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP '01-' . implode('-', $formValues['revenue_recognition_date']) ); } - $dates = array( - 'receive_date', - 'receipt_date', - 'cancel_date', - ); - - foreach ($dates as $d) { - if (isset($formValues[$d])) { - $params[$d] = CRM_Utils_Date::processDate($formValues[$d], CRM_Utils_Array::value($d . '_time', $formValues), TRUE); - } - } if (!empty($formValues['is_email_receipt'])) { $params['receipt_date'] = date("Y-m-d"); @@ -1633,8 +1607,6 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $params['is_pay_later'] = 0; } - $ids['contribution'] = $params['id'] = $this->_id; - // Add Additional common information to formatted params. CRM_Contribute_Form_AdditionalInfo::postProcessCommon($formValues, $params, $this); if ($pId) { @@ -1660,7 +1632,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP if (!empty($params['note']) && !empty($submittedValues['note'])) { unset($params['note']); } - $contribution = CRM_Contribute_BAO_Contribution::create($params, $ids); + $contribution = CRM_Contribute_BAO_Contribution::create($params); // process associated membership / participant, CRM-4395 if ($contribution->id && $action & CRM_Core_Action::UPDATE) { @@ -1685,7 +1657,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $formValues += CRM_Contribute_BAO_ContributionSoft::getSoftContribution($contribution->id); // to get 'from email id' for send receipt - $this->fromEmailId = $formValues['from_email_address']; + $this->fromEmailId = CRM_Utils_Array::value('from_email_address', $formValues); if (CRM_Contribute_Form_AdditionalInfo::emailReceipt($this, $formValues)) { $this->statusMessage[] = ts('A receipt has been emailed to the contributor.'); }