$order->sendPrepaymentAutoCancelNotification(); $logger->write('sent cancel notification ' . $logger_oid); } } elseif ($o['sent_count'] == '2') { //Cancel order and invoice if ($last_sent_date_timestamp < strtotime('-' . $tolerance_before_really_cancelling_orders)) { //default cancel status if ($o['order_type'] == Order::ORDER_TYPE_JULIE_GRACE) { $status = '12'; foreach ($items_id as $item_id) { $class_o->updateProductStatus($item_id, $status, 'auto-set'); } } elseif ($o['order_type'] == Order::ORDER_TYPE_SALES_PARTNER) { $status = '10'; foreach ($items_id as $item_id) { $class_jo->updateItemStatus($item_id, $status, 'auto-set'); } } $logger->write('canceled ' . $logger_oid); if (count($invoice->detail) > 0) { //status 3 = INVOICE CANCELED $invoice->updateCompleteStatus('3'); $logger->write('canceled invoice ' . $invoice->detail['invoice_id']); } } } } } $logger->close(); echo 'Done!'; tep_db_close();
if (isset($response['settleaccount']) && $response['settleaccount'] == 'yes') { $update_status = ''; $balance = $inv->getBalance(); if ($inv->detail['invoice_complete_status'] == 'O') { $update_status = 'F'; //REFUND SUBMITTED } elseif (in_array($inv->detail['invoice_complete_status'], array('U', 'P', '2', '3')) && $balance < 0) { $inv->saveStatusChangeHistory('O'); //SET OVERPAID AS HISTORY ONLY $update_status = 'F'; } if ($update_status != '') { if ($update_status == 'F') { $inv->overPaymentAmount($balance); } $inv->updateCompleteStatus($update_status); } } } else { $failed[] = $invoice_id; } } } else { $counter_capture_no_txid++; } unset($request, $inv); } } echo "Total Preauth Captured : {$counter_preauth_captured} \n"; if ($counter_capture_no_txid > 0) { echo $counter_capture_no_txid . " preauth capture without payone txid \n";
function createReturnContainerSP($return_id, $return_qty, $joi_id) { use_class('Order'); use_class('jng_sp_orders'); use_class('jng_sp_customers'); use_class('payone_invoice'); $class_jcust = new jng_sp_customers(); $class_jo = new jng_sp_orders(); $item = $class_jo->retrieveItemDetail($joi_id); $oid = $item['jng_sp_orders_id']; $order_obj = new Order(Order::ORDER_TYPE_SALES_PARTNER, $oid); $order = $class_jo->retrieveDetail($oid); if ($order_obj->isPaymentHandledByPayone()) { $invoice = new payone_invoice('invoice_order_type', 'S', "invoice_order_id={$oid}"); //ONLY QUEING JUST FOR TRANSACTION THAT HAVE payone_txid (FIRST GET FROM SUBMITTING INVOICE) if ($invoice->detail['payone_txid'] != '') { $payone_txid = $invoice->detail['payone_txid']; $payment_method = $order_obj->getPaymentMethodRaw(); $customer = $class_jcust->retrieveDetail(null, $order_obj->sales_partner_id, $order_obj->customer_id); $customer_bankdata = $class_jcust->getBankAccountData($customer['jng_sp_customers_id']); $data_por = array(); $data_por['return_id'] = $return_id; $data_por['jng_sp_orders_items_id'] = $joi_id; $data_por['jng_sp_customers_id'] = $customer['jng_sp_customers_id']; $data_por['amount'] = round($return_qty * ($item['price'] * 100)); $data_por['txid'] = $payone_txid; $data_por['invoice_id'] = $invoice->detail['invoice_id']; $data_por['invoice_no'] = $invoice->detail['invoice_no']; $data_por['id'] = $item['article_number']; $data_por['pr'] = round($item['price'] * 100); $data_por['no'] = $return_qty; $data_por['de'] = strlen($item['billing_text']) > 32 ? substr($item['billing_text'], 0, 32) : $item['billing_text']; $data_por['va'] = 0; $data_por['payment_method'] = $payment_method; $data_por['currency'] = 'EUR'; if (!is_null($customer_bankdata)) { $data_por['bankcode'] = $customer_bankdata['bank_code']; $data_por['bankcountry'] = $customer_bankdata['bank_country']; $data_por['bankaccount'] = $customer_bankdata['bank_account_number']; $data_por['bankaccountholder'] = $customer_bankdata['bank_account_holder']; } $this->payoneReturnItemContainer($data_por); $items_total = $order_obj->getTotalItemsNotCanceledQuantity(); $returns_total = $order_obj->getTotalItemsReturnedQuantity(); if ($items_total == $returns_total) { $amount_paid = $invoice->detail['invoice_amount_paid']; $shipping_cost = $order_obj->getCostShipping(); $cod_cost = $order_obj->getCostCOD(); $total_costs = $shipping_cost + $cod_cost; if ($shipping_cost > 0) { //if((($amount_paid*1)==0)||(($amount_paid<>$shipping_cost)&&($amount_paid<>$total_costs))){ if ($amount_paid * 1 == 0 || $amount_paid > $total_costs) { //HANDLE DOUBLE OR MORE SHIPING RETURN CONTAINER $q_check = "SELECT * FROM payone_orders_return WHERE txid = '{$payone_txid}' AND id = 'Shipping'"; $dbc = tep_db_query($q_check); if (tep_db_num_rows($dbc) == 0) { $amount = round($shipping_cost * 100); $data_por = array(); $data_por['return_id'] = 0; $data_por['jng_sp_orders_items_id'] = 0; $data_por['jng_sp_customers_id'] = $customer['jng_sp_customers_id']; $data_por['amount'] = $amount; $data_por['txid'] = $payone_txid; $data_por['invoice_id'] = $invoice->detail['invoice_id']; $data_por['invoice_no'] = $invoice->detail['invoice_no']; $data_por['id'] = 'Shipping'; $data_por['pr'] = $amount; $data_por['no'] = 1; $data_por['de'] = 'Verpackung & Versand'; $data_por['va'] = 0; $data_por['payment_method'] = $payment_method; $data_por['currency'] = 'EUR'; $this->payoneReturnItemContainer($data_por); } } } if ($cod_cost > 0) { //if((($amount_paid==0*1))||(($amount_paid<>$cod_cost)&&($amount_paid<>$total_costs))){ if ($amount_paid * 1 == 0 || $amount_paid > $total_costs) { $amount = round($cod_cost * 100); $data_por = array(); $data_por['return_id'] = 0; $data_por['jng_sp_orders_items_id'] = 0; $data_por['jng_sp_customers_id'] = $customer['jng_sp_customers_id']; $data_por['amount'] = $amount; $data_por['txid'] = $payone_txid; $data_por['invoice_id'] = $invoice->detail['invoice_id']; $data_por['invoice_no'] = $invoice->detail['invoice_no']; $data_por['id'] = 'COD'; $data_por['pr'] = $amount; $data_por['no'] = 1; $data_por['de'] = 'Nachnahmegebühren'; $data_por['va'] = 0; $data_por['payment_method'] = $payment_method; $data_por['currency'] = 'EUR'; $this->payoneReturnItemContainer($data_por); } } } } else { //ORDER NOT SUBMITTED YET TO PAYONE, SO NO TXID CREATED YET. JUST NEED TO EXCLUDE ITEM FROM payone_invoice TABLE COLUMN 'invoice_order_items_id' $oids_arr = explode(',', $invoice->detail['invoice_order_items_id']); if (is_array($oids_arr)) { $new_amount = $invoice->detail['invoice_amount'] - $return_qty * $item['price']; foreach ($oids_arr as $key => $value) { if ($value == $joi_id) { unset($oids_arr[$key]); } } $oids = implode(',', $oids_arr); if (count($oids_arr) == 0) { //ALL PRODUCTS RETURNED $new_amount = 0; $invoice->updateCompleteStatus('3'); //INVOICE CANCELLED } tep_db_perform('payone_invoice', array('invoice_amount' => $new_amount, 'invoice_order_items_id' => $oids), 'update', "invoice_id = '" . $invoice->detail['invoice_id'] . "'"); } } } }
if ($cek['duration'] > 7) { $status = '1'; $class_payi->updateCompleteStatus($status); $arr_success[] = $invoice_id; } } echo "Total 'expired' with status 'P' (Paid) : {$counter} \n"; if (count($arr_success) > 0) { echo count($arr_success) . " invoice(s) successfully update to '1 = Payone Complete' invoice_id's (" . implode(",", $arr_success) . ") \n"; } $q = "SELECT invoice_id FROM payone_invoice WHERE invoice_complete_status = 'D' ORDER BY invoice_id"; $dbq = tep_db_query($q); $counter = 0; $arr_success = array(); $arr_failed = array(); while ($r = tep_db_fetch_array($dbq)) { $counter++; $invoice_id = $r['invoice_id']; $class_payi = new payone_invoice('invoice_id', $r['invoice_id']); $cek = $class_payone->getUpdateStatusDate($invoice_id, 'D'); //CLEAN AFTER 2 WEEKS if ($cek['duration'] > 14) { $status = '1'; $class_payi->updateCompleteStatus($status); $arr_success[] = $invoice_id; } } echo "Total 'expired' with status 'D' (Refund Processed) : {$counter} \n"; if (count($arr_success) > 0) { echo count($arr_success) . " invoice(s) successfully update to '1 = Payone Complete' invoice_id's (" . implode(",", $arr_success) . ") \n"; }
* (means we not prepared return container for this), * after we received captured from payone: balance = 0, getBalance < 0 * so we need to save the difference as overPaymentAmount */ $payi->overPaymentAmount($payi->getBalance()); } elseif ($payi->getBalance() > 0) { /* If there any adjusted to closed small amount on capture, * after received captured from payone: balance = 0, getBalance > 0 * so we need to save the difference as reduceAmount */ $payi->reduceAmount($payi->getBalance()); } } else { $status = 'O'; } $payi->updateCompleteStatus($status); } $payi->payoneSaldo($request['balance']); break; case 'paid': case 'underpaid': $prev_balance = $payi->getBalance(); if ($request['clearingtype'] == 'vor') { //if paid/underpaid, payone returns negative balance and balance = total_amount_has_paid_by_user $request['balance'] = $payi->detail['invoice_amount'] + $request['balance']; } $receipt_amount = $prev_balance - $request['balance']; $payi->addReceipt($receipt_amount, $tx_time, $received, $request['clearingtype']); //Send Payment Received Notification $order_type = $payi->detail['invoice_order_type'] == 'J' ? Order::ORDER_TYPE_JULIE_GRACE : Order::ORDER_TYPE_SALES_PARTNER; $order = new Order($order_type, $payi->detail['invoice_order_id']);
//} //Don't do this, the returns in SP Orders Management will be removed when the returns are reported to SP //By doing this here we prevent the returns to be reported to our SP which is very important } $class_payone->payoneReturnItemHistory($return_hist); if ($return_hist['amount_return_submitted'] == 0) { //REFUND >> $returns['amount_return'] is negative //$class_pi->overPaymentAmount($return_hist['amount_return']/100); $class_pi->overPaymentAmount($amount_return_total / 100); } else { $class_pi->debitAmount($request['amount'] / 100 * -1); //$request['amount'] = round($return_hist['amount_return_submitted']); $last_balance = $class_pi->getBalance(); if ($last_balance < 0) { $class_pi->overPaymentAmount($last_balance); $class_pi->updateCompleteStatus('F'); //F = REFUND SUBMITTED } } } else { $failed[] = $return_id; } } } else { // $counter_is_refund++; $counter_is_refund[] = $request['txid']; } } else { $counter_returns_no_txid++; } }