civicrm_api3_verify_one_mandatory($params, NULL, ['line_items', 'total_amount']);
$entity = NULL;
$entityIds = [];
+ $contributionStatus = CRM_Utils_Array::value('contribution_status_id', $params);
+ if ($contributionStatus !== 'Pending' && 'Pending' !== CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $contributionStatus)) {
+ CRM_Core_Error::deprecatedFunctionWarning('Creating a Order with a status other than pending is deprecated. Currently empty defaults to "Completed" so as a transition not passing in "Pending" is deprecated');
+ }
if (!empty($params['line_items']) && is_array($params['line_items'])) {
$priceSetID = NULL;
CRM_Contribute_BAO_Contribution::checkLineItems($params);
if ($entityParams) {
if (in_array($entity, ['participant', 'membership'])) {
$entityParams['skipLineItem'] = TRUE;
+ if ($contributionStatus === 'Pending') {
+ $entityParams['status_id'] = ($entity === 'participant' ? 'Pending from incomplete transaction' : 'Pending');
+ }
$entityResult = civicrm_api3($entity, 'create', $entityParams);
$params['contribution_mode'] = $entity;
$entityIds[] = $params[$entity . '_id'] = $entityResult['id'];
*/
function order_create_example() {
$params = [
- 'contact_id' => 8,
+ 'contact_id' => 3,
'receive_date' => '2010-01-20',
'financial_type_id' => 'Event Fee',
- 'contribution_status_id' => 1,
+ 'contribution_status_id' => 'Pending',
'line_items' => [
'0' => [
'line_item' => [
],
],
'params' => [
- 'contact_id' => 8,
+ 'contact_id' => 3,
'membership_type_id' => 2,
'join_date' => '2006-01-21',
'start_date' => '2006-01-21',
'end_date' => '2006-12-21',
'source' => 'Payment',
'is_override' => 1,
- 'status_id' => 1,
],
],
],
'values' => [
'1' => [
'id' => '1',
- 'contact_id' => '8',
+ 'contact_id' => '3',
'financial_type_id' => '4',
'contribution_page_id' => '',
'payment_instrument_id' => '4',
'contribution_recur_id' => '',
'is_test' => '',
'is_pay_later' => '',
- 'contribution_status_id' => '1',
+ 'contribution_status_id' => '2',
'address_id' => '',
'check_number' => '',
'campaign_id' => '',
$params = [
'contact_id' => 11,
'receive_date' => '2010-01-20',
- 'total_amount' => 300,
'financial_type_id' => 1,
- 'contribution_status_id' => 1,
+ 'contribution_status_id' => 'Pending',
'line_items' => [
'0' => [
'line_item' => [
'params' => [
'contact_id' => 11,
'event_id' => 1,
- 'status_id' => 1,
'role_id' => 1,
'register_date' => '2007-07-21 00:00:00',
'source' => 'Online Event Registration: API Testing',
'contribution_recur_id' => '',
'is_test' => '',
'is_pay_later' => '',
- 'contribution_status_id' => '1',
+ 'contribution_status_id' => '2',
'address_id' => '',
'check_number' => '',
'campaign_id' => '',
/**
* Test allowUpdateRevenueRecognitionDate.
+ *
+ * @throws \CRM_Core_Exception
*/
public function testAllowUpdateRevenueRecognitionDate() {
$contactId = $this->individualCreate();
'receive_date' => '2010-01-20',
'total_amount' => 100,
'financial_type_id' => 4,
+ 'contribution_status_id' => 'Pending',
];
- $order = $this->callAPISuccess('order', 'create', $params);
+ $order = $this->callAPISuccess('Order', 'create', $params);
$allowUpdate = CRM_Contribute_BAO_Contribution::allowUpdateRevenueRecognitionDate($order['id']);
$this->assertTrue($allowUpdate);
'receive_date' => '2010-01-20',
'total_amount' => 300,
'financial_type_id' => $this->getFinancialTypeId('Event Fee'),
- 'contribution_status_id' => 'Completed',
+ 'contribution_status_id' => 'Pending',
];
$priceFields = $this->createPriceSet('event', $event['id']);
foreach ($priceFields['values'] as $key => $priceField) {
'source' => 'Online Event Registration: API Testing',
],
];
- $order = $this->callAPISuccess('order', 'create', $params);
+ $order = $this->callAPISuccess('Order', 'create', $params);
$allowUpdate = CRM_Contribute_BAO_Contribution::allowUpdateRevenueRecognitionDate($order['id']);
$this->assertFalse($allowUpdate);
'receive_date' => '2010-01-20',
'total_amount' => 200,
'financial_type_id' => $this->getFinancialTypeId('Member Dues'),
- 'contribution_status_id' => 'Completed',
+ 'contribution_status_id' => 'Pending',
];
$membershipType = $this->membershipTypeCreate();
$priceFields = $this->createPriceSet();
'status_id' => 1,
],
];
- $order = $this->callAPISuccess('order', 'create', $params);
+ $order = $this->callAPISuccess('Order', 'create', $params);
$allowUpdate = CRM_Contribute_BAO_Contribution::allowUpdateRevenueRecognitionDate($order['id']);
$this->assertFalse($allowUpdate);
}
/**
* PR 13477 - Fix incorrect display of Line Items created via API
* when printing invoice (for Participants).
+ *
+ * @throws \CRM_Core_Exception
*/
public function testInvoiceForLineItems() {
return $total;
}),
'financial_type_id' => $priceFieldValues['values'][0]['financial_type_id'],
- 'contribution_status_id' => 'Completed',
+ 'contribution_status_id' => 'Pending',
'currency' => 'USD',
'line_items' => $lineItemParams,
];
* Financial Types, if an override is intended.
*/
protected function createContributionWithTwoLineItemsAgainstPriceSet($params, $lineItemFinancialTypes = []) {
- $params = array_merge(['total_amount' => 300, 'financial_type_id' => 'Donation'], $params);
+ $params = array_merge(['total_amount' => 300, 'financial_type_id' => 'Donation', 'contribution_status_id' => 'Pending'], $params);
$priceFields = $this->createPriceSet('contribution');
foreach ($priceFields['values'] as $key => $priceField) {
$financialTypeID = (!empty($lineItemFinancialTypes) ? array_shift($lineItemFinancialTypes) : $priceField['financial_type_id']);
'entity_table' => 'civicrm_contribution',
];
}
- $this->callAPISuccess('order', 'create', $params);
+ $order = $this->callAPISuccess('Order', 'create', $params);
+ $this->callAPISuccess('Payment', 'create', ['contribution_id' => $order['id'], 'total_amount' => $params['total_amount']]);
}
}
'contact_id' => $this->_individualId,
'receive_date' => '2010-01-20',
'financial_type_id' => 'Event Fee',
- 'contribution_status_id' => 1,
+ 'contribution_status_id' => 'Pending',
];
$priceFields = $this->createPriceSet();
foreach ($priceFields['values'] as $key => $priceField) {
'end_date' => '2006-12-21',
'source' => 'Payment',
'is_override' => 1,
- 'status_id' => 1,
],
];
$order = $this->callAPIAndDocument('order', 'create', $p, __FUNCTION__, __FILE__);
$order['id'] => [
'total_amount' => 200,
'contribution_id' => $order['id'],
- 'contribution_status' => 'Completed',
+ 'contribution_status' => 'Pending Label**',
'net_amount' => 200,
],
];
'end_date' => '2006-12-21',
'source' => 'Payment',
'is_override' => 1,
- 'status_id' => 1,
+ 'status_id' => 'Pending',
],
];
$p['total_amount'] = 300;
$expectedResult = [
$order['id'] => [
'total_amount' => 300,
- 'contribution_status' => 'Completed',
+ 'contribution_status' => 'Pending Label**',
'net_amount' => 300,
],
];
$p = [
'contact_id' => $this->_individualId,
'receive_date' => '2010-01-20',
- 'total_amount' => 300,
'financial_type_id' => $this->_financialTypeId,
- 'contribution_status_id' => 1,
+ 'contribution_status_id' => 'Pending',
];
$priceFields = $this->createPriceSet();
foreach ($priceFields['values'] as $key => $priceField) {
'params' => [
'contact_id' => $this->_individualId,
'event_id' => $this->_eventId,
- 'status_id' => 1,
'role_id' => 1,
'register_date' => '2007-07-21 00:00:00',
'source' => 'Online Event Registration: API Testing',
],
];
+
$order = $this->callAPIAndDocument('order', 'create', $p, __FUNCTION__, __FILE__, 'Create order for participant', 'CreateOrderParticipant');
- $params = [
- 'contribution_id' => $order['id'],
- ];
+ $params = ['contribution_id' => $order['id']];
$order = $this->callAPISuccess('order', 'get', $params);
$expectedResult = [
$order['id'] => [
'total_amount' => 300,
'contribution_id' => $order['id'],
- 'contribution_status' => 'Completed',
+ 'contribution_status' => 'Pending Label**',
'net_amount' => 300,
],
];
$this->checkPaymentResult($order, $expectedResult);
- $this->callAPISuccessGetCount('ParticipantPayment', $params, 1);
+ $paymentParticipant = $this->callAPISuccessGetSingle('ParticipantPayment', ['contribution_id' => $order['id']]);
+ $participant = $this->callAPISuccessGetSingle('Participant', ['participant_id' => $paymentParticipant['participant_id']]);
+ $this->assertEquals('Pending (incomplete transaction)', $participant['participant_status']);
$this->callAPISuccess('Contribution', 'Delete', [
'id' => $order['id'],
]);
+
$p['line_items'][] = [
'line_item' => $lineItems,
'params' => [
'contact_id' => $this->individualCreate(),
'event_id' => $this->_eventId,
- 'status_id' => 1,
'role_id' => 1,
'register_date' => '2007-07-21 00:00:00',
'source' => 'Online Event Registration: API Testing',
],
];
- $p['total_amount'] = 600;
+
$order = $this->callAPISuccess('order', 'create', $p);
$expectedResult = [
$order['id'] => [
'total_amount' => 600,
- 'contribution_status' => 'Completed',
+ 'contribution_status' => 'Pending Label**',
'net_amount' => 600,
],
];
'receive_date' => '2018-01-01',
'total_amount' => 50,
'financial_type_id' => $this->_financialTypeId,
- 'contribution_status_id' => 1,
+ 'contribution_status_id' => 'Pending',
'line_items' => [
0 => [
'line_item' => [
'receive_date' => '2018-01-01',
'total_amount' => 50,
'financial_type_id' => $this->_financialTypeId,
- 'contribution_status_id' => 1,
+ 'contribution_status_id' => 'Pending',
'tax_amount' => 15,
'line_items' => [
0 => [
'receive_date' => '2018-01-01',
'total_amount' => 50,
'financial_type_id' => $this->_financialTypeId,
- 'contribution_status_id' => 1,
+ 'contribution_status_id' => 'Pending',
'tax_amount' => 15,
'line_items' => [
0 => [