Example #1
0
 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;
}
Example #4
0
 /**
  * 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);
    }
}