/**
  * Flush statics relating to financial type.
  */
 protected function flushFinancialTypeStatics()
 {
     if (isset(\Civi::$statics['CRM_Financial_BAO_FinancialType'])) {
         unset(\Civi::$statics['CRM_Financial_BAO_FinancialType']);
     }
     if (isset(\Civi::$statics['CRM_Contribute_PseudoConstant'])) {
         unset(\Civi::$statics['CRM_Contribute_PseudoConstant']);
     }
     CRM_Contribute_PseudoConstant::flush('financialType');
     CRM_Contribute_PseudoConstant::flush('membershipType');
     // Pseudoconstants may be saved to the cache table.
     CRM_Core_DAO::executeQuery("TRUNCATE civicrm_cache");
     CRM_Financial_BAO_FinancialType::$_statusACLFt = array();
     CRM_Financial_BAO_FinancialType::$_availableFinancialTypes = NULL;
 }
 /**
  * Test checks that passing in line items suppresses the create mechanism.
  */
 public function testCreateACLContributionChainedLineItems()
 {
     $this->setACL();
     $params = array('contact_id' => $this->_individualId, 'receive_date' => '20120511', 'total_amount' => 100.0, 'financial_type_id' => $this->_financialTypeId, 'payment_instrument_id' => 1, 'non_deductible_amount' => 10.0, 'fee_amount' => 50.0, 'net_amount' => 90.0, 'source' => 'SSF', 'contribution_status_id' => 1, 'check_permissions' => TRUE, 'api.line_item.create' => array(array('price_field_id' => 1, 'qty' => 2, 'line_total' => '20', 'unit_price' => '10', 'financial_type_id' => 1), array('price_field_id' => 1, 'qty' => 1, 'line_total' => '80', 'unit_price' => '80', 'financial_type_id' => 2)));
     $description = "Create Contribution with Nested Line Items.";
     $subfile = "CreateWithNestedLineItems";
     $config =& CRM_Core_Config::singleton();
     $config->userPermissionClass->permissions = array('access CiviCRM', 'access CiviContribute', 'edit contributions', 'delete in CiviContribute', 'add contributions of type Donation', 'delete contributions of type Donation');
     $contribution = $this->callAPIFailure('contribution', 'create', $params, 'Error in call to LineItem_create : You do not have permission to create this line item');
     // Check that the entire contribution has rolled back.
     $contribution = $this->callAPISuccess('contribution', 'get', array());
     $this->assertEquals(0, $contribution['count']);
     CRM_Financial_BAO_FinancialType::$_availableFinancialTypes = NULL;
     $config =& CRM_Core_Config::singleton();
     $config->userPermissionClass->permissions = array_merge($config->userPermissionClass->permissions, array('add contributions of type Member Dues', 'view contributions of type Donation', 'view contributions of type Member Dues', 'delete contributions of type Member Dues'));
     $contribution = $this->callAPIAndDocument('contribution', 'create', $params, __FUNCTION__, __FILE__, $description, $subfile);
     $lineItemParams = array('contribution_id' => $contribution['id'], 'entity_table' => 'civicrm_contribution');
     $lineItems = $this->callAPISuccess('LineItem', 'get', $lineItemParams);
     $this->assertEquals(3, $lineItems['count']);
     $this->assertEquals(100.0, $lineItems['values'][3]['line_total']);
     $this->assertEquals(20, $lineItems['values'][4]['line_total']);
     $this->assertEquals(80, $lineItems['values'][5]['line_total']);
     $this->assertEquals(1, $lineItems['values'][3]['financial_type_id']);
     $this->assertEquals(1, $lineItems['values'][4]['financial_type_id']);
     $this->assertEquals(2, $lineItems['values'][5]['financial_type_id']);
     $this->callAPISuccess('Contribution', 'Delete', array('id' => $contribution['id']));
 }
 /**
  * Check method testisACLFinancialTypeStatus()
  */
 public function testbuildPermissionedClause()
 {
     $this->setACL();
     $config =& CRM_Core_Config::singleton();
     $config->userPermissionClass->permissions = array('view contributions of type Donation', 'view contributions of type Member Dues');
     CRM_Financial_BAO_FinancialType::buildPermissionedClause($whereClause, 'contribution');
     $this->assertEquals($whereClause, ' civicrm_contribution.financial_type_id IN (1,2)');
     $config->userPermissionClass->permissions[] = 'view contributions of type Event Fee';
     $whereClause = NULL;
     CRM_Financial_BAO_FinancialType::$_availableFinancialTypes = array();
     CRM_Financial_BAO_FinancialType::buildPermissionedClause($whereClause, 'contribution');
     $this->assertEquals($whereClause, ' civicrm_contribution.financial_type_id IN (1,4,2)');
 }