Skip to content

Commit

Permalink
Merge pull request #9338 from eileenmcnaughton/pradeep
Browse files Browse the repository at this point in the history
CRM-16189, more code clean-up.
  • Loading branch information
eileenmcnaughton authored Oct 31, 2016
2 parents aab35da + 955ee56 commit 43d3633
Show file tree
Hide file tree
Showing 11 changed files with 37 additions and 75 deletions.
61 changes: 21 additions & 40 deletions CRM/Contribute/BAO/Contribution.php
Original file line number Diff line number Diff line change
Expand Up @@ -1839,7 +1839,7 @@ public static function transitionComponents($params, $processContributionObject

// Figure out number of terms
$numterms = 1;
$lineitems = CRM_Price_BAO_LineItem::getLineItems($contributionId, 'contribution');
$lineitems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($contributionId);
foreach ($lineitems as $lineitem) {
if ($membership->membership_type_id == CRM_Utils_Array::value('membership_type_id', $lineitem)) {
$numterms = CRM_Utils_Array::value('membership_num_terms', $lineitem);
Expand Down Expand Up @@ -4902,21 +4902,16 @@ protected static function getRecurringContributionDescription($contribution, $ev
* Function to add payments for contribution
* for Partially Paid status
*
* @param array $lineItems
* @param array $contributions
* @param array $contributionStatusId
*
*/
public static function addPayments($lineItems, $contributions, $contributionStatusId = NULL) {
public static function addPayments($contributions, $contributionStatusId = NULL) {
// get financial trxn which is a payment
$ftSql = "SELECT ft.id, ft.total_amount
FROM civicrm_financial_trxn ft
INNER JOIN civicrm_entity_financial_trxn eft ON eft.financial_trxn_id = ft.id AND eft.entity_table = 'civicrm_contribution'
WHERE eft.entity_id = %1 AND ft.is_payment = 1 ORDER BY ft.id DESC LIMIT 1";
$sql = "SELECT fi.id, li.price_field_value_id
FROM civicrm_financial_item fi
INNER JOIN civicrm_line_item li ON li.id = fi.entity_id
WHERE li.contribution_id = %1";
$contributionStatus = CRM_Core_PseudoConstant::get('CRM_Contribute_DAO_Contribution', 'contribution_status_id', array(
'labelColumn' => 'name',
));
Expand All @@ -4928,62 +4923,48 @@ public static function addPayments($lineItems, $contributions, $contributionStat
}
$ftDao = CRM_Core_DAO::executeQuery($ftSql, array(1 => array($contribution->id, 'Integer')));
$ftDao->fetch();
$trxnAmount = $ftDao->total_amount;
$ftId = $ftDao->id;

// get financial item
$dao = CRM_Core_DAO::executeQuery($sql, array(1 => array($contribution->id, 'Integer')));
while ($dao->fetch()) {
$ftIds[$dao->price_field_value_id] = $dao->id;
}

$params = array(
'entity_table' => 'civicrm_financial_item',
'financial_trxn_id' => $ftId,
// store financial item Proportionaly.
$trxnParams = array(
'total_amount' => $ftDao->total_amount,
'contribution_id' => $contribution->id,
);
foreach ($lineItems as $key => $value) {
if ($value['qty'] == 0) {
continue;
}
$paid = $value['line_total'] * ($trxnAmount / $contribution->total_amount);
// Record Entity Financial Trxn
$params['amount'] = round($paid, 2);
$params['entity_id'] = $ftIds[$value['price_field_value_id']];

civicrm_api3('EntityFinancialTrxn', 'create', $params);
}
self::assignProportionalLineItems($trxnParams, $ftDao->id, $contribution->total_amount);
}
}

/**
* Function use to store line item proportionaly in
* in entity financial trxn table
*
* @param array $params
* array of contribution params.
* @param object $trxn
* CRM_Financial_DAO_FinancialTrxn object
* @param array $contribution
* @param array $trxnParams
*
* @param Integer $trxnId
*
* @param float $contributionTotalAmount
*
*/
public static function assignProportionalLineItems($params, $trxn, $contribution) {
$lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($params['contribution_id']);
public static function assignProportionalLineItems($trxnParams, $trxnId, $contributionTotalAmount) {
$lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($trxnParams['contribution_id']);
if (!empty($lineItems)) {
// get financial item
$sql = "SELECT fi.id, li.price_field_value_id
FROM civicrm_financial_item fi
INNER JOIN civicrm_line_item li ON li.id = fi.entity_id and fi.entity_table = 'civicrm_line_item'
WHERE li.contribution_id = %1";
$dao = CRM_Core_DAO::executeQuery($sql, array(1 => array($params['contribution_id'], 'Integer')));
$dao = CRM_Core_DAO::executeQuery($sql, array(1 => array($trxnParams['contribution_id'], 'Integer')));
while ($dao->fetch()) {
$ftIds[$dao->price_field_value_id] = $dao->id;
}
$eftParams = array(
'entity_table' => 'civicrm_financial_item',
'financial_trxn_id' => $trxn->id,
'financial_trxn_id' => $trxnId,
);
foreach ($lineItems as $key => $value) {
$paid = $value['line_total'] * ($params['total_amount'] / $contribution['total_amount']);
if ($value['qty'] == 0) {
continue;
}
$paid = $value['line_total'] * ($trxnParams['total_amount'] / $contributionTotalAmount);
// Record Entity Financial Trxn
$eftParams['amount'] = round($paid, 2);
$eftParams['entity_id'] = $ftIds[$value['price_field_value_id']];
Expand Down Expand Up @@ -5297,7 +5278,7 @@ protected function assignTestValue($fieldName, &$fieldDef, $counter) {
*/
public static function allowUpdateRevenueRecognitionDate($contributionId) {
// get line item for contribution
$lineItems = CRM_Price_BAO_LineItem::getLineItems($contributionId, 'contribution', NULL, TRUE, TRUE);
$lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($contributionId);
// check if line item is for membership or participant
foreach ($lineItems as $items) {
if ($items['entity_table'] == 'civicrm_participant') {
Expand Down
5 changes: 1 addition & 4 deletions CRM/Contribute/Form/AdditionalPayment.php
Original file line number Diff line number Diff line change
Expand Up @@ -392,10 +392,7 @@ public function postProcess() {
// Fetch the contribution & do proportional line item assignment
$params = array('id' => $this->_contributionId);
$contribution = CRM_Contribute_BAO_Contribution::retrieve($params, $defaults, $params);
$lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($this->_contributionId);
if (!empty($lineItems)) {
CRM_Contribute_BAO_Contribution::addPayments($lineItems, array($contribution), $contributionStatusId);
}
CRM_Contribute_BAO_Contribution::addPayments(array($contribution), $contributionStatusId);

// email sending
if (!empty($result) && !empty($submittedValues['is_email_receipt'])) {
Expand Down
4 changes: 2 additions & 2 deletions CRM/Contribute/Form/Contribution.php
Original file line number Diff line number Diff line change
Expand Up @@ -1535,15 +1535,15 @@ protected function submit($submittedValues, $action, $pledgePaymentID) {
);
CRM_Event_BAO_Participant::add($participantParams);
if (empty($this->_lineItems)) {
$this->_lineItems[] = CRM_Price_BAO_LineItem::getLineItems($entityID, 'participant', 1);
$this->_lineItems[] = CRM_Price_BAO_LineItem::getLineItems($entityID, 'participant', TRUE);
}
}
else {
$entityTable = 'contribution';
$entityID = $this->_id;
}

$lineItems = CRM_Price_BAO_LineItem::getLineItems($entityID, $entityTable, NULL, TRUE, $isRelatedId);
$lineItems = CRM_Price_BAO_LineItem::getLineItems($entityID, $entityTable, FALSE, TRUE, $isRelatedId);
foreach (array_keys($lineItems) as $id) {
$lineItems[$id]['id'] = $id;
}
Expand Down
7 changes: 2 additions & 5 deletions CRM/Contribute/Form/Task/Invoice.php
Original file line number Diff line number Diff line change
Expand Up @@ -322,14 +322,11 @@ public static function printPDF($contribIDs, &$params, $contactIds, &$form) {
$dueDate = date('F j ,Y', strtotime($contributionReceiveDate . "+" . $prefixValue['due_date'] . "" . $prefixValue['due_date_period']));

if ($input['component'] == 'contribute') {
$eid = $contribID;
$etable = 'contribution';
$lineItem = CRM_Price_BAO_LineItem::getLineItems($eid, $etable, NULL, TRUE, TRUE);
$lineItem = CRM_Price_BAO_LineItem::getLineItemsByContributionID($contribID);
}
else {
$eid = $contribution->_relatedObjects['participant']->id;
$etable = 'participant';
$lineItem = CRM_Price_BAO_LineItem::getLineItems($eid, $etable, NULL, TRUE, FALSE, '', TRUE);
$lineItem = CRM_Price_BAO_LineItem::getLineItems($eid, 'participant', NULL, TRUE, FALSE, TRUE);
}

//TO DO: Need to do changes for partially paid to display amount due on PDF invoice
Expand Down
2 changes: 1 addition & 1 deletion CRM/Event/Form/EventFees.php
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ public static function setDefaultPriceSet($participantID, $eventID = NULL, $incl
}

// use line items for setdefault price set fields, CRM-4090
$lineItems[$participantID] = CRM_Price_BAO_LineItem::getLineItems($participantID, 'participant', NULL, $includeQtyZero);
$lineItems[$participantID] = CRM_Price_BAO_LineItem::getLineItems($participantID, 'participant', FALSE, $includeQtyZero);

if (is_array($lineItems[$participantID]) &&
!CRM_Utils_System::isNull($lineItems[$participantID])
Expand Down
2 changes: 1 addition & 1 deletion CRM/Event/Form/Participant.php
Original file line number Diff line number Diff line change
Expand Up @@ -1457,7 +1457,7 @@ public function postProcess() {
$lineItem[$this->_priceSetId][$lineKey] = $line;
}
CRM_Price_BAO_LineItem::processPriceSet($participants[$num]->id, $lineItem, CRM_Utils_Array::value($num, $contributions, NULL), 'civicrm_participant');
CRM_Contribute_BAO_Contribution::addPayments($value, $contributions);
CRM_Contribute_BAO_Contribution::addPayments($contributions);
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion CRM/Event/Form/ParticipantFeeSelection.php
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ public function postProcess() {
* @return mixed
*/
public function emailReceipt(&$params) {
$updatedLineItem = CRM_Price_BAO_LineItem::getLineItems($this->_participantId, 'participant', NULL, FALSE);
$updatedLineItem = CRM_Price_BAO_LineItem::getLineItems($this->_participantId, 'participant', FALSE, FALSE);
$lineItem = array();
if ($updatedLineItem) {
$lineItem[] = $updatedLineItem;
Expand Down
2 changes: 1 addition & 1 deletion CRM/Member/Form/Membership.php
Original file line number Diff line number Diff line change
Expand Up @@ -1559,7 +1559,7 @@ public function submit() {
$result = CRM_Contribute_BAO_Contribution::transitionComponents($params, TRUE);
if (!empty($result) && !empty($params['contribution_id'])) {
$lineItem = array();
$lineItems = CRM_Price_BAO_LineItem::getLineItems($params['contribution_id'], 'contribution', NULL, TRUE, TRUE);
$lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($params['contribution_id']);
$itemId = key($lineItems);
$priceSetId = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceField', $lineItems[$itemId]['price_field_id'], 'price_set_id');

Expand Down
18 changes: 4 additions & 14 deletions CRM/Price/BAO/LineItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -188,20 +188,15 @@ public static function getLineItemsByContributionID($contributionID) {
* @param string $entity
* participant/contribution.
*
* @param null $isQuick
* @param bool $isQuick
* @param bool $isQtyZero
* @param bool $relatedEntity
*
* @param string $overrideWhereClause
* E.g "WHERE contribution id = 7 " per the getLineItemsByContributionID wrapper.
* this function precedes the convenience of the contribution id but since it does quite a bit more than just a db retrieval we need to be able to use it even
* when we don't want it's entity-id magix
*
* @param bool $invoice
* @return array
* Array of line items
*/
public static function getLineItems($entityId, $entity = 'participant', $isQuick = NULL, $isQtyZero = TRUE, $relatedEntity = FALSE, $overrideWhereClause = '', $invoice = FALSE) {
public static function getLineItems($entityId, $entity = 'participant', $isQuick = FALSE, $isQtyZero = TRUE, $relatedEntity = FALSE, $invoice = FALSE) {
$whereClause = $fromClause = NULL;
$selectClause = "
SELECT li.id,
Expand Down Expand Up @@ -270,9 +265,6 @@ public static function getLineItems($entityId, $entity = 'participant', $isQuick
$getTaxDetails = FALSE;
$invoiceSettings = Civi::settings()->get('contribution_invoice_settings');
$invoicing = CRM_Utils_Array::value('invoicing', $invoiceSettings);
if ($overrideWhereClause) {
$whereClause = $overrideWhereClause;
}

$dao = CRM_Core_DAO::executeQuery("$selectClause $fromClause $whereClause $orderByClause", $params);
while ($dao->fetch()) {
Expand All @@ -290,9 +282,7 @@ public static function getLineItems($entityId, $entity = 'participant', $isQuick
'field_title' => $dao->field_title,
'html_type' => $dao->html_type,
'description' => $dao->description,
// the entity id seems prone to randomness but not sure if it has a reason - so if we are overriding the Where clause we assume
// we also JUST WANT TO KNOW the the entity_id in the DB
'entity_id' => empty($overrideWhereClause) ? $entityId : $dao->entity_id,
'entity_id' => $dao->entity_id,
'entity_table' => $dao->entity_table,
'contribution_id' => $dao->contribution_id,
'financial_type_id' => $dao->financial_type_id,
Expand Down Expand Up @@ -582,7 +572,7 @@ public static function getLineItemArray(&$params, $entityId = NULL, $entityTable
$isRelatedID = TRUE;
}
foreach ($entityId as $id) {
$lineItems = CRM_Price_BAO_LineItem::getLineItems($id, $entityTable, NULL, TRUE, $isRelatedID);
$lineItems = CRM_Price_BAO_LineItem::getLineItems($id, $entityTable, FALSE, TRUE, $isRelatedID);
foreach ($lineItems as $key => $values) {
if (!$setID && $values['price_field_id']) {
$setID = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceField', $values['price_field_id'], 'price_set_id');
Expand Down
2 changes: 1 addition & 1 deletion api/v3/Payment.php
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ function civicrm_api3_payment_create(&$params) {
}
elseif (!empty($trxn)) {
// Assign the lineitems proportionally
CRM_Contribute_BAO_Contribution::assignProportionalLineItems($params, $trxn, $contribution);
CRM_Contribute_BAO_Contribution::assignProportionalLineItems($params, $trxn->id, $contribution['total_amount']);
}
}
}
Expand Down
7 changes: 2 additions & 5 deletions tests/phpunit/CRM/Contribute/BAO/ContributionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -585,9 +585,7 @@ public function testIsPaymentFlagForPending() {
*/
public function testAddPayments() {
list($lineItems, $contribution) = $this->addParticipantWithContribution();
foreach ($lineItems as $value) {
CRM_Contribute_BAO_Contribution::addPayments($value, array($contribution));
}
CRM_Contribute_BAO_Contribution::addPayments(array($contribution));
$this->checkItemValues($contribution);
}

Expand Down Expand Up @@ -617,15 +615,14 @@ public function checkItemValues($contribution) {
*/
public function testAssignProportionalLineItems() {
list($lineItems, $contribution) = $this->addParticipantWithContribution();
$contributions['total_amount'] = $contribution->total_amount;
$params = array(
'contribution_id' => $contribution->id,
'total_amount' => 150.00,
);
$trxn = new CRM_Financial_DAO_FinancialTrxn();
$trxn->orderBy('id DESC');
$trxn->find(TRUE);
CRM_Contribute_BAO_Contribution::assignProportionalLineItems($params, $trxn, $contributions);
CRM_Contribute_BAO_Contribution::assignProportionalLineItems($params, $trxn->id, $contribution->total_amount);
$this->checkItemValues($contribution);
}

Expand Down

0 comments on commit 43d3633

Please sign in to comment.