}
}
+ //if contribution is created with cancelled or refunded status, add credit note id
+ if (!empty($params['contribution_status_id'])) {
+ $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
+
+ if (($params['contribution_status_id'] == array_search('Refunded', $contributionStatus)
+ || $params['contribution_status_id'] == array_search('Cancelled', $contributionStatus))
+ ) {
+ if (empty($params['creditnote_id']) || $params['creditnote_id'] == "null") {
+ $params['creditnote_id'] = self::createCreditNoteId();
+ }
+ }
+ }
+
//set defaults in create mode
if (!$contributionID) {
CRM_Core_DAO::setCreateDefaults($params, self::getDefaults());
$setPrevContribution = FALSE;
}
}
+ if ($contributionID && $setPrevContribution) {
+ $params['prevContribution'] = self::getValues(array('id' => $contributionID), CRM_Core_DAO::$_nullArray, CRM_Core_DAO::$_nullArray);
+ }
if ($contributionID) {
CRM_Utils_Hook::pre('edit', 'Contribution', $contributionID, $params);
$contribution->currency = $config->defaultCurrency;
}
- if ($contributionID && $setPrevContribution) {
- $params['prevContribution'] = self::getValues(array('id' => $contributionID), CRM_Core_DAO::$_nullArray, CRM_Core_DAO::$_nullArray);
- }
-
$result = $contribution->save();
// Add financial_trxn details as part of fix for CRM-4724
}
}
+ //if contribution is created with cancelled or refunded status, add credit note id
+ if (!empty($params['contribution_status_id'])) {
+ $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
+
+ if (($params['contribution_status_id'] == array_search('Refunded', $contributionStatus)
+ || $params['contribution_status_id'] == array_search('Cancelled', $contributionStatus))
+ ) {
+ if (empty($params['creditnote_id']) || $params['creditnote_id'] == "null") {
+ $params['creditnote_id'] = self::createCreditNoteId();
+ }
+ }
+ }
+
$transaction = new CRM_Core_Transaction();
$contribution = self::add($params, $ids);
$softParams['soft_credit_type_id'] = CRM_Core_OptionGroup::getValue('soft_credit_type', 'pcp', 'name');
$contributionSoft = CRM_Contribute_BAO_ContributionSoft::add($softParams);
//Send notification to owner for PCP
- if ($contributionSoft->pcp_id) {
+ if ($contributionSoft->pcp_id && empty($pcpId)) {
CRM_Contribute_Form_Contribution_Confirm::pcpNotifyOwner($contribution, $contributionSoft);
}
}
$contributionDAO->id = $honorDAO->contribution_id;
if ($contributionDAO->find(TRUE)) {
- $params[$contributionDAO->id]['honor_type'] = CRM_Core_OptionGroup::getLabel('soft_credit_type', $honorDAO->soft_credit_type_id, 'value');
+ $params[$contributionDAO->id]['honor_type'] = CRM_Core_PseudoConstant::getLabel('CRM_Contribute_BAO_ContributionSoft', 'soft_credit_type_id', $honorDAO->soft_credit_type_id);
$params[$contributionDAO->id]['honorId'] = $contributionDAO->contact_id;
$params[$contributionDAO->id]['display_name'] = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $contributionDAO->contact_id, 'display_name');
$params[$contributionDAO->id]['type'] = $type[$contributionDAO->financial_type_id];
if (!empty($lineItem)) {
$itemId = key($lineItem);
foreach ($lineItem as &$eachItem) {
- if (array_key_exists($eachItem['membership_type_id'], $this->_relatedObjects['membership'])) {
+ if (is_array($this->_relatedObjects['membership']) && array_key_exists($eachItem['membership_type_id'], $this->_relatedObjects['membership'])) {
$eachItem['join_date'] = CRM_Utils_Date::customFormat($this->_relatedObjects['membership'][$eachItem['membership_type_id']]->join_date);
$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);
|| $params['contribution']->contribution_status_id == array_search('Cancelled', $contributionStatus))
) {
$params['trxnParams']['total_amount'] = -$params['total_amount'];
+ if (empty($params['contribution']->creditnote_id) || $params['contribution']->creditnote_id == "null") {
+ $creditNoteId = self::createCreditNoteId();
+ CRM_Core_DAO::setFieldValue('CRM_Contribute_DAO_Contribution', $params['contribution']->id, 'creditnote_id', $creditNoteId);
+ }
}
elseif (($params['prevContribution']->contribution_status_id == array_search('Pending', $contributionStatus)
&& $params['prevContribution']->is_pay_later) || $params['prevContribution']->contribution_status_id == array_search('In Progress', $contributionStatus)
) {
$financialTypeID = CRM_Utils_Array::value('financial_type_id', $params) ? $params['financial_type_id'] : $params['prevContribution']->financial_type_id;
+ $relationTypeId = key(CRM_Core_PseudoConstant::accountOptionValues('account_relationship', NULL, " AND v.name LIKE 'Accounts Receivable Account is' "));
+ $arAccountId = CRM_Contribute_PseudoConstant::financialAccountType($financialTypeID, $relationTypeId);
+
if ($params['contribution']->contribution_status_id == array_search('Cancelled', $contributionStatus)) {
- $params['trxnParams']['to_financial_account_id'] = NULL;
+ $params['trxnParams']['to_financial_account_id'] = $arAccountId;
$params['trxnParams']['total_amount'] = -$params['total_amount'];
+ if (is_null($params['contribution']->creditnote_id) || $params['contribution']->creditnote_id == "null") {
+ $creditNoteId = self::createCreditNoteId();
+ CRM_Core_DAO::setFieldValue('CRM_Contribute_DAO_Contribution', $params['contribution']->id, 'creditnote_id', $creditNoteId);
+ }
+ }
+ else {
+ $params['trxnParams']['from_financial_account_id'] = $arAccountId;
}
- $relationTypeId = key(CRM_Core_PseudoConstant::accountOptionValues('account_relationship', NULL, " AND v.name LIKE 'Accounts Receivable Account is' "));
- $params['trxnParams']['from_financial_account_id'] = CRM_Contribute_PseudoConstant::financialAccountType(
- $financialTypeID, $relationTypeId);
}
$itemAmount = $params['trxnParams']['total_amount'];
}
}
}
+ /**
+ * Generate credit note id with next avaible number
+ *
+ * @return string
+ * Credit Note Id.
+ */
+ public static function createCreditNoteId() {
+ $prefixValue = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::CONTRIBUTE_PREFERENCES_NAME, 'contribution_invoice_settings');
+
+ $creditNoteNum = CRM_Core_DAO::singleValueQuery("SELECT count(creditnote_id) as creditnote_number FROM civicrm_contribution");
+ $creditNoteId = NULL;
+
+ do {
+ $creditNoteNum++;
+ $creditNoteId = CRM_Utils_Array::value('credit_notes_prefix', $prefixValue) . "" . $creditNoteNum;
+ $result = civicrm_api3('Contribution', 'getcount', array(
+ 'sequential' => 1,
+ 'creditnote_id' => $creditNoteId,
+ ));
+ } while ($result > 0);
+
+ return $creditNoteId;
+ }
+
}