//setting default join date and receive date
if ($this->_action == CRM_Core_Action::ADD) {
- $defaults['receive_date'] = date('Y-m-d H:i:s');
+ $defaults['receive_date'] = CRM_Utils_Time::date('Y-m-d H:i:s');
}
$defaults['num_terms'] = 1;
//setting default join date if there is no join date
if (empty($defaults['join_date'])) {
- $defaults['join_date'] = date('Y-m-d');
+ $defaults['join_date'] = CRM_Utils_Time::date('Y-m-d');
}
if (!empty($defaults['membership_end_date'])) {
CRM_Member_StatusOverrideTypes::getSelectOptions()
);
- $this->add('datepicker', 'status_override_end_date', ts('Status Override End Date'), '', FALSE, ['minDate' => date('Y-m-d'), 'time' => FALSE]);
+ $this->add('datepicker', 'status_override_end_date', ts('Status Override End Date'), '', FALSE, ['minDate' => CRM_Utils_Time::date('Y-m-d'), 'time' => FALSE]);
$this->addElement('checkbox', 'record_contribution', ts('Record Membership Payment?'));
* @param array $formValues
* @param object $membership
* Object.
- * @param array $customValues
*
* @return bool
* true if mail was sent successfully
* & needs rationalising.
*
*/
- public static function emailReceipt(&$form, &$formValues, &$membership, $customValues = NULL) {
+ public static function emailReceipt($form, &$formValues, $membership) {
// retrieve 'from email id' for acknowledgement
$receiptFrom = $formValues['from_email_address'] ?? NULL;
$formValues['paidBy'] = $paymentInstrument[$formValues['payment_instrument_id']];
}
- $form->assign('customValues', $customValues);
-
if ($form->_mode) {
// @todo move this outside shared code as Batch entry just doesn't
$form->assign('address', CRM_Utils_Address::getFormattedBillingAddressFieldsFromParameters(
$form->assign('receive_date', CRM_Utils_Array::value('receive_date', $formValues));
$form->assign('formValues', $formValues);
- if (empty($lineItem)) {
- $form->assign('mem_start_date', CRM_Utils_Date::formatDateOnlyLong($membership->start_date));
- if (!CRM_Utils_System::isNull($membership->end_date)) {
- $form->assign('mem_end_date', CRM_Utils_Date::formatDateOnlyLong($membership->end_date));
- }
- $form->assign('membership_name', CRM_Member_PseudoConstant::membershipType($membership->membership_type_id));
+ $form->assign('mem_start_date', CRM_Utils_Date::formatDateOnlyLong($membership->start_date));
+ if (!CRM_Utils_System::isNull($membership->end_date)) {
+ $form->assign('mem_end_date', CRM_Utils_Date::formatDateOnlyLong($membership->end_date));
}
+ $form->assign('membership_name', CRM_Member_PseudoConstant::membershipType($membership->membership_type_id));
// @todo - if we have to figure out if this is for batch processing it doesn't belong in the shared function.
$isBatchProcess = is_a($form, 'CRM_Batch_Form_Entry');
// & we should aim to move this function to the BAO layer in future.
// however, we can assume that the contact_id passed in by the batch
// function will be the recipient
- list($form->_contributorDisplayName, $form->_contributorEmail)
+ [$form->_contributorDisplayName, $form->_contributorEmail]
= CRM_Contact_BAO_Contact_Location::getEmailDetails($formValues['contact_id']);
if (empty($form->_receiptContactId) || $isBatchProcess) {
$form->_receiptContactId = $formValues['contact_id'];
}
}
- // @todo determine isEmailPdf in calling function.
- $template = CRM_Core_Smarty::singleton();
- $taxAmt = $template->get_template_vars('dataArray');
- $eventTaxAmt = $template->get_template_vars('totalTaxAmount');
- $prefixValue = Civi::settings()->get('contribution_invoice_settings');
- $invoicing = $prefixValue['invoicing'] ?? NULL;
- if ((!empty($taxAmt) || isset($eventTaxAmt)) && (isset($invoicing) && isset($prefixValue['is_email_pdf']))) {
- $isEmailPdf = TRUE;
- }
- else {
- $isEmailPdf = FALSE;
- }
- list($mailSend, $subject, $message, $html) = CRM_Core_BAO_MessageTemplate::sendTemplate(
+ CRM_Core_BAO_MessageTemplate::sendTemplate(
[
'groupName' => 'msg_tpl_workflow_membership',
'valueName' => 'membership_offline_receipt',
'toName' => $form->_contributorDisplayName,
'toEmail' => $form->_contributorEmail,
'PDFFilename' => ts('receipt') . '.pdf',
- 'isEmailPdf' => $isEmailPdf,
+ 'isEmailPdf' => Civi::settings()->get('invoicing') && Civi::settings()->get('is_email_pdf'),
'contributionId' => $formValues['contribution_id'],
'isTest' => (bool) ($form->_action & CRM_Core_Action::PREVIEW),
]
}
// Retrieve the name and email of the current user - this will be the FROM for the receipt email
- list($userName) = CRM_Contact_BAO_Contact_Location::getEmailDetails(CRM_Core_Session::getLoggedInContactID());
+ [$userName] = CRM_Contact_BAO_Contact_Location::getEmailDetails(CRM_Core_Session::getLoggedInContactID());
//CRM-13981, allow different person as a soft-contributor of chosen type
if ($this->_contributorContactID != $this->_contactID) {
//get the payment processor id as per mode. Try removing in favour of beginPostProcess.
$params['payment_processor_id'] = $formValues['payment_processor_id'] = $this->_paymentProcessor['id'];
- $params['register_date'] = date('YmdHis');
+ $params['register_date'] = CRM_Utils_Time::date('YmdHis');
// add all the additional payment params we need
$formValues['amount'] = $params['total_amount'];
// we do need contribution and recurring records.
$result = NULL;
if (!empty($paymentParams['is_recur'])) {
- $financialType = new CRM_Financial_DAO_FinancialType();
- $financialType->id = $params['financial_type_id'];
- $financialType->find(TRUE);
$this->_params = $formValues;
- $contribution = self::processFormContribution($this,
+ $contribution = $this->processContribution(
$paymentParams,
- NULL,
[
'contact_id' => $this->_contributorContactID,
'line_item' => $lineItem,
'is_test' => $isTest,
'campaign_id' => $paymentParams['campaign_id'] ?? NULL,
- 'contribution_page_id' => $formValues['contribution_page_id'] ?? NULL,
'source' => CRM_Utils_Array::value('source', $paymentParams, CRM_Utils_Array::value('description', $paymentParams)),
- 'thankyou_date' => $paymentParams['thankyou_date'] ?? NULL,
'payment_instrument_id' => $paymentInstrumentID,
- ],
- $financialType,
- FALSE,
- $this->_bltID,
- TRUE
+ 'financial_type_id' => $params['financial_type_id'],
+ ]
);
//create new soft-credit record, CRM-13981
$paymentParams['contactID'] = $this->_contactID;
$paymentParams['contributionID'] = $contribution->id;
- $paymentParams['contributionTypeID'] = $contribution->financial_type_id;
- $paymentParams['contributionPageID'] = $contribution->contribution_page_id;
$paymentParams['contributionRecurID'] = $contribution->contribution_recur_id;
$params['contribution_id'] = $paymentParams['contributionID'];
$params['contribution_recur_id'] = $paymentParams['contributionRecurID'];
}
$endDate = $startDate = NULL;
}
- $now = date('YmdHis');
- $params['receive_date'] = date('Y-m-d H:i:s');
+ $now = CRM_Utils_Time::date('YmdHis');
+ $params['receive_date'] = CRM_Utils_Time::date('Y-m-d H:i:s');
$params['invoice_id'] = $formValues['invoiceID'];
$params['contribution_source'] = ts('%1 Membership Signup: Credit card or direct debit (by %2)',
[1 => $this->getSelectedMembershipLabels(), 2 => $userName]
// @todo figure out why recieve_date isn't being set right here.
if (empty($params['receive_date'])) {
- $params['receive_date'] = date('Y-m-d H:i:s');
+ $params['receive_date'] = CRM_Utils_Time::date('Y-m-d H:i:s');
}
$membershipParams = array_merge($params, $membershipTypeValues[$lineItemValues['membership_type_id']]);
*/
protected function emailMembershipReceipt($formValues, $membership) {
$customValues = $this->getCustomValuesForReceipt($formValues, $membership);
+ $this->assign('customValues', $customValues);
- return self::emailReceipt($this, $formValues, $membership, $customValues);
+ return self::emailReceipt($this, $formValues, $membership);
}
/**
* It's like the contribution create being done here is actively bad and
* being fixed later.
*
- * @param CRM_Core_Form $form
* @param array $params
- * @param array $result
* @param array $contributionParams
* Parameters to be passed to contribution create action.
* This differs from params in that we are currently adding params to it and 1) ensuring they are being
* - line_item
* - is_test
* - campaign_id
- * - contribution_page_id
* - source
* - payment_type_id
- * - thankyou_date (not all forms will set this)
- *
- * @param CRM_Financial_DAO_FinancialType $financialType
- * @param bool $online
- * Is the form a front end form? If so set a bunch of unpredictable things that should be passed in from the form.
- *
- * @param int $billingLocationID
- * ID of billing location type.
- * @param bool $isRecur
- * Is this recurring?
*
* @return \CRM_Contribute_DAO_Contribution
*
* @throws \CRM_Core_Exception
* @throws \CiviCRM_API3_Exception
*/
- public static function processFormContribution(
- &$form,
+ protected function processContribution(
$params,
- $result,
- $contributionParams,
- $financialType,
- $online,
- $billingLocationID,
- $isRecur
+ $contributionParams
) {
+ $form = $this;
$transaction = new CRM_Core_Transaction();
$contactID = $contributionParams['contact_id'];
$isEmailReceipt = !empty($form->_values['is_email_receipt']);
// add these values for the recurringContrib function ,CRM-10188
- $params['financial_type_id'] = $financialType->id;
-
- $contributionParams['address_id'] = CRM_Contribute_BAO_Contribution::createAddress($params, $billingLocationID);
+ $params['financial_type_id'] = $contributionParams['financial_type_id'];
//@todo - this is being set from the form to resolve CRM-10188 - an
// eNotice caused by it not being set @ the front end
if (!isset($params['is_email_receipt']) && $isEmailReceipt) {
$params['is_email_receipt'] = $isEmailReceipt;
}
- $params['is_recur'] = $isRecur;
+ $params['is_recur'] = TRUE;
$params['payment_instrument_id'] = $contributionParams['payment_instrument_id'] ?? NULL;
- $recurringContributionID = CRM_Contribute_Form_Contribution_Confirm::processRecurringContribution($form, $params, $contactID, $financialType);
+ $recurringContributionID = $this->legacyProcessRecurringContribution($params, $contactID);
- $now = date('YmdHis');
+ $now = CRM_Utils_Time::date('YmdHis');
$receiptDate = $params['receipt_date'] ?? NULL;
if ($isEmailReceipt) {
$receiptDate = $now;
}
if (isset($params['amount'])) {
- $contributionParams = array_merge(CRM_Contribute_Form_Contribution_Confirm::getContributionParams(
- $params, $financialType->id,
- $result, $receiptDate,
- $recurringContributionID), $contributionParams
- );
- $contributionParams['non_deductible_amount'] = CRM_Contribute_Form_Contribution_Confirm::getNonDeductibleAmount($params, $financialType, $online, $form);
+ $contributionParams = array_merge([
+ 'receive_date' => !empty($params['receive_date']) ? CRM_Utils_Date::processDate($params['receive_date']) : CRM_Utils_Time::date('YmdHis'),
+ 'tax_amount' => $params['tax_amount'] ?? NULL,
+ 'invoice_id' => $params['invoiceID'],
+ 'currency' => $params['currencyID'],
+ 'is_pay_later' => $params['is_pay_later'] ?? 0,
+ //setting to make available to hook - although seems wrong to set on form for BAO hook availability
+ 'skipLineItem' => $params['skipLineItem'] ?? 0,
+ ], $contributionParams);
+
+ if (!empty($params["is_email_receipt"])) {
+ $contributionParams += [
+ 'receipt_date' => $receiptDate,
+ ];
+ }
+
+ if ($recurringContributionID) {
+ $contributionParams['contribution_recur_id'] = $recurringContributionID;
+ }
+
+ $contributionParams['contribution_status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Pending');
+ if (isset($contributionParams['invoice_id'])) {
+ $contributionParams['id'] = CRM_Core_DAO::getFieldValue(
+ 'CRM_Contribute_DAO_Contribution',
+ $contributionParams['invoice_id'],
+ 'id',
+ 'invoice_id'
+ );
+ }
+
$contributionParams['skipCleanMoney'] = TRUE;
// @todo this is the wrong place for this - it should be done as close to form submission
// as possible
$contributionParams['total_amount'] = $params['amount'];
-
$contribution = CRM_Contribute_BAO_Contribution::add($contributionParams);
// lets store it in the form variable so postProcess hook can get to this and use it
//CRM-13981, processing honor contact into soft-credit contribution
CRM_Contribute_BAO_ContributionSoft::processSoftContribution($params, $contribution);
- if ($online && $contribution) {
- CRM_Core_BAO_CustomValueTable::postProcess($params,
- 'civicrm_contribution',
- $contribution->id,
- 'Contribution'
- );
- }
- elseif ($contribution) {
- //handle custom data.
- $params['contribution_id'] = $contribution->id;
- if (!empty($params['custom']) &&
- is_array($params['custom'])
- ) {
- CRM_Core_BAO_CustomValueTable::store($params['custom'], 'civicrm_contribution', $contribution->id);
- }
- }
- // Save note
- if ($contribution && !empty($params['contribution_note'])) {
- $noteParams = [
- 'entity_table' => 'civicrm_contribution',
- 'note' => $params['contribution_note'],
- 'entity_id' => $contribution->id,
- 'contact_id' => $contribution->contact_id,
- ];
-
- CRM_Core_BAO_Note::add($noteParams, []);
- }
+ $transaction->commit();
+ return $contribution;
+ }
- //create contribution activity w/ individual and target
- //activity w/ organisation contact id when onbelf, CRM-4027
- $actParams = [];
- $targetContactID = NULL;
- if (!empty($params['onbehalf_contact_id'])) {
- $actParams = [
- 'source_contact_id' => $params['onbehalf_contact_id'],
- 'on_behalf' => TRUE,
- ];
- $targetContactID = $contribution->contact_id;
+ /**
+ * Create the recurring contribution record.
+ *
+ * This function was copied from another form & needs cleanup.
+ *
+ * @param array $params
+ * @param int $contactID
+ *
+ * @return int
+ */
+ protected function legacyProcessRecurringContribution(array $params, $contactID): int {
+ $form = $this;
+
+ $recurParams = ['contact_id' => $contactID];
+ $recurParams['amount'] = $params['amount'] ?? NULL;
+ $recurParams['auto_renew'] = $params['auto_renew'] ?? NULL;
+ $recurParams['frequency_unit'] = $params['frequency_unit'] ?? NULL;
+ $recurParams['frequency_interval'] = $params['frequency_interval'] ?? NULL;
+ $recurParams['installments'] = $params['installments'] ?? NULL;
+ $recurParams['financial_type_id'] = $params['financial_type_id'];
+ $recurParams['currency'] = $params['currency'] ?? NULL;
+ $recurParams['payment_instrument_id'] = $params['payment_instrument_id'];
+
+ $recurParams['is_test'] = 0;
+ if (($form->_action & CRM_Core_Action::PREVIEW) ||
+ (isset($form->_mode) && ($form->_mode == 'test'))
+ ) {
+ $recurParams['is_test'] = 1;
}
- // create an activity record
- if ($contribution) {
- CRM_Activity_BAO_Activity::addActivity($contribution, 'Contribution', $targetContactID, $actParams);
+ $recurParams['start_date'] = $recurParams['create_date'] = $recurParams['modified_date'] = CRM_Utils_Time::date('YmdHis');
+ if (!empty($params['receive_date'])) {
+ $recurParams['start_date'] = date('YmdHis', CRM_Utils_Time::strtotime($params['receive_date']));
}
+ $recurParams['invoice_id'] = $params['invoiceID'] ?? NULL;
+ $recurParams['contribution_status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Pending');
+ $recurParams['payment_processor_id'] = $params['payment_processor_id'] ?? NULL;
+ $recurParams['is_email_receipt'] = (bool) ($params['is_email_receipt'] ?? FALSE);
+ // we need to add a unique trxn_id to avoid a unique key error
+ // in paypal IPN we reset this when paypal sends us the real trxn id, CRM-2991
+ $recurParams['trxn_id'] = $params['trxn_id'] ?? $params['invoiceID'];
- $transaction->commit();
- return $contribution;
+ $campaignId = $params['campaign_id'] ?? $form->_values['campaign_id'] ?? NULL;
+ $recurParams['campaign_id'] = $campaignId;
+ return CRM_Contribute_BAO_ContributionRecur::add($recurParams)->id;
}
}