<div class="<?php echo $s_status; ?> "><?php echo urldecode($s_message); ?> </div> <?php } ?> <p>Refunds for <?php echo singular(humanizer($table_name)); ?> # <?php echo remove_semicol($dataid); ?> </p> <table style="width:100%" class="borderless"> <tr><td style="width:150px;">Grand Total:</td><td>$<?php echo my_number_format($grand_total); ?> </td></tr> <tr><td>Refunds to date:</td><td>$<?php echo my_number_format($refunded); ?> </td></tr> <tr><td>Shipping Refund:</td><td>$<input size="3" class="max_num" max="<?php echo $max_shipping_refund; ?> " type="text" name="shipping_amount" value="<?php
function refund($table_name = FALSE, $id = FALSE) { if ($table_name == FALSE || $id == FALSE) { redirect(base_url()); } $table_details = 'order_details'; if ($_POST && $_POST['_action'] == 'Cancel') { redirect(base_url() . 'content/' . $table_name); } if ($_POST && $_POST['_action'] == 'Process Refunds') { $order_details_refund = array(); $grand_refund = 0; $r_subtotal = 0; if (key_exists('items', $_POST)) { foreach ($_POST['items'] as $oid => $products) { //get the amount that is supposed to be refunded in this trans and the corresponding order_detail_id $order_details_refund[$products] = $_POST[$products]; $grand_refund += $_POST[$products]; } } $r_subtotal = $grand_refund; if (key_exists('shipping_amount', $_POST)) { $grand_refund += $_POST['shipping_amount']; $r_shipping_amount = $_POST['shipping_amount']; } if (key_exists('tax_amount', $_POST)) { $grand_refund += $_POST['tax_amount']; $r_tax = $_POST['tax_amount']; } //get the user information $data['user'] = $this->db->query("SELECT * FROM {$table_name} o LEFT JOIN users u on u.id=o.user_id LEFT JOIN user_address ua ON ua.user_id=u.id WHERE o.id='{$id}'")->row(); $process = $this->payment->refund($grand_refund, $data['user']->customer_profile_id, $data['user']->customer_payment_profile_id, $data['user']->transaction_id); foreach ($_POST['refund'] as $refundables) { $ab = explode('_', $refundables); $a = $ab[0]; $b = $ab[1]; $this->db->query("UPDATE order_details SET is_returned='{$a}' WHERE id='{$b}'"); } if ($process === TRUE) { if (key_exists('notify', $_POST)) { send_email($data['user']->email, SITENAME . " :: Transaction Refunds", 'Refunds of $' . $grand_refund . ' has been refunded to the card with which you used to make this payment. Yay you.', ''); } //update details foreach ($order_details_refund as $r_id => $r_amount) { $this->db->query("UPDATE order_details SET refunded_amount=refunded_amount+{$r_amount} WHERE id='{$r_id}'"); } $this->db->query("UPDATE orders SET refunded_shipping_amount=refunded_shipping_amount+{$r_shipping_amount} WHERE id='{$id}'"); $this->db->query("UPDATE orders SET refunded_tax=refunded_tax+{$r_tax} WHERE id='{$id}'"); $this->db->query("UPDATE orders SET refunded_sub_total=refunded_sub_total+{$r_subtotal} WHERE id='{$id}'"); $this->db->query("UPDATE orders SET is_voidable=0"); redirect(base_url() . 'process/refund/' . $table_name . '/' . remove_semicol($id) . ':success:' . urlencode("This item has been refunded successfully!")); } elseif ($grand_refund < 1) { if (key_exists('notify', $_POST)) { send_email($data['user']->email, SITENAME . " :: Transaction Returns", 'We reveived the items you returned and have updated our records!', 'We reveived the items you returned and have updated our records!'); } redirect(base_url() . 'process/refund/' . $table_name . '/' . remove_semicol($id) . ':note:' . urlencode("No refunds were made. Returns have been updated successfully.")); } else { redirect(base_url() . 'process/refund/' . $table_name . '/' . remove_semicol($id) . ':error:' . urlencode("{$process} Please process them manually with the payment processor.")); } } //**addition for cms styles: keep this comment incase of clashes **// $table_name = mysql_real_escape_string($table_name); $data['group'] = $this->db->query("SELECT * FROM " . DATABASE_MENU_GROUPS . " WHERE id=(SELECT group_id FROM " . DATABASE_TABLE_RULES . " WHERE table_name='{$table_name}' LIMIT 1)")->row(); //backwards $data['groups'] = $this->db->query("SELECT * FROM " . DATABASE_MENU_GROUPS)->result(); $data['tables'] = $this->db->query("SELECT m.table_name FROM " . DATABASE_TABLE_RULES . " m JOIN " . DATABASE_MENU_GROUPS . " n ON n.id=m.group_id WHERE m.is_hidden=0 AND n.id=(SELECT group_id FROM " . DATABASE_TABLE_RULES . " WHERE table_name='{$table_name}' order by `order` LIMIT 1) order by `order`")->result(); //** end addition for cms styles: keep this comment incase of clashes **// $meta['page_title'] = 'Refund'; $meta['breadcrumbs']['content/' . $table_name] = plural(humanizer($table_name)); $meta['breadcrumbs']['none'] = 'Refund'; $data['table_name'] = $table_name; $data['dataid'] = $id; $data['object'] = $this->db->query("SELECT * FROM {$table_name} o LEFT JOIN users u on u.id=o.user_id WHERE o.id='{$id}'")->row(); $data['object_details'] = $this->db->query("SELECT od.id as order_details_id, od.amount, od.refunded_amount, od.is_returned, od.is_refundable, p.name FROM order_details od JOIN upc u on u.id=od.upc_id JOIN products p ON p.id=u.product_id WHERE od.order_id='{$id}'")->result(); $data['grand_total'] = $data['object']->sub_total + $data['object']->tax + $data['object']->shipping_amount; $data['refunded'] = $data['object']->refunded_sub_total + $data['object']->refunded_tax + $data['object']->refunded_shipping_amount; $data['max_shipping_refund'] = $data['object']->shipping_amount - $data['object']->refunded_shipping_amount; $data['max_tax_refund'] = $data['object']->tax - $data['object']->refunded_tax; $data['refunded_shipping_amount'] = $data['object']->refunded_shipping_amount; if (stripos(uri_string(), ':')) { $mess = explode(':', uri_string()); if (count($mess) > 2) { $data['s_message'] = $mess[2]; $data['s_status'] = $mess[1]; } } $this->load->view('includes/header', $meta); $this->load->view("process/refundview", $data); $this->load->view('includes/footer'); }