$this->callAPISuccess('contact', 'delete', array('id' => $contact2['id']));
}
+ /**
+ * Test creating contribution with Soft Credit by passing in honor_contact_id.
+ */
public function testCreateContributionWithHonoreeContact() {
$description = "Demonstrates creating contribution with Soft Credit by passing in honor_contact_id.";
$subfile = "ContributionCreateWithHonoreeContact";
// Default soft credit amount = contribution.total_amount
// Legacy mode in create api (honor_contact_id param) uses the standard "In Honor of" soft credit type
$this->assertEquals($this->_params['total_amount'], $result['values'][0]['soft_credit'][1]['amount']);
- $this->assertEquals(CRM_Core_OptionGroup::getValue('soft_credit_type', 'in_honor_of', 'name'), $result['values'][0]['soft_credit'][1]['soft_credit_type']);
+ $softCreditValueTypeID = $result['values'][0]['soft_credit'][1]['soft_credit_type'];
+ $this->assertEquals('in_honor_of', CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_ContributionSoft', 'soft_credit_type_id', $softCreditValueTypeID));
$this->callAPISuccess('contribution', 'delete', array('id' => $contribution['id']));
$this->callAPISuccess('contact', 'delete', array('id' => $contact2['id']));
* CHANGE: we require the API to do an incremental update
*/
public function testCreateUpdateContribution() {
-
$contributionID = $this->contributionCreate(array(
'contact_id' => $this->_individualId,
'trxn_id' => 212355,
$params = array(
'id' => $contributionID,
'contact_id' => $this->_individualId,
- 'total_amount' => 110.00,
+ 'total_amount' => 105.00,
+ 'fee_amount' => 7.00,
'financial_type_id' => $this->_financialTypeId,
- 'non_deductible_amount' => 10.00,
- 'net_amount' => 100.00,
+ 'non_deductible_amount' => 22.00,
'contribution_status_id' => 1,
'note' => 'Donating for Noble Cause',
-
);
$contribution = $this->callAPISuccess('contribution', 'create', $params);
$contribution = $this->callAPISuccessGetSingle('contribution', $new_params);
$this->assertEquals($contribution['contact_id'], $this->_individualId);
- $this->assertEquals($contribution['total_amount'], 110.00);
+ $this->assertEquals($contribution['total_amount'], 105.00);
$this->assertEquals($contribution['financial_type_id'], $this->_financialTypeId);
$this->assertEquals($contribution['financial_type'], 'Donation');
$this->assertEquals($contribution['instrument_id'], $old_payment_instrument);
- $this->assertEquals($contribution['non_deductible_amount'], 10.00);
- $this->assertEquals($contribution['fee_amount'], $old_fee_amount);
- $this->assertEquals($contribution['net_amount'], 100.00);
+ $this->assertEquals($contribution['non_deductible_amount'], 22.00);
+ $this->assertEquals($contribution['fee_amount'], 7.00);
$this->assertEquals($contribution['trxn_id'], $old_trxn_id);
$this->assertEquals($contribution['invoice_id'], $old_invoice_id);
$this->assertEquals($contribution['contribution_source'], $old_source);
$this->assertEquals($contribution['contribution_status'], 'Completed');
+
+ $this->assertEquals($contribution['net_amount'], $contribution['total_amount'] - $contribution['fee_amount']);
+
$params = array(
'contribution_id' => $contributionID,
}
/**
* CRM-19945 Tests repeattransaction is using a completed contribution for the template.
+ *
* ( Tests membership is renewed after repeattransaction. )
*/
public function testRepeatTransactionUsesCompleted() {
list($originalContribution, $membership) = $this->setUpAutoRenewMembership();
$this->callAPISuccess('contribution', 'create', array(
- 'contact_id' => $originalContribution['values'][1]['contact_id'],
- 'financial_type_id' => $originalContribution['values'][1]['financial_type_id'],
- 'total_amount' => $originalContribution['values'][1]['total_amount'],
- 'contribution_recur_id' => $originalContribution['values'][1]['contribution_recur_id'],
- 'contribution_status_id' => "Failed",
+ 'contact_id' => $originalContribution['values'][1]['contact_id'],
+ 'financial_type_id' => $originalContribution['values'][1]['financial_type_id'],
+ 'total_amount' => $originalContribution['values'][1]['total_amount'],
+ 'contribution_recur_id' => $originalContribution['values'][1]['contribution_recur_id'],
+ 'contribution_status_id' => "Failed",
));
$this->callAPISuccess('membership', 'create', array(
'status_id' => 4,
));
- $this->callAPISuccess('contribution', 'repeattransaction', array(
+ $contribution = $this->callAPISuccess('contribution', 'repeattransaction', array(
'contribution_recur_id' => $originalContribution['values'][1]['contribution_recur_id'],
'contribution_status_id' => 'Completed',
- 'trxn_id' => uniqid(),
+ 'trxn_id' => 'bobsled',
));
- $membershipStatus = $this->callAPISuccess('membership', 'getvalue', array(
+ $membershipStatusId = $this->callAPISuccess('membership', 'getvalue', array(
'id' => $membership['id'],
'return' => 'status_id',
));
- $this->assertEquals('1', $membershipStatus);
+ $this->assertEquals('New', CRM_Core_PseudoConstant::getLabel('CRM_Member_BAO_Membership', 'status_id', $membershipStatusId));
+
+ $lineItem = $this->callAPISuccessGetSingle('LineItem', array('contribution_id' => $contribution['id']));
+ $this->assertEquals('civicrm_membership', $lineItem['entity_table']);
+ $this->callAPISuccessGetCount('MembershipPayment', array('membership_id' => $membership['id']));
$this->quickCleanUpFinancialEntities();
$this->contactDelete($originalContribution['values'][1]['contact_id']);
}
* CRM-1960 - Test to ensure that completetransaction respects the is_email_receipt setting
*/
public function testCompleteTransactionWithEmailReceiptInput() {
- // Create a Contribution Page with is_email_receipt = TRUE
- $contributionPage = $this->callAPISuccess('ContributionPage', 'create', array(
- 'receipt_from_name' => 'Mickey Mouse',
- 'receipt_from_email' => 'mickey@mouse.com',
- 'title' => "Test Contribution Page",
- 'financial_type_id' => 1,
- 'currency' => 'CAD',
- 'is_monetary' => TRUE,
- 'is_email_receipt' => TRUE,
- ));
+ $contributionPage = $this->createReceiptableContributionPage();
+
$this->_params['contribution_page_id'] = $contributionPage['id'];
$params = array_merge($this->_params, array('contribution_status_id' => 2));
$contribution = $this->callAPISuccess('contribution', 'create', $params);
$this->assertEquals('', $receipt_date);
}
+ /**
+ * Test that $is_recur is assigned to the receipt.
+ */
+ public function testCompleteTransactionForRecurring() {
+
+ $this->swapMessageTemplateForTestTemplate();
+ $recurring = $this->setUpRecurringContribution();
+ $contributionPage = $this->createReceiptableContributionPage(array('is_recur' => TRUE, 'recur_frequency_unit' => 'month', 'recur_interval' => 1));
+
+ $this->_params['contribution_page_id'] = $contributionPage['id'];
+ $this->_params['contribution_recur_id'] = $recurring['id'];
+
+ $contribution = $this->setUpForCompleteTransaction();
+
+ $this->callAPISuccess('contribution', 'completetransaction', array(
+ 'id' => $contribution['id'],
+ 'trxn_date' => date('2011-04-09'),
+ 'trxn_id' => 'kazam',
+ 'is_email_receipt' => 1,
+ ));
+
+ $this->mut->checkMailLog(array(
+ 'is_recur:::1',
+ 'cancelSubscriptionUrl:::http://dummy.com',
+ ));
+ $this->mut->stop();
+ $this->revertTemplateToReservedTemplate();
+ }
+ /**
+ * CRM-19710 - Test to ensure that completetransaction respects the input for is_email_receipt setting.
+ *
+ * If passed in it will override the default from contribution page.
+ */
+ public function testCompleteTransactionWithEmailReceiptInputTrue() {
+ $mut = new CiviMailUtils($this, TRUE);
+ $this->createLoggedInUser();
+ // Create a Contribution Page with is_email_receipt = FALSE
+ $contributionPage = $this->callAPISuccess('ContributionPage', 'create', array(
+ 'receipt_from_name' => 'Mickey Mouse',
+ 'receipt_from_email' => 'mickey@mouse.com',
+ 'title' => "Test Contribution Page",
+ 'financial_type_id' => 1,
+ 'currency' => 'CAD',
+ 'is_monetary' => TRUE,
+ 'is_email_receipt' => 0,
+ ));
+ $this->_params['contribution_page_id'] = $contributionPage['id'];
+ $params = array_merge($this->_params, array('contribution_status_id' => 2, 'receipt_date' => 'now'));
+ $contribution = $this->callAPISuccess('contribution', 'create', $params);
+ // Complete the transaction overriding is_email_receipt to = TRUE
+ $this->callAPISuccess('contribution', 'completetransaction', array(
+ 'id' => $contribution['id'],
+ 'is_email_receipt' => 1,
+ ));
+ $mut->checkMailLog(array(
+ 'Please print this receipt for your records.',
+ ));
+ $mut->stop();
+ }
+
/**
* Complete the transaction using the template with all the possible.
*/
'id' => $trxn['financial_trxn_id'],
);
if ($context == 'payLater') {
- $relationTypeId = key(CRM_Core_PseudoConstant::accountOptionValues('account_relationship', NULL, " AND v.name LIKE 'Accounts Receivable Account is' "));
$compareParams = array(
'status_id' => 1,
- 'from_financial_account_id' => CRM_Contribute_PseudoConstant::financialAccountType($contribution['financial_type_id'], $relationTypeId),
+ 'from_financial_account_id' => CRM_Contribute_PseudoConstant::getRelationalFinancialAccount($contribution['financial_type_id'], 'Accounts Receivable Account is'),
);
}
elseif ($context == 'refund') {
*/
protected function setUpAutoRenewMembership($generalParams = array(), $recurParams = array()) {
$newContact = $this->callAPISuccess('Contact', 'create', array(
- 'contact_type' => 'Individual',
- 'sort_name' => 'McTesterson, Testy',
- 'display_name' => 'Testy McTesterson',
- 'preferred_language' => 'en_US',
- 'preferred_mail_format' => 'Both',
- 'first_name' => 'Testy',
- 'last_name' => 'McTesterson',
- 'contact_is_deleted' => '0',
- 'email_id' => '4',
- 'email' => 'tmctesterson@example.com',
- 'on_hold' => '0',
+ 'contact_type' => 'Individual',
+ 'sort_name' => 'McTesterson, Testy',
+ 'display_name' => 'Testy McTesterson',
+ 'preferred_language' => 'en_US',
+ 'preferred_mail_format' => 'Both',
+ 'first_name' => 'Testy',
+ 'last_name' => 'McTesterson',
+ 'contact_is_deleted' => '0',
+ 'email_id' => '4',
+ 'email' => 'tmctesterson@example.com',
+ 'on_hold' => '0',
));
$membershipType = $this->callAPISuccess('MembershipType', 'create', array(
'domain_id' => "Default Domain Name",
'financial_type_id' => "Member Dues",
'duration_unit' => "month",
'duration_interval' => 1,
+ 'period_type' => 'rolling',
'name' => "Standard Member",
'minimum_fee' => 100,
));
'frequency_unit' => 'month',
'payment_processor_id' => $this->paymentProcessorID,
), $generalParams, $recurParams));
+
+ $membership = $this->callAPISuccess('membership', 'create', array(
+ 'contact_id' => $newContact['id'],
+ 'contribution_recur_id' => $contributionRecur['id'],
+ 'financial_type_id' => "Member Dues",
+ 'membership_type_id' => $membershipType['id'],
+ 'num_terms' => 1,
+ 'skipLineItem' => TRUE,
+ ));
+
+ CRM_Price_BAO_LineItem::getLineItemArray($this->_params, NULL, 'membership', $membershipType['id']);
$originalContribution = $this->callAPISuccess('contribution', 'create', array_merge(
$this->_params,
array(
'invoice_id' => uniqid(),
), $generalParams)
);
- $membership = $this->callAPISuccess('membership', 'create', array(
- 'contact_id' => $newContact['id'],
- 'contribution_recur_id' => $contributionRecur['id'],
- 'financial_type_id' => "Member Dues",
- 'membership_type_id' => $membershipType['id'],
- 'num_terms' => 1,
- ));
+ $lineItem = $this->callAPISuccess('LineItem', 'getsingle', array());
+ $this->assertEquals('civicrm_membership', $lineItem['entity_table']);
+ $membership = $this->callAPISuccess('Membership', 'getsingle', array('id' => $lineItem['entity_id']));
+ $this->callAPISuccess('LineItem', 'getsingle', array());
+ $this->callAPISuccessGetCount('MembershipPayment', array('membership_id' => $membership['id']), 1);
- $this->callAPISuccess('MembershipPayment', 'create', array(
- 'contribution_id' => $originalContribution['id'],
- 'membership_id' => $membership['id'],
- ));
return array($originalContribution, $membership);
}
/**
$this->quickCleanUpFinancialEntities();
}
+ /**
+ * CRM-20008 Tests repeattransaction creates pending membership.
+ */
+ public function testRepeatTransactionPendingMembership() {
+ list($originalContribution, $membership) = $this->setUpAutoRenewMembership();
+ $this->callAPISuccess('membership', 'create', array(
+ 'id' => $membership['id'],
+ 'end_date' => 'yesterday',
+ 'status_id' => 'Expired',
+ ));
+ $repeatedContribution = $this->callAPISuccess('contribution', 'repeattransaction', array(
+ 'contribution_recur_id' => $originalContribution['values'][1]['contribution_recur_id'],
+ 'contribution_status_id' => 'Pending',
+ 'trxn_id' => uniqid(),
+ ));
+ $membershipStatusId = $this->callAPISuccess('membership', 'getvalue', array(
+ 'id' => $membership['id'],
+ 'return' => 'status_id',
+ ));
+
+ // Let's see if the membership payments got created while we're at it.
+ $membershipPayments = $this->callAPISuccess('MembershipPayment', 'get', array(
+ 'memberhip_id' => $membership['id'],
+ ));
+ $this->assertEquals(2, $membershipPayments['count']);
+
+ $this->assertEquals('Expired', CRM_Core_PseudoConstant::getLabel('CRM_Member_BAO_Membership', 'status_id', $membershipStatusId));
+ $this->callAPISuccess('Contribution', 'completetransaction', array('id' => $repeatedContribution['id']));
+ $membership = $this->callAPISuccessGetSingle('membership', array(
+ 'id' => $membership['id'],
+ 'return' => 'status_id, end_date',
+ ));
+ $this->assertEquals('New', CRM_Core_PseudoConstant::getLabel('CRM_Member_BAO_Membership', 'status_id', $membership['status_id']));
+ $this->assertEquals(date('Y-m-d', strtotime('yesterday + 1 month')), $membership['end_date']);
+
+ $this->quickCleanUpFinancialEntities();
+ $this->contactDelete($originalContribution['values'][1]['contact_id']);
+ }
+
+ /**
+ * Test sending a mail via the API.
+ */
+ public function testSendMailWithAPISetFromDetails() {
+ $mut = new CiviMailUtils($this, TRUE);
+ $contribution = $this->callAPISuccess('contribution', 'create', $this->_params);
+ $this->callAPISuccess('contribution', 'sendconfirmation', array(
+ 'id' => $contribution['id'],
+ 'receipt_from_email' => 'api@civicrm.org',
+ 'receipt_from_name' => 'CiviCRM LLC',
+ ));
+ $mut->checkMailLog(array(
+ 'From: CiviCRM LLC <api@civicrm.org>',
+ 'Contribution Information',
+ 'Please print this confirmation for your records',
+ ), array(
+ 'Event',
+ )
+ );
+ $mut->stop();
+ }
+
+ /**
+ * Test sending a mail via the API.
+ */
+ public function testSendMailWithNoFromSetFallToDomain() {
+ $this->createLoggedInUser();
+ $mut = new CiviMailUtils($this, TRUE);
+ $contribution = $this->callAPISuccess('contribution', 'create', $this->_params);
+ $this->callAPISuccess('contribution', 'sendconfirmation', array(
+ 'id' => $contribution['id'],
+ ));
+ $domain = $this->callAPISuccess('domain', 'getsingle', array('id' => 1));
+ $mut->checkMailLog(array(
+ 'From: ' . $domain['from_name'] . ' <' . $domain['from_email'] . '>',
+ 'Contribution Information',
+ 'Please print this confirmation for your records',
+ ), array(
+ 'Event',
+ )
+ );
+ $mut->stop();
+ }
+
+ /**
+ * Test sending a mail via the API.
+ */
+ public function testSendMailWithRepeatTransactionAPIFalltoDomain() {
+ $this->createLoggedInUser();
+ $mut = new CiviMailUtils($this, TRUE);
+ $contribution = $this->setUpRepeatTransaction(array(), 'single');
+ $this->callAPISuccess('contribution', 'repeattransaction', array(
+ 'contribution_status_id' => 'Completed',
+ 'trxn_id' => uniqid(),
+ 'original_contribution_id' => $contribution,
+ ));
+ $domain = $this->callAPISuccess('domain', 'getsingle', array('id' => 1));
+ $mut->checkMailLog(array(
+ 'From: ' . $domain['from_name'] . ' <' . $domain['from_email'] . '>',
+ 'Contribution Information',
+ 'Please print this confirmation for your records',
+ ), array(
+ 'Event',
+ )
+ );
+ $mut->stop();
+ }
+
+ /**
+ * Test sending a mail via the API.
+ */
+ public function testSendMailWithRepeatTransactionAPIFalltoContributionPage() {
+ $mut = new CiviMailUtils($this, TRUE);
+ $contributionPage = $this->contributionPageCreate(array('receipt_from_name' => 'CiviCRM LLC', 'receipt_from_email' => 'contributionpage@civicrm.org', 'is_email_receipt' => 1));
+ $paymentProcessorID = $this->paymentProcessorCreate();
+ $contributionRecur = $this->callAPISuccess('contribution_recur', 'create', array(
+ 'contact_id' => $this->_individualId,
+ 'installments' => '12',
+ 'frequency_interval' => '1',
+ 'amount' => '500',
+ 'contribution_status_id' => 1,
+ 'start_date' => '2012-01-01 00:00:00',
+ 'currency' => 'USD',
+ 'frequency_unit' => 'month',
+ 'payment_processor_id' => $paymentProcessorID,
+ ));
+ $originalContribution = $this->callAPISuccess('contribution', 'create', array_merge(
+ $this->_params,
+ array(
+ 'contribution_recur_id' => $contributionRecur['id'],
+ 'contribution_page_id' => $contributionPage['id']))
+ );
+ $this->callAPISuccess('contribution', 'repeattransaction', array(
+ 'contribution_status_id' => 'Completed',
+ 'trxn_id' => uniqid(),
+ 'original_contribution_id' => $originalContribution,
+ )
+ );
+ $mut->checkMailLog(array(
+ 'From: CiviCRM LLC <contributionpage@civicrm.org>',
+ 'Contribution Information',
+ 'Please print this confirmation for your records',
+ ), array(
+ 'Event',
+ )
+ );
+ $mut->stop();
+ }
+
+ /**
+ * Test sending a mail via the API.
+ */
+ public function testSendMailWithRepeatTransactionAPIFalltoSystemFromNoDefaultFrom() {
+ $mut = new CiviMailUtils($this, TRUE);
+ $originalContribution = $contribution = $this->setUpRepeatTransaction(array(), 'single');
+ $fromEmail = $this->CallAPISuccess('optionValue', 'get', array('is_default' => 1, 'option_group_id' => 'from_email_address', 'sequential' => 1));
+ foreach ($fromEmail['values'] as $from) {
+ $this->callAPISuccess('optionValue', 'create', array('is_default' => 0, 'id' => $from['id']));
+ }
+ $domain = $this->callAPISuccess('domain', 'getsingle', array('id' => CRM_Core_Config::domainID()));
+ $this->callAPISuccess('contribution', 'repeattransaction', array(
+ 'contribution_status_id' => 'Completed',
+ 'trxn_id' => uniqid(),
+ 'original_contribution_id' => $originalContribution,
+ )
+ );
+ $mut->checkMailLog(array(
+ 'From: ' . $domain['name'] . ' <' . $domain['domain_email'] . '>',
+ 'Contribution Information',
+ 'Please print this confirmation for your records',
+ ), array(
+ 'Event',
+ )
+ );
+ $mut->stop();
+ }
+
+ /**
+ * Create a Contribution Page with is_email_receipt = TRUE.
+ *
+ * @param array $params
+ * Params to overwrite with.
+ *
+ * @return array|int
+ */
+ protected function createReceiptableContributionPage($params = array()) {
+ $contributionPage = $this->callAPISuccess('ContributionPage', 'create', array_merge(array(
+ 'receipt_from_name' => 'Mickey Mouse',
+ 'receipt_from_email' => 'mickey@mouse.com',
+ 'title' => "Test Contribution Page",
+ 'financial_type_id' => 1,
+ 'currency' => 'CAD',
+ 'is_monetary' => TRUE,
+ 'is_email_receipt' => TRUE,
+ ), $params));
+ return $contributionPage;
+ }
+
+ /**
+ * function to test card_type and pan truncation.
+ */
+ public function testCardTypeAndPanTruncation() {
+ $creditCardTypeIDs = array_flip(CRM_Financial_DAO_FinancialTrxn::buildOptions('card_type_id'));
+ $contactId = $this->individualCreate();
+ $params = array(
+ 'contact_id' => $contactId,
+ 'receive_date' => '2016-01-20',
+ 'total_amount' => 100,
+ 'financial_type_id' => 1,
+ 'payment_instrument' => 'Credit Card',
+ 'card_type_id' => $creditCardTypeIDs['Visa'],
+ 'pan_truncation' => 4567,
+ );
+ $contribution = $this->callAPISuccess('contribution', 'create', $params);
+ $lastFinancialTrxnId = CRM_Core_BAO_FinancialTrxn::getFinancialTrxnId($contribution['id'], 'DESC');
+ $financialTrxn = $this->callAPISuccessGetSingle(
+ 'FinancialTrxn',
+ array(
+ 'id' => $lastFinancialTrxnId['financialTrxnId'],
+ 'return' => array('card_type_id', 'pan_truncation'),
+ )
+ );
+ $this->assertEquals(CRM_Utils_Array::value('card_type_id', $financialTrxn), $creditCardTypeIDs['Visa']);
+ $this->assertEquals(CRM_Utils_Array::value('pan_truncation', $financialTrxn), 4567);
+ $params = array(
+ 'id' => $contribution['id'],
+ 'pan_truncation' => 2345,
+ 'card_type_id' => $creditCardTypeIDs['Amex'],
+ );
+ $contribution = $this->callAPISuccess('contribution', 'create', $params);
+ $financialTrxn = $this->callAPISuccessGetSingle(
+ 'FinancialTrxn',
+ array(
+ 'id' => $lastFinancialTrxnId['financialTrxnId'],
+ 'return' => array('card_type_id', 'pan_truncation'),
+ )
+ );
+ $this->assertEquals(CRM_Utils_Array::value('card_type_id', $financialTrxn), $creditCardTypeIDs['Amex']);
+ $this->assertEquals(CRM_Utils_Array::value('pan_truncation', $financialTrxn), 2345);
+ }
+
}