Server : Apache/2.4.18 (Ubuntu) System : Linux canvaswebdesign 3.13.0-71-generic #114-Ubuntu SMP Tue Dec 1 02:34:22 UTC 2015 x86_64 User : oppastar ( 1041) PHP Version : 7.0.33-0ubuntu0.16.04.15 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, Directory : /var/www/rabbithabit.com/public_html/application/controllers/ |
Upload File : |
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Payment extends Public_Controller { private $order_id = NULL; function __construct() { parent::__construct(); $this->load->model('order_m'); $this->load->model('order_detail_m'); $this->load->model('product_m'); $this->load->model('configuration_m'); $this->load->library('cart'); } function post_payment() { // echo 'pass here...'; exit; // if(!$this->session->userdata('shipping_cart')) { // redirect('cart'); // } // if(!isset($_POST['lanjutPembayaran'])) { // redirect('shipping'); // } //check if user not register yet if(!$this->session->userdata('customer') || $this->session->userdata('customer')['customer_id'] == NULL || $this->session->userdata('customer')['customer_type'] == 'guest') { //register new guest and return the id //from guest checkout shipping //check if email already exist, and check customer type.. $count_customer = $this->db->select('id_customers')->from('customers')->where('email', $this->security->xss_clean($this->input->post('email')))->get()->num_rows(); if($count_customer > 0) { //customer already exist //check customer type. if customer type is regular, then update shipping information only.. $guest_data = array( 'shipping_name' => $this->security->xss_clean($this->input->post('name')), 'shipping_phone' => $this->security->xss_clean($this->input->post('phone')), 'shipping_id_province' => $this->input->post('shipping_province'), 'shipping_id_district' => $this->input->post('shipping_district'), 'shipping_id_subdistrict' => $this->input->post('shipping_subdistrict'), 'address' => $this->security->xss_clean($this->input->post('address')), 'shipping_address' =>$this->security->xss_clean($this->input->post('address')), 'postcode' => $this->security->xss_clean($this->input->post('postcode')), 'shipping_postcode' => $this->security->xss_clean($this->input->post('postcode')), 'birthday' => $this->security->xss_clean($this->input->post('birthday')), 'sex_type' => $this->security->xss_clean($this->input->post('sex_type')) ); $this->db->where('email', $this->security->xss_clean($this->input->post('email'))); $this->db->update('customers', $guest_data); //get customer id $this->db->select('id_customers, name')->from('customers')->where('email', $this->security->xss_clean($this->input->post('email'))); $customer_data = $this->db->get()->row(); $customer_name = $customer_data->name; $customer_id = $customer_data->id_customers; $guest_data = array( 'customer_name' => ucwords($customer_name), 'customer_email' => $this->session->userdata('guest_details')['email'], 'customer_id' => $customer_id, 'customer_loggedin' => TRUE, 'customer_type' => 'guest' ); $this->session->set_userdata('customer', $guest_data); } else { //customer not yet exist //insert new customer $guest_data = array( 'name' => $this->security->xss_clean($this->input->post('name')), 'recipient_name' => $this->security->xss_clean($this->input->post('name')), 'shipping_name' => $this->security->xss_clean($this->input->post('name')), 'email' => $this->security->xss_clean($this->input->post('email')), 'phone' => $this->security->xss_clean($this->input->post('phone')), 'shipping_phone' => $this->security->xss_clean($this->input->post('phone')), 'shipping_id_province' => $this->input->post('shipping_province'), 'shipping_id_district' => $this->input->post('shipping_district'), 'shipping_id_subdistrict' => $this->input->post('shipping_subdistrict'), 'address' => $this->security->xss_clean($this->input->post('address')), 'shipping_address' => $this->security->xss_clean($this->input->post('address')), 'postcode' => $this->security->xss_clean($this->input->post('postcode')), 'shipping_postcode' =>$this->security->xss_clean($this->input->post('postcode')), 'birthday' => $this->security->xss_clean($this->input->post('birthday')), 'sex_type' => $this->security->xss_clean($this->input->post('sex_type')), 'type' => 'guest' ); $this->db->insert('customers', $guest_data); $customer_id = $this->db->insert_id(); $customer_data = array( 'customer_name' => 'Guest', 'customer_email' => $this->session->userdata('guest_details')['email'], 'customer_id' => $customer_id, 'customer_loggedin' => TRUE, 'customer_type' => 'guest' ); $this->session->set_userdata('customer', $customer_data); } } elseif($this->session->userdata('customer')['customer_id'] != NULL && $this->session->userdata('customer')['customer_type'] == 'regular') { //customer is logged in.. //update detail $customer_data = array( 'shipping_id_province' => $this->input->post('shipping_province'), 'shipping_id_district' => $this->input->post('shipping_district'), 'shipping_id_subdistrict' => $this->input->post('shipping_subdistrict'), 'address' => $this->security->xss_clean($this->input->post('address')), 'shipping_address' =>$this->security->xss_clean($this->input->post('address')), 'postcode' => $this->security->xss_clean($this->input->post('postcode')), 'shipping_postcode' => $this->security->xss_clean($this->input->post('postcode')), ); //check if shipping_name & shipping_phone empty $customer = $this->db->select('name, phone, shipping_name, shipping_phone')->from('customers')->where('id_customers', $this->session->userdata('customer')['customer_id'])->get()->row(); if(empty($customer->shipping_name)) { $customer_data['shipping_name'] = $customer->name; } if(empty($customer->shipping_phone)) { $customer_data['shipping_phone'] = $customer->phone; } $this->db->where('id_customers', $this->session->userdata('customer')['customer_id']); $this->db->update('customers', $customer_data); } redirect('payment'); } function index() { if(!$this->session->userdata('shipping_cart')) { redirect('cart'); } if(!$this->session->userdata('shipping_to_payment')) { redirect('shipping'); } //check shipping_cart if the stock is available for each warehouse $have_stock = true; foreach ($this->session->userdata('shipping_cart') as $rowid => $item) { //get product name $product_name = $this->db->select('title')->from('products')->where('id_products', $item['product_id'])->get()->row()->title; //get total stok from warehouse $current_stock = $this->db->select('stock')->from('stock')->where('id_product', $item['product_id'])->where('id_product_detail', $item['id'])->where('warehouse_id', $item['warehouse_id'])->get()->row()->stock; if($current_stock < $item['qty']) { if($item['is_backorder'] == 'no') { $this->session->set_flashdata('no_stock' . $rowid, 'Not Enough Stock'); $have_stock = false; } } } if($have_stock == false) { redirect('shipping/no_stock'); } //INSERT NEW ORDERS $grand_total = 0; foreach ($this->session->userdata('shipping_cart') as $rowid => $item) { $grand_total = $grand_total + $item['subtotal']; } //GET THE VALUE OF INDENT (only for indent item) $indent_remaining = 0; foreach ($this->session->userdata('shipping_cart') as $rowid => $shipping_cart_item) { if($shipping_cart_item['is_backorder'] == 'yes') { $indent_remaining = $indent_remaining + (($shipping_cart_item['price'] - $shipping_cart_item['dp_price']) * $shipping_cart_item['qty']); } } //GET THE VALUE OF INDENT SHIPPING FEE (only for indent item) $indent_shipping_fee = 0; foreach ($this->session->userdata('shipping_cart') as $rowid => $shipping_cart_item) { if($shipping_cart_item['is_backorder'] == 'yes') { $indent_shipping_fee = $indent_shipping_fee + $shipping_cart_item['shipping_fee']; } } //get shipping address, province, district and subdistrict $customer_data = $this->db->select('email, shipping_name, shipping_address, shipping_id_province, shipping_id_district, shipping_id_subdistrict, shipping_postcode, shipping_phone, shipping_country,current_pointreward')->from('customers')->where('id_customers', $this->session->userdata('customer')['customer_id'])->get()->row(); //get subdistrict, distirct and province name $subdistrict = $this->db->select('subdistrict')->from('indonesia_subdistricts')->where('rajaongkir_id_subdistrict', $customer_data->shipping_id_subdistrict)->get()->row()->subdistrict; //get district $district = $this->db->select('district')->from('indonesia_districts')->where('rajaongkir_id_district', $customer_data->shipping_id_district)->get()->row()->district; //get province $province = $this->db->select('province')->from('indonesia_provinces')->where('rajaongkir_province_id', $customer_data->shipping_id_province)->get()->row()->province; $get_grand_total = 0; foreach ($this->session->userdata('shipping_cart') as $item){ $get_grand_total += $item['subtotal']; } $q_config_cond = $this->db->select('type_cond_prov_free_shipping, cond_more_prov_free_shipping, cond_less_prov_free_shipping')->from('configuration')->where('id_configuration',1)->get()->row(); $free_shipping_type = $this->db->select('free_shipping_type') ->from('configuration') ->where('id_configuration',1)->get()->row() ->free_shipping_type; $condition_freeshipping = false; if($free_shipping_type == 'region') { $selected_region_province = $this->db->select('*') ->from('free_shipping_region') ->where('configuration_id',1) ->where('province_id',$customer_data->shipping_id_province) ->get(); if($selected_region_province->num_rows() > 0){ switch ($q_config_cond->type_cond_prov_free_shipping) { case 'more_than': if ($get_grand_total >= $q_config_cond->cond_more_prov_free_shipping) { $condition_freeshipping = true; }else{ $condition_freeshipping = false; } break; case 'less_than': if ($get_grand_total <= $q_config_cond->cond_less_prov_free_shipping) { $condition_freeshipping = true; }else{ $condition_freeshipping = false; } break; default: $condition_freeshipping = true; break; } } // if($selected_region_province->num_rows() > 0){ // $condition_freeshipping = true; // } } //insert new order to orders table $data = array( 'customer_id' => (int) $this->session->userdata('customer')['customer_id'], 'total_amount' => $grand_total, 'order_date' => date('Y-m-d H:i:s'), 'recipient_name' => $customer_data->shipping_name, 'address' => $customer_data->shipping_address, 'subdistrict' => $subdistrict, 'district' => $district, 'province' => $province, 'postcode' => $customer_data->shipping_postcode, 'phone' => $customer_data->shipping_phone, 'email' => $customer_data->email, 'country' => $customer_data->shipping_country, 'shipping_fee' => $this->session->userdata('total_shipping_fee'), 'free_shipping_fee' => $this->session->userdata('free_shipping'), 'created_by' => 'system', 'indent_remaining' => $indent_remaining, 'indent_shipping_fee' => $indent_shipping_fee ); if($this->session->userdata('site_lang') == 'english') { $data['order_language'] = 'english'; } else { $data['order_language'] = 'indonesian'; } //add voucher if ($this->session->userdata('chosen_voucher_code')) { $data['redeemed_voucher_code'] = $this->session->userdata('chosen_voucher_code'); $data['redeemed_voucher_type'] = $this->session->userdata('chosen_voucher_type'); $data['redeemed_voucher_value'] = $this->session->userdata('chosen_voucher_discount'); $data['redeemed_voucher_amount'] = $this->session->userdata('redeemed_voucher_amount'); } //add tax if($this->session->userdata('tax')) { $data['ppn'] = $this->session->userdata('tax'); } //add point rewards $pointrewards = $this->db->select('*')->from('point_rewards')->where('id_point_rewards', 1)->get()->row(); if($this->session->userdata('customer')['customer_type'] != 'guest') { if($pointrewards->active == 'yes') { $data['plus_reward'] = ceil($grand_total / $pointrewards->ratio); } } //minus point rewards if($this->session->userdata('chosen_point')) { $data['current_reward'] = $customer_data->current_pointreward; $data['sisa_reward'] = $customer_data->current_pointreward - $this->session->userdata('chosen_point'); $data['minus_reward'] = $this->session->userdata('chosen_point'); $data['minus_reward_amount'] = $this->session->userdata('chosen_point_discount'); } //GRAND FINAL TOTAL AMOUNT CALCULATION $finalshippingfee = 0; $calculate_finalshippingfee = $this->session->userdata('total_shipping_fee') - $this->session->userdata('free_shipping'); if($calculate_finalshippingfee > 0){ $finalshippingfee = $calculate_finalshippingfee; } $data['grand_total_amount'] = (($grand_total - $this->session->userdata('redeemed_voucher_amount') - $this->session->userdata('chosen_point_discount')) + ($finalshippingfee)); if($data['grand_total_amount'] <= 0){ if($finalshippingfee > 0) { $data['grand_total_amount'] = $finalshippingfee; } } //get total downpayment $data['total_downpayment'] = $data['grand_total_amount'] - $indent_remaining - $indent_shipping_fee; if ($condition_freeshipping == true) { $data['grand_total_amount'] = $data['grand_total_amount'] - $data['shipping_fee'] - $data['indent_shipping_fee']; $data['total_downpayment'] = $data['total_downpayment'] - $data['shipping_fee'] - $data['indent_shipping_fee']; $data['shipping_fee'] = 0; } $this->db->insert('orders', $data); $order_id = $this->db->insert_id(); /*insert shipping session to shipping table*/ if($this->session->userdata('shipping_session') != null){ foreach ($this->session->userdata('shipping_session') as $shipping_session) { $insert_shipping_session = array( 'order_id' => $order_id, 'warehouse_id' => $shipping_session['warehouse_id'], 'shipping_fee' => $shipping_session['shipping_fee'], 'is_indent' => $shipping_session['is_indent'], ); $this->db->insert('shipping',$insert_shipping_session); } } if($this->session->userdata('chosen_point')) { //deduct minus_rewards to customer current point rewards.. //get customer current point reward $current_point_reward = $this->db->select('current_pointreward')->from('customers')->where('id_customers', (int) $this->session->userdata('customer')['customer_id'])->get()->row()->current_pointreward; $new_point_reward = $current_point_reward - (int) $data['minus_reward']; //add new point back to customers table $data = array( 'current_pointreward' => $new_point_reward ); $this->db->where('id_customers', (int) $this->session->userdata('customer')['customer_id']); $this->db->update('customers', $data); } //insert new order details to order details table foreach ($this->session->userdata('shipping_cart') as $item) { $item_data = array( 'orders_id' => $order_id, 'item_id' => (int) $item['id'], 'product_id' => (int) $item['product_id'], 'item_name' => $item['name'], 'item_price' => (int) $item['price'], 'quantity' => (int) $item['qty'], 'subtotal' => (int) $item['subtotal'], 'warehouse_id' => $item['warehouse_id'], 'chosen_shipping_id' => $item['chosen_shipping_id'], 'shipping_fee' => $item['shipping_fee'], 'is_backorder' => $item['is_backorder'], 'dp_percentage' => $item['dp_percentage'], 'indent_message' => $item['indent_message'], 'is_flashsale' => $item['is_flashsale'], 'attribute_detail_ids' => serialize($item['attribute_detail_ids']) ); //get SKU $item_data['sku'] = $this->db->select('sku')->from('product_details')->where('id', $item['id'])->get()->row()->sku; //get Atribute details $item_data['attributes'] = ''; $count = 1; foreach ($item['attribute_detail_ids'] as $detail_id) { if($this->session->userdata('site_lang') == 'english') { $detail_name = $this->db->select('attribute_detail_en')->from('product_attributes_detail')->where('id', $detail_id)->get()->row()->attribute_detail_en; } else { $detail_name = $this->db->select('attribute_detail')->from('product_attributes_detail')->where('id', $detail_id)->get()->row()->attribute_detail; } if($count == 1) { $item_data['attributes'] = $detail_name; } else { $item_data['attributes'] = $item_data['attributes'] . ', ' . $detail_name; } $count++; } if($item['is_sale'] == TRUE) { $item_data['is_sale'] = 'yes'; } else { $item_data['is_sale'] = 'no'; } $this->order_detail_m->save($item_data, $id = NULL); //ONLY FOR FLASHSALE ITEM //check if an item is currently in flashsale $count_product = $this->db->select('product_id')->from('flashsale_products')->where('flashsale_id', $this->session->userdata('flashsale_id_active'))->where('product_id', $item['product_id'])->get()->num_rows(); if($count_product > 0) { //this product is part of flashsale $counter_data = $this->db->select('counter, terjual')->from('flashsale_products')->where('flashsale_id', $this->session->userdata('flashsale_id_active'))->where('product_id', $item['product_id'])->get()->row(); $current_counter = $counter_data->counter; $current_terjual = $current_counter->terjual; $data = array( 'counter' => $current_counter - $item['qty'], 'terjual' => $current_terjual + $item['qty'], ); $this->db->where('flashsale_id', $this->session->userdata('flashsale_id_active')); $this->db->where('product_id', $item['product_id']); $this->db->update('flashsale_products', $data); //update also flashsale customer $data = array( 'customer_id' => $this->session->userdata('customer')['customer_id'], 'flashsale_id' => $this->session->userdata('flashsale_id_active'), 'flashsale_product_id' => $item['product_id'], 'purchase_qty' => $item['qty'] ); $this->db->insert('flashsale_customer', $data); } //DEDUCT VOUCHERS FROM VOUCHER TABLE if ($this->session->userdata('chosen_voucher_code')) { $qty_ready = $this->db->select('qty_ready')->from('vouchers')->where('voucher_code', $this->session->userdata('chosen_voucher_code'))->get()->row()->qty_ready; if ($qty_ready != NULL) { $new_qty_ready = $qty_ready - 1; $data = array( 'qty_ready' => $new_qty_ready, ); $this->db->where('voucher_code', $this->session->userdata('chosen_voucher_code')); $this->db->update('vouchers', $data); } } //UPDATE VOUCHER USER TABLE //get voucher id if ($this->session->userdata('chosen_voucher_code')) { $voucher_id = $this->db->select('id_vouchers')->from('vouchers')->where('voucher_code', $this->session->userdata('chosen_voucher_code'))->get()->row()->id_vouchers; //check if this voucher already been used before in voucher user table $count_voucher = $this->db->select('id_voucher_users')->from('voucher_users')->where('voucher_id', $voucher_id)->where('customer_id', (int) $this->session->userdata('customer')['customer_id'])->get()->num_rows(); if ($count_voucher == 0) { //voucher not exist yet, insert new voucher $data = array( 'voucher_id' => $voucher_id, 'customer_id' => (int) $this->session->userdata('customer')['customer_id'], 'voucher_used' => 1, ); $this->db->insert('voucher_users', $data); } else { //voucher already exist //get current used voucher quantity, and add 1 $voucher_user = $this->db->select('id_voucher_users, voucher_used')->from('voucher_users')->where('voucher_id', (int) $voucher_id)->where('customer_id', (int) $this->session->userdata('customer')['customer_id'])->get()->row(); $new_voucher_used = $voucher_user->voucher_used + 1; $data = array( 'voucher_used' => (int) $new_voucher_used, ); $this->db->where('id_voucher_users', $voucher_user->id_voucher_users); $this->db->update('voucher_users', $data); } } } //DEDUCT CURRENT STOCK WITH PURCHASE QUANTITY foreach ($this->session->userdata('shipping_cart') as $rowid => $item) { if($item['is_backorder'] == 'no') { //get current stock from stock table $current_stock = $this->db->select('id, stock')->from('stock')->where('id_product', (int) $item['product_id'])->where('id_product_detail', (int) $item['id'])->where('warehouse_id', (int) $item['warehouse_id'])->get()->row(); $new_item_stock = $current_stock->stock - (int) $item['qty']; $stock_data = array( 'stock' => $new_item_stock, ); //update the product item stock in database $this->db->where('id_product', (int) $item['product_id']); $this->db->where('id_product_detail', (int) $item['id']); $this->db->where('warehouse_id', (int) $item['warehouse_id']); $this->db->update('stock', $stock_data); //get $stock_id $stock_id = $current_stock->id; //update stock_movement_table $movement_data = array( 'stock_id' => $stock_id, 'type' => '-', 'stock_change' => (int) $item['qty'], 'remark' => 'Sales Order No: ' . $order_id ); $this->db->insert('stock_movement', $movement_data); } } $order = $this->db->select('*')->from('orders')->where('id_orders', $order_id)->get()->row(); $grand_final_total = $order->grand_total_amount - $order->indent_remaining - $order->indent_shipping_fee; $finalshippingfee = 0; $calculate_finalshippingfee = $order->shipping_fee - $order->free_shipping_fee - $order->indent_shipping_fee; if($calculate_finalshippingfee > 0){ $finalshippingfee = $calculate_finalshippingfee; } $total_non_shipping = $order->total_amount - $order->redeemed_voucher_amount - $order->minus_reward_amount; if($grand_final_total <= 0) { if($finalshippingfee <= 0) { $this->session->set_userdata('free_order_id',$order_id); $update_payment_status = array( 'payment_type' => 'free order', 'payment_status' => 3, 'sisa_kembali' => $grand_final_total ); $this->db->where('id_orders',$order_id); $this->db->update('orders',$update_payment_status); redirect('payment/free_order'); } } //LOAD MIDTRANS PAYMENTS IF ACTIVE $midtrans_active = $this->db->select('midtrans')->from('configuration')->where('id_configuration', 1)->get()->row()->midtrans; if($midtrans_active == 1) { //load midtrans payment function $data = $this->midtrans_processing($order, $order_id, $total_non_shipping, $finalshippingfee, $customer_data, $subdistrict, $district, $province); //create midtrans order_id session to be used by response success midtrans page $this->session->set_userdata('midtrans_order_id', $order_id); } //LOAD BANK TRANSFER MANUAL IF ACTIVE $bank_active = $this->db->select('bank_transfer, bank_transfer1')->from('configuration')->where('id_configuration', 1)->get()->row(); $data['bca_is_active'] = $bank_active->bank_transfer; $data['mandiri_is_active'] = $bank_active->bank_transfer1; $data['order_id'] = $order_id; if($this->session->userdata('site_lang') == 'english') { $this->lang->load('payment', 'english'); } else { $this->lang->load('payment', 'indonesian'); } //load payment view $website_name = $this->db->select('website_name')->from('configuration')->where('id_configuration', 1)->get()->row()->website_name; $this->data_header['browser_title'] = ucwords($website_name) . ' - Payment'; $this->data_header['meta_description'] = ucwords($website_name) . ' - Payment'; $this->load->view("themes/$this->theme_no/header", $this->data_header); $this->load->view('payment', $data); $this->load->view("themes/$this->theme_no/footer", $this->data_footer); $this->session->unset_userdata('shipping_to_payment'); } private function midtrans_processing($order, $order_id, $total_non_shipping, $finalshippingfee, $customer_data, $subdistrict, $district, $province) { require_once APPPATH . 'third_party/Veritrans.php'; //get key $midtrans = $this->db->select('veritrans_server_key, veritrans_sandbox_server_key, veritrans_client_key, veritrans_sandbox_client_key, veritrans_production_mode, credit_card, gopay, permata_va, bni_va, mandiri_bill, akulaku')->from('configuration')->where('id_configuration', 1)->get()->row(); $production_mode = $midtrans->veritrans_production_mode; //Set server key if ($production_mode == 'true') { Veritrans_Config::$isProduction = true; Veritrans_Config::$serverKey = $midtrans->veritrans_server_key; $data['client_key'] = $midtrans->veritrans_client_key; $data['snap_url'] = 'https://app.midtrans.com/snap/snap.js'; } else { Veritrans_Config::$isProduction = false; Veritrans_Config::$serverKey = $midtrans->veritrans_sandbox_server_key; $data['client_key'] = $midtrans->veritrans_sandbox_client_key; $data['snap_url'] = 'https://app.sandbox.midtrans.com/snap/snap.js'; } // Enable sanitization Veritrans_Config::$isSanitized = true; // Enable 3D-Secure Veritrans_Config::$is3ds = true; // Populate items // define a two-dimensional array //get order detail $order_details = $this->db->select('*')->from('orders_detail')->where('orders_id', $order_id)->get()->result(); $total_item_price = 0; foreach($order_details as $item) { //get dp price for indent porduct if($item->is_backorder == 'yes') { $price = $item->item_price * $item->dp_percentage/100; $name = strip_tags(substr($item->item_name, 0, 48)) . '..Downpayment'; } else { $price = $item->item_price; $name = strip_tags(substr($item->item_name, 0, 48)) . '..'; } $items[] = array( 'id' => $item->product_id, 'price' => (int) $price, 'quantity' => $item->quantity, 'name' => $name, ); $total_item_price = $total_item_price + ($price * $item->quantity); } //add voucher discount into the item if ($order->redeemed_voucher_amount != NULL) { if ($order->redeemed_voucher_type == 'amount') { //by amount //deduct voucher into item, so gross == total items $items[] = array( 'id' => 'voucher', 'price' => -$order->redeemed_voucher_amount, 'quantity' => 1, 'name' => 'Voucher: ' . $order->redeemed_voucher_code, ); } else { //by percentage //deduct voucher into item, so gross == total items $items[] = array( 'id' => 'voucher', 'price' => -$order->redeemed_voucher_amount, 'quantity' => 1, 'name' => 'Voucher: ' . $order->redeemed_voucher_code, ); } } //add point rewards discount if($order->minus_reward_amount != NULL) { $items[] = array( 'id' => 'pointrewards', 'price' => -$order->minus_reward_amount, 'quantity' => 1, 'name' => 'Point Rewards', ); } if($finalshippingfee > 0) { //add shipping fee into the item // $set_shipping_fee = 0; // foreach($order_details as $key) { // if($key->is_backorder == 'yes') { // $set_shipping_fee += $key->shipping_fee; // } else { // $set_shipping_fee += 0; // } // } $items[] = array( 'id' => 'shipping', 'price' => $finalshippingfee, 'quantity' => 1, 'name' => 'Shipping Fee', ); //add free shipping if($order->free_shipping_fee != NULL) { $items[] = array( 'id' => 'freeshipping', 'price' => -$order->free_shipping_fee, 'quantity' => 1, 'name' => 'Free Shipping', ); } } //add creditcard total fee (transaction fee + admin fee) if ($this->session->userdata('chosen_payment_type') == 'veritrans') { $items[] = array( 'id' => 'veritrans_fee', 'price' => (int) $this->session->userdata('veritrans_total_fee'), 'quantity' => 1, 'name' => 'Credit Card Admin', ); } //add virtualaccount total fee (admin fee) if ($this->session->userdata('chosen_payment_type') == 'virtualaccount') { $items[] = array( 'id' => 'virtualaccount_fee', 'price' => (int) $this->session->userdata('virtualaccount_total_fee'), 'quantity' => 1, 'name' => 'Virtual Account Admin', ); } //add tax if($this->session->userdata('tax')) { $items[] = array( 'id' => 'tax', 'price' => (int) $this->session->userdata('tax'), 'quantity' => 1, 'name' => 'Tax', ); } // Populate customer's billing address $billing_address = array( 'first_name' => $customer_data->shipping_name, 'last_name' => '', 'address' => $customer_data->shipping_address, 'city' => $subdistrict . '. ' . $district . '. ' . $province, 'postal_code' => $customer_data->shipping_postcode, 'phone' => $customer_data->shipping_phone, 'country_code' => 'IDN' ); // Populate customer's shipping address $shipping_address = array( 'first_name' => $customer_data->shipping_name, 'last_name' => '', 'address' => $customer_data->shipping_address, 'city' => $subdistrict . '. ' . $district . '. ' . $province, 'postal_code' => $customer_data->shipping_postcode, 'phone' => $customer_data->shipping_phone, 'country_code' => 'IDN' ); // Populate customer's Info $customer_details = array( 'first_name' => $customer_data->shipping_name, 'last_name' => '', 'email' => $customer_data->email, 'phone' => $customer_data->shipping_phone, 'billing_address' => $billing_address, 'shipping_address' => $shipping_address ); if($midtrans->credit_card == 1) { //MIDTRANS CREDIT CARD $transaction_details_cc = array( 'order_id' => $order_id . '-cc', 'gross_amount' => (int) $grand_final_total ); $transaction_creditcard = array( 'enabled_payments' => array('credit_card'), 'transaction_details' => $transaction_details_cc, 'customer_details' => $customer_details, 'item_details' => $items, ); // echo '<pre>'; // print_r($transaction_creditcard); // echo '</pre>'; $data['snapToken_cc'] = Veritrans_Snap::getSnapToken($transaction_creditcard); } if($midtrans->gopay == 1) { //MIDTRANS GOPAY $transaction_details_gopay = array( 'order_id' => $order_id . '-gopay', 'gross_amount' => (int) $grand_final_total ); $transaction_gopay = array( 'enabled_payments' => array('gopay'), 'transaction_details' => $transaction_details_gopay, 'customer_details' => $customer_details, 'item_details' => $items, ); $data['snapToken_gopay'] = Veritrans_Snap::getSnapToken($transaction_gopay); } if($midtrans->akulaku == 1) { //MIDTRANS AKULAKU $transaction_details_akulaku = array( 'order_id' => $order_id . '-akulaku', 'gross_amount' => (int) $grand_final_total ); $transaction_akulaku = array( 'enabled_payments' => array('akulaku'), 'transaction_details' => $transaction_details_akulaku, 'customer_details' => $customer_details, 'item_details' => $items, ); $data['snapToken_akulaku'] = Veritrans_Snap::getSnapToken($transaction_akulaku); } if($midtrans->permata_va == 1) { //MIDTRANS PERMATA VA $transaction_details_permatava = array( 'order_id' => $order_id . '-permatava', 'gross_amount' => (int) $grand_final_total ); $transaction_permatava = array( 'enabled_payments' => array('permata_va'), 'transaction_details' => $transaction_details_permatava, 'customer_details' => $customer_details, 'item_details' => $items, ); $data['snapToken_permatava'] = Veritrans_Snap::getSnapToken($transaction_permatava); } if($midtrans->bni_va == 1) { //MIDTRANS BNI VA $transaction_details_bniva = array( 'order_id' => $order_id . '-bniva', 'gross_amount' => (int) $grand_final_total ); $transaction_bniva = array( 'enabled_payments' => array('bni_va'), 'transaction_details' => $transaction_details_bniva, 'customer_details' => $customer_details, 'item_details' => $items, ); $data['snapToken_bniva'] = Veritrans_Snap::getSnapToken($transaction_bniva); } if($midtrans->mandiri_bill == 1) { //MIDTRANS MANDIRI BILL PAYMENT $transaction_details_echannel = array( 'order_id' => $order_id . '-echannel', 'gross_amount' => (int) $grand_final_total ); $transaction_echannel = array( 'enabled_payments' => array('echannel'), 'transaction_details' => $transaction_details_echannel, 'customer_details' => $customer_details, 'item_details' => $items, ); $data['snapToken_echannel'] = Veritrans_Snap::getSnapToken($transaction_echannel); } $data['order_id'] = $order_id; //create midtrans order_id session to be used by response success midtrans page $this->session->set_userdata('midtrans_order_id', $order_id); return $data; } public function bank_transfer_processing($bank_name = NULL, $order_id = NULL) { if ($bank_name == NULL && $order_id == NULL) { redirect('shipping'); } $this->order_id = $order_id; $order = $this->db->select('*')->from('orders')->where('id_orders', $order_id)->get()->row(); //get order detail $order_details = $this->db->select('*')->from('orders_detail')->where('orders_id', $order_id)->get()->result(); //get customer district / city name $customer_data = $this->db->select('name, email, phone, shipping_address, shipping_id_district, shipping_id_subdistrict, shipping_id_province')->from('customers')->where('id_customers', (int) $this->session->userdata('customer')['customer_id'])->get()->row(); //get subdistrict, distirct and province name $subdistrict = $this->db->select('subdistrict')->from('indonesia_subdistricts')->where('rajaongkir_id_subdistrict', $customer_data->shipping_id_subdistrict)->get()->row()->subdistrict; //get district $district = $this->db->select('district')->from('indonesia_districts')->where('rajaongkir_id_district', $customer_data->shipping_id_district)->get()->row()->district; //get province $province = $this->db->select('province')->from('indonesia_provinces')->where('rajaongkir_province_id', $customer_data->shipping_id_province)->get()->row()->province; //BCA manual bank transfer if ($bank_name == 'bca') { $payment_type = 'bank transfer BCA'; //update payment status to become 1 $data = array( 'payment_status' => 1, //not paid 'payment_type' => $payment_type ); $this->db->where('id_orders', $order_id); $this->db->update('orders', $data); //Send email $this->process_send_email($payment_type); //LOAD PAYMENT RETURN PAGE $data['bank'] = $this->configuration_m->get_bank(); $data['email'] = $customer_data->email; $data['order_id'] = $order_id; $data['order_info'] = $this->db->select('redeemed_voucher_type, minus_reward_amount, grand_total_amount, indent_remaining, indent_shipping_fee, id_orders, order_date,payment_status, payment_confirm, recipient_name, address, district, subdistrict, province, postcode, shipping_fee, free_shipping_fee, minus_reward, redeemed_voucher_code, redeemed_voucher_amount, redeemed_voucher_value')->from('orders')->where('id_orders',$order_id)->get()->row(); $this->destroy_session_data(); if($this->session->userdata('site_lang') == 'english') { $this->lang->load('order_history', 'english'); } else { $this->lang->load('order_history', 'indonesian'); } //create new session to display on thank you page $bca_data = array( 'grand_total' => $data['order_info']->grand_total_amount - $data['order_info']->indent_remaining - $data['order_info']->indent_shipping_fee, 'order_info' => $data['order_info'], 'bank' => $data['bank'], 'email' => $data['email'], 'order_id' => $data['order_id'] ); $this->session->set_userdata('bca_data', $bca_data); redirect('payment/process_payment'); } //MANDIRI manual bank transfer if ($bank_name == 'mandiri') { $payment_type = 'bank transfer MANDIRI'; //update payment status to become 1 // not paid $data = array( 'payment_status' => 1, 'payment_type' => $payment_type ); $this->db->where('id_orders', $order_id); $this->db->update('orders', $data); //Send email $this->process_send_email($payment_type); //LOAD PAYMENT RETURN PAGE $data['bank'] = $this->configuration_m->get_bank1(); $data['email'] = $customer_data->email; $data['order_id'] = $order_id; $data['order_info'] = $this->db->select('redeemed_voucher_type, minus_reward_amount, grand_total_amount, indent_remaining, indent_shipping_fee, id_orders, order_date,payment_status, payment_confirm, recipient_name, address, district, subdistrict, province, postcode, shipping_fee, free_shipping_fee, minus_reward, redeemed_voucher_code, redeemed_voucher_amount, redeemed_voucher_value')->from('orders')->where('id_orders',$order_id)->get()->row(); $this->destroy_session_data(); if($this->session->userdata('site_lang') == 'english') { $this->lang->load('order_history', 'english'); } else { $this->lang->load('order_history', 'indonesian'); } //create new session to display on thank you page $mandiri_data = array( 'grand_total' => $data['order_info']->grand_total_amount - $data['order_info']->indent_remaining - $data['order_info']->indent_shipping_fee, 'order_info' => $data['order_info'], 'bank' => $data['bank'], 'email' => $data['email'], 'order_id' => $data['order_id'] ); $this->session->set_userdata('mandiri_data', $mandiri_data); redirect('payment/process_payment'); } } public function process_payment() { if(!$this->session->userdata('bca_data') && !$this->session->userdata('mandiri_data')) { redirect(base_url()); } if($this->session->userdata('site_lang') == 'english') { $this->lang->load('order_history', 'english'); } else { $this->lang->load('order_history', 'indonesian'); } $this->data_header['datalayer'] = array( 'ecomm_pagetype' => 'purchase' ); if($this->session->userdata('bca_data')) { //get SEO $this->db->select('website_name')->from('configuration')->where('id_configuration', 1); $website_name = $this->db->get()->row(); $this->data_header['browser_title'] = ucwords($website_name->website_name) . ' - BCA Manual Bank Transfer'; $this->data_header['meta_description'] = ucwords($website_name->website_name) . ' - BCA Manual Bank Transfer'; $data = $this->session->userdata('bca_data'); } if($this->session->userdata('mandiri_data')) { //get SEO $this->db->select('website_name')->from('configuration')->where('id_configuration', 1); $website_name = $this->db->get()->row(); $this->data_header['browser_title'] = ucwords($website_name->website_name) . ' - MANDIRI Manual Bank Transfer'; $this->data_header['meta_description'] = ucwords($website_name->website_name) . ' - MANDIRI Manual Bank Transfer'; $data = $this->session->userdata('mandiri_data'); } if($this->session->userdata('site_lang') == 'english') { $this->lang->load('payment', 'english'); } else { $this->lang->load('payment', 'indonesian'); } $this->load->view("themes/$this->theme_no/header", $this->data_header); $this->load->view('banktransfer', $data); $this->load->view("themes/$this->theme_no/footer", $this->data_footer); //destroy bank data $this->session->unset_userdata('bca_data'); $this->session->unset_userdata('mandiri_data'); } public function free_order() { $order_id = $this->session->userdata('free_order_id'); $this->session->unset_userdata('free_order_id'); if($order_id == null){redirect('welcome');} //get customer district / city name $customer_data = $this->db->select('name, email, phone, shipping_address, shipping_id_district, shipping_id_subdistrict, shipping_id_province')->from('customers')->where('id_customers', (int) $this->session->userdata('customer')['customer_id'])->get()->row(); //LOAD PAYMENT RETURN PAGE $data['email'] = $customer_data->email; $data['order_id'] = $order_id; $data['order_info'] = $this->db->select('id_orders,order_date,payment_status,payment_confirm,recipient_name,address,district,subdistrict,province,postcode')->from('orders')->where('id_orders',$order_id)->get()->row(); $data['grand_total'] = '0'; $this->destroy_session_data(); if($this->session->userdata('site_lang') == 'english') { $this->lang->load('order_history', 'english'); } else { $this->lang->load('order_history', 'indonesian'); } //get SEO $website_name = $this->db->select('website_name')->from('configuration')->where('id_configuration', 1)->get()->row(); $this->data_header['browser_title'] = ucwords($website_name->website_name) . ' - BCA Manual Bank Transfer'; $this->data_header['meta_description'] = ucwords($website_name->website_name) . ' - BCA Manual Bank Transfer'; $this->load->view("themes/$this->theme_no/header", $this->data_header); $this->load->view('free_order', $data); $this->load->view("themes/$this->theme_no/footer", $this->data_footer); } private function process_send_email($payment_type) { //----SEND EMAIL TO CUSTOMER //get customer name if($this->session->userdata('customer')['customer_id'] != null){ $customer_id = (int) $this->session->userdata('customer')['customer_id']; } else{ $customer_id = $this->db->select('customer_id')->from('orders')->where('id_orders',$this->order_id)->get()->row()->customer_id; } $this->db->select('name,phone,type,email')->from('customers')->where('id_customers', $customer_id); $email_data['customer'] = $this->db->get()->row(); $email_data['email'] = $email_data['customer']->email; // $website_email = $this->db->select('from_email')->from('configuration')->where('id_configuration', 1)->get()->row()->from_email; // $email_data['email'] = array( // $email_data['customer']->email, // $website_email // ); $email_data['emails'] = $this->configuration_m->get_emails(); if($payment_type == 'bank transfer BCA'){ $email_data['bank'] = $this->db->select('bank')->from('configuration')->where('id_configuration', 1)->get()->row()->bank; } elseif($payment_type == 'bank transfer MANDIRI'){ $email_data['bank'] = $this->db->select('bank1')->from('configuration')->where('id_configuration', 1)->get()->row()->bank1; } $email_data['subject'] = 'Order Confirmation'; //get order detail and customer detail $email_data['order'] = $this->order_m->get_order($this->order_id); $email_data['order_details'] = $this->order_detail_m->get_orders_detail($this->order_id); //get vouchers detail if ($this->session->userdata('chosen_voucher_code')) { $email_data['chosen_voucher_code'] = $this->session->userdata('chosen_voucher_code'); $email_data['chosen_voucher_type'] = $this->session->userdata('chosen_voucher_type'); $email_data['chosen_voucher_discount'] = $this->session->userdata('chosen_voucher_discount'); $email_data['redeemed_voucher_amount'] = $this->session->userdata('redeemed_voucher_amount'); } //get shipping fee total $email_data['carrier_name'] = $this->session->userdata('carrier_name'); $email_data['total_shipping_fee'] = $this->session->userdata('total_shipping_fee'); //add tax to email, if exist.. if($this->session->userdata('tax')) { $email_data['tax'] = $this->session->userdata('tax'); } //add point reward to email, if exist.. if($this->session->userdata('chosen_point')) { $email_data['chosen_point'] = $this->session->userdata('chosen_point'); $email_data['chosen_point_discount'] = $this->session->userdata('chosen_point_discount'); } switch($payment_type) { case 'bank transfer BCA': if($this->session->userdata('site_lang') == 'english') { $view_file = 'email/english/bank_transfer_english'; } else { $view_file = 'email/indonesian/bank_transfer_indo'; } break; case 'bank transfer MANDIRI': if($this->session->userdata('site_lang') == 'english') { $view_file = 'email/english/bank_transfer_english'; } else { $view_file = 'email/indonesian/bank_transfer_indo'; } break; case 'cod': if($this->session->userdata('site_lang') == 'english') { $view_file = 'email/english/cod'; } else { $view_file = 'email/indonesian/cod'; } break; case 'midtrans': if($this->session->userdata('site_lang') == 'english') { $view_file = 'email/english/midtrans'; } else { $view_file = 'email/indonesian/midtrans'; } break; } $this->send_email($view_file, $email_data); //function in My_Controller } private function destroy_session_data() { if($this->session->userdata('customer')['customer_type'] == 'guest') { $this->session->unset_userdata('customer'); } //DESTROY CART AND UNSET SOME SESSION, BUT NOT CUSTOMER SESSION $this->cart->destroy(); $this->session->unset_userdata('grand_total'); $this->session->unset_userdata('recipient_name'); $this->session->unset_userdata('address'); $this->session->unset_userdata('id_district'); $this->session->unset_userdata('id_subdistrict'); $this->session->unset_userdata('id_province'); $this->session->unset_userdata('district'); $this->session->unset_userdata('subdistrict'); $this->session->unset_userdata('province'); $this->session->unset_userdata('country'); $this->session->unset_userdata('postcode'); $this->session->unset_userdata('phone'); $this->session->unset_userdata('order_id'); $this->session->unset_userdata('is_from_cart'); $this->session->unset_userdata('chosen_voucher_type'); $this->session->unset_userdata('chosen_voucher_discount'); $this->session->unset_userdata('chosen_voucher_code'); $this->session->unset_userdata('total_categoryproduct_promo'); $this->session->unset_userdata('redeemed_voucher_amount'); $this->session->unset_userdata('total_shipping_fee'); $this->session->unset_userdata('carrier'); $this->session->unset_userdata('carrier_name'); $this->session->unset_userdata('summary_message'); $this->session->unset_userdata('add_point_reward'); $this->session->unset_userdata('minus_point_reward'); $this->session->unset_userdata('chosen_point'); $this->session->unset_userdata('chosen_point_discount'); $this->session->unset_userdata('chosen_payment_type'); $this->session->unset_userdata('tax'); $this->session->unset_userdata('productpage_to_cart'); $this->session->unset_userdata('choose_dropship_status'); $this->session->unset_userdata('destination_latitude'); $this->session->unset_userdata('destination_longitude'); $this->session->unset_userdata('current_viewed_category_id'); $this->session->unset_userdata('shipping_cart'); $this->session->unset_userdata('prescription_uniqid'); $this->session->unset_userdata('guest_details'); $this->session->unset_userdata('guest_shipping_id'); } }