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/laciasmara.com/public_html/shop/application/models/ |
Upload File : |
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class Cart_model extends MY_Model { public function __construct() { parent::__construct(); $this->load->library('session'); $this->load->library('user_agent'); } function update_cart($rowid, $qty, $price, $amount) { $data = array( 'rowid' => $rowid, 'qty' => $qty, 'price' => $price, 'amount' => $amount ); $this->cart->update($data); } public function add_to_cart($post_data, $id_customer) { $product_id = (int) $post_data['product_id']; $product_detail_id = (int) $post_data['id']; $product_variant = $post_data['variant']; $attribute_detail_id = $post_data['attribute_detail_id']; $qty = (int) $post_data['qty']; $price = (float) $post_data['price']; $sku = $post_data['sku']; log_message('error', 'Add to Cart Data: ' . json_encode($post_data)); // Validasi input if (!$product_id || !$product_detail_id || !$qty || !$price) { return ['status' => 'error', 'message' => 'Invalid product data.']; } // Ambil detail produk dari database $this->db->select(' pd.id AS product_detail_id, p.id_products AS product_id, p.title AS product_name, pi.image AS product_image, pd.price, pd.discounted_price, s.stock, s.stock_keep, (s.stock - s.stock_keep) AS stock_sell '); $this->db->from('product_details pd'); $this->db->join('products p', 'p.id_products = pd.product_id', 'left'); $this->db->join('product_images pi', 'pd.id = pi.product_details_id', 'left'); $this->db->join('stock s', 'pd.id = s.id_product_detail', 'left'); $this->db->where('pd.id', $product_detail_id); $this->db->where('p.product_status', 1); $product = $this->db->get()->row(); // Periksa apakah produk ditemukan if (!$product) { return ['status' => 'error', 'message' => 'Produk yang dipilih tidak ditemukan.']; } // Periksa stok produk if ($product->stock_sell < $qty) { return ['status' => 'error', 'message' => 'Stok tidak tersedia. Kamu bisa pilih varian lain.']; } // Tandai jika ada produk dengan harga diskon di keranjang if ($product->discounted_price > 0) { $this->session->set_userdata('cart_has_discounted_items', 'yes'); } $data_utm = $this->session->userdata('data_utm') ?: []; if (isset($data_utm['utm_campaign']) && $data_utm['utm_campaign'] === 'thr-21-03-2025') { $this->session->set_userdata('cart_has_discounted_items', 'yes'); } // Ambil metode pengiriman yang tersedia $shipment_method_ids = $this->db->select('shipment_method_id') ->get_where('shipment_method_product', ['product_id' => $product->product_id]) ->result_array(); // Format ulang shipment method menjadi array numerik $shipment_methods = array_column($shipment_method_ids, 'shipment_method_id'); // Data untuk dimasukkan ke dalam keranjang $data = [ 'product_id' => $product->product_id, 'id' => $product->product_detail_id, 'qty' => $qty, 'price' => $price, 'variant' => $product_variant, 'name' => ucwords($product->product_name), 'shipment_method_ids' => $shipment_methods, 'sku' => $sku, 'is_discounted' => (!is_null($product->discounted_price) && $product->discounted_price > 0), 'discounted_price' => $product->discounted_price, 'real_price' => $product->price, 'options' => [ 'attribute_detail_ids' => $attribute_detail_id, 'image' => $product->product_image, 'stock' => $product->stock, 'stock_keep' => $product->stock_keep, 'stock_condition' => ($product->stock_sell > 0) ? 'In Stock' : 'Out of Stock', ], ]; // Simpan riwayat keranjang $data_cart_history = [ 'customer_id' => $id_customer, 'ip_address' => $this->input->ip_address(), 'url_current' => current_url(), 'url_referer' => $this->agent->referrer() ?? NULL, 'product_name' => ucwords($product->product_name), 'product_id' => $product_id, 'product_detail_id' => $product_detail_id, 'qty' => $qty, 'price' => $price, 'user_agent' => $this->agent->agent_string() ?? NULL ]; // Proses transaksi database $this->db->trans_start(); $this->db->insert('cart_history', $data_cart_history); // Tambahkan ke keranjang $this->cart->product_name_rules = '[:print:]'; $cart_inserted = $this->cart->insert($data); $latest_item = end($this->cart->contents()); // Commit transaksi jika sukses, rollback jika gagal if ($cart_inserted && $this->db->trans_complete()) { return [ 'status' => 'success', 'message' => 'Product added to cart successfully.', 'cart_count' => count($this->cart->contents()), 'latest_item' => $latest_item, ]; } else { $this->db->trans_rollback(); return ['status' => 'error', 'message' => 'Failed to add product to cart.']; } } public function move_temp_cart_to_user_cart($customer_id) { $cart_items = $this->session->userdata('temp_cart') ?? []; log_message('error', 'Temp Cart Data: ' . json_encode($cart_items)); if (empty($cart_items)) { log_message('error', 'Temp Cart is empty. Skipping migration.'); return; } foreach ($cart_items as $item) { log_message('error', 'Moving item to cart: ' . json_encode($item)); $this->add_to_cart($item, $customer_id); } // Hapus session `temp_cart` setelah dipindahkan ke cart user $this->session->unset_userdata('temp_cart'); $this->session->set_userdata('redirect_to_cart', true); } public function get_product_data($post_data) { $product_id = (int) $post_data['product_id']; $product_detail_id = (int) $post_data['product_detail_id']; $product_variant = $post_data['product_variant']; $attribute_detail_id = $post_data['attribute_detail_id']; $qty = (int) $post_data['qty']; $price = (float) $post_data['price']; $sku = $post_data['sku']; log_message('error', 'Add to Cart Datas: ' . json_encode($post_data)); if (!$product_id || !$product_detail_id || !$qty || !$price) { return ['status' => 'error', 'message' => 'Invalid product data.']; } // Ambil detail produk $this->db->select(' pd.id AS product_detail_id, p.id_products AS product_id, p.title AS product_name, pi.image AS product_image, pd.price, pd.discounted_price, s.stock, s.stock_keep, (s.stock - s.stock_keep) AS stock_sell '); $this->db->from('product_details pd'); $this->db->join('products p', 'p.id_products = pd.product_id', 'left'); $this->db->join('product_images pi', 'pd.id = pi.product_details_id', 'left'); $this->db->join('stock s', 'pd.id = s.id_product_detail', 'left'); $this->db->where('pd.id', $product_detail_id); $this->db->where('p.product_status', 1); $product = $this->db->get()->row(); if (!$product) { return ['status' => 'error', 'message' => 'Produk tidak ditemukan.']; } if ($product->stock_sell < $qty) { return ['status' => 'error', 'message' => 'Stok tidak tersedia. Pilih varian lain.']; } return [ 'status' => 'success', 'data' => [ 'product_id' => $product->product_id, 'id' => $product->product_detail_id, 'qty' => $qty, 'price' => $price, 'variant' => $product_variant, 'name' => ucwords($product->product_name), 'sku' => $sku, 'is_discounted' => (!is_null($product->discounted_price) && $product->discounted_price > 0), 'options' => [ 'attribute_detail_ids' => $attribute_detail_id, 'image' => $product->product_image, 'stock' => $product->stock, 'stock_keep' => $product->stock_keep, 'stock_condition' => ($product->stock_sell > 0) ? 'In Stock' : 'Out of Stock', ], ] ]; } public function get_cart_history() { $this->db->select(' cart_history.customer_id, cart_history.product_id, cart_history.product_detail_id, cart_history.product_name, cart_history.created_at, c.name AS customer_name, c.email AS customer_email, c.phone AS customer_phone '); $this->db->from('cart_history'); $this->db->join('customers c', 'c.id_customers = cart_history.customer_id', 'left'); $this->db->order_by('cart_history.created_at', 'DESC'); return $this->db->get()->result(); } }