$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";
예제 #3
0
 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++;
     }
 }