X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FContribute%2FBAO%2FContribution.php;h=c94874f3cfb20181482579533389600789487cb0;hb=97f643ccac726d7da37f5983aa4c6c9132c8e872;hp=3f6fc427cad0aec507425ce8901f9329ae14c851;hpb=8536e5a08fafdc38356ea583c9b8c1cc9dd3dc44;p=civicrm-core.git diff --git a/CRM/Contribute/BAO/Contribution.php b/CRM/Contribute/BAO/Contribution.php index 3f6fc427ca..c94874f3cf 100644 --- a/CRM/Contribute/BAO/Contribution.php +++ b/CRM/Contribute/BAO/Contribution.php @@ -1839,7 +1839,7 @@ LEFT JOIN civicrm_contribution contribution ON ( componentPayment.contribution_ // 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); @@ -1916,6 +1916,9 @@ LEFT JOIN civicrm_contribution contribution ON ( componentPayment.contribution_ //update related Memberships. CRM_Member_BAO_Membership::updateRelatedMemberships($membership->id, $formattedParams); + //CRM-19678: No Membership Renewal Activity is created when a Pay Later is set to Completed + CRM_Activity_BAO_Activity::addActivity($membership, 'Membership Renewal', $membership->contact_id); + $updateResult['membership_end_date'] = CRM_Utils_Date::customFormat($dates['end_date'], '%B %E%f, %Y' ); @@ -2640,10 +2643,12 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac } // set lineItem for contribution if ($this->id) { - $lineItem = CRM_Price_BAO_LineItem::getLineItems($this->id, 'contribution', 1); - if (!empty($lineItem)) { - $itemId = key($lineItem); - foreach ($lineItem as &$eachItem) { + $lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($this->id); + if (!empty($lineItems)) { + $firstLineItem = reset($lineItems); + $priceSet = civicrm_api3('PriceSet', 'getsingle', array('id' => $firstLineItem['price_set_id'], 'return' => 'is_quick_config, id')); + $values['priceSetID'] = $priceSet['id']; + foreach ($lineItems as &$eachItem) { if (isset($this->_relatedObjects['membership']) && is_array($this->_relatedObjects['membership']) && array_key_exists($eachItem['membership_type_id'], $this->_relatedObjects['membership'])) { @@ -2651,9 +2656,11 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac $eachItem['start_date'] = CRM_Utils_Date::customFormat($this->_relatedObjects['membership'][$eachItem['membership_type_id']]->start_date); $eachItem['end_date'] = CRM_Utils_Date::customFormat($this->_relatedObjects['membership'][$eachItem['membership_type_id']]->end_date); } + // This is actually used in conjunction with is_quick_config in the template & we should deprecate it. + // However, that does create upgrade pain so would be better to be phased in. + $values['useForMember'] = !$priceSet['is_quick_config']; } - $values['lineItem'][0] = $lineItem; - $values['priceSetID'] = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceField', $lineItem[$itemId]['price_field_id'], 'price_set_id'); + $values['lineItem'][0] = $lineItems; } } @@ -2807,9 +2814,6 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac $billingMode = empty($this->_relatedObjects['paymentProcessor']) ? CRM_Core_Payment::BILLING_MODE_NOTIFY : $this->_relatedObjects['paymentProcessor']['billing_mode']; $template->assign('contributeMode', CRM_Utils_Array::value($billingMode, CRM_Core_SelectValues::contributeMode())); - if (!empty($values['lineItem']) && !empty($this->_relatedObjects['membership'])) { - $values['useForMember'] = TRUE; - } //assign honor information to receipt message $softRecord = CRM_Contribute_BAO_ContributionSoft::getSoftContribution($this->id); @@ -3193,7 +3197,7 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac 'payment_instrument_id' => CRM_Utils_Array::value('payment_instrument_id', $params, $params['contribution']->payment_instrument_id), 'check_number' => CRM_Utils_Array::value('check_number', $params), ); - if ($contributionStatus == 'Refunded' || $contributionStatus == 'Chargeback') { + if ($contributionStatus == 'Refunded' || $contributionStatus == 'Chargeback' || $contributionStatus == 'Cancelled') { $trxnParams['trxn_date'] = !empty($params['contribution']->cancel_date) ? $params['contribution']->cancel_date : date('YmdHis'); if (isset($params['refund_trxn_id'])) { // CRM-17751 allow a separate trxn_id for the refund to be passed in via api & form. @@ -4511,6 +4515,7 @@ WHERE eft.financial_trxn_id IN ({$trxnId}, {$baseTrxnId['financialTrxnId']}) if ($input['component'] == 'contribute') { if ($contribution->contribution_page_id) { // Figure out what we gain from this. + // Note that we may have overwritten the is_email_receipt input, fix that below. CRM_Contribute_BAO_ContributionPage::setValues($contribution->contribution_page_id, $values); } elseif ($recurContrib && $recurringContributionID) { @@ -4519,7 +4524,11 @@ WHERE eft.financial_trxn_id IN ({$trxnId}, {$baseTrxnId['financialTrxnId']}) $values['title'] = $source = ts('Offline Recurring Contribution'); } - if ($recurContrib && $recurringContributionID && !isset($input['is_email_receipt'])) { + if (isset($input['is_email_receipt'])) { + // CRM-19601 - we may have overwritten this above. + $values['is_email_receipt'] = $input['is_email_receipt']; + } + elseif ($recurContrib && $recurringContributionID) { //CRM-13273 - is_email_receipt setting on recurring contribution should take precedence over contribution page setting // but CRM-16124 if $input['is_email_receipt'] is set then that should not be overridden. $values['is_email_receipt'] = $recurContrib->is_email_receipt; @@ -4597,6 +4606,8 @@ LIMIT 1;"; $var = TRUE; CRM_Member_BAO_Membership::createRelatedMemberships($var, $var, TRUE); civicrm_api3('Membership', 'create', $membershipParams); + //CRM-19600: Add Membership Renewal activity + CRM_Activity_BAO_Activity::addActivity($membership, 'Membership Renewal', $membership->contact_id); } } } @@ -4784,14 +4795,12 @@ LIMIT 1;"; FROM civicrm_membership_payment WHERE contribution_id = %1 "; $params = array(1 => array($this->id, 'Integer')); + $ids['membership'] = (array) CRM_Utils_Array::value('membership', $ids, array()); $dao = CRM_Core_DAO::executeQuery($query, $params); while ($dao->fetch()) { - if ($dao->membership_id) { - if (!is_array($ids['membership'])) { - $ids['membership'] = array(); - } - $ids['membership'][] = $dao->membership_id; + if ($dao->membership_id && !in_array($dao->membership_id, $ids['membership'])) { + $ids['membership'][$dao->membership_id] = $dao->membership_id; } } @@ -4901,21 +4910,16 @@ LIMIT 1;"; * 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', )); @@ -4927,30 +4931,13 @@ LIMIT 1;"; } $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); } } @@ -4958,31 +4945,34 @@ LIMIT 1;"; * 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']]; @@ -5296,7 +5286,7 @@ LEFT JOIN civicrm_contribution on (civicrm_contribution.contact_id = civicrm_co */ 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') {