|
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/angkasapuraretail.com/public_html/application/controllers/ |
Upload File : |
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Payment extends Customer_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 index() {
if(!$this->session->userdata('shipping_cart')) {
redirect('cart');
}
//INSERT NEW ORDERS
$grand_total = 0;
foreach ($this->session->userdata('shipping_cart') as $rowid => $item) {
$grand_total = $grand_total + $item['subtotal'];
}
//get shipping address, province, district and subdistrict
$this->db->select('email, shipping_name, shipping_address, indah_cargo_id, shipping_handphone, postcode')->from('customers')->where('id_customers', $this->session->userdata('customer')['customer_id']);
$customer_data = $this->db->get()->row();
//get indah cargo
$this->db->select('*')->from('indah_cargo')->where('id', $customer_data->indah_cargo_id);
$indah_cargo = $this->db->get()->row();
//insert new order to orders table
$check_t_shipping_fee = $this->session->userdata('total_shipping_fee');
if ($check_t_shipping_fee == null || empty($check_t_shipping_fee)) {
$this->session->set_userdata('total_shipping_fee',0);
}
$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,
'district' => $indah_cargo->destination_city,
'province' => $indah_cargo->destination_province,
'phone' => $customer_data->shipping_handphone,
'email' => $customer_data->email,
'country' => 'Indonesia',
'shipping_fee' => $this->session->userdata('total_shipping_fee'),
'free_shipping_fee' => $this->session->userdata('free_shipping'),
'kurir' => $this->session->userdata('rex_service_name'),
'postcode' => $customer_data->postcode,
);
//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'] = (int) $this->session->userdata('tax');
}
//add point rewards
$this->db->select('*')->from('point_rewards')->where('id_point_rewards', 1);
$pointrewards = $this->db->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['minus_reward'] = $this->session->userdata('chosen_point');
$data['minus_reward_amount'] = $this->session->userdata('chosen_point_discount');
}
//insert to orders table
$this->db->insert('orders', $data);
$order_id = $this->db->insert_id();
$data['order_id'] = $order_id;
if(isset($order_id)) {
if($this->session->userdata('chosen_point')) {
//deduct minus_rewards to customer current point rewards..
//get customer current point reward
$this->db->select('current_pointreward')->from('customers')->where('id_customers', (int) $this->session->userdata('customer')['customer_id']);
$current_point_reward = (int) $this->db->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'],
'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'],
'is_flashsale' => $item['is_flashsale'],
);
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);
//DEDUCT VOUCHERS FROM VOUCHER TABLE
if ($this->session->userdata('chosen_voucher_code')) {
$this->db->select('qty_ready')->from('vouchers')->where('voucher_code', $this->session->userdata('chosen_voucher_code'));
$qty_ready = $this->db->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')) {
$this->db->select('id_vouchers')->from('vouchers')->where('voucher_code', $this->session->userdata('chosen_voucher_code'));
$voucher_id = (int) $this->db->get()->row()->id_vouchers;
//check if this voucher already been used before in voucher user table
$this->db->select('id_voucher_users')->from('voucher_users')->where('voucher_id', $voucher_id)->where('customer_id', (int) $this->session->userdata('customer')['customer_id']);
$count_voucher = $this->db->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
$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']);
$voucher_user = $this->db->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
$this->db->select('stock')->from('stock')->where('id_product', (int) $item['id'])->where('warehouse_id', (int) $item['warehouse_id']);
$current_stock = (int) $this->db->get()->row()->stock;
$new_item_stock = $current_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['id']);
$this->db->where('warehouse_id', (int) $item['warehouse_id']);
$this->db->update('stock', $stock_data);
}
}
//get payment method
$data['configuration'] = $this->db->select('*')->from('configuration')->where('id_configuration', 1)->get()->row();
$data['order_id'] = $order_id;
$this->db->select('*')->from('orders')->where('id_orders', $order_id);
$get_order = $this->db->get()->row();
$grand_final_total = ($get_order->total_amount - $get_order->redeemed_voucher_amount - $get_order->minus_reward_amount) + ($get_order->shipping_fee - $get_order->free_shipping_fee) + (int) $this->session->userdata('tax');
//load payment view
$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) . ' - Payment';
$this->data_header['meta_description'] = ucwords($website_name->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);
}
public function process_payment() {
if (!isset($_POST['process_payment'])) {
redirect('shipping');
}
$order_id = (int) $this->input->post('order_id');
$this->order_id = $order_id;
$this->db->select('*')->from('orders')->where('id_orders', $order_id);
$order = $this->db->get()->row();
//get order detail
$this->db->select('*')->from('orders_detail')->where('orders_id', $order_id);
$order_details = $this->db->get()->result();
//get customer district / city name
$this->db->select('name, email, handphone, shipping_address, indah_cargo_id')->from('customers')->where('id_customers', (int) $this->session->userdata('customer')['customer_id']);
$customer_data = $this->db->get()->row();
//get indah cargo
$this->db->select('*')->from('indah_cargo')->where('id', $customer_data->indah_cargo_id);
$indah_cargo = $this->db->get()->row();
//MITRANS
if ($this->input->post('payment_type') == 'midtrans') {
$payment_type = 'midtrans';
//update payment status to become 0
$data = array(
'payment_status' => 1,
'payment_type' => $payment_type
);
$this->db->where('id_orders', $order_id);
$this->db->update('orders', $data);
$this->session->set_userdata('midtrans_order_id',$order_id);
//$this->send_email('midtrans');
//MIDTRANS IN ACTION
require_once APPPATH . 'third_party/Veritrans.php';
//get key
$this->db->select('veritrans_server_key, veritrans_sandbox_server_key, veritrans_client_key, veritrans_sandbox_client_key, veritrans_production_mode')->from('configuration')->where('id_configuration', 1);
$veritrans = $this->db->get()->row();
$production_mode = $veritrans->veritrans_production_mode;
//Set Your server key
if ($production_mode == 'true') {
Veritrans_Config::$isProduction = true;
Veritrans_Config::$serverKey = $veritrans->veritrans_server_key;
$data['client_key'] = $veritrans->veritrans_client_key;
$data['snap_url'] = 'https://app.midtrans.com/snap/snap.js';
} else {
Veritrans_Config::$isProduction = false;
Veritrans_Config::$serverKey = $veritrans->veritrans_sandbox_server_key;
$data['client_key'] = $veritrans->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;
$transaction_details = array(
'order_id' => (int) $order_id,
'gross_amount' => (int) (($order->total_amount - $order->redeemed_voucher_amount - $order->minus_reward_amount) + ($order->shipping_fee - $order->free_shipping_fee))
);
// Populate items
// define a two-dimensional array
foreach($order_details as $item) {
$items[] = array(
'id' => $item->item_id,
'price' => (int) $item->item_price,
'quantity' => $item->quantity,
'name' => strip_tags(substr($item->item_name, 0, 48)) . '..',
);
}
//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',
);
}
//add shipping fee into the item
$items[] = array(
'id' => 'shipping',
'price' => $order->shipping_fee,
'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->name,
'last_name' => '',
'address' => $customer_data->shipping_address,
'city' => $subdistrict . '. ' . $district . '. ' . $province,
'postal_code' => '',
'phone' => $customer_data->phone,
'country_code' => 'IDN'
);
// Populate customer's shipping address
$shipping_address = array(
'first_name' => $customer_data->name,
'last_name' => '',
'address' => $customer_data->shipping_address,
'city' => $subdistrict . '. ' . $district . '. ' . $province,
'postal_code' => '',
'phone' => $customer_data->phone,
'country_code' => 'IDN'
);
// Populate customer's Info
$customer_details = array(
'first_name' => $customer_data->name,
'last_name' => '',
'email' => $customer_data->email,
'phone' => $customer_data->phone,
'billing_address' => $billing_address,
'shipping_address' => $shipping_address
);
// Optional, remove this to display all available payment methods
//$enable_payments = array('credit_card','cimb_clicks','mandiri_clickpay','echannel');
//$enable_payments = array('credit_card');
// Fill transaction details
$transaction = array(
'enabled_payments' => $enable_payments,
'transaction_details' => $transaction_details,
'customer_details' => $customer_details,
'item_details' => $items,
);
$data['snapToken'] = Veritrans_Snap::getSnapToken($transaction);
//LOAD PAYMENT RETURN PAGE
$data['bank'] = $this->configuration_m->get_bank();
$data['email'] = $this->session->userdata('customer')['customer_email'];
$data['order'] = $this->order_m->get_order($this->session->userdata('order_id'));
$this->destroy_session_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) . ' - Midtrans Payment';
$this->data_header['meta_description'] = ucwords($website_name->website_name) . ' - Midtrans Payment';
$this->load->view("themes/$this->theme_no/header", $this->data_header);
$this->load->view('midtrans', $data);
$this->load->view("themes/$this->theme_no/footer", $this->data_footer);
}
//BCA manual bank transfer
if ($this->input->post('payment_type') == '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);
$this->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;
$this->db->select('id_orders,order_date,payment_status,payment_confirm,recipient_name,address,district,subdistrict,province,postcode');
$this->db->from('orders');
$this->db->where('id_orders',$order_id);
$data['order_info'] = $this->db->get()->row();
$data['grand_total'] = (($order->total_amount - $order->redeemed_voucher_amount - $order->minus_reward_amount) + ($order->shipping_fee - $order->free_shipping_fee + $order->ppn));
//check if one of products is owa
$data['owa'] = 'no';
foreach($this->session->userdata('shipping_cart') as $rowid => $item) {
//get product item
$this->db->select('product_type')->from('products')->where('id_products', $item['id']);
$product_type_id = $this->db->get()->row()->product_type;
if($product_type_id == 1) {
$data['owa'] = 'yes';
}
break;
}
$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
$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';
$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);
}
//MANDIRI manual bank transfer
if ($this->input->post('payment_type') == '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);
$this->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;
$this->db->select('id_orders,order_date,payment_status,payment_confirm,recipient_name,address,district,subdistrict,province,postcode');
$this->db->from('orders');
$this->db->where('id_orders',$order_id);
$data['order_info'] = $this->db->get()->row();
$data['grand_total'] = ($order->total_amount - $order->redeemed_voucher_amount - $order->minus_reward_amount) + ($order->shipping_fee - $order->free_shipping_fee) + $order->ppn;
$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
$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';
$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);
}
$this->cart->destroy();
$this->session->unset_userdata('chosen_sales_id');
$this->session->unset_userdata('penawaran_harga_id');
$this->session->unset_userdata('penawaran_harga_to_shipping');
}
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
$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']);
$customer_data = $this->db->get()->row();
//LOAD PAYMENT RETURN PAGE
$data['email'] = $customer_data->email;
$data['order_id'] = $order_id;
$this->db->select('id_orders,order_date,payment_status,payment_confirm,recipient_name,address,district,subdistrict,province,postcode');
$this->db->from('orders');
$this->db->where('id_orders',$order_id);
$data['order_info'] = $this->db->get()->row();
$data['grand_total'] = '0';
//check if one of products is owa
$data['owa'] = 'no';
foreach($this->session->userdata('shipping_cart') as $rowid => $item) {
//get product item
$this->db->select('product_type')->from('products')->where('id_products', $item['id']);
$product_type_id = $this->db->get()->row()->product_type;
if($product_type_id == 1) {
$data['owa'] = 'yes';
}
break;
}
/*cek prescription order*/
$cek_order = $this->db->select('id_prescription')->from('prescription')->where('order_id',$order_id)->get()->row();
if($cek_order != null){
$data['owa'] = 'no';
}
/*cek prescription order*/
$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
$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';
$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);
}
public function payment_as_po() {
$internal_po = $this->security->xss_clean($this->input->post('internal_po'));
if($internal_po == null){
redirect('cart');
}
if(!$this->session->userdata('shipping_cart')) {
redirect('cart');
}
$type = $this->db->select('type')->from('customers')->where('id_customers', $this->session->userdata('customer')['customer_id'])->get()->row()->type;
if($type == "regular"){
redirect('welcome');
}
//check shipping_cart if the stock is available for each warehouse
//check if the current stocks are enough.
$have_stock = true;
foreach ($this->session->userdata('shipping_cart') as $rowid => $item) {
//get product name
$this->db->select('title')->from('products')->where('id_products', $item['id']);
$product_name = $this->db->get()->row()->title;
//get total stok from warehouse
$this->db->select('stock')->from('stock')->where('id_product', $item['id'])->where('warehouse_id', $item['warehouse_id']);
$current_stock = $this->db->get()->row()->stock;
if($current_stock < $item['qty']) {
if($item['is_backorder'] == 'no') {
$this->session->set_flashdata('no_stock' . $rowid, 'Stok tidak cukup');
$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 shipping address, province, district and subdistrict
$this->db->select('company_name, email, shipping_name, shipping_address, indah_cargo_id, shipping_handphone')->from('customers')->where('id_customers', $this->session->userdata('customer')['customer_id']);
$customer_data = $this->db->get()->row();
//get indah cargo
$this->db->select('*')->from('indah_cargo')->where('id', $customer_data->indah_cargo_id);
$indah_cargo = $this->db->get()->row();
//insert new order to orders table
$check_t_shipping_fee = $this->session->userdata('total_shipping_fee');
if ($check_t_shipping_fee == null || empty($check_t_shipping_fee)) {
$this->session->set_userdata('total_shipping_fee',0);
}
$data = array(
'customer_id' => (int) $this->session->userdata('customer')['customer_id'],
'total_amount' => $grand_total,
'order_date' => date('Y-m-d H:i:s'),
'payment_status' => 1,
'payment_type' => 'PO order',
'recipient_name' => $customer_data->shipping_name,
'address' => $customer_data->shipping_address,
'district' => $indah_cargo->destination_city,
'province' => $indah_cargo->destination_province,
'phone' => $customer_data->shipping_handphone,
'email' => $customer_data->email,
'country' => 'Indonesia',
'shipping_fee' => $this->session->userdata('total_shipping_fee'),
'free_shipping_fee' => $this->session->userdata('free_shipping'),
'sales_id' => $this->session->userdata('chosen_sales_id'),
'no_po' => $internal_po,
'penawaran_harga_id' => $this->session->userdata('penawaran_harga_id')
);
//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'] = (int) $this->session->userdata('tax');
}
//add point rewards
$this->db->select('*')->from('point_rewards')->where('id_point_rewards', 1);
$pointrewards = $this->db->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['minus_reward'] = $this->session->userdata('chosen_point');
$data['minus_reward_amount'] = $this->session->userdata('chosen_point_discount');
}
//insert to orders table
$this->db->insert('orders', $data);
$order_id = $this->db->insert_id();
$data['order_id'] = $order_id;
if(isset($order_id)) {
if($this->session->userdata('chosen_point')) {
//deduct minus_rewards to customer current point rewards..
//get customer current point reward
$this->db->select('current_pointreward')->from('customers')->where('id_customers', (int) $this->session->userdata('customer')['customer_id']);
$current_point_reward = (int) $this->db->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'],
'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'],
'is_flashsale' => $item['is_flashsale'],
);
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);
//DEDUCT VOUCHERS FROM VOUCHER TABLE
if ($this->session->userdata('chosen_voucher_code')) {
$this->db->select('qty_ready')->from('vouchers')->where('voucher_code', $this->session->userdata('chosen_voucher_code'));
$qty_ready = $this->db->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')) {
$this->db->select('id_vouchers')->from('vouchers')->where('voucher_code', $this->session->userdata('chosen_voucher_code'));
$voucher_id = (int) $this->db->get()->row()->id_vouchers;
//check if this voucher already been used before in voucher user table
$this->db->select('id_voucher_users')->from('voucher_users')->where('voucher_id', $voucher_id)->where('customer_id', (int) $this->session->userdata('customer')['customer_id']);
$count_voucher = $this->db->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
$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']);
$voucher_user = $this->db->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
$this->db->select('stock')->from('stock')->where('id_product', (int) $item['id'])->where('warehouse_id', (int) $item['warehouse_id']);
$current_stock = (int) $this->db->get()->row()->stock;
$new_item_stock = $current_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['id']);
$this->db->where('warehouse_id', (int) $item['warehouse_id']);
$this->db->update('stock', $stock_data);
}
}
//update penawaran table
$data = array(
'status' => 'po',
'no_po' => $internal_po
);
$this->db->where('id', $this->session->userdata('penawaran_harga_id'));
$this->db->update('penawaran_harga', $data);
//get payment method
/*destroy all season*/
$this->destroy_session_data();
$data['configuration'] = $this->db->select('*')->from('configuration')->where('id_configuration', 1)->get()->row();
$data['order_id'] = $order_id;
//get order date
$this->db->select('order_date, address, district, province')->from('orders')->where('id_orders', $order_id);
$order_info = $this->db->get()->row();
$data['order_date'] = $order_info->order_date;
$data['address'] = $order_info->address . '. ' . ucwords($order_info->district) . '. ' . ucwords($order_info->province);
$data['customer_id'] = $this->session->userdata('customer')['customer_id'];
//load payment view
$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) . ' - Payment as PO';
$this->data_header['meta_description'] = ucwords($website_name->website_name) . ' - Payment as PO';
$this->load->view("themes/$this->theme_no/header", $this->data_header);
$this->load->view('payment_as_po', $data);
$this->load->view("themes/$this->theme_no/footer", $this->data_footer);
$this->cart->destroy();
$this->session->unset_userdata('chosen_sales_id');
$this->session->unset_userdata('penawaran_harga_id');
$this->session->unset_userdata('penawaran_harga_to_shipping');
}
private function 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,handphone,type')->from('customers')->where('id_customers', $customer_id);
$data['customer_name'] = $this->db->get()->row();
//get website data
$this->db->select('logo, from_email, website_name, email_smtp_host, email_smtp_port, email_smtp_password, email_smtp')->from('configuration')->where('id_configuration', 1);
$website_data = $this->db->get()->row();
$data['logo'] = $website_data->logo;
$data['website_name'] = $website_data->website_name;
$data['emails'] = $this->configuration_m->get_emails();
/*$data['bank'] = $this->configuration_m->get_bank(); */
if($payment_type == 'bank transfer BCA'){
$this->db->select('bank')->from('configuration')->where('id_configuration', 1);
$data['bank'] = $this->db->get()->row()->bank;
}
elseif($payment_type == 'bank transfer MANDIRI'){
$this->db->select('bank1')->from('configuration')->where('id_configuration', 1);
$data['bank'] = $this->db->get()->row()->bank1;
}
$data['title'] = 'Order Confirmation';
//get order detail and customer detail
$data['order'] = $this->order_m->get_order($this->order_id);
$data['order_details'] = $this->order_detail_m->get_orders_detail($this->order_id);
//get vouchers detail
if ($this->session->userdata('chosen_voucher_code')) {
$data['chosen_voucher_code'] = $this->session->userdata('chosen_voucher_code');
$data['chosen_voucher_type'] = $this->session->userdata('chosen_voucher_type');
$data['chosen_voucher_discount'] = $this->session->userdata('chosen_voucher_discount');
$data['redeemed_voucher_amount'] = $this->session->userdata('redeemed_voucher_amount');
}
//get shipping fee total
$data['carrier_name'] = $this->session->userdata('carrier_name');
$data['total_shipping_fee'] = $this->session->userdata('total_shipping_fee');
//add tax to email, if exist..
if($this->session->userdata('tax')) {
$data['tax'] = $this->session->userdata('tax');
}
//add point reward to email, if exist..
if($this->session->userdata('chosen_point')) {
$data['chosen_point'] = $this->session->userdata('chosen_point');
$data['chosen_point_discount'] = $this->session->userdata('chosen_point_discount');
}
$this->load->library('email');
//get email setting
$config['protocol'] = 'smtp';
$config['smtp_host'] = $website_data->email_smtp_host;
$config['smtp_port'] = $website_data->email_smtp_port;
$config['smtp_user'] = $website_data->email_smtp;
$config['smtp_pass'] = $website_data->email_smtp_password;
$config['mailtype'] = 'html';
$config['charset'] = 'iso-8859-1';
$config['wordwrap'] = TRUE;
$config['newline'] = "\r\n"; //use double quotes to comply with RFC 822 standard
$this->email->initialize($config);
$this->email->from($data['emails']->from_email, $data['emails']->website_name);
$this->email->to($this->session->userdata('customer')['customer_email']);
// $this->email->cc($data['emails']->from_email);
$this->email->subject('Order Confirmation');
switch($payment_type) {
case 'bank transfer BCA':
if($this->session->userdata('site_lang') == 'english') {
/*$email = $this->load->view('email/english/bank_transfer', $data, TRUE); */
$email = $this->load->view('email/indonesian/bank_transfer_indo', $data, TRUE);
} else {
$email = $this->load->view('email/indonesian/bank_transfer_indo', $data, TRUE);
}
break;
case 'bank transfer MANDIRI':
if($this->session->userdata('site_lang') == 'english') {
/*$email = $this->load->view('email/english/bank_transfer', $data, TRUE); */
$email = $this->load->view('email/indonesian/bank_transfer_indo', $data, TRUE);
} else {
$email = $this->load->view('email/indonesian/bank_transfer_indo', $data, TRUE);
}
break;
case 'cod':
if($this->session->userdata('site_lang') == 'english') {
$email = $this->load->view('email/english/cod', $data, TRUE);
} else {
$email = $this->load->view('email/indonesian/cod', $data, TRUE);
}
break;
case 'midtrans':
if($this->session->userdata('site_lang') == 'english') {
/*$email = $this->load->view('email/english/bank_transfer', $data, TRUE); */
$email = $this->load->view('email/indonesian/bank_transfer_indo', $data, TRUE);
} else {
$email = $this->load->view('email/indonesian/bank_transfer_indo', $data, TRUE);
}
break;
}
$this->email->message($email);
$this->email->send();
$this->email->print_debugger();
//----end send email
}
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->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('chosen_sales_id');
$this->session->unset_userdata('penawaran_harga_id');
$this->session->unset_userdata('penawaran_harga_to_shipping');
}
}