*/
protected $statusMessageTitle;
+ /**
+ * Explicitly declare the form context.
+ */
+ public function getDefaultContext() {
+ return 'create';
+ }
+
/**
* Set variables up before form is built.
*/
return;
}
- $this->assign('showCheckNumber', TRUE);
-
$this->_fromEmails = CRM_Core_BAO_Email::getFromEmail();
if (in_array('CiviPledge', CRM_Core_Config::singleton()->enableComponents) && !$this->_formType) {
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.
* 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
}
}
$allPanes = array();
- $recurJs = NULL;
+
//tax rate from financialType
$this->assign('taxRates', json_encode(CRM_Core_PseudoConstant::getTaxRates()));
$this->assign('currencies', json_encode(CRM_Core_OptionGroup::values('currencies_enabled')));
$invoicing = CRM_Utils_Array::value('invoicing', $invoiceSettings);
$this->assign('invoicing', $invoicing);
+ $buildRecurBlock = FALSE;
+
// display tax amount on edit contribution page
if ($invoicing && $this->_action & CRM_Core_Action::UPDATE && isset($this->_values['tax_amount'])) {
$this->assign('totalTaxAmount', $this->_values['tax_amount']);
}
if ($this->_noteID &&
- isset($this->_values['note'])
+ !CRM_Utils_System::isNull($this->_values['note'])
) {
$defaults['hidden_AdditionalDetail'] = 1;
}
$paneNames[ts('Premium Information')] = 'Premium';
}
- if (CRM_Core_Payment_Form::buildPaymentForm($this, $this->_paymentProcessor, FALSE, TRUE, $this->getDefaultPaymentInstrumentId()) == TRUE) {
+ $this->payment_instrument_id = CRM_Utils_Array::value('payment_instrument_id', $defaults, $this->getDefaultPaymentInstrumentId());
+ if (CRM_Core_Payment_Form::buildPaymentForm($this, $this->_paymentProcessor, FALSE, TRUE, $this->payment_instrument_id) == TRUE) {
if (!empty($this->_recurPaymentProcessors)) {
$buildRecurBlock = TRUE;
if ($this->_ppID) {
CRM_Contribute_Form_Contribution_Main::buildRecur($this);
$this->setDefaults(array('is_recur' => 0));
$this->assign('buildRecurBlock', TRUE);
- $recurJs = array('onChange' => "buildRecurBlock( this.value ); return false;");
}
}
}
+ $this->addPaymentProcessorSelect(FALSE, $buildRecurBlock);
foreach ($paneNames as $name => $type) {
$allPanes[$name] = $this->generatePane($type, $defaults);
$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);
$this->add('select', 'from_email_address', ts('Receipt From'), $this->_fromEmails);
- $status = CRM_Contribute_PseudoConstant::contributionStatus();
-
- // suppressing contribution statuses that are NOT relevant to pledges (CRM-5169)
- $statusName = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
- if ($this->_ppID) {
- foreach (array(
- 'Cancelled',
- 'Failed',
- 'In Progress',
- ) as $suppress) {
- unset($status[CRM_Utils_Array::key($suppress, $statusName)]);
- }
- }
- elseif ((!$this->_ppID && $this->_id) || !$this->_id) {
- $suppressFlag = FALSE;
- if ($this->_id) {
- $componentDetails = CRM_Contribute_BAO_Contribution::getComponentDetails($this->_id);
- if (CRM_Utils_Array::value('membership', $componentDetails) || CRM_Utils_Array::value('participant', $componentDetails)) {
- $suppressFlag = TRUE;
- }
- }
- if (!$suppressFlag) {
- foreach (array(
- 'Overdue',
- 'In Progress',
- ) as $suppress) {
- unset($status[CRM_Utils_Array::key($suppress, $statusName)]);
- }
+ $component = 'contribution';
+ if ($this->_id) {
+ $componentDetails = CRM_Contribute_BAO_Contribution::getComponentDetails($this->_id);
+ if (CRM_Utils_Array::value('membership', $componentDetails)) {
+ $component = 'membership';
}
- else {
- unset($status[CRM_Utils_Array::key('Overdue', $statusName)]);
+ elseif (CRM_Utils_Array::value('participant', $componentDetails)) {
+ $component = 'participant';
}
}
+ if ($this->_ppID) {
+ $component = 'pledge';
+ }
+ $status = CRM_Contribute_BAO_Contribution_Utils::getContributionStatuses($component, $this->_id);
// define the status IDs that show the cancellation info, see CRM-17589
$cancelInfo_show_ids = array();
- foreach (array_keys($statusName) as $status_id) {
+ foreach (array_keys($status) as $status_id) {
if (CRM_Contribute_BAO_Contribution::isContributionStatusNegative($status_id)) {
$cancelInfo_show_ids[] = "'$status_id'";
}
}
$this->assign('cancelInfo_show_ids', implode(',', $cancelInfo_show_ids));
- if ($this->_id) {
- $contributionStatus = CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_Contribution', $this->_id, 'contribution_status_id');
- $name = CRM_Utils_Array::value($contributionStatus, $statusName);
- switch ($name) {
- case 'Completed':
- // [CRM-17498] Removing unsupported status change options.
- unset($status[CRM_Utils_Array::key('Pending', $statusName)]);
- unset($status[CRM_Utils_Array::key('Failed', $statusName)]);
- unset($status[CRM_Utils_Array::key('Partially paid', $statusName)]);
- unset($status[CRM_Utils_Array::key('Pending refund', $statusName)]);
- case 'Cancelled':
- case 'Chargeback':
- case 'Refunded':
- unset($status[CRM_Utils_Array::key('In Progress', $statusName)]);
- unset($status[CRM_Utils_Array::key('Pending', $statusName)]);
- unset($status[CRM_Utils_Array::key('Failed', $statusName)]);
- break;
-
- case 'Pending':
- case 'In Progress':
- unset($status[CRM_Utils_Array::key('Refunded', $statusName)]);
- unset($status[CRM_Utils_Array::key('Chargeback', $statusName)]);
- break;
-
- case 'Failed':
- foreach (array(
- 'Pending',
- 'Refunded',
- 'Chargeback',
- 'Completed',
- 'In Progress',
- 'Cancelled',
- ) as $suppress) {
- unset($status[CRM_Utils_Array::key($suppress, $statusName)]);
- }
- break;
- }
- }
- else {
- unset($status[CRM_Utils_Array::key('Refunded', $statusName)]);
- unset($status[CRM_Utils_Array::key('Chargeback', $statusName)]);
- }
-
$statusElement = $this->add('select', 'contribution_status_id',
ts('Contribution Status'),
$status,
}
// 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);
}
- $checkNumber = $this->add('text', 'check_number', ts('Check Number'), $attributes['contribution_check_number']);
-
- $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']);
- $this->add('text', 'refund_trxn_id', ts('Transaction ID for the refund payment'));
- $element = $this->add('select',
- 'payment_processor_id',
- ts('Payment Processor'),
- $this->_processors,
- NULL,
- $recurJs
- );
-
- if ($this->_online) {
- $element->freeze();
- }
$totalAmount = NULL;
if (empty($this->_lineItems)) {
),
array(
'type' => 'cancel',
- 'name' => ts('Close'),
+ 'name' => ts('Cancel'),
),
)
);
// if status is Cancelled freeze Amount, Payment Instrument, Check #, Financial Type,
// Net and Fee Amounts are frozen in AdditionalInfo::buildAdditionalDetail
- if ($this->_id && $this->_values['contribution_status_id'] == array_search('Cancelled', $statusName)) {
+ if ($this->_id && ($this->_values['contribution_status_id'] == CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Cancelled'))) {
if ($totalAmount) {
$totalAmount->freeze();
}
- $checkNumber->freeze();
$paymentInstrument->freeze();
$trxnId->freeze();
$financialType->freeze();
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);
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);
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;
));
$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();
// 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.
// 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') {
}
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);
// 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);
$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
'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");
$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) {
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) {
$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.');
}
);
}
- if ($contribution->id && !empty($submittedValues['note'])) {
+ if ($contribution->id && array_key_exists('note', $submittedValues)) {
CRM_Contribute_Form_AdditionalInfo::processNote($submittedValues, $this->_contactID, $contribution->id, $this->_noteID);
}