<?

/*
logger3("callback_action",$callback_action);
logger3("callback_reason",$callback_reason);


$set_callback_action = "";
$set_reason_code = "";


/// GET DEPOSIT DETAILS:

$set_deposit_transactionid = trim($set_deposit_transactionid);
$set_deposit_translogid = trim($set_deposit_translogid);
*/

logger3("set_action",$set_callback_action);
logger3("set_reason_code",$set_reason_code);
logger3("set_master_transactionid",$set_master_transactionid);
logger3("set_deposit_translogid",$set_deposit_translogid);
logger3("set_deposit_transactionid",$set_deposit_transactionid);



if(
(isset($set_deposit_transactionid)) &&
($set_deposit_transactionid != "") &&
($set_deposit_transactionid != NULL)
) {
	$tmp_sql = "SELECT * FROM transactions WHERE description = 'Deposit' AND transactionid = '" . $set_deposit_transactionid . "';";
} else if(
(isset($set_deposit_translogid)) &&
($set_deposit_translogid != "") &&
($set_deposit_translogid != NULL)
) {
	$tmp_sql = "SELECT * FROM transactions WHERE description = 'Deposit' AND translogid = '" . $set_deposit_translogid . "';";
}

$transaction_deposit = object2array(readTHECASHIER($tmp_sql));

logger3("tmp_sql",$tmp_sql);
logger3("transaction_deposit",$transaction_deposit);


#####################################################################################
/// GET OUTGOING DETAILS:
$tmp_sql = "SELECT * FROM transactions WHERE 
	description = 'Outgoing' AND 
	method_details = '" . $transaction_deposit['account_details'] . "' AND 
	transaction_gross_value = '" . $transaction_deposit['transaction_gross_value'] . "' AND 
	requested_datetime = '" . $transaction_deposit['requested_datetime'] . "';";
$transaction_outgoing = object2array(readTHECASHIER($tmp_sql));

logger3("tmp_sql",$tmp_sql);
logger3("transaction_outgoing",$transaction_outgoing);



/// GET INCOMING DETAILS:
logger3("transaction_deposit['account_details']",$transaction_deposit['account_details']);
logger3("transaction_deposit['transaction_gross_value']",$transaction_deposit['transaction_gross_value']);
logger3("transaction_deposit['requested_datetime'] ",$transaction_deposit['requested_datetime']);


$tmp_sql = "SELECT * FROM transactions WHERE 
	description = 'Incoming' AND 
	method_details = '" . $transaction_deposit['account_details'] . "' AND 
	transaction_gross_value = '" . $transaction_deposit['transaction_gross_value'] . "' AND 
	requested_datetime = '" . $transaction_deposit['requested_datetime'] . "';";
$transaction_incoming = object2array(readTHECASHIER($tmp_sql));

logger3("tmp_sql",$tmp_sql);
logger3("transaction_incoming",$transaction_outgoing);



#####################################################################################
### SET MESSAGES


if(
($set_reason_code == "1") || 
(stristr($set_reason_code,"REFUND"))
) {
	
	$update_deposit_status = "FAILED";
	$update_outgoing_status = "FAILED";
	$update_incoming_status = "Chargeback";
	
	$update_deposit_return_reason = "REVERSED";
	$update_outgoing_return_reason = "REVERSED";
	$update_incoming_return_reason = "Customer Dispute";
}


if(
($set_reason_code == "2")
) {
	
	$update_deposit_status = "FAILED";
	$update_outgoing_status = "FAILED";
	$update_incoming_status = "Chargeback";
	
	$update_deposit_return_reason = "FAILED";
	$update_outgoing_return_reason = "FAILED";
	$update_incoming_return_reason = "Bank Account Does Not Exist";
}


if(
($set_reason_code == "3")
) {
	
	$update_deposit_status = "FAILED";
	$update_outgoing_status = "FAILED";
	$update_incoming_status = "Chargeback";
	
	$update_deposit_return_reason = "FAILED";
	$update_outgoing_return_reason = "FAILED";
	$update_incoming_return_reason = "Insufficient Funds.  (NOTE:  REBILL is available once per sale.  <p><b>INSTRUCTION:</b> REBILL <b><i>only after</i></b> customer confirms funds have been added.)";  // actually, "No Settlement" (but that doesn't mean anything to anyonne)
}


if(
($set_reason_code == "4")
) {
	
	$update_deposit_status = "FAILED";
	$update_outgoing_status = "FAILED";
	$update_incoming_status = "Chargeback";
	
	$update_deposit_return_reason = "FAILED";
	$update_outgoing_return_reason = "FAILED";
	$update_incoming_return_reason = "Insufficient Bank Details";
}


if(
($set_reason_code == "5")
) {
	
	$update_deposit_status = "FAILED";
	$update_outgoing_status = "FAILED";
	$update_incoming_status = "Chargeback";
	
	$update_deposit_return_reason = "FAILED";
	$update_outgoing_return_reason = "FAILED";
	$update_incoming_return_reason = "Direct Debit Blocked";
}


if(
($set_reason_code == "6")
) {
	
	$update_deposit_status = "FAILED";
	$update_outgoing_status = "FAILED";
	$update_incoming_status = "Chargeback";
	
	$update_deposit_return_reason = "FAILED";
	$update_outgoing_return_reason = "FAILED";
	$update_incoming_return_reason = "Insufficient Funds.  (NOTE:  REBILL is available once per sale. <p> <b>INSTRUCTION:</b> REBILL <b><i>only after</i></b> customer confirms funds have been added.)";
}


if(
($set_reason_code == "10")
) { 
	
	$update_deposit_status = "FAILED";
	$update_outgoing_status = "FAILED";
	$update_incoming_status = "Chargeback";
	
	$update_deposit_return_reason = "FAILED";
	$update_outgoing_return_reason = "FAILED";
	$update_incoming_return_reason = "SEPA Blocked. (Customer must call bank to \"activate SEPA Direct Debit\".)<p>
	<b>INSTRUCTION:</b> REBILL <b><i>after</i></b> customer confirms \"SEPA activation\"."; // actually, "Unknown Reason"
}

$datetime_updated = datetime();

#####################################################################################
#####################################################################################

####################################
### UPDATE THE "DEPOSIT" TRANSACTION

$tmp_sql = "UPDATE transactions SET 
	status = '" . $update_deposit_status . "', 
	return_datetime = '" . $datetime_updated . "', 
	return_reason = '" . $update_deposit_return_reason . "' 
   	WHERE transactionid = '" . $transaction_deposit['transactionid'] . "';";
$tmp_update = updateTHECASHIER($tmp_sql);

logger3("tmp_sql",$tmp_sql);
logger3("tmp_update",$tmp_update);



####################################
### UPDATE THE ASSOCIATED "OUTGOING" TRANSFER:
$tmp_sql = "UPDATE transactions SET 
	status = '" . $update_outgoing_status . "', 
	return_datetime = '" . $datetime_updated . "', 
	return_reason = '" . $update_outgoing_return_reason . "'
	WHERE transactionid = '" . $transaction_outgoing['transactionid'] . "';";
$tmp_update = updateTHECASHIER($tmp_sql);

logger3("tmp_sql",$tmp_sql);
logger3("tmp_update",$tmp_update);



####################################
### UPDATE THE ASSOCIATED "INCOMING" TRANSACTION:

//$balance_of_customer_before = balance($transaction_deposit['accountid']);  // no need -- customer is a wash

$balance_of_business_before = balance($transaction_incoming['accountid']);
logger3("balance_of_business_before",$balance_of_business_before);

logger3("transaction_incoming['fee_total_value']",$transaction_incoming['fee_total_value']);
logger3("transaction_incoming['transaction_gross_value']",$transaction_incoming['transaction_gross_value']);

$transaction_incoming['net_value'] = currency_format($transaction_incoming['transaction_gross_value'] - $transaction_incoming['fee_total_value']);
logger3("incoming_net_value",$transaction_incoming['net_value']);

//$balance_of_customer_after = $balance_of_customer_before['account'] - $transaction_deposit['transaction_gross_value'];  // no need -- customer is a wash
$balance_of_business_after['account'] = currency_format($balance_of_business_before['account_balance'] - $transaction_incoming['net_value']);
logger3("balance_of_business_after['account']",$balance_of_business_after['account']);

if(
($transaction_deposit['rolling_release_datetime'] != NULL) &&
($transaction_deposit['rolling_release_datetime'] != "NULL") &&
($transaction_deposit['rolling_release_datetime'] != "") &&
($transaction_deposit['rolling_release_datetime'] != " ")
) {
	/// deduct from available balance:
	$balance_of_business_after['available'] = currency_format($balance_of_business_before['available'] - $transaction_incoming['net_value']);
} else {
    $balance_of_business_after['available'] = currency_format($balance_of_business_before['available']);
}

logger3("balance_of_business_after",$balance_of_business_after);



updateTHECASHIER("UPDATE balances SET 
	account_balance = '" . $balance_of_business_after['account'] . "', 
	available = '" . $balance_of_business_after['available'] . "' 
	WHERE accountid = '" . $transaction_incoming['accountid'] . "';");


$tmp_sql = "UPDATE transactions SET 
	status = '" . $update_incoming_status . "', 
	return_datetime = '" . $datetime_updated . "', 
	return_reason = '" . $update_incoming_return_reason . "', 
	return_account_balance_before = '" . $balance_of_business_before['account'] . "',
	return_account_balance_after = '" . $balance_of_business_after['account'] . "', 
	return_available_balance_before = '" . $balance_of_business_before['available'] . "',
	return_available_balance_after = '" . $balance_of_business_after['available'] . "'
	WHERE transactionid = '" . $transaction_incoming['transactionid'] . "';";
$tmp_update = updateTHECASHIER($tmp_sql);


####################################
### UPDATE THE ASSOCIATED "INCOMING" TRANSFER:
$tmp_sql = "UPDATE transactions SET 
	status = '" . $update_incoming_status . "', 
	return_datetime = '" . $datetime_updated . "', 
	return_reason = '" . $update_incoming_return_reason . "'
	WHERE transactionid = '" . $transaction_incoming['transactionid'] . "';";
$tmp_update = updateTHECASHIER($tmp_sql);

logger3("tmp_sql",$tmp_sql);
logger3("tmp_update",$tmp_update);


### EMAIL RECEIPT:
$business_account = account($transaction_incoming['accountid']);
logger3("business_account",$business_account);
$customer_account = account($transaction_deposit['accountid']);
logger3("customer_account",$customer_account);
$customer_member = member($transaction_deposit['memberid']);
logger3("customer_member",$customer_member);

$email_receipt = "chargeback_business";
//include($_SESSION['template']['company']['file_path'] . "shared/email_receipts.shared");

$email_receipt = "reversal_customer";
//include($_SESSION['template']['company']['file_path'] . "shared/email_receipts.shared");


echo "OK";


?>