示例#1
0
 function createReturnContainer($return_id, $return_qty, $opid)
 {
     use_class('orders');
     use_class('payone_invoice');
     use_class('minierp_customers');
     $class_o = new orders();
     $class_pi = new payone_invoice();
     $class_cust = new minierp_customers();
     $insert_id = '';
     $op = $class_o->retrieveProductDetail($opid);
     $order_id = $op['orders_id'];
     $order = $class_o->retrieveDetail($order_id, true);
     $customers_id = $order['customers_id'];
     $item = $class_o->retrieveProductDetail($opid);
     $final_price = $item['final_price'];
     //CHECK WHETHER CUSTOMER USING COUPON DISCOUNT OR NOT (ONLY ON JNG ORDERS)
     $qcheck_disc = "SELECT c.* FROM `coupon_redeem_track` crt INNER JOIN `coupons` c\n                            ON crt.`coupon_id` = c.`coupon_id`\n                            WHERE crt.`order_id` = {$order_id}";
     $dbq_disc = tep_db_query($qcheck_disc);
     if (tep_db_num_rows($dbq_disc) > 0) {
         $r_disc = tep_db_fetch_array($dbq_disc);
         $disc = $r_disc['coupon_amount'];
         if ($disc > 0 && $disc < 1) {
             $final_price = $final_price - $final_price * $disc;
             $final_price = ceil($final_price * 100) / 100;
             //take only 2 digits decimals   ex: 21.165 became 21.16
         }
     }
     $customer = $class_cust->retrieveDetail($customers_id);
     $customer_bankdata = $class_cust->getBankAccountData($order_id);
     $class_pi->retrieveDetail("J", $order_id);
     //ONLY QUEING JUST FOR TRANSACTION THAT HAVE payone_txid (FIRST GET FROM SUBMITTING INVOICE)
     if ($class_pi->detail['payone_txid'] != '') {
         $payone_txid = $class_pi->detail['payone_txid'];
         $payment_method = $order['payment_method'];
         $data_por = array();
         $data_por['return_id'] = $return_id;
         $data_por['jng_sp_orders_items_id'] = $item['orders_products_id'];
         $data_por['jng_sp_customers_id'] = $customer['customers_id'];
         $data_por['amount'] = round($return_qty * ($final_price * 100));
         $data_por['txid'] = $payone_txid;
         $data_por['invoice_id'] = $class_pi->detail['invoice_id'];
         $data_por['invoice_no'] = $class_pi->detail['invoice_no'];
         $data_por['id'] = $item['products_model'];
         $data_por['pr'] = round($final_price * 100);
         $data_por['no'] = $return_qty;
         $data_por['de'] = strlen($item['products_name']) > 32 ? substr($item['products_name'], 0, 32) : $item['products_name'];
         $data_por['va'] = 0;
         $data_por['payment_method'] = $payment_method;
         $data_por['currency'] = 'EUR';
         if (!is_null($customer_bankdata)) {
             $data_por['bankcode'] = $customer_bankdata['banktransfer_blz'];
             $data_por['bankcountry'] = 'DE';
             $data_por['bankaccount'] = $customer_bankdata['banktransfer_number'];
             $data_por['bankaccountholder'] = $customer_bankdata['banktransfer_owner'];
         }
         //                        echo "<pre>";var_dump($data_por);
         $insert_id = $this->payoneReturnItemContainer($data_por);
         $items_q = tep_db_query("SELECT SUM(products_quantity) AS total FROM orders_products WHERE orders_id={$order_id}  AND status NOT IN (10, 12)");
         $items = tep_db_fetch_array($items_q);
         $items_total = $items['total'];
         $returns_q = "SELECT SUM(opr.return_qty) AS total" . " FROM orders_products op" . " LEFT JOIN orders_products_return opr" . " ON opr.orders_products_id = op.orders_products_id" . " WHERE op.orders_id={$order_id}" . " AND op.status NOT IN (10, 12)";
         $returns_r = tep_db_query($returns_q);
         $returns = tep_db_fetch_array($returns_r);
         $returns_total = $returns['total'];
         if ($items_total == $returns_total) {
             $amount_paid = $class_pi->detail['invoice_amount_paid'];
             $total_costs = $order['shipping_costs'] + $order['cod_costs'];
             if ($order['shipping_costs'] > 0) {
                 //                                if((($amount_paid*1)==0)||(($amount_paid<>$order['shipping_costs'])&&($amount_paid<>$total_costs))){
                 if ($amount_paid * 1 == 0 || $amount_paid > $total_costs) {
                     $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) {
                         //HANDLE DOUBLE OR MORE SHIPING RETURN CONTAINER
                         $amount = round($order['shipping_costs'] * 100);
                         $data_por = array();
                         $data_por['return_id'] = 0;
                         $data_por['jng_sp_orders_items_id'] = 0;
                         $data_por['jng_sp_customers_id'] = $customer['customers_id'];
                         $data_por['amount'] = $amount;
                         $data_por['txid'] = $payone_txid;
                         $data_por['invoice_id'] = $class_pi->detail['invoice_id'];
                         $data_por['invoice_no'] = $class_pi->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';
                         $insert_id = $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(',', $class_pi->detail['invoice_order_items_id']);
         if (is_array($oids_arr)) {
             $new_amount = $class_pi->detail['invoice_amount'] - $return_qty * $final_price;
             foreach ($oids_arr as $key => $value) {
                 if ($value == $opid) {
                     unset($oids_arr[$key]);
                 }
             }
             $oids = implode(',', $oids_arr);
             if (count($oids_arr) == 0) {
                 //ALL PRODUCTS RETURNED
                 $new_amount = 0;
                 $class_pi->updateCompleteStatus('3');
                 //INVOICE CANCELLED
             }
             tep_db_perform('payone_invoice', array('invoice_amount' => $new_amount, 'invoice_order_items_id' => $oids), 'update', "invoice_id = '" . $class_pi->detail['invoice_id'] . "'");
         }
     }
     return $insert_id;
 }
     $request['shipping_lastname'] = trim(substr($order['delivery_name'], strlen($request['shipping_firstname']), strlen($order['delivery_name']) - strlen($request['shipping_firstname'])));
     //$request['shipping_company'] = '';
     $request['shipping_street'] = $shipping_address;
     $request['shipping_zip'] = $order['delivery_postcode'];
     $request['shipping_city'] = $order['delivery_city'];
     $request['shipping_country'] = getISO3166CountryCode($order['delivery_country']);
     //ISO-3166
 }
 //--METHOD PARAMETERS: COD
 if ($order["payment_method"] == 'CASH_ON_DELIVERY') {
     $request['shippingprovider'] = 'DHL';
 } elseif ($order["payment_method"] == PAYMENT_METHOD_DIRECT_DEBIT) {
     //Bankeinzug
     if (!$is_sp) {
         $customer_bankdata = array();
         $customer_bankdata = $class_cust->getBankAccountData($order_id);
         $request['bankcountry'] = 'DE';
         $request['bankaccount'] = preg_replace(array('/-/', '/\\s/', '/\\//', '/\\\\/'), '', $customer_bankdata['banktransfer_number']);
         $request['bankcode'] = $customer_bankdata['banktransfer_blz'];
         $request['bankaccountholder'] = $customer_bankdata['banktransfer_owner'];
     }
 }
 //SET PORTAL ID and SUB ACCOUNT ID
 if ($is_sp) {
     if ($order['jng_sp_id'] == '2') {
         //OT.DE Orders, having email or no email
         $request['portalid'] = $request['email'] == '' ? PAYONE_PORTAL_ID_NO_EMAIL : PAYONE_PORTAL_ID;
     } else {
         //OTHER SP WHEN NONE IS SET MANUALLY ABOVE
         $request['portalid'] = PAYONE_PORTAL_ID_JULIEGRACE;
     }
 $rid_arr[] = $data_return['return_id'];
 $id_arr[] = $data_return['id'];
 $pr_arr[] = $data_return['pr'];
 $no_arr[] = $data_return['no'];
 $de_arr[] = $data_return['de'];
 $va_arr[] = $data_return['va'];
 $return_hist['txid'] = $data_return['txid'];
 $return_hist['status'] = $data_return['status'];
 $return_hist['sequencenumber'] = $nextsequencenumber;
 $return_hist['currency'] = $data_return['currency'];
 if ($class_pi->getReceivable() == 0) {
     //REFUND
     if ($is_sp) {
         $customer_bankdata = $class_jcust->getBankAccountData($data_return['jng_sp_customers_id']);
     } else {
         $customer_bankdata = $class_cust->getBankAccountData($class_pi->detail['invoice_order_id']);
     }
     if (!is_null($customer_bankdata)) {
         if ($is_sp) {
             $return_hist['bankcode'] = str_replace(' ', '', $customer_bankdata['bank_code']);
             $return_hist['bankcountry'] = $customer_bankdata['bank_country'];
             $return_hist['bankaccount'] = $customer_bankdata['bank_account_number'];
             $return_hist['bankaccountholder'] = $customer_bankdata['bank_account_holder'];
         } else {
             $return_hist['bankcode'] = str_replace(' ', '', $customer_bankdata['banktransfer_blz']);
             if (strlen($customer_bankdata['banktransfer_bankname']) == 2 && strtoupper($customer_bankdata['banktransfer_bankname']) == $customer_bankdata['banktransfer_bankname']) {
                 //we use the bankname as country code when it's only 2 characters
                 $return_hist['bankcountry'] = $customer_bankdata['banktransfer_bankname'];
             } else {
                 $return_hist['bankcountry'] = 'DE';
             }