}
}
// CRM-16189
+ $order = new CRM_Financial_BAO_Order();
+ $order->setPriceSelectionFromUnfilteredInput($fields);
+ if (isset($fields['total_amount'])) {
+ $order->setOverrideTotalAmount($fields['total_amount']);
+ }
+ $lineItems = $order->getLineItems();
try {
- CRM_Financial_BAO_FinancialAccount::checkFinancialTypeHasDeferred($fields, $self->_id, $self->_priceSet['fields']);
+ CRM_Financial_BAO_FinancialAccount::checkFinancialTypeHasDeferred($fields, $self->_id, $lineItems);
}
catch (CRM_Core_Exception $e) {
$errors['financial_type_id'] = ' ';
* @param int $contributionID
* Contribution ID
*
- * @param array $priceSetFields
- * Array of price fields of a price set.
+ * @param array $orderLineItems
+ * The line items from the Order.
*
* @return bool
*
*/
- public static function checkFinancialTypeHasDeferred($params, $contributionID = NULL, $priceSetFields = NULL) {
+ public static function checkFinancialTypeHasDeferred($params, $contributionID = NULL, $orderLineItems = []) {
if (!Civi::settings()->get('deferred_revenue_enabled')) {
return FALSE;
}
$financialTypeID = $params['prevContribution']->financial_type_id;
}
if (($contributionID || !empty($params['price_set_id'])) && empty($lineItems)) {
- if (!$contributionID) {
- CRM_Price_BAO_PriceSet::processAmount($priceSetFields,
- $params, $items);
- }
- else {
- $items = CRM_Price_BAO_LineItem::getLineItems($contributionID, 'contribution', TRUE, TRUE, TRUE);
- }
- if (!empty($items)) {
- $lineItems[] = $items;
- }
+ $lineItems[] = $orderLineItems;
}
$deferredFinancialType = self::getDeferredFinancialType();
$isError = FALSE;
];
}
+ /**
+ * Test formRule
+ */
+ public function testContributionFormRule() {
+ $fields = [
+ 'contact_id' => $this->_individualId,
+ 'financial_type_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'financial_type_id', 'Donation'),
+ 'currency' => 'USD',
+ 'total_amount' => '10',
+ 'price_set_id' => '',
+ 'source' => '',
+ 'contribution_status_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Completed'),
+ 'cancel_date' => '',
+ 'cancel_reason' => '',
+ 'receive_date' => date('Y-m-d H:i:s'),
+ 'from_email_address' => key(CRM_Core_BAO_Email::getFromEmail()),
+ 'receipt_date' => '',
+ 'payment_instrument_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'payment_instrument_id', 'Check'),
+ 'trxn_id' => '',
+ 'check_number' => '',
+ 'soft_credit_contact_id' => [
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ ],
+ 'soft_credit_amount' => [
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ ],
+ 'soft_credit_type' => [
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ ],
+ ];
+
+ $form = new CRM_Contribute_Form_Contribution();
+ $this->assertSame([], $form->formRule($fields, [], $form));
+ }
+
+ /**
+ * Check that formRule validates you can only have one contribution with a
+ * given trxn_id.
+ */
+ public function testContributionFormRuleDuplicateTrxn() {
+ $contribution = $this->callAPISuccess('Contribution', 'create', array_merge($this->_params, ['trxn_id' => '1234']));
+
+ $fields = [
+ 'contact_id' => $this->_individualId,
+ 'financial_type_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'financial_type_id', 'Donation'),
+ 'currency' => 'USD',
+ 'total_amount' => '10',
+ 'price_set_id' => '',
+ 'source' => '',
+ 'contribution_status_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Completed'),
+ 'cancel_date' => '',
+ 'cancel_reason' => '',
+ 'receive_date' => date('Y-m-d H:i:s'),
+ 'from_email_address' => key(CRM_Core_BAO_Email::getFromEmail()),
+ 'receipt_date' => '',
+ 'payment_instrument_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'payment_instrument_id', 'Check'),
+ 'trxn_id' => '1234',
+ 'check_number' => '',
+ 'soft_credit_contact_id' => [
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ ],
+ 'soft_credit_amount' => [
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ ],
+ 'soft_credit_type' => [
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ ],
+ ];
+
+ $form = new CRM_Contribute_Form_Contribution();
+ $this->assertEquals(['trxn_id' => "Transaction ID's must be unique. Transaction '1234' already exists in your database."], $form->formRule($fields, [], $form));
+ }
+
}