add('hidden', 'hidden_Premium', 1); $sel1 = $sel2 = []; $dao = new CRM_Contribute_DAO_Product(); $dao->is_active = 1; $dao->find(); $min_amount = []; $sel1[0] = ts('-select product-'); while ($dao->fetch()) { $sel1[$dao->id] = $dao->name . " ( " . $dao->sku . " )"; $min_amount[$dao->id] = $dao->min_contribution; $options = explode(',', $dao->options); foreach ($options as $k => $v) { $options[$k] = trim($v); } if ($options[0] != '') { $sel2[$dao->id] = $options; } $form->assign('premiums', TRUE); } $form->_options = $sel2; $form->assign('mincontribution', $min_amount); $sel = &$form->addElement('hierselect', "product_name", ts('Premium'), 'onclick="showMinContrib();"'); $js = "\n"; $form->assign('initHideBoxes', $js); $form->add('datepicker', 'fulfilled_date', ts('Fulfilled'), [], FALSE, ['time' => FALSE]); $form->addElement('text', 'min_amount', ts('Minimum Contribution Amount')); } /** * Build the form object for Additional Details. * * @param CRM_Core_Form $form */ public static function buildAdditionalDetail(&$form) { //Additional information section $form->add('hidden', 'hidden_AdditionalDetail', 1); $attributes = CRM_Core_DAO::getAttribute('CRM_Contribute_DAO_Contribution'); $form->addField('thankyou_date', ['entity' => 'contribution'], FALSE, FALSE); // add various amounts $nonDeductAmount = &$form->add('text', 'non_deductible_amount', ts('Non-deductible Amount'), $attributes['non_deductible_amount'] ); $form->addRule('non_deductible_amount', ts('Please enter a valid monetary value for Non-deductible Amount.'), 'money'); if ($form->_online) { $nonDeductAmount->freeze(); } $feeAmount = &$form->add('text', 'fee_amount', ts('Fee Amount'), $attributes['fee_amount'] ); $form->addRule('fee_amount', ts('Please enter a valid monetary value for Fee Amount.'), 'money'); if ($form->_online) { $feeAmount->freeze(); } $element = &$form->add('text', 'invoice_id', ts('Invoice ID'), $attributes['invoice_id'] ); if ($form->_online) { $element->freeze(); } else { $form->addRule('invoice_id', ts('This Invoice ID already exists in the database.'), 'objectExists', ['CRM_Contribute_DAO_Contribution', $form->_id, 'invoice_id'] ); } $element = $form->add('text', 'creditnote_id', ts('Credit Note ID'), $attributes['creditnote_id'] ); if ($form->_online) { $element->freeze(); } else { $form->addRule('creditnote_id', ts('This Credit Note ID already exists in the database.'), 'objectExists', ['CRM_Contribute_DAO_Contribution', $form->_id, 'creditnote_id'] ); } $form->add('select', 'contribution_page_id', ts('Online Contribution Page'), [ '' => ts('- select -'), ] + CRM_Contribute_PseudoConstant::contributionPage() ); $form->add('textarea', 'note', ts('Notes'), ["rows" => 4, "cols" => 60]); $statusName = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name'); if ($form->_id && $form->_values['contribution_status_id'] == array_search('Cancelled', $statusName)) { $feeAmount->freeze(); } } /** * used by CRM/Pledge/Form/Pledge.php * * Build the form object for PaymentReminders Information. * * @param CRM_Core_Form $form */ public static function buildPaymentReminders(&$form) { //PaymentReminders section $form->add('hidden', 'hidden_PaymentReminders', 1); $form->add('text', 'initial_reminder_day', ts('Send Initial Reminder'), ['size' => 3]); $form->addRule('initial_reminder_day', ts('Please enter a valid reminder day.'), 'positiveInteger'); $form->add('text', 'max_reminders', ts('Send up to'), ['size' => 3]); $form->addRule('max_reminders', ts('Please enter a valid No. of reminders.'), 'positiveInteger'); $form->add('text', 'additional_reminder_day', ts('Send additional reminders'), ['size' => 3]); $form->addRule('additional_reminder_day', ts('Please enter a valid additional reminder day.'), 'positiveInteger'); } /** * Process the Premium Information. * * @param array $params * @param int $contributionID * @param int $premiumID * @param array $options */ public static function processPremium($params, $contributionID, $premiumID = NULL, $options = []) { $selectedProductID = $params['product_name'][0]; $selectedProductOptionID = CRM_Utils_Array::value(1, $params['product_name']); $dao = new CRM_Contribute_DAO_ContributionProduct(); $dao->contribution_id = $contributionID; $dao->product_id = $selectedProductID; $dao->fulfilled_date = $params['fulfilled_date']; $isDeleted = FALSE; //CRM-11106 $premiumParams = [ 'id' => $selectedProductID, ]; $productDetails = []; CRM_Contribute_BAO_Product::retrieve($premiumParams, $productDetails); $dao->financial_type_id = CRM_Utils_Array::value('financial_type_id', $productDetails); if (!empty($options[$selectedProductID])) { $dao->product_option = $options[$selectedProductID][$selectedProductOptionID]; } if ($premiumID) { $ContributionProduct = new CRM_Contribute_DAO_ContributionProduct(); $ContributionProduct->id = $premiumID; $ContributionProduct->find(TRUE); if ($ContributionProduct->product_id == $selectedProductID) { $dao->id = $premiumID; } else { $ContributionProduct->delete(); $isDeleted = TRUE; } } $dao->save(); //CRM-11106 if ($premiumID == NULL || $isDeleted) { $premiumParams = [ 'cost' => CRM_Utils_Array::value('cost', $productDetails), 'currency' => CRM_Utils_Array::value('currency', $productDetails), 'financial_type_id' => CRM_Utils_Array::value('financial_type_id', $productDetails), 'contributionId' => $contributionID, ]; if ($isDeleted) { $premiumParams['oldPremium']['product_id'] = $ContributionProduct->product_id; $premiumParams['oldPremium']['contribution_id'] = $ContributionProduct->contribution_id; } CRM_Core_BAO_FinancialTrxn::createPremiumTrxn($premiumParams); } } /** * Process the Note. * * * @param array $params * @param int $contactID * @param int $contributionID * @param int $contributionNoteID */ public static function processNote($params, $contactID, $contributionID, $contributionNoteID = NULL) { if (CRM_Utils_System::isNull($params['note']) && $contributionNoteID) { CRM_Core_BAO_Note::del($contributionNoteID); return; } //process note $noteParams = [ 'entity_table' => 'civicrm_contribution', 'note' => $params['note'], 'entity_id' => $contributionID, 'contact_id' => $contactID, ]; $noteID = []; if ($contributionNoteID) { $noteID = ["id" => $contributionNoteID]; $noteParams['note'] = $noteParams['note'] ? $noteParams['note'] : "null"; } CRM_Core_BAO_Note::add($noteParams, $noteID); } /** * Process the Common data. * * @param array $params * @param array $formatted * @param CRM_Core_Form $form */ public static function postProcessCommon(&$params, &$formatted, &$form) { $fields = [ 'non_deductible_amount', 'total_amount', 'fee_amount', 'trxn_id', 'invoice_id', 'creditnote_id', 'campaign_id', 'contribution_page_id', ]; foreach ($fields as $f) { $formatted[$f] = CRM_Utils_Array::value($f, $params); } if (!empty($params['thankyou_date']) && !CRM_Utils_System::isNull($params['thankyou_date'])) { $formatted['thankyou_date'] = CRM_Utils_Date::processDate($params['thankyou_date'], $params['thankyou_date_time']); } else { $formatted['thankyou_date'] = 'null'; } if (!empty($params['is_email_receipt'])) { $params['receipt_date'] = $formatted['receipt_date'] = date('YmdHis'); } //special case to handle if all checkboxes are unchecked $customFields = CRM_Core_BAO_CustomField::getFields('Contribution', FALSE, FALSE, CRM_Utils_Array::value('financial_type_id', $params ) ); $formatted['custom'] = CRM_Core_BAO_CustomField::postProcess($params, CRM_Utils_Array::value('id', $params, NULL), 'Contribution' ); } /** * Send email receipt. * * @param CRM_Core_Form $form * instance of Contribution form. * @param array $params * (reference ) an assoc array of name/value pairs. * @param bool $ccContribution * is it credit card contribution. * * @return array */ public static function emailReceipt(&$form, &$params, $ccContribution = FALSE) { $form->assign('receiptType', 'contribution'); // Retrieve Financial Type Name from financial_type_id $params['contributionType_name'] = CRM_Core_DAO::getFieldValue('CRM_Financial_DAO_FinancialType', $params['financial_type_id']); if (!empty($params['payment_instrument_id'])) { $paymentInstrument = CRM_Contribute_PseudoConstant::paymentInstrument(); $params['paidBy'] = $paymentInstrument[$params['payment_instrument_id']]; if ($params['paidBy'] != 'Check' && isset($params['check_number'])) { unset($params['check_number']); } } // retrieve individual prefix value for honoree if (isset($params['soft_credit'])) { $softCreditTypes = $softCredits = []; foreach ($params['soft_credit'] as $key => $softCredit) { $softCredits[$key] = [ 'Name' => $softCredit['contact_name'], 'Amount' => CRM_Utils_Money::format($softCredit['amount'], $softCredit['currency']), ]; $softCreditTypes[$key] = $softCredit['soft_credit_type_label']; } $form->assign('softCreditTypes', $softCreditTypes); $form->assign('softCredits', $softCredits); } // retrieve premium product name and assigned fulfilled // date to template if (!empty($params['hidden_Premium'])) { if (isset($params['product_name']) && is_array($params['product_name']) && !empty($params['product_name']) ) { $productDAO = new CRM_Contribute_DAO_Product(); $productDAO->id = $params['product_name'][0]; $productOptionID = $params['product_name'][1]; $productDAO->find(TRUE); $params['product_name'] = $productDAO->name; $params['product_sku'] = $productDAO->sku; if (empty($params['product_option']) && !empty($form->_options[$productDAO->id])) { $params['product_option'] = $form->_options[$productDAO->id][$productOptionID]; } } if (!empty($params['fulfilled_date'])) { $form->assign('fulfilled_date', $params['fulfilled_date']); } } $form->assign('ccContribution', $ccContribution); if ($ccContribution) { $form->assignBillingName($params); $form->assign('address', CRM_Utils_Address::getFormattedBillingAddressFieldsFromParameters( $params, $form->_bltID )); $date = CRM_Utils_Date::format($params['credit_card_exp_date']); $date = CRM_Utils_Date::mysqlToIso($date); $form->assign('credit_card_type', CRM_Utils_Array::value('credit_card_type', $params)); $form->assign('credit_card_exp_date', $date); $form->assign('credit_card_number', CRM_Utils_System::mungeCreditCard($params['credit_card_number']) ); } else { //offline contribution // assigned various dates to the templates $form->assign('receipt_date', CRM_Utils_Date::processDate($params['receipt_date'])); if (!empty($params['cancel_date'])) { $form->assign('cancel_date', CRM_Utils_Date::processDate($params['cancel_date'])); } if (!empty($params['thankyou_date'])) { $form->assign('thankyou_date', CRM_Utils_Date::processDate($params['thankyou_date'])); } if ($form->_action & CRM_Core_Action::UPDATE) { $form->assign('lineItem', empty($form->_lineItems) ? FALSE : $form->_lineItems); } } //handle custom data if (!empty($params['hidden_custom'])) { $contribParams = [['contribution_id', '=', $params['contribution_id'], 0, 0]]; if ($form->_mode == 'test') { $contribParams[] = ['contribution_test', '=', 1, 0, 0]; } //retrieve custom data $customGroup = []; foreach ($form->_groupTree as $groupID => $group) { $customFields = $customValues = []; if ($groupID == 'info') { continue; } foreach ($group['fields'] as $k => $field) { $field['title'] = $field['label']; $customFields["custom_{$k}"] = $field; } //build the array of customgroup contain customfields. CRM_Core_BAO_UFGroup::getValues($params['contact_id'], $customFields, $customValues, FALSE, $contribParams); $customGroup[$group['title']] = $customValues; } //assign all custom group and corresponding fields to template. $form->assign('customGroup', $customGroup); } $form->assign_by_ref('formValues', $params); list($contributorDisplayName, $contributorEmail ) = CRM_Contact_BAO_Contact_Location::getEmailDetails($params['contact_id']); $form->assign('contactID', $params['contact_id']); $form->assign('contributionID', $params['contribution_id']); if (!empty($params['currency'])) { $form->assign('currency', $params['currency']); } if (!empty($params['receive_date'])) { $form->assign('receive_date', CRM_Utils_Date::processDate($params['receive_date'])); } $template = CRM_Core_Smarty::singleton(); $taxAmt = $template->get_template_vars('dataArray'); $eventTaxAmt = $template->get_template_vars('totalTaxAmount'); $prefixValue = Civi::settings()->get('contribution_invoice_settings'); $invoicing = CRM_Utils_Array::value('invoicing', $prefixValue); if ((!empty($taxAmt) || isset($eventTaxAmt)) && (isset($invoicing) && isset($prefixValue['is_email_pdf']))) { $isEmailPdf = TRUE; } else { $isEmailPdf = FALSE; } list($sendReceipt, $subject, $message, $html) = CRM_Core_BAO_MessageTemplate::sendTemplate( [ 'groupName' => 'msg_tpl_workflow_contribution', 'valueName' => 'contribution_offline_receipt', 'contactId' => $params['contact_id'], 'contributionId' => $params['contribution_id'], 'from' => $params['from_email_address'], 'toName' => $contributorDisplayName, 'toEmail' => $contributorEmail, 'isTest' => $form->_mode == 'test', 'PDFFilename' => ts('receipt') . '.pdf', 'isEmailPdf' => $isEmailPdf, ] ); return $sendReceipt; } }