function testCreateUpdateContribution() { $contributionID = $this->contributionCreate($this->_individualId, $this->_contributionTypeId); $params = array('id' => $contributionID, 'contact_id' => $this->_individualId, 'receive_date' => date('Ymd'), 'total_amount' => 110.0, 'contribution_type_id' => $this->_contributionTypeId, 'payment_instrument_id' => 1, 'non_deductible_amount' => 20.0, 'fee_amount' => 60.0, 'net_amount' => 100.0, 'trxn_id' => 23456, 'invoice_id' => 78901, 'source' => 'WORLD', 'contribution_status_id' => 1, 'note' => 'Donating for Nobel Cause'); $contribution =& civicrm_contribution_add($params); $this->assertEquals($contribution['contact_id'], $this->_individualId, 'In line ' . __LINE__); $this->assertEquals($contribution['receive_date'], date('Ymd'), 'In line ' . __LINE__); $this->assertEquals($contribution['total_amount'], 110.0, 'In line ' . __LINE__); $this->assertEquals($contribution['contribution_type_id'], $this->_contributionTypeId, 'In line ' . __LINE__); $this->assertEquals($contribution['payment_instrument_id'], 1, 'In line ' . __LINE__); $this->assertEquals($contribution['non_deductible_amount'], 20.0, 'In line ' . __LINE__); $this->assertEquals($contribution['fee_amount'], 60.0, 'In line ' . __LINE__); $this->assertEquals($contribution['net_amount'], 100.0, 'In line ' . __LINE__); $this->assertEquals($contribution['trxn_id'], 23456, 'In line ' . __LINE__); $this->assertEquals($contribution['invoice_id'], 78901, 'In line ' . __LINE__); $this->assertEquals($contribution['source'], 'WORLD', 'In line ' . __LINE__); $this->assertEquals($contribution['contribution_status_id'], 1, 'In line ' . __LINE__); $contributionID = array('contribution_id' => $contribution['id']); $contribution =& civicrm_contribution_delete($contributionID); $this->assertEquals($contribution['is_error'], 0); $this->assertEquals($contribution['result'], 1); }
function MembershipAutoRenewal() { global $debug; $config =& CRM_Core_Config::singleton(); require_once 'CRM/Utils/System.php'; require_once 'CRM/Utils/Hook.php'; require_once 'api/v2/Contribution.php'; require_once 'api/v2/MembershipContributionLink.php'; // Select all membership types which are 'auto-renew' required (table field `auto_renew` = 2) $membershipTypeArray = array(); $membershipTypeFeeArray = array(); $query = "SELECT * FROM civicrm_membership_type WHERE auto_renew = '2'"; $dao = CRM_Core_DAO::executeQuery($query); while ($dao->fetch()) { $membershipTypeArray[] = $dao->id; $membershipTypeFeeArray[$dao->id] = $dao->minimum_fee; } $membershipTypes = @implode(',', $membershipTypeArray); //echo $membershipTypes; //$current_date = date("Y-m-d"); //$temp_date = strtotime($current_date); $count = 0; $contactArray = array(); if ($membershipTypes) { // Select all memberships which are auto-renew membership types // And status is grace (table field `status_id` = 3) //$dtFirstDay = date("YmdHis", mktime(0, 0, 0, date("m") , 1, date("Y"))); //$dtLastDay = date('YmdHis',strtotime('-1 second',strtotime('+1 month',strtotime(date('m').'/01/'.date('Y').' 00:00:00')))); $dtFirstDay = '20111001000000'; $dtLastDay = '20111031235959'; $member_sql = "SELECT cm.id as membership_id , cm.contact_id as contact_id , cm.membership_type_id as membership_type_id ,cm.end_date as end_date ,\n cmt.duration_interval as duration_interval , cmt.duration_unit as duration_unit \n FROM civicrm_membership cm \n JOIN civicrm_membership_type cmt ON cm.membership_type_id = cmt.id\n LEFT JOIN civicrm_value_payment_method cpm ON cm.id = cpm.entity_id\n WHERE cm.membership_type_id IN ({$membershipTypes}) AND cm.end_date >= '{$dtFirstDay}' AND cm.end_date <= '{$dtLastDay}'\n AND cm.status_id IN (2,3,8) AND cpm.direct_debit = 1"; //AND cm.status_id = 3 //echo $member_sql;exit; $member_dao = CRM_Core_DAO::executeQuery($member_sql); $count = 0; while ($member_dao->fetch()) { //print_r ($member_dao);exit; $membership_id = $member_dao->membership_id; $contact_id = $member_dao->contact_id; $mem_end_date = $member_dao->end_date; $temp_date = strtotime($mem_end_date); //print_r ($member_dao);echo "<hr />"; //$temp_sql = "SELECT cmp.contribution_id as contribution_id FROM civicrm_membership_payment cmp WHERE cmp.membership_id = '$membership_id' ORDER BY cmp.contribution_id DESC"; //$temp_dao = CRM_Core_DAO::executeQuery( $temp_sql ); //$temp_dao->fetch(); //$source_contribution_id = $temp_dao->contribution_id; //require_once 'CRM/Contribute/DAO/Contribution.php'; //$cdao = new CRM_Contribute_DAO_Contribution(); //$cdao->id = $source_contribution_id; //$cdao->find(true); //receive_date $params = array(); $total_amount = $membershipTypeFeeArray[$member_dao->membership_type_id]; $params = array('contact_id' => $member_dao->contact_id, 'receive_date' => date('YmdHis'), 'total_amount' => $total_amount, 'fee_amount' => $total_amount, 'source' => 'Auto-Renewal for Membership Id :' . $membership_id, 'contribution_status_id' => 2, 'note' => 'Auto-Renewal for Membership Id :' . $membership_id, 'contribution_type_id' => 2); $contribution =& civicrm_contribution_add($params); //print_r( $contribution ); $contribution_id = $contribution['id']; $duration_interval = $member_dao->duration_interval; $duration_unit = $member_dao->duration_unit; $next_collectionDate = strtotime("+{$duration_interval} {$duration_unit}", $temp_date); $next_collectionDate = date('YmdHis', $next_collectionDate); $update_sql = "UPDATE civicrm_membership SET end_date = '{$next_collectionDate}' , status_id = '2' WHERE id = '{$membership_id}'"; CRM_Core_DAO::executeQuery($update_sql); //Create membership Payment $params = array('contribution_id' => $contribution_id, 'membership_id' => $membership_id); $membershipPayment = civicrm_membershipcontributionlink_create($params); //$contribution_sql = "SELECT * FROM civicrm_value_direct_debit_details WHERE entity_id = '$source_contribution_id'"; //$contribution_dao = CRM_Core_DAO::executeQuery( $contribution_sql ); //$contribution_dao->fetch(); //$mandate_id = $contribution_dao->mandate_id; //$contributionTypeName = CRM_Contribute_PseudoConstant::contributionType($cdao->contribution_type_id); //$mandate_sql = "SELECT * FROM civicrm_value_bank_details WHERE entity_id = '$contact_id' AND is_default = '1'"; $mandate_sql = "SELECT * FROM civicrm_value_bank_details WHERE entity_id = '{$contact_id}'"; $mandate_dao = CRM_Core_DAO::executeQuery($mandate_sql); $mandate_dao->fetch(); $mandate_id = $mandate_dao->id; //$mandate_sql = "SELECT * FROM civicrm_value_bank_details WHERE id = '$mandate_id'"; //$mandate_dao = CRM_Core_DAO::executeQuery( $mandate_sql ); //$mandate_dao->fetch(); if ($mandate_dao->collection_day) { $collection_day = $mandate_dao->collection_day; } else { $collection_day = 20; } //$next_collectionDate = get_valid_next_collection_date($collection_day , date("m") , 'YmdHis' ); $next_collectionDate = '20111020000000'; require_once 'api/v2/Activity.php'; $params = array('activity_type_id' => CIVICRM_DIRECT_DEBIT_STANDARD_PAYMENT_ACTIVITY_ID, 'source_contact_id' => $contact_id, 'target_contact_id' => $contact_id, 'subject' => "Member Dues, Mandate Id - " . $mandate_id, 'status_id' => 1, 'activity_date_time' => $next_collectionDate); $act = civicrm_activity_create($params); $activity_id = $act['id']; if ($mandate_id != null) { $sql = "INSERT INTO civicrm_value_activity_bank_relationship SET entity_id = '{$activity_id}', bank_id = '{$mandate_id}'"; $dao = CRM_Core_DAO::executeQuery($sql); $sql = "INSERT INTO civicrm_value_direct_debit_details SET activity_id = '{$activity_id}' , entity_id = '{$contribution_id}' , mandate_id = '{$mandate_id}'"; $dao = CRM_Core_DAO::executeQuery($sql); } //CRM_Core_DAO::executeQuery( "UPDATE civicrm_value_bank_details SET bacs_code = '17' WHERE id = '$mandate_id'" ); //$log_note = "Auto Renewal: Contact Id - $contact_id, Membership Id - $membership_id , Created Contribtion Id - $contribution_id"; //$log_date = date("jS F Y - h:i:s A"); //$log_query = "INSERT INTO civicrm_auto_renewal_log SET log_date = '$log_date' , log_summary = '$log_note'"; //CRM_Core_DAO::executeQuery( $log_query ); $url = CRM_Utils_System::url('civicrm/contact/view', "reset=1&cid={$contact_id}"); $contactArray[] = " Contact ID: " . $contact_id . " - <a href =\"{$url}\"> " . $contact_id . " </a> "; $count++; } //exit; } echo "Membership renewed: " . $count . "<br />"; if (count($contactArray) > 0) { echo $status = implode('<br/>', $contactArray); } }
/** * Process a transaction and record it against the contact. * * @param array $params (reference ) input parameters * * @return array (reference ) contribution of created or updated record (or a civicrm error) * @static void * @access public * */ function civicrm_contribute_transact($params) { civicrm_initialize(); if (empty($params)) { return civicrm_create_error(ts('No input parameters present')); } if (!is_array($params)) { return civicrm_create_error(ts('Input parameters is not an array')); } $values = array(); require_once 'CRM/Contribute/BAO/Contribution.php'; $error = _civicrm_contribute_format_params($params, $values); if (civicrm_error($error)) { return $error; } $required = array('amount'); foreach ($required as $key) { if (!isset($params[$key])) { return civicrm_create_error("Missing parameter {$key}: civicrm_contribute_transact() requires a parameter '{$key}'."); } } // allow people to omit some values for convenience $defaults = array('payment_processor_mode' => 'live'); $params = array_merge($defaults, $params); // clean up / adjust some values which if (!isset($params['total_amount'])) { $params['total_amount'] = $params['amount']; } if (!isset($params['net_amount'])) { $params['net_amount'] = $params['amount']; } if (!isset($params['receive_date'])) { $params['receive_date'] = date('Y-m-d'); } if (!isset($params['invoiceID']) && isset($params['invoice_id'])) { $params['invoiceID'] = $params['invoice_id']; } require_once 'CRM/Core/BAO/PaymentProcessor.php'; $paymentProcessor = CRM_Core_BAO_PaymentProcessor::getPayment($params['payment_processor_id'], $params['payment_processor_mode']); if (civicrm_error($paymentProcessor)) { return $paymentProcessor; } require_once 'CRM/Core/Payment.php'; $payment = CRM_Core_Payment::singleton($params['payment_processor_mode'], $paymentProcessor); if (civicrm_error($payment)) { return $payment; } $transaction = $payment->doDirectPayment($params); if (civicrm_error($transaction)) { return $transaction; } // but actually, $payment->doDirectPayment() doesn't return a // CRM_Core_Error by itself if (get_class($transaction) == 'CRM_Core_Error') { $errs = $transaction->getErrors(); if (!empty($errs)) { $last_error = array_shift($errs); return CRM_Core_Error::createApiError($last_error['message']); } } $contribution = civicrm_contribution_add($params); return $contribution; }
/** * Function to create contribution * * @param int $cID contact_id * @param int $cTypeID id of contribution type * * @return int id of created contribution */ function contributionCreate($cID, $cTypeID) { require_once 'api/v2/Contribute.php'; $params = array('domain_id' => 1, 'contact_id' => $cID, 'receive_date' => date('Ymd'), 'total_amount' => 100.0, 'contribution_type_id' => $cTypeID, 'payment_instrument_id' => 1, 'non_deductible_amount' => 10.0, 'fee_amount' => 50.0, 'net_amount' => 90.0, 'trxn_id' => 12345, 'invoice_id' => 67890, 'source' => 'SSF', 'contribution_status_id' => 1); $contribution =& civicrm_contribution_add($params); return $contribution['id']; }
function ProcessRecurringContributions() { global $debug; $config =& CRM_Core_Config::singleton(); require_once 'CRM/Utils/System.php'; require_once 'CRM/Utils/Hook.php'; $dtCurrentDay = date("Ymd", mktime(0, 0, 0, date("m"), date("d"), date("Y"))); //$dtCurrentDayStart = $dtCurrentDay."000000"; //$dtCurrentDayEnd = $dtCurrentDay."235959"; $dtCurrentDayStart = '20111001000000'; $dtCurrentDayEnd = '20111031235959'; $sql = "SELECT * FROM civicrm_contribution_recur ccr \n WHERE ccr.end_date IS NULL AND ccr.next_sched_contribution >= {$dtCurrentDayStart} AND ccr.next_sched_contribution <= {$dtCurrentDayEnd}"; //AND cm.status_id = 3 //echo $sql;exit; $dao = CRM_Core_DAO::executeQuery($sql); $count = 0; while ($dao->fetch()) { $contact_id = $dao->contact_id; $hash = md5(uniqid(rand(), true)); $total_amount = $dao->amount; $contribution_recur_id = $dao->id; $contribution_type_id = 1; $source = "Recurring Contribution from Contact Id - " . $contact_id; $receive_date = date("YmdHis"); //echo $receive_date;exit; $contribution_status_id = 2; require_once 'CRM/Contribute/PseudoConstant.php'; $paymentInstruments = CRM_Contribute_PseudoConstant::paymentInstrument(); $payment_instrument_id = CIVICRM_DIRECT_DEBIT_PAYMENT_INSTRUMENT_ID; require_once 'api/v2/Contribution.php'; $params = array('contact_id' => $contact_id, 'receive_date' => $receive_date, 'total_amount' => $total_amount, 'payment_instrument_id' => $payment_instrument_id, 'trxn_id' => $hash, 'invoice_id' => $hash, 'source' => $source, 'contribution_status_id' => $contribution_status_id, 'contribution_type_id' => $contribution_type_id, 'contribution_recur_id' => $contribution_recur_id, 'contribution_page_id' => $entity_id); //print_r ($params); $contributionArray =& civicrm_contribution_add($params); //print_r ($contributionArray);echo "<br />"; $contribution_id = $contributionArray['id']; $mem_end_date = $member_dao->end_date; $temp_date = strtotime($dao->next_sched_contribution); $next_collectionDate = strtotime("+{$dao->frequency_interval} {$dao->frequency_unit}", $temp_date); $next_collectionDate = date('YmdHis', $next_collectionDate); $next_collectionDate = '20111020000000'; $update_sql = "UPDATE civicrm_contribution_recur SET next_sched_contribution = '{$next_collectionDate}' WHERE id = '" . $dao->id . "'"; CRM_Core_DAO::executeQuery($update_sql); $mandate_id = $dao->processor_id; require_once 'api/v2/Activity.php'; $params = array('activity_type_id' => CIVICRM_DIRECT_DEBIT_STANDARD_PAYMENT_ACTIVITY_ID, 'source_contact_id' => $contact_id, 'target_contact_id' => $contact_id, 'subject' => "Donation, Mandate Id - " . $mandate_id, 'status_id' => 1, 'activity_date_time' => $next_collectionDate); $act = civicrm_activity_create($params); //print_r ($act);echo "<br />"; $activity_id = $act['id']; if ($mandate_id && $activity_id) { $update_sql = "INSERT INTO civicrm_value_activity_bank_relationship SET entity_id = '{$activity_id}', bank_id = '{$mandate_id}'"; CRM_Core_DAO::executeQuery($update_sql); $update_sql = "INSERT INTO civicrm_value_direct_debit_details SET activity_id = '{$activity_id}' , entity_id = '{$contribution_id}' , mandate_id = '{$mandate_id}'"; CRM_Core_DAO::executeQuery($update_sql); } $url = CRM_Utils_System::url('civicrm/contact/view', "reset=1&cid={$contact_id}"); $contactArray[] = " Contact ID: " . $contact_id . " - <a href =\"{$url}\"> " . $contact_id . " </a> "; //echo "<hr />"; $count++; } echo "Contributions Created: " . $count . "<br />"; if (count($contactArray) > 0) { echo $status = implode('<br/>', $contactArray); } }