Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Products ex..
Decoded Output download
<?php defined('BASEPATH') OR exit('No direct script access allowed');
class Products extends MY_Controller
{
function __construct()
{
parent::__construct();
if (!$this->loggedIn) {
$this->session->set_userdata('requested_page', $this->uri->uri_string());
$this->sma->md('login');
}
$this->lang->admin_load('products', $this->Settings->user_language);
$this->load->library('form_validation');
$this->load->admin_model('products_model');
$this->digital_upload_path = 'files/';
$this->upload_path = 'assets/uploads/';
$this->thumbs_path = 'assets/uploads/thumbs/';
$this->image_types = 'gif|jpg|jpeg|png|tif';
$this->digital_file_types = 'zip|psd|ai|rar|pdf|doc|docx|xls|xlsx|ppt|pptx|gif|jpg|jpeg|png|tif|txt|csv';
$this->allowed_file_size = '1024';
$this->popup_attributes = array('width' => '900', 'height' => '600', 'window_name' => 'sma_popup', 'menubar' => 'yes', 'scrollbars' => 'yes', 'status' => 'no', 'resizable' => 'yes', 'screenx' => '0', 'screeny' => '0');
}
function getProductsByAjax()
{
if ($rows = $this->products_model->getProducts()) {
$data = json_encode($rows);
} else {
$data = false;
}
echo $data;
}
function getCategoriesByAjax()
{
if ($rows = $this->products_model->getCategories()) {
$data = json_encode($rows);
} else {
$data = false;
}
echo $data;
}
function index($warehouse_id = NULL)
{
$this->sma->checkPermissions();
$user = $this->site->getUser();
$store_id = $user->store_id;
$this->data['store_id'] = $store_id;
$store = $this->site->getStoreByID($store_id);
$this->data['store'] = $store->name;
if($store_id==0)
{
$this->data['error'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('error');
if ($this->Owner || $this->Admin || !$this->session->userdata('store_id')) {
$this->data['warehouses'] = $this->site->getAllWarehouses($this->data['store_id']);
$this->data['stores'] = $this->site->getAllStores();
$this->data['warehouse_id'] = $warehouse_id;
$this->data['store_id'] = $store_id;
$store = $this->site->getStoreByID($store_id);
$this->data['store'] = $store->name;
$this->data['warehouse'] = $warehouse_id ? $this->site->getWarehouseByID($warehouse_id) : NULL;
$this->data['store'] = $warehouse_id ? $this->site->getStoreByID($warehouse_id) : NULL;
} else {
$this->data['warehouses'] = NULL;
$this->data['warehouse_id'] = $this->session->userdata('warehouse_id');
$this->data['warehouse'] = $this->session->userdata('warehouse_id') ? $this->site->getWarehouseByID($this->session->userdata('warehouse_id')) : NULL;
}
$this->data['supplier'] = $this->input->get('supplier') ? $this->site->getCompanyByID($this->input->get('supplier')) : NULL;
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => '#', 'page' => lang('products')));
$meta = array('page_title' => lang('products'), 'bc' => $bc);
$this->page_construct('products/index', $meta, $this->data);
}else
{
if ($this->Owner || $this->Admin || !$this->session->userdata('warehouse_id')) {
$user = $this->site->getUser();
$this->data['warehouses'] = $this->site->getAllWarehousesforstore($user->store_id);
$this->data['warehouse_id'] = $warehouse_id;
$this->data['warehouse'] = $warehouse_id ? $this->site->getWarehouseByID($warehouse_id) : NULL;
} else {
$this->data['warehouses'] = NULL;
$this->data['warehouse_id'] = $this->session->userdata('warehouse_id');
$this->data['warehouse'] = $this->session->userdata('warehouse_id') ? $this->site->getWarehouseByID($this->session->userdata('warehouse_id')) : NULL;
}
$this->data['supplier'] = $this->input->get('supplier') ? $this->site->getCompanyByID($this->input->get('supplier')) : NULL;
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => '#', 'page' => lang('products')));
$meta = array('page_title' => lang('products'), 'bc' => $bc);
$this->page_construct('products/index', $meta, $this->data);
}
}
function getProducts($store_id1 = NULL)
{
$this->sma->checkPermissions('index', TRUE);
$supplier = $this->input->get('supplier') ? $this->input->get('supplier') : NULL;
$this->load->library('datatables');
$user = $this->site->getUser();
$store_id = $user->store_id;
$this->data['store_id'] = $store_id;
$user = $this->site->getUser();
$detail_link = anchor('admin/products/view/$1', '<i class="fa fa-file-text-o"></i> ' . lang('product_details'));
$delete_link = "<a href='#' class='tip po' title='<b>" . $this->lang->line("delete_product") . "</b>' data-content=\"<p>"
. lang('r_u_sure') . "</p><a class='btn btn-danger po-delete1' id='a__$1' href='" . admin_url('products/delete/$1') . "'>"
. lang('i_m_sure') . "</a> <button class='btn po-close'>" . lang('no') . "</button>\" rel='popover'><i class=\"fa fa-trash-o\"></i> "
. lang('delete_product') . "</a>";
$single_barcode = anchor('admin/products/print_barcodes/$1', '<i class="fa fa-print"></i> ' . lang('print_barcode_label'));
// $single_label = anchor_popup('products/single_label/$1/' . ($warehouse_id ? $warehouse_id : ''), '<i class="fa fa-print"></i> ' . lang('print_label'), $this->popup_attributes);
$action = '<div class="text-center"><div class="btn-group text-left">'
. '<button type="button" class="btn btn-default btn-xs btn-primary dropdown-toggle" data-toggle="dropdown">'
. lang('actions') . ' <span class="caret"></span></button>
<ul class="dropdown-menu pull-right" role="menu">
<li>' . $detail_link . '</li>
<li><a href="' . admin_url('products/add/$1') . '"><i class="fa fa-plus-square"></i> ' . lang('duplicate_product') . '</a></li>
<li><a href="' . admin_url('products/edit/$1') . '"><i class="fa fa-edit"></i> ' . lang('edit_product') . '</a></li>';
$action .= '<li><a href="' . admin_url() . 'assets/uploads/$2" data-type="image" data-toggle="lightbox"><i class="fa fa-file-photo-o"></i> '
. lang('view_image') . '</a></li>
<li>' . $single_barcode . '</li>
<li class="divider"></li>
<li>' . $delete_link . '</li>
</ul>
</div></div>';
$this->db->order_by('products.sequence','asc');
if($store_id==0)
{
if ($store_id1) {
$this->datatables
->select($this->db->dbprefix('products') . ".id as productid, {$this->db->dbprefix('products')}.image as image, {$this->db->dbprefix('products')}.code as code, {$this->db->dbprefix('products')}.name as name, {$this->db->dbprefix('brands')}.name as brand, {$this->db->dbprefix('categories')}.name as cname, cost as cost, price as price, COALESCE(quantity, 0) as quantity, {$this->db->dbprefix('units')}.name as unit, '' as rack, alert_quantity,ecom_show", FALSE)
->from('products')
->join('categories', 'products.category_id=categories.id', 'left')
->join('units', 'products.unit=units.id', 'left')
->join('brands', 'products.brand=brands.id', 'left')
->join('location', 'products.location=location.id', 'left')
->group_by("products.id")
->where("products.store_id",$store_id1);
}
else {
$this->datatables
->select($this->db->dbprefix('products') . ".id as productid, {$this->db->dbprefix('products')}.image as image, {$this->db->dbprefix('products')}.code as code, {$this->db->dbprefix('products')}.name as name, {$this->db->dbprefix('brands')}.name as brand,{$this->db->dbprefix('categories')}.name as cname, cost as cost, price as price, (SELECT SUM(quantity) AS total
FROM sma_warehouses_products WHERE product_id = ".$this->db->dbprefix('products') . ".id), {$this->db->dbprefix('units')}.name as unit, '' as rack, alert_quantity,ecom_show", FALSE)
->from('products')
->join('categories', 'products.category_id=categories.id', 'left')
->join('units', 'products.unit=units.id', 'left')
->join('brands', 'products.brand=brands.id', 'left')
->join('location', 'products.location=location.id', 'left')
->group_by("products.id");
}
if (!$this->Owner && !$this->Admin) {
if (!$this->session->userdata('show_cost')) {
$this->datatables->unset_column("cost");
}
if (!$this->session->userdata('show_price')) {
$this->datatables->unset_column("price");
}
}
if ($supplier) {
$this->datatables->where('supplier1', $supplier)
->or_where('supplier2', $supplier)
->or_where('supplier3', $supplier)
->or_where('supplier4', $supplier)
->or_where('supplier5', $supplier);
}
}
else{
if ($store_id1)
{
$this->datatables
->select($this->db->dbprefix('products') . ".id as productid, {$this->db->dbprefix('products')}.image as image, {$this->db->dbprefix('products')}.code as code, {$this->db->dbprefix('products')}.name as name, {$this->db->dbprefix('brands')}.name as brand, {$this->db->dbprefix('categories')}.name as cname, cost as cost, price as price, COALESCE(wp.quantity, 0) as quantity, {$this->db->dbprefix('units')}.name as unit, '' as rack, alert_quantity,ecom_show", FALSE)
->from('products');
if ($this->Settings->display_all_products) {
$this->datatables->join("( SELECT product_id, quantity, rack from {$this->db->dbprefix('warehouses_products')} WHERE warehouse_id = {$store_id1}) wp", 'products.id=wp.product_id', 'left');
} else {
$this->datatables->join('warehouses_products wp', 'products.id=wp.product_id', 'left')
->where('wp.warehouse_id', $store_id1);
// ->where('wp.quantity !=', 0);
}
$this->datatables->join('categories', 'products.category_id=categories.id', 'left')
->join('units', 'products.unit=units.id', 'left')
->join('brands', 'products.brand=brands.id', 'left')
->join('location', 'products.location=location.id', 'left');
// ->group_by("products.id");
}
else {
$q = $this->datatables
->select($this->db->dbprefix('products') . ".id as productid, {$this->db->dbprefix('products')}.image as image, {$this->db->dbprefix('products')}.code as code, {$this->db->dbprefix('products')}.name as name, {$this->db->dbprefix('brands')}.name as brand, {$this->db->dbprefix('categories')}.name as cname, cost as cost, price as price
, (SELECT SUM(quantity) AS total
FROM sma_warehouses_products WHERE product_id = ".$this->db->dbprefix('products') . ".id)
, {$this->db->dbprefix('units')}.name as unit, '' as rack, alert_quantity,ecom_show", FALSE)
->from('products')
->join('categories', 'products.category_id=categories.id', 'left')
->join('units', 'products.unit=units.id', 'left')
->join('warehouses_products wp', 'products.id=wp.product_id', 'left')
->join('brands', 'products.brand=brands.id', 'left')
->join('location', 'products.location=location.id', 'left')
->where("products.store_id",$user->store_id)
->group_by("products.id");
}
if (!$this->Owner && !$this->Admin) {
if (!$this->session->userdata('show_cost')) {
$this->datatables->unset_column("cost");
}
if (!$this->session->userdata('show_price')) {
$this->datatables->unset_column("price");
}
}
if ($supplier) {
$this->datatables->where('supplier1', $supplier)
->or_where('supplier2', $supplier)
->or_where('supplier3', $supplier)
->or_where('supplier4', $supplier)
->or_where('supplier5', $supplier);
}
}
$this->datatables->add_column("Actions", $action, "productid, image, code, name");
echo $this->datatables->generate();
}
function set_rack($product_id = NULL, $warehouse_id = NULL)
{
$this->sma->checkPermissions('edit', true);
$this->form_validation->set_rules('rack', lang("rack_location"), 'trim|required');
if ($this->form_validation->run() == true) {
$data = array('rack' => $this->input->post('rack'),
'product_id' => $product_id,
'warehouse_id' => $warehouse_id,
);
} elseif ($this->input->post('set_rack')) {
$this->session->set_flashdata('error', validation_errors());
admin_redirect("products");
}
if ($this->form_validation->run() == true && $this->products_model->setRack($data)) {
$this->session->set_flashdata('message', lang("rack_set"));
admin_redirect("products/" . $warehouse_id);
} else {
$this->data['error'] = validation_errors() ? validation_errors() : $this->session->flashdata('error');
$this->data['warehouse_id'] = $warehouse_id;
$this->data['product'] = $this->site->getProductByID($product_id);
$wh_pr = $this->products_model->getProductQuantity($product_id, $warehouse_id);
$this->data['rack'] = $wh_pr['rack'];
$this->data['modal_js'] = $this->site->modal_js();
$this->load->view($this->theme . 'products/set_rack', $this->data);
}
}
function product_barcode($product_code = NULL, $bcs = 'code128', $height = 60)
{
// if ($this->Settings->barcode_img) {
return "<img style='width:100%' src='" . admin_url('products/gen_barcode/' . $product_code . '/' . $bcs . '/' . $height) . "' alt='{$product_code}' class='bcimg' />";
// } else {
// return $this->gen_barcode($product_code, $bcs, $height);
// }
}
function barcode($product_code = NULL, $bcs = 'code128', $height = 60)
{
return admin_url('products/gen_barcode/' . $product_code . '/' . $bcs . '/' . $height);
}
function gen_barcode($product_code = NULL, $bcs = 'code128', $height = 60, $text = 1)
{
$drawText = ($text != 1) ? FALSE : TRUE;
$this->load->library('zend');
$this->zend->load('Zend/Barcode');
$barcodeOptions = array('text' => $product_code, 'barHeight' => $height, 'drawText' => $drawText, 'factor' => 1.0);
if ($this->Settings->barcode_img) {
$rendererOptions = array('imageType' => 'jpg', 'horizontalPosition' => 'center', 'verticalPosition' => 'middle');
$imageResource = Zend_Barcode::render($bcs, 'image', $barcodeOptions, $rendererOptions);
return $imageResource;
} else {
$rendererOptions = array('renderer' => 'svg', 'horizontalPosition' => 'center', 'verticalPosition' => 'middle');
$imageResource = Zend_Barcode::render($bcs, 'svg', $barcodeOptions, $rendererOptions);
header("Content-Type: image/svg+xml");
echo $imageResource;
}
}
function print_barcodes($product_id = NULL)
{
$this->sma->checkPermissions('barcode', true);
$this->form_validation->set_rules('style', lang("style"), 'required');
if ($this->form_validation->run() == true) {
$style = $this->input->post('style');
$bci_size = ($style == 10 || $style == 12 ? 50 : ($style == 14 || $style == 18 ? 30 : 20));
$currencies = $this->site->getAllCurrencies();
$s = isset($_POST['product']) ? sizeof($_POST['product']) : 0;
if ($s < 1) {
$this->session->set_flashdata('error', lang('no_product_selected'));
admin_redirect("products/print_barcodes");
}
for ($m = 0; $m < $s; $m++) {
$pid = $_POST['product'][$m];
$quantity = $_POST['quantity'][$m];
$product = $this->products_model->getProductWithCategory($pid);
$product->price = $this->input->post('check_promo') ? ($product->promotion ? $product->promo_price : $product->price) : $product->price;
if ($variants = $this->products_model->getProductOptions($pid)) {
foreach ($variants as $option) {
if ($this->input->post('vt_'.$product->id.'_'.$option->id)) {
$barcodes[] = array(
'site' => $this->input->post('site_name') ? $this->Settings->site_name : FALSE,
'name' => $this->input->post('product_name') ? $product->name.' - '.$option->name : FALSE,
'image' => $this->input->post('product_image') ? $product->image : FALSE,
'barcode' => $this->product_barcode($product->code . $this->Settings->barcode_separator . $option->id, 'code128', $bci_size),
'price' => $this->input->post('price') ? $this->sma->formatMoney($option->price != 0 ? ($product->price+$option->price) : $product->price) : FALSE,
'unit' => $this->input->post('unit') ? $product->unit : FALSE,
'category' => $this->input->post('category') ? $product->category : FALSE,
'currencies' => $this->input->post('currencies'),
'location' => $this->input->post('check_location') ? $product->location : FALSE,
'variants' => $this->input->post('variants') ? $variants : FALSE,
'quantity' => $quantity
);
}
}
} else {
$barcodes[] = array(
'site' => $this->input->post('site_name') ? $this->Settings->site_name : FALSE,
'name' => $this->input->post('product_name') ? $product->name : FALSE,
'image' => $this->input->post('product_image') ? $product->image : FALSE,
'location' => $this->input->post('check_location') ? $product->location : FALSE,
'barcode' => $this->product_barcode($product->code, $product->barcode_symbology, $bci_size),
'price' => $this->input->post('price') ? $product->price : FALSE,
'price' => $this->input->post('price') ? $product->price : FALSE,
'unit' => $this->input->post('unit') ? $product->unit : FALSE,
'category' => $this->input->post('category') ? $product->category : FALSE,
'currencies' => $this->input->post('currencies'),
'variants' => FALSE,
'quantity' => $quantity
);
}
}
$this->data['barcodes'] = $barcodes;
$this->data['currencies'] = $currencies;
$this->data['style'] = $style;
$this->data['items'] = false;
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('print_barcodes')));
$meta = array('page_title' => lang('print_barcodes'), 'bc' => $bc);
$this->page_construct('products/print_barcodes', $meta, $this->data);
} else {
if ($this->input->get('purchase') || $this->input->get('transfer')) {
if ($this->input->get('purchase')) {
$purchase_id = $this->input->get('purchase', TRUE);
$items = $this->products_model->getPurchaseItems($purchase_id);
} elseif ($this->input->get('transfer')) {
$transfer_id = $this->input->get('transfer', TRUE);
$items = $this->products_model->getTransferItems($transfer_id);
}
if ($items) {
foreach ($items as $item) {
if ($row = $this->products_model->getProductByID($item->product_id)) {
$selected_variants = false;
if ($variants = $this->products_model->getProductOptions($row->id)) {
foreach ($variants as $variant) {
$selected_variants[$variant->id] = isset($pr[$row->id]['selected_variants'][$variant->id]) && !empty($pr[$row->id]['selected_variants'][$variant->id]) ? 1 : ($variant->id == $item->option_id ? 1 : 0);
}
}
$pr[$row->id] = array('id' => $row->id, 'label' => $row->name . " (" . $row->code . ")", 'code' => $row->code, 'name' => $row->name, 'price' => $row->price, 'qty' => $item->quantity, 'variants' => $variants, 'selected_variants' => $selected_variants);
}
}
$this->data['message'] = lang('products_added_to_list');
}
}
if ($product_id) {
if ($row = $this->site->getProductByID($product_id)) {
$selected_variants = false;
if ($variants = $this->products_model->getProductOptions($row->id)) {
foreach ($variants as $variant) {
$selected_variants[$variant->id] = $variant->quantity > 0 ? 1 : 0;
}
}
$pr[$row->id] = array('id' => $row->id, 'label' => $row->name . " (" . $row->code . ")", 'code' => $row->code, 'name' => $row->name, 'price' => $row->price, 'qty' => $row->quantity, 'variants' => $variants, 'selected_variants' => $selected_variants);
$this->data['message'] = lang('product_added_to_list');
}
}
if ($this->input->get('category')) {
if ($products = $this->products_model->getCategoryProducts($this->input->get('category'))) {
foreach ($products as $row) {
$selected_variants = false;
if ($variants = $this->products_model->getProductOptions($row->id)) {
foreach ($variants as $variant) {
$selected_variants[$variant->id] = $variant->quantity > 0 ? 1 : 0;
}
}
$pr[$row->id] = array('id' => $row->id, 'label' => $row->name . " (" . $row->code . ")", 'code' => $row->code, 'name' => $row->name, 'price' => $row->price, 'qty' => $row->quantity, 'variants' => $variants, 'selected_variants' => $selected_variants);
}
$this->data['message'] = lang('products_added_to_list');
} else {
$pr = array();
$this->session->set_flashdata('error', lang('no_product_found'));
}
}
if ($this->input->get('subcategory')) {
if ($products = $this->products_model->getSubCategoryProducts($this->input->get('subcategory'))) {
foreach ($products as $row) {
$selected_variants = false;
if ($variants = $this->products_model->getProductOptions($row->id)) {
foreach ($variants as $variant) {
$selected_variants[$variant->id] = $variant->quantity > 0 ? 1 : 0;
}
}
$pr[$row->id] = array('id' => $row->id, 'label' => $row->name . " (" . $row->code . ")", 'code' => $row->code, 'name' => $row->name, 'price' => $row->price, 'qty' => $row->quantity, 'variants' => $variants, 'selected_variants' => $selected_variants);
}
$this->data['message'] = lang('products_added_to_list');
} else {
$pr = array();
$this->session->set_flashdata('error', lang('no_product_found'));
}
}
$this->data['items'] = isset($pr) ? json_encode($pr) : false;
$this->data['error'] = (validation_errors() ? validation_errors() : $this->session->flashdata('error'));
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('print_barcodes')));
$meta = array('page_title' => lang('print_barcodes'), 'bc' => $bc);
$this->page_construct('products/print_barcodes', $meta, $this->data);
}
}
/* ------------------------------------------------------- */
function add($id = NULL)
{
$user = $this->site->getUser();
$store_id = $user->store_id;
$this->data['store_id'] = $store_id;
$store = $this->site->getStoreByID($store_id);
$this->data['store'] = $store;
$this->sma->checkPermissions();
$this->load->helper('security');
$warehouses = $this->site->getAllWarehouses($this->data['store_id']);
if($store_id == 0)
{
$this->form_validation->set_rules('store', lang("Store"), 'required|is_natural_no_zero');
}
$this->form_validation->set_rules('category', lang("category"), 'required|is_natural_no_zero');
if ($this->input->post('type') == 'standard') {
$this->form_validation->set_rules('cost', lang("product_cost"), 'required');
$this->form_validation->set_rules('unit', lang("product_unit"), 'required');
}
if ($this->input->post('barcode_symbology') == 'ean13') {
$this->form_validation->set_rules('code', lang("product_code"), 'min_length[13]|max_length[13]');
}
$this->form_validation->set_rules('code', lang("product_code"), 'alpha_dash');
// $this->form_validation->set_rules('slug', lang("slug"), 'required|is_unique[products.slug]|alpha_dash');
$this->form_validation->set_rules('weight', lang("weight"), 'numeric');
$this->form_validation->set_rules('product_image', lang("product_image"), 'xss_clean');
$this->form_validation->set_rules('digital_file', lang("digital_file"), 'xss_clean');
$this->form_validation->set_rules('userfile', lang("product_gallery_images"), 'xss_clean');
if ($this->form_validation->run() == true) {
if($this->db->where('code',$this->data['store']->code.$this->input->post('code'))->get('sma_products')->row())
{
$this->session->set_flashdata('error', 'Duplicate entry '.$this->data['store']->code.$this->input->post('code').' for key');
admin_redirect("products/add");
}
$tax_rate = $this->input->post('tax_rate') ? $this->site->getTaxRateByID($this->input->post('tax_rate')) : NULL;
if($store_id==0)
{
$data = array(
'sequence' => $this->input->post('sequence'),
'code' => $this->data['store']->code.$this->input->post('code'),
'barcode_symbology' => $this->input->post('barcode_symbology'),
'name' => $this->input->post('name'),
'model_subcategory' => $this->input->post('model_subcategory'),
'model_category' => $this->input->post('model_category'),
'model_feature' => $this->input->post('feature'),
'type' => $this->input->post('type'),
'brand' => $this->input->post('brand'),
'location' => $this->input->post('location'),
'category_id' => $this->input->post('category'),
'subcategory_id' => $this->input->post('subcategory') ? $this->input->post('subcategory') : NULL,
'cost' => $this->sma->formatDecimal($this->input->post('cost')),
'price' => $this->sma->formatDecimal($this->input->post('price')),
'unit' => $this->input->post('unit'),
'sale_unit' => $this->input->post('default_sale_unit'),
'purchase_unit' => $this->input->post('default_purchase_unit'),
'tax_rate' => $this->input->post('tax_rate'),
'tax_method' => $this->input->post('tax_method'),
'quantity' => $this->input->post('wh_qty'),
'alert_quantity' => $this->input->post('alert_quantity'),
'track_quantity' => $this->input->post('track_quantity') ? $this->input->post('track_quantity') : '0',
'details' => $this->input->post('details'),
'product_details' => $this->input->post('product_details'),
'supplier1' => $this->input->post('supplier'),
'supplier1price' => $this->sma->formatDecimal($this->input->post('supplier_price')),
'supplier2' => $this->input->post('supplier_2'),
'supplier2price' => $this->sma->formatDecimal($this->input->post('supplier_2_price')),
'supplier3' => $this->input->post('supplier_3'),
'supplier3price' => $this->sma->formatDecimal($this->input->post('supplier_3_price')),
'supplier4' => $this->input->post('supplier_4'),
'supplier4price' => $this->sma->formatDecimal($this->input->post('supplier_4_price')),
'supplier5' => $this->input->post('supplier_5'),
'supplier5price' => $this->sma->formatDecimal($this->input->post('supplier_5_price')),
'cf1' => $this->input->post('cf1'),
'cf2' => $this->input->post('cf2'),
'cf3' => $this->input->post('cf3'),
'cf4' => $this->input->post('cf4'),
'cf5' => $this->input->post('cf5'),
'cf6' => $this->input->post('cf6'),
'promotion' => $this->input->post('promotion'),
'promo_price' => $this->sma->formatDecimal($this->input->post('promo_price')),
'start_date' => $this->input->post('start_date') ? $this->sma->fsd($this->input->post('start_date')) : NULL,
'end_date' => $this->input->post('end_date') ? $this->sma->fsd($this->input->post('end_date')) : NULL,
'supplier1_part_no' => $this->input->post('supplier_part_no'),
'supplier2_part_no' => $this->input->post('supplier_2_part_no'),
'supplier3_part_no' => $this->input->post('supplier_3_part_no'),
'supplier4_part_no' => $this->input->post('supplier_4_part_no'),
'supplier5_part_no' => $this->input->post('supplier_5_part_no'),
'file' => $this->input->post('file_link'),
'slug' => '0',
'weight' => $this->input->post('weight'),
'featured' => $this->input->post('featured'),
'warehouse'=>$this->input->post('warehouses') ? $this->input->post('warehouses') : NULL,
'store_id' => $this->input->post('store'),
'tag'=> $this->input->post('tag')
// 'price_ret' => NULL,
);
$wh_qty= array(
'warehouse_id'=>$this->input->post('warehouses') ? $this->input->post('warehouses') : NULL,
'quantity'=>$this->input->post('wh_qty'),
);
}
else{
$data = array(
'code' => $this->data['store']->code.$this->input->post('code'),
'barcode_symbology' => $this->input->post('barcode_symbology'),
'name' => $this->input->post('name'),
'model_subcategory' => $this->input->post('model_subcategory'),
'model_category' => $this->input->post('model_category'),
'model_feature' => $this->input->post('feature'),
'type' => $this->input->post('type'),
'brand' => $this->input->post('brand'),
'location' => $this->input->post('location'),
'category_id' => $this->input->post('category'),
'subcategory_id' => $this->input->post('subcategory') ? $this->input->post('subcategory') : NULL,
'cost' => $this->sma->formatDecimal($this->input->post('cost')),
'price' => $this->sma->formatDecimal($this->input->post('price')),
'unit' => $this->input->post('unit'),
'sale_unit' => $this->input->post('default_sale_unit'),
'purchase_unit' => $this->input->post('default_purchase_unit'),
'tax_rate' => $this->input->post('tax_rate'),
'tax_method' => $this->input->post('tax_method'),
'alert_quantity' => $this->input->post('alert_quantity'),
'track_quantity' => $this->input->post('track_quantity') ? $this->input->post('track_quantity') : '0',
'details' => $this->input->post('details'),
'product_details' => $this->input->post('product_details'),
'supplier1' => $this->input->post('supplier'),
'supplier1price' => $this->sma->formatDecimal($this->input->post('supplier_price')),
'supplier2' => $this->input->post('supplier_2'),
'supplier2price' => $this->sma->formatDecimal($this->input->post('supplier_2_price')),
'supplier3' => $this->input->post('supplier_3'),
'supplier3price' => $this->sma->formatDecimal($this->input->post('supplier_3_price')),
'supplier4' => $this->input->post('supplier_4'),
'supplier4price' => $this->sma->formatDecimal($this->input->post('supplier_4_price')),
'supplier5' => $this->input->post('supplier_5'),
'supplier5price' => $this->sma->formatDecimal($this->input->post('supplier_5_price')),
'cf1' => $this->input->post('cf1'),
'cf2' => $this->input->post('cf2'),
'cf3' => $this->input->post('cf3'),
'cf4' => $this->input->post('cf4'),
'cf5' => $this->input->post('cf5'),
'cf6' => $this->input->post('cf6'),
'promotion' => $this->input->post('promotion'),
'promo_price' => $this->sma->formatDecimal($this->input->post('promo_price')),
'start_date' => $this->input->post('start_date') ? $this->sma->fsd($this->input->post('start_date')) : NULL,
'end_date' => $this->input->post('end_date') ? $this->sma->fsd($this->input->post('end_date')) : NULL,
'supplier1_part_no' => $this->input->post('supplier_part_no'),
'supplier2_part_no' => $this->input->post('supplier_2_part_no'),
'supplier3_part_no' => $this->input->post('supplier_3_part_no'),
'supplier4_part_no' => $this->input->post('supplier_4_part_no'),
'supplier5_part_no' => $this->input->post('supplier_5_part_no'),
'file' => $this->input->post('file_link'),
'slug' => '0',
'weight' => $this->input->post('weight'),
'featured' => $this->input->post('featured'),
'tag'=> $this->input->post('tag'),
'store_id' => $store_id,);
}
$data['sequence']=$this->input->post('sequence');
$data['ecom_show']=$this->input->post('ecom_show');
$data['show_emenu']=$this->input->post('show_emenu');
$s = sizeof($_POST['type_sale'])-1;
// $unitSale_name = $this->input->post('type_sale');
// $unitSale_price = $this->input->post('price_unit');
for($st = 0; $st<=$s;$st++){
$saleUnit[]=array(
'sale_unitname'=>$_POST['type_sale'][$st],
'sale_unitprice'=>$_POST['price_unit'][$st],
);
}
$warehouse_qty = NULL;
$product_attributes = NULL;
$this->load->library('upload');
if ($this->input->post('type') == 'standard') {
$wh_total_quantity = 0;
$pv_total_quantity = 0;
for ($s = 2; $s > 5; $s++) {
$data['suppliers' . $s] = $this->input->post('supplier_' . $s);
$data['suppliers' . $s . 'price'] = $this->input->post('supplier_' . $s . '_price');
}
foreach ($warehouses as $warehouse) {
if ($this->input->post('wh_qty_' . $warehouse->id)) {
$warehouse_qty[] = array(
'warehouse_id' => $this->input->post('wh_' . $warehouse->id),
'quantity' => $this->input->post('wh_qty_' . $warehouse->id),
'rack' => $this->input->post('rack_' . $warehouse->id) ? $this->input->post('rack_' . $warehouse->id) : NULL
);
$wh_total_quantity += $this->input->post('wh_qty_' . $warehouse->id);
}
}
if($this->input->post('typesInput'))
{
$variant_option_type = $this->input->post('typesInput');
}else{
$variant_option_type = NULL;
}
if ($this->input->post('attributes')) {
$a = sizeof($_POST['attr_name']);
for ($r = 0; $r <= $a; $r++) {
if (isset($_POST['attr_name'][$r])) {
$product_attributes[] = array(
'name' => $_POST['attr_name'][$r],
'warehouse_id' => $_POST['attr_warehouse'][$r],
'quantity' => $_POST['attr_quantity'][$r],
'price' => $_POST['attr_price'][$r],
);
$pv_total_quantity += $_POST['attr_quantity'][$r];
}
}
} else {
$product_attributes = NULL;
}
if ($wh_total_quantity != $pv_total_quantity && $pv_total_quantity != 0) {
$this->form_validation->set_rules('wh_pr_qty_issue', 'wh_pr_qty_issue', 'required');
$this->form_validation->set_message('required', lang('wh_pr_qty_issue'));
}
}
if ($this->input->post('type') == 'service') {
$data['track_quantity'] = 0;
} elseif ($this->input->post('type') == 'combo') {
$total_price = $this->input->post('price');
$c = sizeof($_POST['combo_item_code']) - 1;
for ($r = 0; $r <= $c; $r++) {
if (isset($_POST['combo_item_code'][$r]) && isset($_POST['combo_item_quantity'][$r]) && isset($_POST['combo_item_price'][$r])) {
$items[] = array(
'item_code' => $_POST['combo_item_code'][$r],
'quantity' => $_POST['combo_item_quantity'][$r],
'unit_price' => $_POST['combo_item_price'][$r],
);
}
//$total_price += $_POST['combo_item_price'][$r] * $_POST['combo_item_quantity'][$r];
}
if ($this->sma->formatDecimal($total_price) != $this->sma->formatDecimal($this->input->post('price'))) {
// $this->form_validation->set_rules('combo_price', 'combo_price', 'required');
// $this->form_validation->set_message('required', lang('pprice_not_match_ciprice'));
}
$data['track_quantity'] = 0;
} elseif ($this->input->post('type') == 'digital') {
if ($_FILES['digital_file']['size'] > 0) {
$config['upload_path'] = $this->digital_upload_path;
$config['allowed_types'] = $this->digital_file_types;
$config['max_size'] = $this->allowed_file_size;
$config['overwrite'] = FALSE;
$config['encrypt_name'] = TRUE;
$config['max_filename'] = 25;
$this->upload->initialize($config);
if (!$this->upload->do_upload('digital_file')) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
admin_redirect("products/add");
}
$file = $this->upload->file_name;
$data['file'] = $file;
} else {
if (!$this->input->post('file_link')) {
$this->form_validation->set_rules('digital_file', lang("digital_file"), 'required');
}
}
$config = NULL;
$data['track_quantity'] = 0;
}
if (!isset($items)) {
$items = NULL;
}
if ($_FILES['product_image']['size'] > 0) {
$config['upload_path'] = $this->upload_path;
$config['allowed_types'] = $this->image_types;
$config['max_size'] = $this->allowed_file_size;
// $config['max_width'] = $this->Settings->iwidth;
// $config['max_height'] = $this->Settings->iheight;
$config['overwrite'] = FALSE;
$config['max_filename'] = 25;
$config['encrypt_name'] = TRUE;
$this->upload->initialize($config);
if (!$this->upload->do_upload('product_image')) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
admin_redirect("products/add");
}
$photo = $this->upload->file_name;
$data['image'] = $photo;
$this->load->library('image_lib');
$config['image_library'] = 'gd2';
$config['source_image'] = $this->upload_path . $photo;
$data['image_url'] = 'http://'.$_SERVER['SERVER_NAME'].'/'.$this->upload_path . $photo;
$config['new_image'] = $this->thumbs_path . $photo;
$config['maintain_ratio'] = TRUE;
$config['width'] = $this->Settings->twidth;
$config['height'] = $this->Settings->theight;
$this->image_lib->clear();
$this->image_lib->initialize($config);
if (!$this->image_lib->resize()) {
echo $this->image_lib->display_errors();
}
if ($this->Settings->watermark) {
$this->image_lib->clear();
$wm['source_image'] = $this->upload_path . $photo;
$wm['wm_text'] = 'Copyright ' . date('Y') . ' - ' . $this->Settings->site_name;
$wm['wm_type'] = 'text';
$wm['wm_font_path'] = 'system/fonts/texb.ttf';
$wm['quality'] = '100';
$wm['wm_font_size'] = '16';
$wm['wm_font_color'] = '999999';
$wm['wm_shadow_color'] = 'CCCCCC';
$wm['wm_vrt_alignment'] = 'top';
$wm['wm_hor_alignment'] = 'left';
$wm['wm_padding'] = '10';
$this->image_lib->initialize($wm);
$this->image_lib->watermark();
}
$this->image_lib->clear();
$config = NULL;
}
if ($_FILES['userfile']['name'][0] != "") {
$config['upload_path'] = $this->upload_path;
$config['allowed_types'] = $this->image_types;
$config['max_size'] = $this->allowed_file_size;
// $config['max_width'] = $this->Settings->iwidth;
// $config['max_height'] = $this->Settings->iheight;
$config['overwrite'] = FALSE;
$config['encrypt_name'] = TRUE;
$config['max_filename'] = 25;
$files = $_FILES;
$cpt = count($_FILES['userfile']['name']);
for ($i = 0; $i < $cpt; $i++) {
$_FILES['userfile']['name'] = $files['userfile']['name'][$i];
$_FILES['userfile']['type'] = $files['userfile']['type'][$i];
$_FILES['userfile']['tmp_name'] = $files['userfile']['tmp_name'][$i];
$_FILES['userfile']['error'] = $files['userfile']['error'][$i];
$_FILES['userfile']['size'] = $files['userfile']['size'][$i];
$this->upload->initialize($config);
if (!$this->upload->do_upload()) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
admin_redirect("products/add");
} else {
$pho = $this->upload->file_name;
$photos[] = $pho;
$this->load->library('image_lib');
$config['image_library'] = 'gd2';
$config['source_image'] = $this->upload_path . $pho;
$config['new_image'] = $this->thumbs_path . $pho;
$config['maintain_ratio'] = TRUE;
$config['width'] = $this->Settings->twidth;
$config['height'] = $this->Settings->theight;
$this->image_lib->initialize($config);
if (!$this->image_lib->resize()) {
echo $this->image_lib->display_errors();
}
if ($this->Settings->watermark) {
$this->image_lib->clear();
$wm['source_image'] = $this->upload_path . $pho;
$wm['wm_text'] = 'Copyright ' . date('Y') . ' - ' . $this->Settings->site_name;
$wm['wm_type'] = 'text';
$wm['wm_font_path'] = 'system/fonts/texb.ttf';
$wm['quality'] = '100';
$wm['wm_font_size'] = '16';
$wm['wm_font_color'] = '999999';
$wm['wm_shadow_color'] = 'CCCCCC';
$wm['wm_vrt_alignment'] = 'top';
$wm['wm_hor_alignment'] = 'left';
$wm['wm_padding'] = '10';
$this->image_lib->initialize($wm);
$this->image_lib->watermark();
}
$this->image_lib->clear();
}
}
$config = NULL;
} else {
$photos = NULL;
}
if($store_id!=0)
{
$data['quantity'] = isset($wh_total_quantity) ? $wh_total_quantity : 0;
}
// $this->sma->print_arrays($data, $warehouse_qty, $product_attributes);
}
if ($this->form_validation->run() == true && $this->products_model->addProduct($data, $items,$saleUnit, $warehouse_qty, $product_attributes, $photos,$wh_qty,$this->data['store_id'],$variant_option_type)) {
$this->session->set_flashdata('message', lang("product_added"));
admin_redirect('products');
} else {
$this->data['error'] = (validation_errors() ? validation_errors() : $this->session->flashdata('error'));
$user = $this->site->getUser();
$store_id = $user->store_id;
$this->data['store_id'] = $store_id;
$this->data['categories'] = $this->site->getAllCategories($this->data['store_id']);
$this->data['model_categories'] = $this->site->getAllModelCategories();
$this->data['stores'] = $this->site->getAllStores();
$this->data['tax_rates'] = $this->site->getAllTaxRates();
$this->data['brands'] = $this->site->getAllBrands();
$this->data['location'] = $this->site->getAllLocation($this->data['store_id']);
$this->data['base_units'] = $this->site->getAllBaseUnits($this->data['store_id']);
if($store_id==0)
{
$this->data['warehouses'] = $warehouses;
}
else{
$warehouses = $this->site->getAllWarehousesforstore($store_id);
$this->data['warehouses'] = $warehouses;
}
$this->data['warehouses_products'] = $id ? $this->products_model->getAllWarehousesWithPQ($id) : NULL;
$this->data['product'] = $id ? $this->products_model->getProductByID($id) : NULL;
$this->data['variants'] = $this->products_model->getAllVariants();
$this->data['combo_items'] = ($id && $this->data['product']->type == 'combo') ? $this->products_model->getProductComboItems($id) : NULL;
$this->data['product_options'] = $id ? $this->products_model->getProductOptionsWithWH($id) : NULL;
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('add_product')));
$meta = array('page_title' => lang('add_product'), 'bc' => $bc);
$this->page_construct('products/add', $meta, $this->data);
}
}
function suggestions()
{
$term = $this->input->get('term', TRUE);
if (strlen($term) < 1 || !$term) {
die("<script type='text/javascript'>setTimeout(function(){ window.top.location.href = '" . admin_url('welcome') . "'; }, 10);</script>");
}
$rows = $this->products_model->getProductNames($term);
if ($rows) {
foreach ($rows as $row) {
$pr[] = array('id' => $row->id, 'label' => $row->name . " (" . $row->code . ")", 'code' => $row->code, 'name' => $row->name, 'price' => $row->price, 'qty' => 1);
}
$this->sma->send_json($pr);
} else {
$this->sma->send_json(array(array('id' => 0, 'label' => lang('no_match_found'), 'value' => $term)));
}
}
function get_suggestions()
{
$term = $this->input->get('term', TRUE);
if (strlen($term) < 1 || !$term) {
die("<script type='text/javascript'>setTimeout(function(){ window.top.location.href = '" . admin_url('welcome') . "'; }, 10);</script>");
}
$rows = $this->products_model->getProductsForPrinting($term);
if ($rows) {
foreach ($rows as $row) {
$variants = $this->products_model->getProductOptions($row->id);
$pr[] = array('id' => $row->id, 'label' => $row->name . " (" . $row->code . ")", 'code' => $row->code, 'name' => $row->name, 'price' => $row->price, 'qty' => 1, 'variants' => $variants);
}
$this->sma->send_json($pr);
} else {
$this->sma->send_json(array(array('id' => 0, 'label' => lang('no_match_found'), 'value' => $term)));
}
}
function addByAjax()
{
if (!$this->mPermissions('add')) {
exit(json_encode(array('msg' => lang('access_denied'))));
}
if ($this->input->get('token') && $this->input->get('token') == $this->session->userdata('user_csrf') && $this->input->is_ajax_request()) {
$product = $this->input->get('product');
if (!isset($product['code']) || empty($product['code'])) {
exit(json_encode(array('msg' => lang('product_code_is_required'))));
}
if (!isset($product['name']) || empty($product['name'])) {
exit(json_encode(array('msg' => lang('product_name_is_required'))));
}
if (!isset($product['category_id']) || empty($product['category_id'])) {
exit(json_encode(array('msg' => lang('product_category_is_required'))));
}
if (!isset($product['unit']) || empty($product['unit'])) {
exit(json_encode(array('msg' => lang('product_unit_is_required'))));
}
if (!isset($product['price']) || empty($product['price'])) {
exit(json_encode(array('msg' => lang('product_price_is_required'))));
}
if (!isset($product['cost']) || empty($product['cost'])) {
exit(json_encode(array('msg' => lang('product_cost_is_required'))));
}
if ($this->products_model->getProductByCode($product['code'])) {
exit(json_encode(array('msg' => lang('product_code_already_exist'))));
}
if ($row = $this->products_model->addAjaxProduct($product)) {
$tax_rate = $this->site->getTaxRateByID($row->tax_rate);
$pr = array('id' => $row->id, 'label' => $row->name . " (" . $row->code . ")", 'code' => $row->code, 'qty' => 1, 'cost' => $row->cost, 'name' => $row->name, 'tax_method' => $row->tax_method, 'tax_rate' => $tax_rate, 'discount' => '0');
$this->sma->send_json(array('msg' => 'success', 'result' => $pr));
} else {
exit(json_encode(array('msg' => lang('failed_to_add_product'))));
}
} else {
json_encode(array('msg' => 'Invalid token'));
}
}
/* -------------------------------------------------------- */
function edit($id = NULL)
{
$this->sma->checkPermissions();
$this->load->helper('security');
if ($this->input->post('id')) {
$id = $this->input->post('id');
}
$warehouses = $this->site->getallWarehouses($this->data['store_id']);
$warehouses_products = $this->products_model->getAllWarehousesWithPQ($id);
$product = $this->site->getProductByID($id);
if (!$id || !$product) {
$this->session->set_flashdata('error', lang('prduct_not_found'));
redirect($_SERVER["HTTP_REFERER"]);
}
$this->form_validation->set_rules('category', lang("category"), 'required|is_natural_no_zero');
if ($this->input->post('type') == 'standard') {
$this->form_validation->set_rules('cost', lang("product_cost"), 'required');
$this->form_validation->set_rules('unit', lang("product_unit"), 'required');
}
$this->form_validation->set_rules('code', lang("product_code"), 'alpha_dash');
if ($this->input->post('code') !== $product->code) {
$this->form_validation->set_rules('code', lang("product_code"), 'is_unique[products.code]');
}
if ($this->input->post('barcode_symbology') == 'ean13') {
$this->form_validation->set_rules('code', lang("product_code"), 'min_length[13]|max_length[13]');
}
// $this->form_validation->set_rules('slug', lang("slug"), 'required|alpha_dash');
// if ($this->input->post('slug') !== $product->slug) {
// $this->form_validation->set_rules('slug', lang("slug"), 'required|is_unique[products.slug]|alpha_dash');
// }
$this->form_validation->set_rules('weight', lang("weight"), 'numeric');
$this->form_validation->set_rules('product_image', lang("product_image"), 'xss_clean');
$this->form_validation->set_rules('digital_file', lang("digital_file"), 'xss_clean');
$this->form_validation->set_rules('userfile', lang("product_gallery_images"), 'xss_clean');
if ($this->form_validation->run('products/add') == true) {
$code = $this->input->post('code');
if (strpos($code, $this->data['store']->code) === false){
$code = $this->data['store']->code.$this->input->post('code');
}
$data = array('code' => $code,
'sequence' => $this->input->post('sequence'),
'barcode_symbology' => $this->input->post('barcode_symbology'),
'name' => $this->input->post('name'),
'type' => $this->input->post('type'),
'brand' => $this->input->post('brand'),
'location' => $this->input->post('location'),
'category_id' => $this->input->post('category'),
'subcategory_id' => $this->input->post('subcategory') ? $this->input->post('subcategory') : NULL,
'cost' => $this->sma->formatDecimal($this->input->post('cost')),
'price' => $this->sma->formatDecimal($this->input->post('price')),
'unit' => $this->input->post('unit'),
'sale_unit' => $this->input->post('default_sale_unit'),
'purchase_unit' => $this->input->post('default_purchase_unit'),
'tax_rate' => $this->input->post('tax_rate'),
'tax_method' => $this->input->post('tax_method'),
'alert_quantity' => $this->input->post('alert_quantity'),
'track_quantity' => $this->input->post('track_quantity') ? $this->input->post('track_quantity') : '0',
'details' => $this->input->post('details'),
'product_details' => $this->input->post('product_details'),
'supplier1' => $this->input->post('supplier'),
'supplier1price' => $this->sma->formatDecimal($this->input->post('supplier_price')),
'supplier2' => $this->input->post('supplier_2'),
'supplier2price' => $this->sma->formatDecimal($this->input->post('supplier_2_price')),
'supplier3' => $this->input->post('supplier_3'),
'supplier3price' => $this->sma->formatDecimal($this->input->post('supplier_3_price')),
'supplier4' => $this->input->post('supplier_4'),
'supplier4price' => $this->sma->formatDecimal($this->input->post('supplier_4_price')),
'supplier5' => $this->input->post('supplier_5'),
'supplier5price' => $this->sma->formatDecimal($this->input->post('supplier_5_price')),
'cf1' => $this->input->post('cf1'),
'cf2' => $this->input->post('cf2'),
'cf3' => $this->input->post('cf3'),
'cf4' => $this->input->post('cf4'),
'cf5' => $this->input->post('cf5'),
'cf6' => $this->input->post('cf6'),
'promotion' => $this->input->post('promotion'),
'promo_price' => $this->sma->formatDecimal($this->input->post('promo_price')),
'start_date' => $this->input->post('start_date') ? $this->sma->fsd($this->input->post('start_date')) : NULL,
'end_date' => $this->input->post('end_date') ? $this->sma->fsd($this->input->post('end_date')) : NULL,
'supplier1_part_no' => $this->input->post('supplier_part_no'),
'supplier2_part_no' => $this->input->post('supplier_2_part_no'),
'supplier3_part_no' => $this->input->post('supplier_3_part_no'),
'supplier4_part_no' => $this->input->post('supplier_4_part_no'),
'supplier5_part_no' => $this->input->post('supplier_5_part_no'),
'slug' =>'0',
'weight' => $this->input->post('weight'),
'featured' => $this->input->post('featured'),
'model_category'=>$this->input->post('model_category'),
'model_subcategory'=>$this->input->post('model_subcategory'),
'model_feature'=>$this->input->post('feature'),
'tag'=> $this->input->post('tag')
);
$data['ecom_show']=$this->input->post('ecom_show');
$data['show_emenu']=$this->input->post('show_emenu');
$warehouse_qty = NULL;
$product_attributes = NULL;
$update_variants = array();
$update_variant_options = array();
$this->load->library('upload');
if ($this->input->post('type') == 'standard') {
if ($product_variants = $this->products_model->getProductOptions($id)) {
foreach ($product_variants as $pv) {
$update_variants[] = array(
'id' => $this->input->post('variant_id_'.$pv->id),
'name' => $this->input->post('variant_name_'.$pv->id),
'cost' => $this->input->post('variant_cost_'.$pv->id),
'price' => $this->input->post('variant_price_'.$pv->id),
);
}
}
if ($product_variant_options = $this->db->where('product_id',$id)->get('variant_option')->result()) {
foreach ($product_variant_options as $pv) {
$update_variant_options[] = array(
'id' => $this->input->post('variant_option_id_'.$pv->id),
'name' => $this->input->post('variant_option_name_'.$pv->id),
);
}
}
for ($s = 2; $s > 5; $s++) {
$data['suppliers' . $s] = $this->input->post('supplier_' . $s);
$data['suppliers' . $s . 'price'] = $this->input->post('supplier_' . $s . '_price');
}
foreach ($warehouses as $warehouse) {
$warehouse_qty[] = array(
'warehouse_id' => $this->input->post('wh_' . $warehouse->id),
'rack' => $this->input->post('rack_' . $warehouse->id) ? $this->input->post('rack_' . $warehouse->id) : NULL
);
}
if($this->input->post('typesInput'))
{
$variant_option_type = $this->input->post('typesInput');
}else{
$variant_option_type = NULL;
}
if ($this->input->post('attributes')) {
$a = sizeof($_POST['attr_name']);
for ($r = 0; $r <= $a; $r++) {
if (isset($_POST['attr_name'][$r])) {
if ($product_variatnt = $this->products_model->getPrductVariantByPIDandName($id, trim($_POST['attr_name'][$r]))) {
$this->form_validation->set_message('required', lang("product_already_has_variant").' ('.$_POST['attr_name'][$r].')');
$this->form_validation->set_rules('new_product_variant', lang("new_product_variant"), 'required');
} else {
$product_attributes[] = array(
'name' => $_POST['attr_name'][$r],
'warehouse_id' => $_POST['attr_warehouse'][$r],
'quantity' => $_POST['attr_quantity'][$r],
'price' => $_POST['attr_price'][$r],
);
}
}
}
} else {
$product_attributes = NULL;
}
}
$s = sizeof($_POST['type_sale'])-1;
for($st = 0; $st<=$s;$st++){
$saleUnit[]=array(
'sale_unitname'=>$_POST['type_sale'][$st],
'sale_unitprice'=>$_POST['price_unit'][$st],
);
}
//
if ($this->input->post('type') == 'service') {
$data['track_quantity'] = 0;
} elseif ($this->input->post('type') == 'combo') {
$total_price = $this->input->post('price');
$c = sizeof($_POST['combo_item_code']) - 1;
for ($r = 0; $r <= $c; $r++) {
if (isset($_POST['combo_item_code'][$r]) && isset($_POST['combo_item_quantity'][$r]) && isset($_POST['combo_item_price'][$r])) {
$items[] = array(
'item_code' => $_POST['combo_item_code'][$r],
'quantity' => $_POST['combo_item_quantity'][$r],
'unit_price' => $_POST['combo_item_price'][$r],
);
}
// $total_price += $_POST['combo_item_price'][$r] * $_POST['combo_item_quantity'][$r];
}
if ($this->sma->formatDecimal($total_price) != $this->sma->formatDecimal($this->input->post('price'))) {
// $this->form_validation->set_rules('combo_price', 'combo_price', 'required');
// $this->form_validation->set_message('required', lang('pprice_not_match_ciprice'));
}
$data['track_quantity'] = 0;
} elseif ($this->input->post('type') == 'digital') {
if ($this->input->post('file_link')) {
$data['file'] = $this->input->post('file_link');
}
if ($_FILES['digital_file']['size'] > 0) {
$config['upload_path'] = $this->digital_upload_path;
$config['allowed_types'] = $this->digital_file_types;
$config['max_size'] = $this->allowed_file_size;
$config['overwrite'] = FALSE;
$config['encrypt_name'] = TRUE;
$config['max_filename'] = 25;
$this->upload->initialize($config);
if (!$this->upload->do_upload('digital_file')) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
admin_redirect("products/add");
}
$file = $this->upload->file_name;
$data['file'] = $file;
}
$config = NULL;
$data['track_quantity'] = 0;
}
if (!isset($items)) {
$items = NULL;
}
if ($_FILES['product_image']['size'] > 0) {
$config['upload_path'] = $this->upload_path;
$config['allowed_types'] = $this->image_types;
$config['max_size'] = $this->allowed_file_size;
// $config['max_width'] = $this->Settings->iwidth;
// $config['max_height'] = $this->Settings->iheight;
$config['overwrite'] = FALSE;
$config['encrypt_name'] = TRUE;
$config['max_filename'] = 25;
$this->upload->initialize($config);
if (!$this->upload->do_upload('product_image')) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
admin_redirect("products/edit/" . $id);
}
$photo = $this->upload->file_name;
$data['image'] = $photo;
$this->load->library('image_lib');
$config['image_library'] = 'gd2';
$config['source_image'] = $this->upload_path . $photo;
$data['image_url'] = 'http://'.$_SERVER['SERVER_NAME'].'/'.$this->upload_path . $photo;
$config['new_image'] = $this->thumbs_path . $photo;
$config['maintain_ratio'] = TRUE;
$config['width'] = $this->Settings->twidth;
$config['height'] = $this->Settings->theight;
$this->image_lib->clear();
$this->image_lib->initialize($config);
if (!$this->image_lib->resize()) {
echo $this->image_lib->display_errors();
}
if ($this->Settings->watermark) {
$this->image_lib->clear();
$wm['source_image'] = $this->upload_path . $photo;
$wm['wm_text'] = 'Copyright ' . date('Y') . ' - ' . $this->Settings->site_name;
$wm['wm_type'] = 'text';
$wm['wm_font_path'] = 'system/fonts/texb.ttf';
$wm['quality'] = '100';
$wm['wm_font_size'] = '16';
$wm['wm_font_color'] = '999999';
$wm['wm_shadow_color'] = 'CCCCCC';
$wm['wm_vrt_alignment'] = 'top';
$wm['wm_hor_alignment'] = 'left';
$wm['wm_padding'] = '10';
$this->image_lib->initialize($wm);
$this->image_lib->watermark();
}
$this->image_lib->clear();
$config = NULL;
}
if ($_FILES['userfile']['name'][0] != "") {
$config['upload_path'] = $this->upload_path;
$config['allowed_types'] = $this->image_types;
$config['max_size'] = $this->allowed_file_size;
// $config['max_width'] = $this->Settings->iwidth;
// $config['max_height'] = $this->Settings->iheight;
$config['overwrite'] = FALSE;
$config['encrypt_name'] = TRUE;
$config['max_filename'] = 25;
$files = $_FILES;
$cpt = count($_FILES['userfile']['name']);
for ($i = 0; $i < $cpt; $i++) {
$_FILES['userfile']['name'] = $files['userfile']['name'][$i];
$_FILES['userfile']['type'] = $files['userfile']['type'][$i];
$_FILES['userfile']['tmp_name'] = $files['userfile']['tmp_name'][$i];
$_FILES['userfile']['error'] = $files['userfile']['error'][$i];
$_FILES['userfile']['size'] = $files['userfile']['size'][$i];
$this->upload->initialize($config);
if (!$this->upload->do_upload()) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
admin_redirect("products/edit/" . $id);
} else {
$pho = $this->upload->file_name;
$photos[] = $pho;
$this->load->library('image_lib');
$config['image_library'] = 'gd2';
$config['source_image'] = $this->upload_path . $pho;
$config['new_image'] = $this->thumbs_path . $pho;
$config['maintain_ratio'] = TRUE;
$config['width'] = $this->Settings->twidth;
$config['height'] = $this->Settings->theight;
$this->image_lib->initialize($config);
if (!$this->image_lib->resize()) {
echo $this->image_lib->display_errors();
}
if ($this->Settings->watermark) {
$this->image_lib->clear();
$wm['source_image'] = $this->upload_path . $pho;
$wm['wm_text'] = 'Copyright ' . date('Y') . ' - ' . $this->Settings->site_name;
$wm['wm_type'] = 'text';
$wm['wm_font_path'] = 'system/fonts/texb.ttf';
$wm['quality'] = '100';
$wm['wm_font_size'] = '16';
$wm['wm_font_color'] = '999999';
$wm['wm_shadow_color'] = 'CCCCCC';
$wm['wm_vrt_alignment'] = 'top';
$wm['wm_hor_alignment'] = 'left';
$wm['wm_padding'] = '10';
$this->image_lib->initialize($wm);
$this->image_lib->watermark();
}
$this->image_lib->clear();
}
}
$config = NULL;
} else {
$photos = NULL;
}
$data['quantity'] = isset($wh_total_quantity) ? $wh_total_quantity : 0;
// $this->sma->print_arrays($data, $warehouse_qty, $update_variants, $product_attributes, $photos, $items);
}
if ($this->form_validation->run() == true && $this->products_model->updateProduct($id, $data, $saleUnit, $items, $warehouse_qty, $product_attributes, $photos, $update_variants,$variant_option_type,$update_variant_options)) {
$this->session->set_flashdata('message', lang("product_updated"));
admin_redirect('products');
} else {
$this->data['error'] = (validation_errors() ? validation_errors() : $this->session->flashdata('error'));
$this->data['unit'] = $this->site->getEditValueByID($id);
//var_dump($this->data['unit']);die();
$this->data['categories'] = $this->site->getAllCategories($this->data['store_id']);
$this->data['tax_rates'] = $this->site->getAllTaxRates();
$this->data['brands'] = $this->site->getAllBrands();
$this->data['location'] = $this->site->getAllLocation($this->data['store_id']);
$this->data['base_units'] = $this->site->getAllBaseUnits($this->data['store_id']);
$this->data['warehouses'] = $warehouses;
$this->data['warehouses_products'] = $warehouses_products;
$this->data['product'] = $product;
$this->data['variants'] = $this->products_model->getAllVariants();
$this->data['subunits'] = $this->site->getUnitsByBUID($product->unit);
$this->data['product_variants'] = $this->products_model->getProductOptions($id);
$this->data['product_variant_options'] = $this->db->where('product_id',$id)->get('variant_option')->result();
$this->data['model_categories'] = $this->site->getAllModelCategories();
$this->data['combo_items'] = $product->type == 'combo' ? $this->products_model->getProductComboItems($product->id) : NULL;
$this->data['product_options'] = $id ? $this->products_model->getProductOptionsWithWH($id) : NULL;
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('edit_product')));
$meta = array('page_title' => lang('edit_product'), 'bc' => $bc);
$this->page_construct('products/edit', $meta, $this->data);
}
}
/* ---------------------------------------------------------------- */
function import_csv()
{
$this->sma->checkPermissions('csv');
$this->load->helper('security');
$this->form_validation->set_rules('userfile', lang("upload_file"), 'xss_clean');
if ($this->form_validation->run() == true) {
if (isset($_FILES["userfile"])) {
$this->load->library('upload');
$config['upload_path'] = $this->digital_upload_path;
$config['allowed_types'] = 'csv';
$config['max_size'] = $this->allowed_file_size;
$config['overwrite'] = TRUE;
$config['encrypt_name'] = TRUE;
$config['max_filename'] = 25;
$this->upload->initialize($config);
if (!$this->upload->do_upload()) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
admin_redirect("products/import_csv");
}
$csv = $this->upload->file_name;
$arrResult = array();
$handle = fopen($this->digital_upload_path . $csv, "r");
if ($handle) {
while (($row = fgetcsv($handle, 5000, ",")) !== FALSE) {
$arrResult[] = $row;
}
fclose($handle);
}
$titles = array_shift($arrResult);
$keys = array('name', 'code', 'barcode_symbology', 'brand', 'location', 'category_code', 'unit', 'sale_unit', 'purchase_unit', 'cost', 'price', 'alert_quantity', 'tax_rate', 'tax_method', 'image', 'subcategory_code', 'variants', 'cf1', 'cf2', 'cf3', 'cf4', 'cf5', 'cf6','image_url');
$final = array();
foreach ($arrResult as $key => $value) {
$final[] = array_combine($keys, $value);
}
// $this->sma->print_arrays($final);
$rw = 2; $items = array();
foreach ($final as $csv_pr) {
if ( ! $this->products_model->getProductByCode(trim($this->data['store']->code.$csv_pr['code']))) {
if ($catd = $this->products_model->getCategoryByCode(trim($csv_pr['category_code']))) {
$brand = $this->products_model->getBrandByName(trim($csv_pr['brand']));
$location = $this->products_model->getLocationByName(trim($csv_pr['location']));
$warehouse = $this->products_model->getWarehouseByName(trim($csv_pr['cf1']));
if(!$warehouse)
{
$this->session->set_flashdata('error', "Check warehouse!");
admin_redirect("products/import_csv");
}
$store = $this->products_model->getStoreByCode(trim($csv_pr['cf6']));
$unit = $this->products_model->getUnitByCode(trim($csv_pr['unit']));
$base_unit = $unit ? $unit->id : NULL;
$sale_unit = $base_unit;
$purcahse_unit = $base_unit;
if ($base_unit) {
$units = $this->site->getUnitsByBUID($base_unit);
foreach ($units as $u) {
if ($u->code == trim($csv_pr['sale_unit'])) {
$sale_unit = $u->id;
}
if ($u->code == trim($csv_pr['purchase_unit'])) {
$purcahse_unit = $u->id;
}
}
} else {
$this->session->set_flashdata('error', lang("check_unit") . " (" . $csv_pr['unit'] . "). " . lang("unit_code_x_exist") . " " . lang("line_no") . " " . $rw);
admin_redirect("products/import_csv");
}
$tax_details = $this->products_model->getTaxRateByName(trim($csv_pr['tax_rate']));
$prsubcat = $this->products_model->getCategoryByCode(trim($csv_pr['subcategory_code']));
$items[] = array (
'code' => $this->data['store']->code.trim($csv_pr['code']),
'name' => trim($csv_pr['name']),
'category_id' => $catd->id,
'barcode_symbology' => mb_strtolower(trim($csv_pr['barcode_symbology']), 'UTF-8'),
'brand' => ($brand ? $brand->id : NULL),
'location' => ($location ? $location->id : NULL),
'unit' => $base_unit,
'sale_unit' => $sale_unit,
'purchase_unit' => $purcahse_unit,
'cost' => trim($csv_pr['cost']),
'price' => trim($csv_pr['price']),
'alert_quantity' => trim($csv_pr['alert_quantity']),
'tax_rate' => ($tax_details ? $tax_details->id : NULL),
'tax_method' => ($csv_pr['tax_method'] == 'exclusive' ? 1 : 0),
'subcategory_id' => ($prsubcat ? $prsubcat->id : NULL),
'variants' => trim($csv_pr['variants']),
'image' => trim($csv_pr['image']),
'warehouse' => trim($warehouse->id),
'quantity' => trim($csv_pr['cf2']),
'cf1' => trim($csv_pr['cf3']),
'cf2' => trim($csv_pr['cf4']),
'cf3' => trim($csv_pr['cf5']),
'store_id' => $this->data['store']->id,
'image_url' => trim($csv_pr['image_url']),
);
} else {
$this->session->set_flashdata('error', lang("check_category_code") . " (" . $csv_pr['category_code'] . "). " . lang("category_code_x_exist") . " " . lang("line_no") . " " . $rw);
admin_redirect("products/import_csv");
}
}else{
$this->session->set_flashdata('error', "Product existed!");
admin_redirect("products/import_csv");
}
$rw++;
}
}
// $this->sma->print_arrays($items);
}
if ($this->form_validation->run() == true && $prs = $this->products_model->add_products($items)) {
$this->session->set_flashdata('message', sprintf(lang("products_added"), $prs));
admin_redirect('products');
} else {
$this->data['error'] = (validation_errors() ? validation_errors() : $this->session->flashdata('error'));
$this->data['userfile'] = array('name' => 'userfile',
'id' => 'userfile',
'type' => 'text',
'value' => $this->form_validation->set_value('userfile')
);
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('import_products_by_csv')));
$meta = array('page_title' => lang('import_products_by_csv'), 'bc' => $bc);
$this->page_construct('products/import_csv', $meta, $this->data);
}
}
/* ------------------------------------------------------------------ */
function update_price()
{
$this->sma->checkPermissions('csv');
$this->load->helper('security');
$this->form_validation->set_rules('userfile', lang("upload_file"), 'xss_clean');
if ($this->form_validation->run() == true) {
if (DEMO) {
$this->session->set_flashdata('message', lang("disabled_in_demo"));
admin_redirect('welcome');
}
if (isset($_FILES["userfile"])) {
$this->load->library('upload');
$config['upload_path'] = $this->digital_upload_path;
$config['allowed_types'] = 'csv';
$config['max_size'] = $this->allowed_file_size;
$config['overwrite'] = TRUE;
$config['encrypt_name'] = TRUE;
$config['max_filename'] = 25;
$this->upload->initialize($config);
if (!$this->upload->do_upload()) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
admin_redirect("products");
}
$csv = $this->upload->file_name;
$arrResult = array();
$handle = fopen($this->digital_upload_path . $csv, "r");
if ($handle) {
while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {
$arrResult[] = $row;
}
fclose($handle);
}
$titles = array_shift($arrResult);
$keys = array('code', 'price');
$final = array();
foreach ($arrResult as $key => $value) {
$final[] = array_combine($keys, $value);
}
$rw = 2;
foreach ($final as $csv_pr) {
if (!$this->products_model->getProductByCode(trim($csv_pr['code']))) {
$this->session->set_flashdata('message', lang("check_product_code") . " (" . $csv_pr['code'] . "). " . lang("code_x_exist") . " " . lang("line_no") . " " . $rw);
admin_redirect("products");
}
$rw++;
}
}
} elseif ($this->input->post('update_price')) {
$this->session->set_flashdata('error', validation_errors());
admin_redirect("system_settings/group_product_prices/".$group_id);
}
if ($this->form_validation->run() == true && !empty($final)) {
$this->products_model->updatePrice($final);
$this->session->set_flashdata('message', lang("price_updated"));
admin_redirect('products');
} else {
$this->data['userfile'] = array('name' => 'userfile',
'id' => 'userfile',
'type' => 'text',
'value' => $this->form_validation->set_value('userfile')
);
$this->data['modal_js'] = $this->site->modal_js();
$this->load->view($this->theme.'products/update_price', $this->data);
}
}
/* ------------------------------------------------------------------------------- */
function delete($id = NULL)
{
$this->sma->checkPermissions(NULL, TRUE);
if ($this->input->get('id')) {
$id = $this->input->get('id');
}
//check if product has been used
if($this->db->where('product_id',$id)->get('sale_items')->row())
{
$this->sma->send_json(array('error' => 1, 'msg' => lang("this_product_has_been_used")));
}
if($this->db->where('product_id',$id)->get('adjustment_items')->row())
{
$this->sma->send_json(array('error' => 1, 'msg' => lang("this_product_has_been_used")));
}
if ($this->products_model->deleteProduct($id)) {
if($this->input->is_ajax_request()) {
$this->sma->send_json(array('error' => 0, 'msg' => lang("product_deleted")));
}
$this->session->set_flashdata('message', lang('product_deleted'));
admin_redirect('welcome');
}
}
/* ----------------------------------------------------------------------------- */
function quantity_adjustments($warehouse_id = NULL)
{
$this->sma->checkPermissions('adjustments');
if ($this->Owner || $this->Admin || !$this->session->userdata('warehouse_id')) {
$this->data['warehouses'] = $this->site->getallWarehouses($this->data['store_id']);
$this->data['warehouse'] = $warehouse_id ? $this->site->getWarehouseByID($warehouse_id) : null;
} else {
$this->data['warehouses'] = null;
$this->data['warehouse'] = $this->session->userdata('warehouse_id') ? $this->site->getWarehouseByID($this->session->userdata('warehouse_id')) : null;
}
$this->data['stores'] = $this->site->getAllStores();
$this->data['error'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('error');
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('quantity_adjustments')));
$meta = array('page_title' => lang('quantity_adjustments'), 'bc' => $bc);
$this->page_construct('products/quantity_adjustments', $meta, $this->data);
}
function getadjustments($warehouse_id = NULL)
{
$this->sma->checkPermissions('adjustments');
$delete_link = "<a href='#' class='tip po' title='<b>" . $this->lang->line("delete_adjustment") . "</b>' data-content=\"<p>"
. lang('r_u_sure') . "</p><a class='btn btn-danger po-delete' href='" . admin_url('products/delete_adjustment/$1') . "'>"
. lang('i_m_sure') . "</a> <button class='btn po-close'>" . lang('no') . "</button>\" rel='popover'><i class=\"fa fa-trash-o\"></i></a>";
$this->load->library('datatables');
$this->datatables
->select("{$this->db->dbprefix('adjustments')}.id as id, date, reference_no, warehouses.name as wh_name, CONCAT({$this->db->dbprefix('users')}.first_name, ' ', {$this->db->dbprefix('users')}.last_name) as created_by, note, attachment")
->from('adjustments')
->join('warehouses', 'warehouses.id=adjustments.warehouse_id', 'left')
->join('users', 'users.id=adjustments.created_by', 'left')
->group_by("adjustments.id");
if ($warehouse_id) {
$this->datatables->where('adjustments.warehouse_id', $warehouse_id);
}
if($this->data['store_id']!=0)
{
$this->datatables->where('adjustments.store_id',$this->data['store_id']);
}
$this->datatables->add_column("Actions", "<div class='text-center'><a href='" . admin_url('products/edit_adjustment/$1') . "' class='tip' title='" . lang("edit_adjustment") . "'><i class='fa fa-edit'></i></a> " . $delete_link . "</div>", "id");
echo $this->datatables->generate();
}
public function view_adjustment($id)
{
$this->sma->checkPermissions('adjustments', TRUE);
$adjustment = $this->products_model->getAdjustmentByID($id);
if (!$id || !$adjustment) {
$this->session->set_flashdata('error', lang('adjustment_not_found'));
$this->sma->md();
}
$this->data['inv'] = $adjustment;
$this->data['rows'] = $this->products_model->getAdjustmentItems($id);
$this->data['created_by'] = $this->site->getUser($adjustment->created_by);
$this->data['updated_by'] = $this->site->getUser($adjustment->updated_by);
$this->data['warehouse'] = $this->site->getWarehouseByID($adjustment->warehouse_id);
$this->load->view($this->theme.'products/view_adjustment', $this->data);
}
function add_adjustment($count_id = NULL)
{
$this->sma->checkPermissions('adjustments', true);
$this->form_validation->set_rules('warehouse', lang("warehouse"), 'required');
if ($this->form_validation->run() == true) {
if ($this->Owner || $this->Admin) {
$date = $this->sma->fld($this->input->post('date'));
} else {
$date = date('Y-m-d H:s:i');
}
$reference_no = $this->input->post('reference_no') ? $this->input->post('reference_no') : $this->site->getReference('qa');
$warehouse_id = $this->input->post('warehouse');
$note = $this->sma->clear_tags($this->input->post('note'));
$i = isset($_POST['product_id']) ? sizeof($_POST['product_id']) : 0;
for ($r = 0; $r < $i; $r++) {
$product_id = $_POST['product_id'][$r];
$type = $_POST['type'][$r];
$quantity = $_POST['quantity'][$r];
$serial = $_POST['serial'][$r];
$variant = isset($_POST['variant'][$r]) && !empty($_POST['variant'][$r]) ? $_POST['variant'][$r] : NULL;
if (!$this->Settings->overselling && $type == 'subtraction') {
if ($variant) {
if($op_wh_qty = $this->products_model->getProductWarehouseOptionQty($variant, $warehouse_id)) {
if ($op_wh_qty->quantity < $quantity) {
$this->session->set_flashdata('error', lang('warehouse_option_qty_is_less_than_damage'));
redirect($_SERVER["HTTP_REFERER"]);
}
} else {
$this->session->set_flashdata('error', lang('warehouse_option_qty_is_less_than_damage'));
redirect($_SERVER["HTTP_REFERER"]);
}
}
if($wh_qty = $this->products_model->getProductQuantity($product_id, $warehouse_id)) {
if ($wh_qty['quantity'] < $quantity) {
$this->session->set_flashdata('error', lang('warehouse_qty_is_less_than_damage'));
redirect($_SERVER["HTTP_REFERER"]);
}
} else {
$this->session->set_flashdata('error', lang('warehouse_qty_is_less_than_damage'));
redirect($_SERVER["HTTP_REFERER"]);
}
}
$products[] = array(
'product_id' => $product_id,
'type' => $type,
'quantity' => $quantity,
'warehouse_id' => $warehouse_id,
'option_id' => $variant,
'serial_no' => $serial,
);
}
if (empty($products)) {
$this->form_validation->set_rules('product', lang("products"), 'required');
} else {
krsort($products);
}
$data = array(
'date' => $date,
'reference_no' => $reference_no,
'warehouse_id' => $warehouse_id,
'note' => $note,
'created_by' => $this->session->userdata('user_id'),
'count_id' => $this->input->post('count_id') ? $this->input->post('count_id') : NULL,
);
if($this->data['store_id']==0)
{
$data['store_id'] = $this->input->post('store');
}else{
$data['store_id'] =$this->data['store_id'];
}
if ($_FILES['document']['size'] > 0) {
$this->load->library('upload');
$config['upload_path'] = $this->digital_upload_path;
$config['allowed_types'] = $this->digital_file_types;
$config['max_size'] = $this->allowed_file_size;
$config['overwrite'] = false;
$config['encrypt_name'] = true;
$this->upload->initialize($config);
if (!$this->upload->do_upload('document')) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
redirect($_SERVER["HTTP_REFERER"]);
}
$photo = $this->upload->file_name;
$data['attachment'] = $photo;
}
// $this->sma->print_arrays($data, $products);
}
if ($this->form_validation->run() == true && $this->products_model->addAdjustment($data, $products)) {
$this->session->set_userdata('remove_qals', 1);
$this->session->set_flashdata('message', lang("quantity_adjusted"));
admin_redirect('products/quantity_adjustments');
} else {
if ($count_id) {
$stock_count = $this->products_model->getStouckCountByID($count_id);
$items = $this->products_model->getStockCountItems($count_id);
$c = rand(100000, 9999999);
foreach ($items as $item) {
if ($item->counted != $item->expected) {
$product = $this->site->getProductByID($item->product_id);
$row = json_decode('{}');
$row->id = $item->product_id;
$row->code = $product->code;
$row->name = $product->name;
$row->qty = $item->counted-$item->expected;
$row->type = $row->qty > 0 ? 'addition' : 'subtraction';
$row->qty = $row->qty > 0 ? $row->qty : (0-$row->qty);
$options = $this->products_model->getProductOptions($product->id);
$row->option = $item->product_variant_id ? $item->product_variant_id : 0;
$row->serial = '';
$ri = $this->Settings->item_addition ? $product->id : $c;
$pr[$ri] = array('id' => str_replace(".", "", microtime(true)), 'item_id' => $row->id, 'label' => $row->name . " (" . $row->code . ")",
'row' => $row, 'options' => $options);
$c++;
}
}
}
$this->data['adjustment_items'] = $count_id ? json_encode($pr) : FALSE;
$this->data['warehouse_id'] = $count_id ? $stock_count->warehouse_id : FALSE;
$this->data['count_id'] = $count_id;
$this->data['stores'] = $this->site->getAllStores();
$this->data['error'] = (validation_errors() ? validation_errors() : $this->session->flashdata('error'));
$this->data['warehouses'] = $this->site->getallWarehouses($this->data['store_id']);
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('add_adjustment')));
$meta = array('page_title' => lang('add_adjustment'), 'bc' => $bc);
$this->page_construct('products/add_adjustment', $meta, $this->data);
}
}
function edit_adjustment($id)
{
$this->sma->checkPermissions('adjustments', true);
$adjustment = $this->products_model->getAdjustmentByID($id);
if (!$id || !$adjustment) {
$this->session->set_flashdata('error', lang('adjustment_not_found'));
$this->sma->md();
}
$this->form_validation->set_rules('warehouse', lang("warehouse"), 'required');
if ($this->form_validation->run() == true) {
if ($this->Owner || $this->Admin) {
$date = $this->sma->fld($this->input->post('date'));
} else {
$date = $adjustment->date;
}
$reference_no = $this->input->post('reference_no');
$warehouse_id = $this->input->post('warehouse');
$note = $this->sma->clear_tags($this->input->post('note'));
$i = isset($_POST['product_id']) ? sizeof($_POST['product_id']) : 0;
for ($r = 0; $r < $i; $r++) {
$product_id = $_POST['product_id'][$r];
$type = $_POST['type'][$r];
$quantity = $_POST['quantity'][$r];
$serial = $_POST['serial'][$r];
$variant = isset($_POST['variant'][$r]) && !empty($_POST['variant'][$r]) ? $_POST['variant'][$r] : null;
if (!$this->Settings->overselling && $type == 'subtraction') {
if ($variant) {
if($op_wh_qty = $this->products_model->getProductWarehouseOptionQty($variant, $warehouse_id)) {
if ($op_wh_qty->quantity < $quantity) {
$this->session->set_flashdata('error', lang('warehouse_option_qty_is_less_than_damage'));
redirect($_SERVER["HTTP_REFERER"]);
}
} else {
$this->session->set_flashdata('error', lang('warehouse_option_qty_is_less_than_damage'));
redirect($_SERVER["HTTP_REFERER"]);
}
}
if($wh_qty = $this->products_model->getProductQuantity($product_id, $warehouse_id)) {
if ($wh_qty['quantity'] < $quantity) {
$this->session->set_flashdata('error', lang('warehouse_qty_is_less_than_damage'));
redirect($_SERVER["HTTP_REFERER"]);
}
} else {
$this->session->set_flashdata('error', lang('warehouse_qty_is_less_than_damage'));
redirect($_SERVER["HTTP_REFERER"]);
}
}
$products[] = array(
'product_id' => $product_id,
'type' => $type,
'quantity' => $quantity,
'warehouse_id' => $warehouse_id,
'option_id' => $variant,
'serial_no' => $serial,
);
}
if (empty($products)) {
$this->form_validation->set_rules('product', lang("products"), 'required');
} else {
krsort($products);
}
$data = array(
'date' => $date,
'reference_no' => $reference_no,
'warehouse_id' => $warehouse_id,
'note' => $note,
'created_by' => $this->session->userdata('user_id')
);
if ($_FILES['document']['size'] > 0) {
$this->load->library('upload');
$config['upload_path'] = $this->digital_upload_path;
$config['allowed_types'] = $this->digital_file_types;
$config['max_size'] = $this->allowed_file_size;
$config['overwrite'] = false;
$config['encrypt_name'] = true;
$this->upload->initialize($config);
if (!$this->upload->do_upload('document')) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
redirect($_SERVER["HTTP_REFERER"]);
}
$photo = $this->upload->file_name;
$data['attachment'] = $photo;
}
// $this->sma->print_arrays($data, $products);
}
if ($this->form_validation->run() == true && $this->products_model->updateAdjustment($id, $data, $products)) {
$this->session->set_userdata('remove_qals', 1);
$this->session->set_flashdata('message', lang("quantity_adjusted"));
admin_redirect('products/quantity_adjustments');
} else {
$inv_items = $this->products_model->getAdjustmentItems($id);
krsort($inv_items);
$c = rand(100000, 9999999);
foreach ($inv_items as $item) {
$product = $this->site->getProductByID($item->product_id);
$row = json_decode('{}');
$row->id = $item->product_id;
$row->code = $product->code;
$row->name = $product->name;
$row->qty = $item->quantity;
$row->type = $item->type;
$options = $this->products_model->getProductOptions($product->id);
$row->option = $item->option_id ? $item->option_id : 0;
$row->serial = $item->serial_no ? $item->serial_no : '';
$ri = $this->Settings->item_addition ? $product->id : $c;
$pr[$ri] = array('id' => str_replace(".", "", microtime(true)), 'item_id' => $row->id, 'label' => $row->name . " (" . $row->code . ")",
'row' => $row, 'options' => $options);
$c++;
}
$this->data['adjustment'] = $adjustment;
$this->data['adjustment_items'] = json_encode($pr);
$this->data['error'] = (validation_errors() ? validation_errors() : $this->session->flashdata('error'));
$this->data['warehouses'] = $this->site->getallWarehouses($this->data['store_id']);
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('edit_adjustment')));
$meta = array('page_title' => lang('edit_adjustment'), 'bc' => $bc);
$this->page_construct('products/edit_adjustment', $meta, $this->data);
}
}
function add_adjustment_by_csv()
{
$this->sma->checkPermissions('adjustments', true);
$this->form_validation->set_rules('warehouse', lang("warehouse"), 'required');
if ($this->form_validation->run() == true) {
if ($this->Owner || $this->Admin) {
$date = $this->sma->fld($this->input->post('date'));
} else {
$date = date('Y-m-d H:s:i');
}
$reference_no = $this->input->post('reference_no') ? $this->input->post('reference_no') : $this->site->getReference('qa');
$warehouse_id = $this->input->post('warehouse');
$note = $this->sma->clear_tags($this->input->post('note'));
$data = array(
'date' => $date,
'reference_no' => $reference_no,
'warehouse_id' => $warehouse_id,
'note' => $note,
'created_by' => $this->session->userdata('user_id'),
'store_id' => $this->data['store_id'],
'count_id' => NULL,
);
if ($_FILES['csv_file']['size'] > 0) {
$this->load->library('upload');
$config['upload_path'] = $this->digital_upload_path;
$config['allowed_types'] = 'csv';
$config['max_size'] = $this->allowed_file_size;
$config['overwrite'] = false;
$config['encrypt_name'] = true;
$this->upload->initialize($config);
if (!$this->upload->do_upload('csv_file')) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
redirect($_SERVER["HTTP_REFERER"]);
}
$csv = $this->upload->file_name;
$data['attachment'] = $csv;
$arrResult = array();
$handle = fopen($this->digital_upload_path . $csv, "r");
if ($handle) {
while (($row = fgetcsv($handle, 5000, ",")) !== FALSE) {
$arrResult[] = $row;
}
fclose($handle);
}
$titles = array_shift($arrResult);
$keys = array('code', 'quantity', 'variant');
$final = array();
foreach ($arrResult as $key => $value) {
$final[] = array_combine($keys, $value);
}
// $this->sma->print_arrays($final);
$rw = 2;
foreach ($final as $pr) {
if ($product = $this->products_model->getProductByCode(trim($pr['code']))) {
$csv_variant = trim($pr['variant']);
$variant = !empty($csv_variant) ? $this->products_model->getProductVariantID($product->id, $csv_variant) : FALSE;
$csv_quantity = trim($pr['quantity']);
$type = $csv_quantity > 0 ? 'addition' : 'subtraction';
$quantity = $csv_quantity > 0 ? $csv_quantity : (0-$csv_quantity);
if (!$this->Settings->overselling && $type == 'subtraction') {
if ($variant) {
if($op_wh_qty = $this->products_model->getProductWarehouseOptionQty($variant, $warehouse_id)) {
if ($op_wh_qty->quantity < $quantity) {
$this->session->set_flashdata('error', lang('warehouse_option_qty_is_less_than_damage'). ' - ' . lang('line_no') . ' ' . $rw);
redirect($_SERVER["HTTP_REFERER"]);
}
} else {
$this->session->set_flashdata('error', lang('warehouse_option_qty_is_less_than_damage'). ' - ' . lang('line_no') . ' ' . $rw);
redirect($_SERVER["HTTP_REFERER"]);
}
}
if($wh_qty = $this->products_model->getProductQuantity($product->id, $warehouse_id)) {
if ($wh_qty['quantity'] < $quantity) {
$this->session->set_flashdata('error', lang('warehouse_qty_is_less_than_damage'). ' - ' . lang('line_no') . ' ' . $rw);
redirect($_SERVER["HTTP_REFERER"]);
}
} else {
$this->session->set_flashdata('error', lang('warehouse_qty_is_less_than_damage'). ' - ' . lang('line_no') . ' ' . $rw);
redirect($_SERVER["HTTP_REFERER"]);
}
}
$products[] = array(
'product_id' => $product->id,
'type' => $type,
'quantity' => $quantity,
'warehouse_id' => $warehouse_id,
'option_id' => $variant,
);
} else {
$this->session->set_flashdata('error', lang('check_product_code') . ' (' . $pr['code'] . '). ' . lang('product_code_x_exist') . ' ' . lang('line_no') . ' ' . $rw);
redirect($_SERVER["HTTP_REFERER"]);
}
$rw++;
}
} else {
$this->form_validation->set_rules('csv_file', lang("upload_file"), 'required');
}
// $this->sma->print_arrays($data, $products);
}
if ($this->form_validation->run() == true && $this->products_model->addAdjustment($data, $products)) {
$this->session->set_flashdata('message', lang("quantity_adjusted"));
admin_redirect('products/quantity_adjustments');
} else {
$this->data['error'] = (validation_errors() ? validation_errors() : $this->session->flashdata('error'));
$this->data['warehouses'] = $this->site->getallWarehouses($this->data['store_id']);
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('add_adjustment')));
$meta = array('page_title' => lang('add_adjustment_by_csv'), 'bc' => $bc);
$this->page_construct('products/add_adjustment_by_csv', $meta, $this->data);
}
}
function delete_adjustment($id = NULL)
{
$this->sma->checkPermissions('delete', TRUE);
//$this->sma->send_json(array('error' =>1 , 'msg' => lang("Can not delete adjustment that has been submitted")));
if ($this->products_model->deleteAdjustment($id)) {
$this->sma->send_json(array('error' => 0, 'msg' => lang("adjustment_deleted")));
}
}
/* --------------------------------------------------------------------------------------------- */
function modal_view($id = NULL)
{
$this->sma->checkPermissions('index', TRUE);
$pr_details = $this->site->getProductByID($id);
if (!$id || !$pr_details) {
$this->session->set_flashdata('error', lang('prduct_not_found'));
$this->sma->md();
}
$this->data['barcode'] = "<img src='" . admin_url('products/gen_barcode/' . $pr_details->code . '/' . $pr_details->barcode_symbology . '/40/0') . "' alt='" . $pr_details->code . "' class='pull-left' />";
if ($pr_details->type == 'combo') {
$this->data['combo_items'] = $this->products_model->getProductComboItems($id);
}
$this->data['product'] = $pr_details;
$this->data['unit'] = $this->site->getUnitByID($pr_details->unit);
$this->data['brand'] = $this->site->getBrandByID($pr_details->brand);
$this->data['images'] = $this->products_model->getProductPhotos($id);
$this->data['category'] = $this->site->getCategoryByID($pr_details->category_id);
$this->data['subcategory'] = $pr_details->subcategory_id ? $this->site->getCategoryByID($pr_details->subcategory_id) : NULL;
$this->data['tax_rate'] = $pr_details->tax_rate ? $this->site->getTaxRateByID($pr_details->tax_rate) : NULL;
$this->data['warehouses'] = $this->products_model->getAllWarehousesWithPQ($id);
$this->data['options'] = $this->products_model->getProductOptionsWithWH($id);
$this->data['variants'] = $this->products_model->getProductOptions($id);
$this->load->view($this->theme.'products/modal_view', $this->data);
}
function view($id = NULL)
{
$this->sma->checkPermissions('index');
$pr_details = $this->products_model->getProductByID($id);
if (!$id || !$pr_details) {
$this->session->set_flashdata('error', lang('prduct_not_found'));
redirect($_SERVER["HTTP_REFERER"]);
}
$this->data['barcode'] = "<img src='" . admin_url('products/gen_barcode/' . $pr_details->code . '/' . $pr_details->barcode_symbology . '/40/0') . "' alt='" . $pr_details->code . "' class='pull-left' />";
if ($pr_details->type == 'combo') {
$this->data['combo_items'] = $this->products_model->getProductComboItems($id);
}
$this->data['product'] = $pr_details;
$this->data['unit'] = $this->site->getUnitByID($pr_details->unit);
$this->data['brand'] = $this->site->getBrandByID($pr_details->brand);
$this->data['location'] = $this->site->getLocationByID($pr_details->location);
$this->data['images'] = $this->products_model->getProductPhotos($id);
$this->data['category'] = $this->site->getCategoryByID($pr_details->category_id);
$this->data['subcategory'] = $pr_details->subcategory_id ? $this->site->getCategoryByID($pr_details->subcategory_id) : NULL;
$this->data['tax_rate'] = $pr_details->tax_rate ? $this->site->getTaxRateByID($pr_details->tax_rate) : NULL;
$this->data['popup_attributes'] = $this->popup_attributes;
$this->data['warehouses'] = $this->products_model->getAllWarehousesWithPQ($id);
$this->data['options'] = $this->products_model->getProductOptionsWithWH($id);
$this->data['variants'] = $this->products_model->getProductOptions($id);
$this->data['sold'] = $this->products_model->getSoldQty($id);
$this->data['purchased'] = $this->products_model->getPurchasedQty($id);
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => $pr_details->name));
$meta = array('page_title' => $pr_details->name, 'bc' => $bc);
$this->page_construct('products/view', $meta, $this->data);
}
function pdf($id = NULL, $view = NULL)
{
$this->sma->checkPermissions('index');
$pr_details = $this->products_model->getProductByID($id);
if (!$id || !$pr_details) {
$this->session->set_flashdata('error', lang('prduct_not_found'));
redirect($_SERVER["HTTP_REFERER"]);
}
$this->data['barcode'] = "<img src='" . admin_url('products/gen_barcode/' . $pr_details->code . '/' . $pr_details->barcode_symbology . '/40/0') . "' alt='" . $pr_details->code . "' class='pull-left' />";
if ($pr_details->type == 'combo') {
$this->data['combo_items'] = $this->products_model->getProductComboItems($id);
}
$this->data['product'] = $pr_details;
$this->data['unit'] = $this->site->getUnitByID($pr_details->unit);
$this->data['brand'] = $this->site->getBrandByID($pr_details->brand);
$this->data['images'] = $this->products_model->getProductPhotos($id);
$this->data['category'] = $this->site->getCategoryByID($pr_details->category_id);
$this->data['subcategory'] = $pr_details->subcategory_id ? $this->site->getCategoryByID($pr_details->subcategory_id) : NULL;
$this->data['tax_rate'] = $pr_details->tax_rate ? $this->site->getTaxRateByID($pr_details->tax_rate) : NULL;
$this->data['popup_attributes'] = $this->popup_attributes;
$this->data['warehouses'] = $this->products_model->getAllWarehousesWithPQ($id);
$this->data['options'] = $this->products_model->getProductOptionsWithWH($id);
$this->data['variants'] = $this->products_model->getProductOptions($id);
$name = $pr_details->code . '_' . str_replace('/', '_', $pr_details->name) . ".pdf";
if ($view) {
$this->load->view($this->theme . 'products/pdf', $this->data);
} else {
$html = $this->load->view($this->theme . 'products/pdf', $this->data, TRUE);
if (! $this->Settings->barcode_img) {
$html = preg_replace("'\<\?xml(.*)\?\>'", '', $html);
}
$this->sma->generate_pdf($html, $name);
}
}
function getSubCategories($category_id = NULL)
{
if ($rows = $this->products_model->getSubCategories($category_id)) {
$data = json_encode($rows);
} else {
$data = false;
}
echo $data;
}
function getFeatures($model_category_id = NULL)
{
if ($rows = $this->products_model->getFeatures($model_category_id)) {
$data = json_encode($rows);
} else {
$data = false;
}
echo $data;
}
function getModelSubcategories($parent_id = NULL)
{
if ($rows = $this->products_model->getModelSubcategories($parent_id)) {
$data = json_encode($rows);
} else {
$data = false;
}
echo $data;
}
function getWarehousesByStore($store_id = Null)
{
if ($rows = $this->products_model->getWarehousesByStore($store_id)) {
$data = json_encode($rows);
} else {
$data = false;
}
echo $data;
}
function product_actions($wh = NULL)
{
if (!$this->Owner && !$this->GP['bulk_actions']) {
$this->session->set_flashdata('warning', lang('access_denied'));
redirect($_SERVER["HTTP_REFERER"]);
}
$this->form_validation->set_rules('form_action', lang("form_action"), 'required');
if ($this->form_validation->run() == true) {
if (!empty($_POST['val'])) {
if ($this->input->post('form_action') == 'sync_quantity') {
foreach ($_POST['val'] as $id) {
$this->site->syncQuantity(NULL, NULL, NULL, $id);
}
$this->session->set_flashdata('message', $this->lang->line("products_quantity_sync"));
redirect($_SERVER["HTTP_REFERER"]);
} elseif ($this->input->post('form_action') == 'delete') {
$this->sma->checkPermissions('delete');
foreach ($_POST['val'] as $id) {
if($this->db->where('product_id',$id)->get('sale_items')->row())
{
continue;
}
if($this->db->where('product_id',$id)->get('adjustment_items')->row())
{
continue;
}
$this->products_model->deleteProduct($id);
}
$this->session->set_flashdata('message', $this->lang->line("products_deleted"));
redirect($_SERVER["HTTP_REFERER"]);
} elseif ($this->input->post('form_action') == 'labels') {
foreach ($_POST['val'] as $id) {
$row = $this->products_model->getProductByID($id);
$selected_variants = false;
if ($variants = $this->products_model->getProductOptions($row->id)) {
foreach ($variants as $variant) {
$selected_variants[$variant->id] = $variant->quantity > 0 ? 1 : 0;
}
}
$pr[$row->id] = array('id' => $row->id, 'label' => $row->name . " (" . $row->code . ")", 'code' => $row->code, 'name' => $row->name, 'price' => $row->price, 'qty' => $row->quantity, 'variants' => $variants, 'selected_variants' => $selected_variants);
}
$this->data['items'] = isset($pr) ? json_encode($pr) : false;
$this->data['error'] = (validation_errors() ? validation_errors() : $this->session->flashdata('error'));
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('print_barcodes')));
$meta = array('page_title' => lang('print_barcodes'), 'bc' => $bc);
$this->page_construct('products/print_barcodes', $meta, $this->data);
} elseif ($this->input->post('form_action') == 'export_excel') {
$this->load->library('excel');
$this->excel->setActiveSheetIndex(0);
$this->excel->getActiveSheet()->setTitle('Products');
$this->excel->getActiveSheet()->SetCellValue('A1', lang('name'));
$this->excel->getActiveSheet()->SetCellValue('B1', lang('code'));
$this->excel->getActiveSheet()->SetCellValue('C1', lang('barcode_symbology'));
$this->excel->getActiveSheet()->SetCellValue('D1', lang('brand'));
$this->excel->getActiveSheet()->SetCellValue('E1', lang('category_code'));
$this->excel->getActiveSheet()->SetCellValue('F1', lang('unit_code'));
$this->excel->getActiveSheet()->SetCellValue('G1', lang('sale').' '.lang('unit_code'));
$this->excel->getActiveSheet()->SetCellValue('H1', lang('purchase').' '.lang('unit_code'));
$this->excel->getActiveSheet()->SetCellValue('I1', lang('cost'));
$this->excel->getActiveSheet()->SetCellValue('J1', lang('price'));
$this->excel->getActiveSheet()->SetCellValue('K1', lang('alert_quantity'));
$this->excel->getActiveSheet()->SetCellValue('L1', lang('tax_rate'));
$this->excel->getActiveSheet()->SetCellValue('M1', lang('tax_method'));
$this->excel->getActiveSheet()->SetCellValue('N1', lang('image'));
$this->excel->getActiveSheet()->SetCellValue('O1', lang('subcategory_code'));
$this->excel->getActiveSheet()->SetCellValue('P1', lang('product_variants'));
$this->excel->getActiveSheet()->SetCellValue('Q1', lang('pcf1'));
$this->excel->getActiveSheet()->SetCellValue('R1', lang('pcf2'));
$this->excel->getActiveSheet()->SetCellValue('S1', lang('pcf3'));
$this->excel->getActiveSheet()->SetCellValue('T1', lang('pcf4'));
$this->excel->getActiveSheet()->SetCellValue('U1', lang('pcf5'));
$this->excel->getActiveSheet()->SetCellValue('V1', lang('pcf6'));
$this->excel->getActiveSheet()->SetCellValue('W1', lang('quantity'));
$this->excel->getActiveSheet()->SetCellValue('X1', lang('location'));
$row = 2;
foreach ($_POST['val'] as $id) {
$product = $this->products_model->getProductDetail($id);
$brand = $this->site->getBrandByID($product->brand);
$base_unit = $sale_unit = $purchase_unit = '';
if($units = $this->site->getUnitsByBUID($product->unit)) {
foreach($units as $u) {
if ($u->id == $product->unit) {
$base_unit = $u->code;
}
if ($u->id == $product->sale_unit) {
$sale_unit = $u->code;
}
if ($u->id == $product->purchase_unit) {
$purchase_unit = $u->code;
}
}
}
$variants = $this->products_model->getProductOptions($id);
$product_variants = '';
if ($variants) {
foreach ($variants as $variant) {
$product_variants .= trim($variant->name) . '|';
}
}
if ($wh) {
$quantity =$this->db->select_sum('quantity')->where('warehouse_id',$wh)->where('product_id',$product->id)->get('warehouses_products')->row();
}else{
$quantity =$this->db->select_sum('quantity')->where('product_id',$product->id)->get('warehouses_products')->row();
}
$quantity = $quantity->quantity;
$this->excel->getActiveSheet()->SetCellValue('A' . $row, $product->name);
$this->excel->getActiveSheet()->SetCellValue('B' . $row, $product->code);
$this->excel->getActiveSheet()->SetCellValue('C' . $row, $product->barcode_symbology);
$this->excel->getActiveSheet()->SetCellValue('D' . $row, ($brand ? $brand->name : ''));
$this->excel->getActiveSheet()->SetCellValue('E' . $row, $product->category_code);
$this->excel->getActiveSheet()->SetCellValue('F' . $row, $base_unit);
$this->excel->getActiveSheet()->SetCellValue('G' . $row, $sale_unit);
$this->excel->getActiveSheet()->SetCellValue('H' . $row, $purchase_unit);
if ($this->Owner || $this->Admin || $this->session->userdata('show_cost')) {
$this->excel->getActiveSheet()->SetCellValue('I' . $row, $product->cost);
}
if ($this->Owner || $this->Admin || $this->session->userdata('show_price')) {
$this->excel->getActiveSheet()->SetCellValue('J' . $row, $product->price);
}
$this->excel->getActiveSheet()->SetCellValue('K' . $row, $product->alert_quantity);
$this->excel->getActiveSheet()->SetCellValue('L' . $row, $product->tax_rate_name);
$this->excel->getActiveSheet()->SetCellValue('M' . $row, $product->tax_method ? lang('exclusive') : lang('inclusive'));
$this->excel->getActiveSheet()->SetCellValue('N' . $row, $product->image);
$this->excel->getActiveSheet()->SetCellValue('O' . $row, $product->subcategory_code);
$this->excel->getActiveSheet()->SetCellValue('P' . $row, $product_variants);
$this->excel->getActiveSheet()->SetCellValue('Q' . $row, $product->cf1);
$this->excel->getActiveSheet()->SetCellValue('R' . $row, $product->cf2);
$this->excel->getActiveSheet()->SetCellValue('S' . $row, $product->cf3);
$this->excel->getActiveSheet()->SetCellValue('T' . $row, $product->cf4);
$this->excel->getActiveSheet()->SetCellValue('U' . $row, $product->cf5);
$this->excel->getActiveSheet()->SetCellValue('V' . $row, $product->cf6);
$this->excel->getActiveSheet()->SetCellValue('W' . $row, $quantity);
$this->excel->getActiveSheet()->SetCellValue('X' . $row, ($product->location ? $product->location : ''));
$row++;
}
$this->excel->getActiveSheet()->getColumnDimension('A')->setWidth(30);
$this->excel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
$this->excel->getActiveSheet()->getColumnDimension('D')->setWidth(15);
$this->excel->getActiveSheet()->getColumnDimension('E')->setWidth(20);
$this->excel->getActiveSheet()->getColumnDimension('N')->setWidth(40);
$this->excel->getActiveSheet()->getColumnDimension('O')->setWidth(30);
$this->excel->getActiveSheet()->getColumnDimension('P')->setWidth(30);
$this->excel->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$filename = 'products_' . date('Y_m_d_H_i_s');
$this->load->helper('excel');
return create_excel($this->excel, $filename);
}
} else {
$this->session->set_flashdata('error', $this->lang->line("no_product_selected"));
redirect($_SERVER["HTTP_REFERER"]);
}
} else {
$this->session->set_flashdata('error', validation_errors());
redirect(isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : 'admin/products');
}
}
public function delete_image($id = NULL)
{
$this->sma->checkPermissions('edit', true);
if ($id && $this->input->is_ajax_request()) {
header('Content-Type: application/json');
$this->db->delete('product_photos', array('id' => $id));
$this->sma->send_json(array('error' => 0, 'msg' => lang("image_deleted")));
}
$this->sma->send_json(array('error' => 1, 'msg' => lang("ajax_error")));
}
public function getSubUnits($unit_id)
{
// $unit = $this->site->getUnitByID($unit_id);
// if ($units = $this->site->getUnitsByBUID($unit_id)) {
// array_push($units, $unit);
// } else {
// $units = array($unit);
// }
$units = $this->site->getUnitsByBUID($unit_id);
// var_dump($units);die;
$this->sma->send_json($units);
}
public function qa_suggestions()
{
$term = $this->input->get('term', true);
if (strlen($term) < 1 || !$term) {
die("<script type='text/javascript'>setTimeout(function(){ window.top.location.href = '" . admin_url('welcome') . "'; }, 10);</script>");
}
$analyzed = $this->sma->analyze_term($term);
$sr = $analyzed['term'];
$option_id = $analyzed['option_id'];
$rows = $this->products_model->getQASuggestions($sr);
if ($rows) {
foreach ($rows as $row) {
$row->qty = 1;
$options = $this->products_model->getProductOptions($row->id);
$row->option = $option_id;
$row->serial = '';
$pr[] = array('id' => str_replace(".", "", microtime(true)), 'item_id' => $row->id, 'label' => $row->name . " (" . $row->code . ")",
'row' => $row, 'options' => $options);
}
$this->sma->send_json($pr);
} else {
$this->sma->send_json(array(array('id' => 0, 'label' => lang('no_match_found'), 'value' => $term)));
}
}
function adjustment_actions()
{
if (!$this->Owner && !$this->GP['bulk_actions']) {
$this->session->set_flashdata('warning', lang('access_denied'));
redirect($_SERVER["HTTP_REFERER"]);
}
$this->form_validation->set_rules('form_action', lang("form_action"), 'required');
if ($this->form_validation->run() == true) {
if (!empty($_POST['val'])) {
if ($this->input->post('form_action') == 'delete') {
$this->sma->checkPermissions('delete');
foreach ($_POST['val'] as $id) {
$this->products_model->deleteAdjustment($id);
}
$this->session->set_flashdata('error', $this->lang->line("Can not delete adjustment that has been submitted!"));
redirect($_SERVER["HTTP_REFERER"]);
} elseif ($this->input->post('form_action') == 'export_excel') {
$this->load->library('excel');
$this->excel->setActiveSheetIndex(0);
$this->excel->getActiveSheet()->setTitle('quantity_adjustments');
$this->excel->getActiveSheet()->SetCellValue('A1', lang('date'));
$this->excel->getActiveSheet()->SetCellValue('B1', lang('reference_no'));
$this->excel->getActiveSheet()->SetCellValue('C1', lang('warehouse'));
$this->excel->getActiveSheet()->SetCellValue('D1', lang('created_by'));
$this->excel->getActiveSheet()->SetCellValue('E1', lang('note'));
$this->excel->getActiveSheet()->SetCellValue('F1', lang('items'));
$row = 2;
foreach ($_POST['val'] as $id) {
$adjustment = $this->products_model->getAdjustmentByID($id);
$created_by = $this->site->getUser($adjustment->created_by);
$warehouse = $this->site->getWarehouseByID($adjustment->warehouse_id);
$items = $this->products_model->getAdjustmentItems($id);
$products = '';
if ($items) {
foreach ($items as $item) {
$products .= $item->product_name.'('.$this->sma->formatQuantity($item->type == 'subtraction' ? -$item->quantity : $item->quantity).')'."
";
}
}
$this->excel->getActiveSheet()->SetCellValue('A' . $row, $this->sma->hrld($adjustment->date));
$this->excel->getActiveSheet()->SetCellValue('B' . $row, $adjustment->reference_no);
$this->excel->getActiveSheet()->SetCellValue('C' . $row, $warehouse->name);
$this->excel->getActiveSheet()->SetCellValue('D' . $row, $created_by->first_name.' ' .$created_by->last_name);
$this->excel->getActiveSheet()->SetCellValue('E' . $row, $this->sma->decode_html($adjustment->note));
$this->excel->getActiveSheet()->SetCellValue('F' . $row, $products);
$row++;
}
$this->excel->getActiveSheet()->getColumnDimension('A')->setWidth(20);
$this->excel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
$this->excel->getActiveSheet()->getColumnDimension('C')->setWidth(15);
$this->excel->getActiveSheet()->getColumnDimension('D')->setWidth(20);
$this->excel->getActiveSheet()->getColumnDimension('E')->setWidth(40);
$this->excel->getActiveSheet()->getColumnDimension('F')->setWidth(30);
$this->excel->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$filename = 'quantity_adjustments_' . date('Y_m_d_H_i_s');
$this->load->helper('excel');
return create_excel($this->excel, $filename);
}
} else {
$this->session->set_flashdata('error', $this->lang->line("no_record_selected"));
redirect($_SERVER["HTTP_REFERER"]);
}
} else {
$this->session->set_flashdata('error', validation_errors());
redirect($_SERVER["HTTP_REFERER"]);
}
}
function stock_counts($warehouse_id = NULL)
{
$this->sma->checkPermissions('stock_count');
$this->data['error'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('error');
if ($this->Owner || $this->Admin || !$this->session->userdata('warehouse_id')) {
$this->data['warehouses'] = $this->site->getallWarehouses($this->data['store_id']);
$this->data['warehouse_id'] = $warehouse_id;
$this->data['warehouse'] = $warehouse_id ? $this->site->getWarehouseByID($warehouse_id) : NULL;
} else {
$this->data['warehouses'] = NULL;
$this->data['warehouse_id'] = $this->session->userdata('warehouse_id');
$this->data['warehouse'] = $this->session->userdata('warehouse_id') ? $this->site->getWarehouseByID($this->session->userdata('warehouse_id')) : NULL;
}
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('stock_counts')));
$meta = array('page_title' => lang('stock_counts'), 'bc' => $bc);
$this->page_construct('products/stock_counts', $meta, $this->data);
}
function getCounts($warehouse_id = NULL)
{
$this->sma->checkPermissions('stock_count', TRUE);
if ((! $this->Owner || ! $this->Admin) && ! $warehouse_id) {
$user = $this->site->getUser();
$warehouse_id = $user->warehouse_id;
}
$detail_link = anchor('admin/products/view_count/$1', '<label class="label label-primary pointer">'.lang('details').'</label>', 'class="tip" title="'.lang('details').'" data-toggle="modal" data-target="#myModal"');
$this->load->library('datatables');
$this->datatables
->select("{$this->db->dbprefix('stock_counts')}.id as id, date, reference_no, {$this->db->dbprefix('warehouses')}.name as wh_name, type, brand_names, category_names, initial_file, final_file")
->from('stock_counts')
->where('stock_counts.store_id',$this->data['store_id'])
->join('warehouses', 'warehouses.id=stock_counts.warehouse_id', 'left');
if ($warehouse_id) {
$this->datatables->where('warehouse_id', $warehouse_id);
}
$this->datatables->add_column('Actions', '<div class="text-center">'.$detail_link.'</div>', "id");
echo $this->datatables->generate();
}
function view_count($id)
{
$this->sma->checkPermissions('stock_count', TRUE);
$stock_count = $this->products_model->getStouckCountByID($id);
if ( ! $stock_count->finalized) {
$this->sma->md('admin/products/finalize_count/'.$id);
}
$this->data['stock_count'] = $stock_count;
$this->data['stock_count_items'] = $this->products_model->getStockCountItems($id);
$this->data['warehouse'] = $this->site->getWarehouseByID($stock_count->warehouse_id);
$this->data['adjustment'] = $this->products_model->getAdjustmentByCountID($id);
$this->load->view($this->theme.'products/view_count', $this->data);
}
function count_stock($page = NULL)
{
$this->sma->checkPermissions('stock_count');
$this->form_validation->set_rules('warehouse', lang("warehouse"), 'required');
$this->form_validation->set_rules('type', lang("type"), 'required');
if ($this->form_validation->run() == true) {
$warehouse_id = $this->input->post('warehouse');
$type = $this->input->post('type');
$categories = $this->input->post('category') ? $this->input->post('category') : NULL;
$brands = $this->input->post('brand') ? $this->input->post('brand') : NULL;
$this->load->helper('string');
$name = random_string('md5').'.csv';
$products = $this->products_model->getStockCountProducts($warehouse_id, $type, $categories, $brands);
$pr = 0; $rw = 0;
foreach ($products as $product) {
if ($variants = $this->products_model->getStockCountProductVariants($warehouse_id, $product->id)) {
foreach ($variants as $variant) {
$items[] = array(
'product_code' => $product->code,
'product_name' => $product->name,
'variant' => $variant->name,
'expected' => $variant->quantity,
'counted' => ''
);
$rw++;
}
} else {
$items[] = array(
'product_code' => $product->code,
'product_name' => $product->name,
'variant' => '',
'expected' => $product->quantity,
'counted' => ''
);
$rw++;
}
$pr++;
}
if ( ! empty($items)) {
$csv_file = fopen('./files/'.$name, 'w');
fputcsv($csv_file, array(lang('product_code'), lang('product_name'), lang('variant'), lang('expected'), lang('counted')));
foreach ($items as $item) {
fputcsv($csv_file, $item);
}
// file_put_contents('./files/'.$name, $csv_file);
// fwrite($csv_file, $txt);
fclose($csv_file);
} else {
$this->session->set_flashdata('error', lang('no_product_found'));
redirect($_SERVER["HTTP_REFERER"]);
}
if ($this->Owner || $this->Admin) {
$date = $this->sma->fld($this->input->post('date'));
} else {
$date = date('Y-m-d H:s:i');
}
$category_ids = '';
$brand_ids = '';
$category_names = '';
$brand_names = '';
if ($categories) {
$r = 1; $s = sizeof($categories);
foreach ($categories as $category_id) {
$category = $this->site->getCategoryByID($category_id);
if ($r == $s) {
$category_names .= $category->name;
$category_ids .= $category->id;
} else {
$category_names .= $category->name.', ';
$category_ids .= $category->id.', ';
}
$r++;
}
}
if ($brands) {
$r = 1; $s = sizeof($brands);
foreach ($brands as $brand_id) {
$brand = $this->site->getBrandByID($brand_id);
if ($r == $s) {
$brand_names .= $brand->name;
$brand_ids .= $brand->id;
} else {
$brand_names .= $brand->name.', ';
$brand_ids .= $brand->id.', ';
}
$r++;
}
}
$data = array(
'date' => $date,
'warehouse_id' => $warehouse_id,
'reference_no' => $this->input->post('reference_no'),
'type' => $type,
'categories' => $category_ids,
'category_names' => $category_names,
'brands' => $brand_ids,
'brand_names' => $brand_names,
'initial_file' => $name,
'products' => $pr,
'rows' => $rw,
'created_by' => $this->session->userdata('user_id'),
'store_id' => $this->data['store_id']
);
}
if ($this->form_validation->run() == true && $this->products_model->addStockCount($data)) {
$this->session->set_flashdata('message', lang("stock_count_intiated"));
admin_redirect('products/stock_counts');
} else {
$this->data['error'] = (validation_errors() ? validation_errors() : $this->session->flashdata('error'));
$this->data['warehouses'] = $this->site->getallWarehouses($this->data['store_id']);
$this->data['categories'] = $this->site->getAllCategories($this->data['store_id']);
$this->data['brands'] = $this->site->getAllBrands();
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('count_stock')));
$meta = array('page_title' => lang('count_stock'), 'bc' => $bc);
$this->page_construct('products/count_stock', $meta, $this->data);
}
}
function finalize_count($id)
{
$this->sma->checkPermissions('stock_count');
$stock_count = $this->products_model->getStouckCountByID($id);
if ( ! $stock_count || $stock_count->finalized) {
$this->session->set_flashdata('error', lang("stock_count_finalized"));
admin_redirect('products/stock_counts');
}
$this->form_validation->set_rules('count_id', lang("count_stock"), 'required');
if ($this->form_validation->run() == true) {
if ($_FILES['csv_file']['size'] > 0) {
$note = $this->sma->clear_tags($this->input->post('note'));
$data = array(
'updated_by' => $this->session->userdata('user_id'),
'updated_at' => date('Y-m-d H:s:i'),
'note' => $note
);
$this->load->library('upload');
$config['upload_path'] = $this->digital_upload_path;
$config['allowed_types'] = 'csv';
$config['max_size'] = $this->allowed_file_size;
$config['overwrite'] = false;
$config['encrypt_name'] = true;
$this->upload->initialize($config);
if (!$this->upload->do_upload('csv_file')) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
redirect($_SERVER["HTTP_REFERER"]);
}
$csv = $this->upload->file_name;
$arrResult = array();
$handle = fopen($this->digital_upload_path . $csv, "r");
if ($handle) {
while (($row = fgetcsv($handle, 5000, ",")) !== FALSE) {
$arrResult[] = $row;
}
fclose($handle);
}
$titles = array_shift($arrResult);
$keys = array('product_code', 'product_name', 'product_variant', 'expected', 'counted');
$final = array();
foreach ($arrResult as $key => $value) {
$final[] = array_combine($keys, $value);
}
// $this->sma->print_arrays($final);
$rw = 2; $differences = 0; $matches = 0;
foreach ($final as $pr) {
if ($product = $this->products_model->getProductByCode(trim($pr['product_code']))) {
$pr['counted'] = !empty($pr['counted']) ? $pr['counted'] : 0;
if ($pr['expected'] == $pr['counted']) {
$matches++;
} else {
$pr['stock_count_id'] = $id;
$pr['product_id'] = $product->id;
$pr['cost'] = $product->cost;
$pr['product_variant_id'] = empty($pr['product_variant']) ? NULL : $this->products_model->getProductVariantID($pr['product_id'], $pr['product_variant']);
$products[] = $pr;
$differences++;
}
} else {
$this->session->set_flashdata('error', lang('check_product_code') . ' (' . $pr['product_code'] . '). ' . lang('product_code_x_exist') . ' ' . lang('line_no') . ' ' . $rw);
admin_redirect('products/finalize_count/'.$id);
}
$rw++;
}
$data['final_file'] = $csv;
$data['differences'] = $differences;
$data['matches'] = $matches;
$data['missing'] = $stock_count->rows-($rw-2);
$data['finalized'] = 1;
}
// $this->sma->print_arrays($data, $products);
}
if ($this->form_validation->run() == true && $this->products_model->finalizeStockCount($id, $data, $products)) {
$this->session->set_flashdata('message', lang("stock_count_finalized"));
admin_redirect('products/stock_counts');
} else {
$this->data['error'] = (validation_errors() ? validation_errors() : $this->session->flashdata('error'));
$this->data['stock_count'] = $stock_count;
$this->data['warehouse'] = $this->site->getWarehouseByID($stock_count->warehouse_id);
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => admin_url('products/stock_counts'), 'page' => lang('stock_counts')), array('link' => '#', 'page' => lang('finalize_count')));
$meta = array('page_title' => lang('finalize_count'), 'bc' => $bc);
$this->page_construct('products/finalize_count', $meta, $this->data);
}
}
}
?>
Did this file decode correctly?
Original Code
<?php defined('BASEPATH') OR exit('No direct script access allowed');
class Products extends MY_Controller
{
function __construct()
{
parent::__construct();
if (!$this->loggedIn) {
$this->session->set_userdata('requested_page', $this->uri->uri_string());
$this->sma->md('login');
}
$this->lang->admin_load('products', $this->Settings->user_language);
$this->load->library('form_validation');
$this->load->admin_model('products_model');
$this->digital_upload_path = 'files/';
$this->upload_path = 'assets/uploads/';
$this->thumbs_path = 'assets/uploads/thumbs/';
$this->image_types = 'gif|jpg|jpeg|png|tif';
$this->digital_file_types = 'zip|psd|ai|rar|pdf|doc|docx|xls|xlsx|ppt|pptx|gif|jpg|jpeg|png|tif|txt|csv';
$this->allowed_file_size = '1024';
$this->popup_attributes = array('width' => '900', 'height' => '600', 'window_name' => 'sma_popup', 'menubar' => 'yes', 'scrollbars' => 'yes', 'status' => 'no', 'resizable' => 'yes', 'screenx' => '0', 'screeny' => '0');
}
function getProductsByAjax()
{
if ($rows = $this->products_model->getProducts()) {
$data = json_encode($rows);
} else {
$data = false;
}
echo $data;
}
function getCategoriesByAjax()
{
if ($rows = $this->products_model->getCategories()) {
$data = json_encode($rows);
} else {
$data = false;
}
echo $data;
}
function index($warehouse_id = NULL)
{
$this->sma->checkPermissions();
$user = $this->site->getUser();
$store_id = $user->store_id;
$this->data['store_id'] = $store_id;
$store = $this->site->getStoreByID($store_id);
$this->data['store'] = $store->name;
if($store_id==0)
{
$this->data['error'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('error');
if ($this->Owner || $this->Admin || !$this->session->userdata('store_id')) {
$this->data['warehouses'] = $this->site->getAllWarehouses($this->data['store_id']);
$this->data['stores'] = $this->site->getAllStores();
$this->data['warehouse_id'] = $warehouse_id;
$this->data['store_id'] = $store_id;
$store = $this->site->getStoreByID($store_id);
$this->data['store'] = $store->name;
$this->data['warehouse'] = $warehouse_id ? $this->site->getWarehouseByID($warehouse_id) : NULL;
$this->data['store'] = $warehouse_id ? $this->site->getStoreByID($warehouse_id) : NULL;
} else {
$this->data['warehouses'] = NULL;
$this->data['warehouse_id'] = $this->session->userdata('warehouse_id');
$this->data['warehouse'] = $this->session->userdata('warehouse_id') ? $this->site->getWarehouseByID($this->session->userdata('warehouse_id')) : NULL;
}
$this->data['supplier'] = $this->input->get('supplier') ? $this->site->getCompanyByID($this->input->get('supplier')) : NULL;
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => '#', 'page' => lang('products')));
$meta = array('page_title' => lang('products'), 'bc' => $bc);
$this->page_construct('products/index', $meta, $this->data);
}else
{
if ($this->Owner || $this->Admin || !$this->session->userdata('warehouse_id')) {
$user = $this->site->getUser();
$this->data['warehouses'] = $this->site->getAllWarehousesforstore($user->store_id);
$this->data['warehouse_id'] = $warehouse_id;
$this->data['warehouse'] = $warehouse_id ? $this->site->getWarehouseByID($warehouse_id) : NULL;
} else {
$this->data['warehouses'] = NULL;
$this->data['warehouse_id'] = $this->session->userdata('warehouse_id');
$this->data['warehouse'] = $this->session->userdata('warehouse_id') ? $this->site->getWarehouseByID($this->session->userdata('warehouse_id')) : NULL;
}
$this->data['supplier'] = $this->input->get('supplier') ? $this->site->getCompanyByID($this->input->get('supplier')) : NULL;
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => '#', 'page' => lang('products')));
$meta = array('page_title' => lang('products'), 'bc' => $bc);
$this->page_construct('products/index', $meta, $this->data);
}
}
function getProducts($store_id1 = NULL)
{
$this->sma->checkPermissions('index', TRUE);
$supplier = $this->input->get('supplier') ? $this->input->get('supplier') : NULL;
$this->load->library('datatables');
$user = $this->site->getUser();
$store_id = $user->store_id;
$this->data['store_id'] = $store_id;
$user = $this->site->getUser();
$detail_link = anchor('admin/products/view/$1', '<i class="fa fa-file-text-o"></i> ' . lang('product_details'));
$delete_link = "<a href='#' class='tip po' title='<b>" . $this->lang->line("delete_product") . "</b>' data-content=\"<p>"
. lang('r_u_sure') . "</p><a class='btn btn-danger po-delete1' id='a__$1' href='" . admin_url('products/delete/$1') . "'>"
. lang('i_m_sure') . "</a> <button class='btn po-close'>" . lang('no') . "</button>\" rel='popover'><i class=\"fa fa-trash-o\"></i> "
. lang('delete_product') . "</a>";
$single_barcode = anchor('admin/products/print_barcodes/$1', '<i class="fa fa-print"></i> ' . lang('print_barcode_label'));
// $single_label = anchor_popup('products/single_label/$1/' . ($warehouse_id ? $warehouse_id : ''), '<i class="fa fa-print"></i> ' . lang('print_label'), $this->popup_attributes);
$action = '<div class="text-center"><div class="btn-group text-left">'
. '<button type="button" class="btn btn-default btn-xs btn-primary dropdown-toggle" data-toggle="dropdown">'
. lang('actions') . ' <span class="caret"></span></button>
<ul class="dropdown-menu pull-right" role="menu">
<li>' . $detail_link . '</li>
<li><a href="' . admin_url('products/add/$1') . '"><i class="fa fa-plus-square"></i> ' . lang('duplicate_product') . '</a></li>
<li><a href="' . admin_url('products/edit/$1') . '"><i class="fa fa-edit"></i> ' . lang('edit_product') . '</a></li>';
$action .= '<li><a href="' . admin_url() . 'assets/uploads/$2" data-type="image" data-toggle="lightbox"><i class="fa fa-file-photo-o"></i> '
. lang('view_image') . '</a></li>
<li>' . $single_barcode . '</li>
<li class="divider"></li>
<li>' . $delete_link . '</li>
</ul>
</div></div>';
$this->db->order_by('products.sequence','asc');
if($store_id==0)
{
if ($store_id1) {
$this->datatables
->select($this->db->dbprefix('products') . ".id as productid, {$this->db->dbprefix('products')}.image as image, {$this->db->dbprefix('products')}.code as code, {$this->db->dbprefix('products')}.name as name, {$this->db->dbprefix('brands')}.name as brand, {$this->db->dbprefix('categories')}.name as cname, cost as cost, price as price, COALESCE(quantity, 0) as quantity, {$this->db->dbprefix('units')}.name as unit, '' as rack, alert_quantity,ecom_show", FALSE)
->from('products')
->join('categories', 'products.category_id=categories.id', 'left')
->join('units', 'products.unit=units.id', 'left')
->join('brands', 'products.brand=brands.id', 'left')
->join('location', 'products.location=location.id', 'left')
->group_by("products.id")
->where("products.store_id",$store_id1);
}
else {
$this->datatables
->select($this->db->dbprefix('products') . ".id as productid, {$this->db->dbprefix('products')}.image as image, {$this->db->dbprefix('products')}.code as code, {$this->db->dbprefix('products')}.name as name, {$this->db->dbprefix('brands')}.name as brand,{$this->db->dbprefix('categories')}.name as cname, cost as cost, price as price, (SELECT SUM(quantity) AS total
FROM sma_warehouses_products WHERE product_id = ".$this->db->dbprefix('products') . ".id), {$this->db->dbprefix('units')}.name as unit, '' as rack, alert_quantity,ecom_show", FALSE)
->from('products')
->join('categories', 'products.category_id=categories.id', 'left')
->join('units', 'products.unit=units.id', 'left')
->join('brands', 'products.brand=brands.id', 'left')
->join('location', 'products.location=location.id', 'left')
->group_by("products.id");
}
if (!$this->Owner && !$this->Admin) {
if (!$this->session->userdata('show_cost')) {
$this->datatables->unset_column("cost");
}
if (!$this->session->userdata('show_price')) {
$this->datatables->unset_column("price");
}
}
if ($supplier) {
$this->datatables->where('supplier1', $supplier)
->or_where('supplier2', $supplier)
->or_where('supplier3', $supplier)
->or_where('supplier4', $supplier)
->or_where('supplier5', $supplier);
}
}
else{
if ($store_id1)
{
$this->datatables
->select($this->db->dbprefix('products') . ".id as productid, {$this->db->dbprefix('products')}.image as image, {$this->db->dbprefix('products')}.code as code, {$this->db->dbprefix('products')}.name as name, {$this->db->dbprefix('brands')}.name as brand, {$this->db->dbprefix('categories')}.name as cname, cost as cost, price as price, COALESCE(wp.quantity, 0) as quantity, {$this->db->dbprefix('units')}.name as unit, '' as rack, alert_quantity,ecom_show", FALSE)
->from('products');
if ($this->Settings->display_all_products) {
$this->datatables->join("( SELECT product_id, quantity, rack from {$this->db->dbprefix('warehouses_products')} WHERE warehouse_id = {$store_id1}) wp", 'products.id=wp.product_id', 'left');
} else {
$this->datatables->join('warehouses_products wp', 'products.id=wp.product_id', 'left')
->where('wp.warehouse_id', $store_id1);
// ->where('wp.quantity !=', 0);
}
$this->datatables->join('categories', 'products.category_id=categories.id', 'left')
->join('units', 'products.unit=units.id', 'left')
->join('brands', 'products.brand=brands.id', 'left')
->join('location', 'products.location=location.id', 'left');
// ->group_by("products.id");
}
else {
$q = $this->datatables
->select($this->db->dbprefix('products') . ".id as productid, {$this->db->dbprefix('products')}.image as image, {$this->db->dbprefix('products')}.code as code, {$this->db->dbprefix('products')}.name as name, {$this->db->dbprefix('brands')}.name as brand, {$this->db->dbprefix('categories')}.name as cname, cost as cost, price as price
, (SELECT SUM(quantity) AS total
FROM sma_warehouses_products WHERE product_id = ".$this->db->dbprefix('products') . ".id)
, {$this->db->dbprefix('units')}.name as unit, '' as rack, alert_quantity,ecom_show", FALSE)
->from('products')
->join('categories', 'products.category_id=categories.id', 'left')
->join('units', 'products.unit=units.id', 'left')
->join('warehouses_products wp', 'products.id=wp.product_id', 'left')
->join('brands', 'products.brand=brands.id', 'left')
->join('location', 'products.location=location.id', 'left')
->where("products.store_id",$user->store_id)
->group_by("products.id");
}
if (!$this->Owner && !$this->Admin) {
if (!$this->session->userdata('show_cost')) {
$this->datatables->unset_column("cost");
}
if (!$this->session->userdata('show_price')) {
$this->datatables->unset_column("price");
}
}
if ($supplier) {
$this->datatables->where('supplier1', $supplier)
->or_where('supplier2', $supplier)
->or_where('supplier3', $supplier)
->or_where('supplier4', $supplier)
->or_where('supplier5', $supplier);
}
}
$this->datatables->add_column("Actions", $action, "productid, image, code, name");
echo $this->datatables->generate();
}
function set_rack($product_id = NULL, $warehouse_id = NULL)
{
$this->sma->checkPermissions('edit', true);
$this->form_validation->set_rules('rack', lang("rack_location"), 'trim|required');
if ($this->form_validation->run() == true) {
$data = array('rack' => $this->input->post('rack'),
'product_id' => $product_id,
'warehouse_id' => $warehouse_id,
);
} elseif ($this->input->post('set_rack')) {
$this->session->set_flashdata('error', validation_errors());
admin_redirect("products");
}
if ($this->form_validation->run() == true && $this->products_model->setRack($data)) {
$this->session->set_flashdata('message', lang("rack_set"));
admin_redirect("products/" . $warehouse_id);
} else {
$this->data['error'] = validation_errors() ? validation_errors() : $this->session->flashdata('error');
$this->data['warehouse_id'] = $warehouse_id;
$this->data['product'] = $this->site->getProductByID($product_id);
$wh_pr = $this->products_model->getProductQuantity($product_id, $warehouse_id);
$this->data['rack'] = $wh_pr['rack'];
$this->data['modal_js'] = $this->site->modal_js();
$this->load->view($this->theme . 'products/set_rack', $this->data);
}
}
function product_barcode($product_code = NULL, $bcs = 'code128', $height = 60)
{
// if ($this->Settings->barcode_img) {
return "<img style='width:100%' src='" . admin_url('products/gen_barcode/' . $product_code . '/' . $bcs . '/' . $height) . "' alt='{$product_code}' class='bcimg' />";
// } else {
// return $this->gen_barcode($product_code, $bcs, $height);
// }
}
function barcode($product_code = NULL, $bcs = 'code128', $height = 60)
{
return admin_url('products/gen_barcode/' . $product_code . '/' . $bcs . '/' . $height);
}
function gen_barcode($product_code = NULL, $bcs = 'code128', $height = 60, $text = 1)
{
$drawText = ($text != 1) ? FALSE : TRUE;
$this->load->library('zend');
$this->zend->load('Zend/Barcode');
$barcodeOptions = array('text' => $product_code, 'barHeight' => $height, 'drawText' => $drawText, 'factor' => 1.0);
if ($this->Settings->barcode_img) {
$rendererOptions = array('imageType' => 'jpg', 'horizontalPosition' => 'center', 'verticalPosition' => 'middle');
$imageResource = Zend_Barcode::render($bcs, 'image', $barcodeOptions, $rendererOptions);
return $imageResource;
} else {
$rendererOptions = array('renderer' => 'svg', 'horizontalPosition' => 'center', 'verticalPosition' => 'middle');
$imageResource = Zend_Barcode::render($bcs, 'svg', $barcodeOptions, $rendererOptions);
header("Content-Type: image/svg+xml");
echo $imageResource;
}
}
function print_barcodes($product_id = NULL)
{
$this->sma->checkPermissions('barcode', true);
$this->form_validation->set_rules('style', lang("style"), 'required');
if ($this->form_validation->run() == true) {
$style = $this->input->post('style');
$bci_size = ($style == 10 || $style == 12 ? 50 : ($style == 14 || $style == 18 ? 30 : 20));
$currencies = $this->site->getAllCurrencies();
$s = isset($_POST['product']) ? sizeof($_POST['product']) : 0;
if ($s < 1) {
$this->session->set_flashdata('error', lang('no_product_selected'));
admin_redirect("products/print_barcodes");
}
for ($m = 0; $m < $s; $m++) {
$pid = $_POST['product'][$m];
$quantity = $_POST['quantity'][$m];
$product = $this->products_model->getProductWithCategory($pid);
$product->price = $this->input->post('check_promo') ? ($product->promotion ? $product->promo_price : $product->price) : $product->price;
if ($variants = $this->products_model->getProductOptions($pid)) {
foreach ($variants as $option) {
if ($this->input->post('vt_'.$product->id.'_'.$option->id)) {
$barcodes[] = array(
'site' => $this->input->post('site_name') ? $this->Settings->site_name : FALSE,
'name' => $this->input->post('product_name') ? $product->name.' - '.$option->name : FALSE,
'image' => $this->input->post('product_image') ? $product->image : FALSE,
'barcode' => $this->product_barcode($product->code . $this->Settings->barcode_separator . $option->id, 'code128', $bci_size),
'price' => $this->input->post('price') ? $this->sma->formatMoney($option->price != 0 ? ($product->price+$option->price) : $product->price) : FALSE,
'unit' => $this->input->post('unit') ? $product->unit : FALSE,
'category' => $this->input->post('category') ? $product->category : FALSE,
'currencies' => $this->input->post('currencies'),
'location' => $this->input->post('check_location') ? $product->location : FALSE,
'variants' => $this->input->post('variants') ? $variants : FALSE,
'quantity' => $quantity
);
}
}
} else {
$barcodes[] = array(
'site' => $this->input->post('site_name') ? $this->Settings->site_name : FALSE,
'name' => $this->input->post('product_name') ? $product->name : FALSE,
'image' => $this->input->post('product_image') ? $product->image : FALSE,
'location' => $this->input->post('check_location') ? $product->location : FALSE,
'barcode' => $this->product_barcode($product->code, $product->barcode_symbology, $bci_size),
'price' => $this->input->post('price') ? $product->price : FALSE,
'price' => $this->input->post('price') ? $product->price : FALSE,
'unit' => $this->input->post('unit') ? $product->unit : FALSE,
'category' => $this->input->post('category') ? $product->category : FALSE,
'currencies' => $this->input->post('currencies'),
'variants' => FALSE,
'quantity' => $quantity
);
}
}
$this->data['barcodes'] = $barcodes;
$this->data['currencies'] = $currencies;
$this->data['style'] = $style;
$this->data['items'] = false;
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('print_barcodes')));
$meta = array('page_title' => lang('print_barcodes'), 'bc' => $bc);
$this->page_construct('products/print_barcodes', $meta, $this->data);
} else {
if ($this->input->get('purchase') || $this->input->get('transfer')) {
if ($this->input->get('purchase')) {
$purchase_id = $this->input->get('purchase', TRUE);
$items = $this->products_model->getPurchaseItems($purchase_id);
} elseif ($this->input->get('transfer')) {
$transfer_id = $this->input->get('transfer', TRUE);
$items = $this->products_model->getTransferItems($transfer_id);
}
if ($items) {
foreach ($items as $item) {
if ($row = $this->products_model->getProductByID($item->product_id)) {
$selected_variants = false;
if ($variants = $this->products_model->getProductOptions($row->id)) {
foreach ($variants as $variant) {
$selected_variants[$variant->id] = isset($pr[$row->id]['selected_variants'][$variant->id]) && !empty($pr[$row->id]['selected_variants'][$variant->id]) ? 1 : ($variant->id == $item->option_id ? 1 : 0);
}
}
$pr[$row->id] = array('id' => $row->id, 'label' => $row->name . " (" . $row->code . ")", 'code' => $row->code, 'name' => $row->name, 'price' => $row->price, 'qty' => $item->quantity, 'variants' => $variants, 'selected_variants' => $selected_variants);
}
}
$this->data['message'] = lang('products_added_to_list');
}
}
if ($product_id) {
if ($row = $this->site->getProductByID($product_id)) {
$selected_variants = false;
if ($variants = $this->products_model->getProductOptions($row->id)) {
foreach ($variants as $variant) {
$selected_variants[$variant->id] = $variant->quantity > 0 ? 1 : 0;
}
}
$pr[$row->id] = array('id' => $row->id, 'label' => $row->name . " (" . $row->code . ")", 'code' => $row->code, 'name' => $row->name, 'price' => $row->price, 'qty' => $row->quantity, 'variants' => $variants, 'selected_variants' => $selected_variants);
$this->data['message'] = lang('product_added_to_list');
}
}
if ($this->input->get('category')) {
if ($products = $this->products_model->getCategoryProducts($this->input->get('category'))) {
foreach ($products as $row) {
$selected_variants = false;
if ($variants = $this->products_model->getProductOptions($row->id)) {
foreach ($variants as $variant) {
$selected_variants[$variant->id] = $variant->quantity > 0 ? 1 : 0;
}
}
$pr[$row->id] = array('id' => $row->id, 'label' => $row->name . " (" . $row->code . ")", 'code' => $row->code, 'name' => $row->name, 'price' => $row->price, 'qty' => $row->quantity, 'variants' => $variants, 'selected_variants' => $selected_variants);
}
$this->data['message'] = lang('products_added_to_list');
} else {
$pr = array();
$this->session->set_flashdata('error', lang('no_product_found'));
}
}
if ($this->input->get('subcategory')) {
if ($products = $this->products_model->getSubCategoryProducts($this->input->get('subcategory'))) {
foreach ($products as $row) {
$selected_variants = false;
if ($variants = $this->products_model->getProductOptions($row->id)) {
foreach ($variants as $variant) {
$selected_variants[$variant->id] = $variant->quantity > 0 ? 1 : 0;
}
}
$pr[$row->id] = array('id' => $row->id, 'label' => $row->name . " (" . $row->code . ")", 'code' => $row->code, 'name' => $row->name, 'price' => $row->price, 'qty' => $row->quantity, 'variants' => $variants, 'selected_variants' => $selected_variants);
}
$this->data['message'] = lang('products_added_to_list');
} else {
$pr = array();
$this->session->set_flashdata('error', lang('no_product_found'));
}
}
$this->data['items'] = isset($pr) ? json_encode($pr) : false;
$this->data['error'] = (validation_errors() ? validation_errors() : $this->session->flashdata('error'));
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('print_barcodes')));
$meta = array('page_title' => lang('print_barcodes'), 'bc' => $bc);
$this->page_construct('products/print_barcodes', $meta, $this->data);
}
}
/* ------------------------------------------------------- */
function add($id = NULL)
{
$user = $this->site->getUser();
$store_id = $user->store_id;
$this->data['store_id'] = $store_id;
$store = $this->site->getStoreByID($store_id);
$this->data['store'] = $store;
$this->sma->checkPermissions();
$this->load->helper('security');
$warehouses = $this->site->getAllWarehouses($this->data['store_id']);
if($store_id == 0)
{
$this->form_validation->set_rules('store', lang("Store"), 'required|is_natural_no_zero');
}
$this->form_validation->set_rules('category', lang("category"), 'required|is_natural_no_zero');
if ($this->input->post('type') == 'standard') {
$this->form_validation->set_rules('cost', lang("product_cost"), 'required');
$this->form_validation->set_rules('unit', lang("product_unit"), 'required');
}
if ($this->input->post('barcode_symbology') == 'ean13') {
$this->form_validation->set_rules('code', lang("product_code"), 'min_length[13]|max_length[13]');
}
$this->form_validation->set_rules('code', lang("product_code"), 'alpha_dash');
// $this->form_validation->set_rules('slug', lang("slug"), 'required|is_unique[products.slug]|alpha_dash');
$this->form_validation->set_rules('weight', lang("weight"), 'numeric');
$this->form_validation->set_rules('product_image', lang("product_image"), 'xss_clean');
$this->form_validation->set_rules('digital_file', lang("digital_file"), 'xss_clean');
$this->form_validation->set_rules('userfile', lang("product_gallery_images"), 'xss_clean');
if ($this->form_validation->run() == true) {
if($this->db->where('code',$this->data['store']->code.$this->input->post('code'))->get('sma_products')->row())
{
$this->session->set_flashdata('error', 'Duplicate entry '.$this->data['store']->code.$this->input->post('code').' for key');
admin_redirect("products/add");
}
$tax_rate = $this->input->post('tax_rate') ? $this->site->getTaxRateByID($this->input->post('tax_rate')) : NULL;
if($store_id==0)
{
$data = array(
'sequence' => $this->input->post('sequence'),
'code' => $this->data['store']->code.$this->input->post('code'),
'barcode_symbology' => $this->input->post('barcode_symbology'),
'name' => $this->input->post('name'),
'model_subcategory' => $this->input->post('model_subcategory'),
'model_category' => $this->input->post('model_category'),
'model_feature' => $this->input->post('feature'),
'type' => $this->input->post('type'),
'brand' => $this->input->post('brand'),
'location' => $this->input->post('location'),
'category_id' => $this->input->post('category'),
'subcategory_id' => $this->input->post('subcategory') ? $this->input->post('subcategory') : NULL,
'cost' => $this->sma->formatDecimal($this->input->post('cost')),
'price' => $this->sma->formatDecimal($this->input->post('price')),
'unit' => $this->input->post('unit'),
'sale_unit' => $this->input->post('default_sale_unit'),
'purchase_unit' => $this->input->post('default_purchase_unit'),
'tax_rate' => $this->input->post('tax_rate'),
'tax_method' => $this->input->post('tax_method'),
'quantity' => $this->input->post('wh_qty'),
'alert_quantity' => $this->input->post('alert_quantity'),
'track_quantity' => $this->input->post('track_quantity') ? $this->input->post('track_quantity') : '0',
'details' => $this->input->post('details'),
'product_details' => $this->input->post('product_details'),
'supplier1' => $this->input->post('supplier'),
'supplier1price' => $this->sma->formatDecimal($this->input->post('supplier_price')),
'supplier2' => $this->input->post('supplier_2'),
'supplier2price' => $this->sma->formatDecimal($this->input->post('supplier_2_price')),
'supplier3' => $this->input->post('supplier_3'),
'supplier3price' => $this->sma->formatDecimal($this->input->post('supplier_3_price')),
'supplier4' => $this->input->post('supplier_4'),
'supplier4price' => $this->sma->formatDecimal($this->input->post('supplier_4_price')),
'supplier5' => $this->input->post('supplier_5'),
'supplier5price' => $this->sma->formatDecimal($this->input->post('supplier_5_price')),
'cf1' => $this->input->post('cf1'),
'cf2' => $this->input->post('cf2'),
'cf3' => $this->input->post('cf3'),
'cf4' => $this->input->post('cf4'),
'cf5' => $this->input->post('cf5'),
'cf6' => $this->input->post('cf6'),
'promotion' => $this->input->post('promotion'),
'promo_price' => $this->sma->formatDecimal($this->input->post('promo_price')),
'start_date' => $this->input->post('start_date') ? $this->sma->fsd($this->input->post('start_date')) : NULL,
'end_date' => $this->input->post('end_date') ? $this->sma->fsd($this->input->post('end_date')) : NULL,
'supplier1_part_no' => $this->input->post('supplier_part_no'),
'supplier2_part_no' => $this->input->post('supplier_2_part_no'),
'supplier3_part_no' => $this->input->post('supplier_3_part_no'),
'supplier4_part_no' => $this->input->post('supplier_4_part_no'),
'supplier5_part_no' => $this->input->post('supplier_5_part_no'),
'file' => $this->input->post('file_link'),
'slug' => '0',
'weight' => $this->input->post('weight'),
'featured' => $this->input->post('featured'),
'warehouse'=>$this->input->post('warehouses') ? $this->input->post('warehouses') : NULL,
'store_id' => $this->input->post('store'),
'tag'=> $this->input->post('tag')
// 'price_ret' => NULL,
);
$wh_qty= array(
'warehouse_id'=>$this->input->post('warehouses') ? $this->input->post('warehouses') : NULL,
'quantity'=>$this->input->post('wh_qty'),
);
}
else{
$data = array(
'code' => $this->data['store']->code.$this->input->post('code'),
'barcode_symbology' => $this->input->post('barcode_symbology'),
'name' => $this->input->post('name'),
'model_subcategory' => $this->input->post('model_subcategory'),
'model_category' => $this->input->post('model_category'),
'model_feature' => $this->input->post('feature'),
'type' => $this->input->post('type'),
'brand' => $this->input->post('brand'),
'location' => $this->input->post('location'),
'category_id' => $this->input->post('category'),
'subcategory_id' => $this->input->post('subcategory') ? $this->input->post('subcategory') : NULL,
'cost' => $this->sma->formatDecimal($this->input->post('cost')),
'price' => $this->sma->formatDecimal($this->input->post('price')),
'unit' => $this->input->post('unit'),
'sale_unit' => $this->input->post('default_sale_unit'),
'purchase_unit' => $this->input->post('default_purchase_unit'),
'tax_rate' => $this->input->post('tax_rate'),
'tax_method' => $this->input->post('tax_method'),
'alert_quantity' => $this->input->post('alert_quantity'),
'track_quantity' => $this->input->post('track_quantity') ? $this->input->post('track_quantity') : '0',
'details' => $this->input->post('details'),
'product_details' => $this->input->post('product_details'),
'supplier1' => $this->input->post('supplier'),
'supplier1price' => $this->sma->formatDecimal($this->input->post('supplier_price')),
'supplier2' => $this->input->post('supplier_2'),
'supplier2price' => $this->sma->formatDecimal($this->input->post('supplier_2_price')),
'supplier3' => $this->input->post('supplier_3'),
'supplier3price' => $this->sma->formatDecimal($this->input->post('supplier_3_price')),
'supplier4' => $this->input->post('supplier_4'),
'supplier4price' => $this->sma->formatDecimal($this->input->post('supplier_4_price')),
'supplier5' => $this->input->post('supplier_5'),
'supplier5price' => $this->sma->formatDecimal($this->input->post('supplier_5_price')),
'cf1' => $this->input->post('cf1'),
'cf2' => $this->input->post('cf2'),
'cf3' => $this->input->post('cf3'),
'cf4' => $this->input->post('cf4'),
'cf5' => $this->input->post('cf5'),
'cf6' => $this->input->post('cf6'),
'promotion' => $this->input->post('promotion'),
'promo_price' => $this->sma->formatDecimal($this->input->post('promo_price')),
'start_date' => $this->input->post('start_date') ? $this->sma->fsd($this->input->post('start_date')) : NULL,
'end_date' => $this->input->post('end_date') ? $this->sma->fsd($this->input->post('end_date')) : NULL,
'supplier1_part_no' => $this->input->post('supplier_part_no'),
'supplier2_part_no' => $this->input->post('supplier_2_part_no'),
'supplier3_part_no' => $this->input->post('supplier_3_part_no'),
'supplier4_part_no' => $this->input->post('supplier_4_part_no'),
'supplier5_part_no' => $this->input->post('supplier_5_part_no'),
'file' => $this->input->post('file_link'),
'slug' => '0',
'weight' => $this->input->post('weight'),
'featured' => $this->input->post('featured'),
'tag'=> $this->input->post('tag'),
'store_id' => $store_id,);
}
$data['sequence']=$this->input->post('sequence');
$data['ecom_show']=$this->input->post('ecom_show');
$data['show_emenu']=$this->input->post('show_emenu');
$s = sizeof($_POST['type_sale'])-1;
// $unitSale_name = $this->input->post('type_sale');
// $unitSale_price = $this->input->post('price_unit');
for($st = 0; $st<=$s;$st++){
$saleUnit[]=array(
'sale_unitname'=>$_POST['type_sale'][$st],
'sale_unitprice'=>$_POST['price_unit'][$st],
);
}
$warehouse_qty = NULL;
$product_attributes = NULL;
$this->load->library('upload');
if ($this->input->post('type') == 'standard') {
$wh_total_quantity = 0;
$pv_total_quantity = 0;
for ($s = 2; $s > 5; $s++) {
$data['suppliers' . $s] = $this->input->post('supplier_' . $s);
$data['suppliers' . $s . 'price'] = $this->input->post('supplier_' . $s . '_price');
}
foreach ($warehouses as $warehouse) {
if ($this->input->post('wh_qty_' . $warehouse->id)) {
$warehouse_qty[] = array(
'warehouse_id' => $this->input->post('wh_' . $warehouse->id),
'quantity' => $this->input->post('wh_qty_' . $warehouse->id),
'rack' => $this->input->post('rack_' . $warehouse->id) ? $this->input->post('rack_' . $warehouse->id) : NULL
);
$wh_total_quantity += $this->input->post('wh_qty_' . $warehouse->id);
}
}
if($this->input->post('typesInput'))
{
$variant_option_type = $this->input->post('typesInput');
}else{
$variant_option_type = NULL;
}
if ($this->input->post('attributes')) {
$a = sizeof($_POST['attr_name']);
for ($r = 0; $r <= $a; $r++) {
if (isset($_POST['attr_name'][$r])) {
$product_attributes[] = array(
'name' => $_POST['attr_name'][$r],
'warehouse_id' => $_POST['attr_warehouse'][$r],
'quantity' => $_POST['attr_quantity'][$r],
'price' => $_POST['attr_price'][$r],
);
$pv_total_quantity += $_POST['attr_quantity'][$r];
}
}
} else {
$product_attributes = NULL;
}
if ($wh_total_quantity != $pv_total_quantity && $pv_total_quantity != 0) {
$this->form_validation->set_rules('wh_pr_qty_issue', 'wh_pr_qty_issue', 'required');
$this->form_validation->set_message('required', lang('wh_pr_qty_issue'));
}
}
if ($this->input->post('type') == 'service') {
$data['track_quantity'] = 0;
} elseif ($this->input->post('type') == 'combo') {
$total_price = $this->input->post('price');
$c = sizeof($_POST['combo_item_code']) - 1;
for ($r = 0; $r <= $c; $r++) {
if (isset($_POST['combo_item_code'][$r]) && isset($_POST['combo_item_quantity'][$r]) && isset($_POST['combo_item_price'][$r])) {
$items[] = array(
'item_code' => $_POST['combo_item_code'][$r],
'quantity' => $_POST['combo_item_quantity'][$r],
'unit_price' => $_POST['combo_item_price'][$r],
);
}
//$total_price += $_POST['combo_item_price'][$r] * $_POST['combo_item_quantity'][$r];
}
if ($this->sma->formatDecimal($total_price) != $this->sma->formatDecimal($this->input->post('price'))) {
// $this->form_validation->set_rules('combo_price', 'combo_price', 'required');
// $this->form_validation->set_message('required', lang('pprice_not_match_ciprice'));
}
$data['track_quantity'] = 0;
} elseif ($this->input->post('type') == 'digital') {
if ($_FILES['digital_file']['size'] > 0) {
$config['upload_path'] = $this->digital_upload_path;
$config['allowed_types'] = $this->digital_file_types;
$config['max_size'] = $this->allowed_file_size;
$config['overwrite'] = FALSE;
$config['encrypt_name'] = TRUE;
$config['max_filename'] = 25;
$this->upload->initialize($config);
if (!$this->upload->do_upload('digital_file')) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
admin_redirect("products/add");
}
$file = $this->upload->file_name;
$data['file'] = $file;
} else {
if (!$this->input->post('file_link')) {
$this->form_validation->set_rules('digital_file', lang("digital_file"), 'required');
}
}
$config = NULL;
$data['track_quantity'] = 0;
}
if (!isset($items)) {
$items = NULL;
}
if ($_FILES['product_image']['size'] > 0) {
$config['upload_path'] = $this->upload_path;
$config['allowed_types'] = $this->image_types;
$config['max_size'] = $this->allowed_file_size;
// $config['max_width'] = $this->Settings->iwidth;
// $config['max_height'] = $this->Settings->iheight;
$config['overwrite'] = FALSE;
$config['max_filename'] = 25;
$config['encrypt_name'] = TRUE;
$this->upload->initialize($config);
if (!$this->upload->do_upload('product_image')) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
admin_redirect("products/add");
}
$photo = $this->upload->file_name;
$data['image'] = $photo;
$this->load->library('image_lib');
$config['image_library'] = 'gd2';
$config['source_image'] = $this->upload_path . $photo;
$data['image_url'] = 'http://'.$_SERVER['SERVER_NAME'].'/'.$this->upload_path . $photo;
$config['new_image'] = $this->thumbs_path . $photo;
$config['maintain_ratio'] = TRUE;
$config['width'] = $this->Settings->twidth;
$config['height'] = $this->Settings->theight;
$this->image_lib->clear();
$this->image_lib->initialize($config);
if (!$this->image_lib->resize()) {
echo $this->image_lib->display_errors();
}
if ($this->Settings->watermark) {
$this->image_lib->clear();
$wm['source_image'] = $this->upload_path . $photo;
$wm['wm_text'] = 'Copyright ' . date('Y') . ' - ' . $this->Settings->site_name;
$wm['wm_type'] = 'text';
$wm['wm_font_path'] = 'system/fonts/texb.ttf';
$wm['quality'] = '100';
$wm['wm_font_size'] = '16';
$wm['wm_font_color'] = '999999';
$wm['wm_shadow_color'] = 'CCCCCC';
$wm['wm_vrt_alignment'] = 'top';
$wm['wm_hor_alignment'] = 'left';
$wm['wm_padding'] = '10';
$this->image_lib->initialize($wm);
$this->image_lib->watermark();
}
$this->image_lib->clear();
$config = NULL;
}
if ($_FILES['userfile']['name'][0] != "") {
$config['upload_path'] = $this->upload_path;
$config['allowed_types'] = $this->image_types;
$config['max_size'] = $this->allowed_file_size;
// $config['max_width'] = $this->Settings->iwidth;
// $config['max_height'] = $this->Settings->iheight;
$config['overwrite'] = FALSE;
$config['encrypt_name'] = TRUE;
$config['max_filename'] = 25;
$files = $_FILES;
$cpt = count($_FILES['userfile']['name']);
for ($i = 0; $i < $cpt; $i++) {
$_FILES['userfile']['name'] = $files['userfile']['name'][$i];
$_FILES['userfile']['type'] = $files['userfile']['type'][$i];
$_FILES['userfile']['tmp_name'] = $files['userfile']['tmp_name'][$i];
$_FILES['userfile']['error'] = $files['userfile']['error'][$i];
$_FILES['userfile']['size'] = $files['userfile']['size'][$i];
$this->upload->initialize($config);
if (!$this->upload->do_upload()) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
admin_redirect("products/add");
} else {
$pho = $this->upload->file_name;
$photos[] = $pho;
$this->load->library('image_lib');
$config['image_library'] = 'gd2';
$config['source_image'] = $this->upload_path . $pho;
$config['new_image'] = $this->thumbs_path . $pho;
$config['maintain_ratio'] = TRUE;
$config['width'] = $this->Settings->twidth;
$config['height'] = $this->Settings->theight;
$this->image_lib->initialize($config);
if (!$this->image_lib->resize()) {
echo $this->image_lib->display_errors();
}
if ($this->Settings->watermark) {
$this->image_lib->clear();
$wm['source_image'] = $this->upload_path . $pho;
$wm['wm_text'] = 'Copyright ' . date('Y') . ' - ' . $this->Settings->site_name;
$wm['wm_type'] = 'text';
$wm['wm_font_path'] = 'system/fonts/texb.ttf';
$wm['quality'] = '100';
$wm['wm_font_size'] = '16';
$wm['wm_font_color'] = '999999';
$wm['wm_shadow_color'] = 'CCCCCC';
$wm['wm_vrt_alignment'] = 'top';
$wm['wm_hor_alignment'] = 'left';
$wm['wm_padding'] = '10';
$this->image_lib->initialize($wm);
$this->image_lib->watermark();
}
$this->image_lib->clear();
}
}
$config = NULL;
} else {
$photos = NULL;
}
if($store_id!=0)
{
$data['quantity'] = isset($wh_total_quantity) ? $wh_total_quantity : 0;
}
// $this->sma->print_arrays($data, $warehouse_qty, $product_attributes);
}
if ($this->form_validation->run() == true && $this->products_model->addProduct($data, $items,$saleUnit, $warehouse_qty, $product_attributes, $photos,$wh_qty,$this->data['store_id'],$variant_option_type)) {
$this->session->set_flashdata('message', lang("product_added"));
admin_redirect('products');
} else {
$this->data['error'] = (validation_errors() ? validation_errors() : $this->session->flashdata('error'));
$user = $this->site->getUser();
$store_id = $user->store_id;
$this->data['store_id'] = $store_id;
$this->data['categories'] = $this->site->getAllCategories($this->data['store_id']);
$this->data['model_categories'] = $this->site->getAllModelCategories();
$this->data['stores'] = $this->site->getAllStores();
$this->data['tax_rates'] = $this->site->getAllTaxRates();
$this->data['brands'] = $this->site->getAllBrands();
$this->data['location'] = $this->site->getAllLocation($this->data['store_id']);
$this->data['base_units'] = $this->site->getAllBaseUnits($this->data['store_id']);
if($store_id==0)
{
$this->data['warehouses'] = $warehouses;
}
else{
$warehouses = $this->site->getAllWarehousesforstore($store_id);
$this->data['warehouses'] = $warehouses;
}
$this->data['warehouses_products'] = $id ? $this->products_model->getAllWarehousesWithPQ($id) : NULL;
$this->data['product'] = $id ? $this->products_model->getProductByID($id) : NULL;
$this->data['variants'] = $this->products_model->getAllVariants();
$this->data['combo_items'] = ($id && $this->data['product']->type == 'combo') ? $this->products_model->getProductComboItems($id) : NULL;
$this->data['product_options'] = $id ? $this->products_model->getProductOptionsWithWH($id) : NULL;
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('add_product')));
$meta = array('page_title' => lang('add_product'), 'bc' => $bc);
$this->page_construct('products/add', $meta, $this->data);
}
}
function suggestions()
{
$term = $this->input->get('term', TRUE);
if (strlen($term) < 1 || !$term) {
die("<script type='text/javascript'>setTimeout(function(){ window.top.location.href = '" . admin_url('welcome') . "'; }, 10);</script>");
}
$rows = $this->products_model->getProductNames($term);
if ($rows) {
foreach ($rows as $row) {
$pr[] = array('id' => $row->id, 'label' => $row->name . " (" . $row->code . ")", 'code' => $row->code, 'name' => $row->name, 'price' => $row->price, 'qty' => 1);
}
$this->sma->send_json($pr);
} else {
$this->sma->send_json(array(array('id' => 0, 'label' => lang('no_match_found'), 'value' => $term)));
}
}
function get_suggestions()
{
$term = $this->input->get('term', TRUE);
if (strlen($term) < 1 || !$term) {
die("<script type='text/javascript'>setTimeout(function(){ window.top.location.href = '" . admin_url('welcome') . "'; }, 10);</script>");
}
$rows = $this->products_model->getProductsForPrinting($term);
if ($rows) {
foreach ($rows as $row) {
$variants = $this->products_model->getProductOptions($row->id);
$pr[] = array('id' => $row->id, 'label' => $row->name . " (" . $row->code . ")", 'code' => $row->code, 'name' => $row->name, 'price' => $row->price, 'qty' => 1, 'variants' => $variants);
}
$this->sma->send_json($pr);
} else {
$this->sma->send_json(array(array('id' => 0, 'label' => lang('no_match_found'), 'value' => $term)));
}
}
function addByAjax()
{
if (!$this->mPermissions('add')) {
exit(json_encode(array('msg' => lang('access_denied'))));
}
if ($this->input->get('token') && $this->input->get('token') == $this->session->userdata('user_csrf') && $this->input->is_ajax_request()) {
$product = $this->input->get('product');
if (!isset($product['code']) || empty($product['code'])) {
exit(json_encode(array('msg' => lang('product_code_is_required'))));
}
if (!isset($product['name']) || empty($product['name'])) {
exit(json_encode(array('msg' => lang('product_name_is_required'))));
}
if (!isset($product['category_id']) || empty($product['category_id'])) {
exit(json_encode(array('msg' => lang('product_category_is_required'))));
}
if (!isset($product['unit']) || empty($product['unit'])) {
exit(json_encode(array('msg' => lang('product_unit_is_required'))));
}
if (!isset($product['price']) || empty($product['price'])) {
exit(json_encode(array('msg' => lang('product_price_is_required'))));
}
if (!isset($product['cost']) || empty($product['cost'])) {
exit(json_encode(array('msg' => lang('product_cost_is_required'))));
}
if ($this->products_model->getProductByCode($product['code'])) {
exit(json_encode(array('msg' => lang('product_code_already_exist'))));
}
if ($row = $this->products_model->addAjaxProduct($product)) {
$tax_rate = $this->site->getTaxRateByID($row->tax_rate);
$pr = array('id' => $row->id, 'label' => $row->name . " (" . $row->code . ")", 'code' => $row->code, 'qty' => 1, 'cost' => $row->cost, 'name' => $row->name, 'tax_method' => $row->tax_method, 'tax_rate' => $tax_rate, 'discount' => '0');
$this->sma->send_json(array('msg' => 'success', 'result' => $pr));
} else {
exit(json_encode(array('msg' => lang('failed_to_add_product'))));
}
} else {
json_encode(array('msg' => 'Invalid token'));
}
}
/* -------------------------------------------------------- */
function edit($id = NULL)
{
$this->sma->checkPermissions();
$this->load->helper('security');
if ($this->input->post('id')) {
$id = $this->input->post('id');
}
$warehouses = $this->site->getallWarehouses($this->data['store_id']);
$warehouses_products = $this->products_model->getAllWarehousesWithPQ($id);
$product = $this->site->getProductByID($id);
if (!$id || !$product) {
$this->session->set_flashdata('error', lang('prduct_not_found'));
redirect($_SERVER["HTTP_REFERER"]);
}
$this->form_validation->set_rules('category', lang("category"), 'required|is_natural_no_zero');
if ($this->input->post('type') == 'standard') {
$this->form_validation->set_rules('cost', lang("product_cost"), 'required');
$this->form_validation->set_rules('unit', lang("product_unit"), 'required');
}
$this->form_validation->set_rules('code', lang("product_code"), 'alpha_dash');
if ($this->input->post('code') !== $product->code) {
$this->form_validation->set_rules('code', lang("product_code"), 'is_unique[products.code]');
}
if ($this->input->post('barcode_symbology') == 'ean13') {
$this->form_validation->set_rules('code', lang("product_code"), 'min_length[13]|max_length[13]');
}
// $this->form_validation->set_rules('slug', lang("slug"), 'required|alpha_dash');
// if ($this->input->post('slug') !== $product->slug) {
// $this->form_validation->set_rules('slug', lang("slug"), 'required|is_unique[products.slug]|alpha_dash');
// }
$this->form_validation->set_rules('weight', lang("weight"), 'numeric');
$this->form_validation->set_rules('product_image', lang("product_image"), 'xss_clean');
$this->form_validation->set_rules('digital_file', lang("digital_file"), 'xss_clean');
$this->form_validation->set_rules('userfile', lang("product_gallery_images"), 'xss_clean');
if ($this->form_validation->run('products/add') == true) {
$code = $this->input->post('code');
if (strpos($code, $this->data['store']->code) === false){
$code = $this->data['store']->code.$this->input->post('code');
}
$data = array('code' => $code,
'sequence' => $this->input->post('sequence'),
'barcode_symbology' => $this->input->post('barcode_symbology'),
'name' => $this->input->post('name'),
'type' => $this->input->post('type'),
'brand' => $this->input->post('brand'),
'location' => $this->input->post('location'),
'category_id' => $this->input->post('category'),
'subcategory_id' => $this->input->post('subcategory') ? $this->input->post('subcategory') : NULL,
'cost' => $this->sma->formatDecimal($this->input->post('cost')),
'price' => $this->sma->formatDecimal($this->input->post('price')),
'unit' => $this->input->post('unit'),
'sale_unit' => $this->input->post('default_sale_unit'),
'purchase_unit' => $this->input->post('default_purchase_unit'),
'tax_rate' => $this->input->post('tax_rate'),
'tax_method' => $this->input->post('tax_method'),
'alert_quantity' => $this->input->post('alert_quantity'),
'track_quantity' => $this->input->post('track_quantity') ? $this->input->post('track_quantity') : '0',
'details' => $this->input->post('details'),
'product_details' => $this->input->post('product_details'),
'supplier1' => $this->input->post('supplier'),
'supplier1price' => $this->sma->formatDecimal($this->input->post('supplier_price')),
'supplier2' => $this->input->post('supplier_2'),
'supplier2price' => $this->sma->formatDecimal($this->input->post('supplier_2_price')),
'supplier3' => $this->input->post('supplier_3'),
'supplier3price' => $this->sma->formatDecimal($this->input->post('supplier_3_price')),
'supplier4' => $this->input->post('supplier_4'),
'supplier4price' => $this->sma->formatDecimal($this->input->post('supplier_4_price')),
'supplier5' => $this->input->post('supplier_5'),
'supplier5price' => $this->sma->formatDecimal($this->input->post('supplier_5_price')),
'cf1' => $this->input->post('cf1'),
'cf2' => $this->input->post('cf2'),
'cf3' => $this->input->post('cf3'),
'cf4' => $this->input->post('cf4'),
'cf5' => $this->input->post('cf5'),
'cf6' => $this->input->post('cf6'),
'promotion' => $this->input->post('promotion'),
'promo_price' => $this->sma->formatDecimal($this->input->post('promo_price')),
'start_date' => $this->input->post('start_date') ? $this->sma->fsd($this->input->post('start_date')) : NULL,
'end_date' => $this->input->post('end_date') ? $this->sma->fsd($this->input->post('end_date')) : NULL,
'supplier1_part_no' => $this->input->post('supplier_part_no'),
'supplier2_part_no' => $this->input->post('supplier_2_part_no'),
'supplier3_part_no' => $this->input->post('supplier_3_part_no'),
'supplier4_part_no' => $this->input->post('supplier_4_part_no'),
'supplier5_part_no' => $this->input->post('supplier_5_part_no'),
'slug' =>'0',
'weight' => $this->input->post('weight'),
'featured' => $this->input->post('featured'),
'model_category'=>$this->input->post('model_category'),
'model_subcategory'=>$this->input->post('model_subcategory'),
'model_feature'=>$this->input->post('feature'),
'tag'=> $this->input->post('tag')
);
$data['ecom_show']=$this->input->post('ecom_show');
$data['show_emenu']=$this->input->post('show_emenu');
$warehouse_qty = NULL;
$product_attributes = NULL;
$update_variants = array();
$update_variant_options = array();
$this->load->library('upload');
if ($this->input->post('type') == 'standard') {
if ($product_variants = $this->products_model->getProductOptions($id)) {
foreach ($product_variants as $pv) {
$update_variants[] = array(
'id' => $this->input->post('variant_id_'.$pv->id),
'name' => $this->input->post('variant_name_'.$pv->id),
'cost' => $this->input->post('variant_cost_'.$pv->id),
'price' => $this->input->post('variant_price_'.$pv->id),
);
}
}
if ($product_variant_options = $this->db->where('product_id',$id)->get('variant_option')->result()) {
foreach ($product_variant_options as $pv) {
$update_variant_options[] = array(
'id' => $this->input->post('variant_option_id_'.$pv->id),
'name' => $this->input->post('variant_option_name_'.$pv->id),
);
}
}
for ($s = 2; $s > 5; $s++) {
$data['suppliers' . $s] = $this->input->post('supplier_' . $s);
$data['suppliers' . $s . 'price'] = $this->input->post('supplier_' . $s . '_price');
}
foreach ($warehouses as $warehouse) {
$warehouse_qty[] = array(
'warehouse_id' => $this->input->post('wh_' . $warehouse->id),
'rack' => $this->input->post('rack_' . $warehouse->id) ? $this->input->post('rack_' . $warehouse->id) : NULL
);
}
if($this->input->post('typesInput'))
{
$variant_option_type = $this->input->post('typesInput');
}else{
$variant_option_type = NULL;
}
if ($this->input->post('attributes')) {
$a = sizeof($_POST['attr_name']);
for ($r = 0; $r <= $a; $r++) {
if (isset($_POST['attr_name'][$r])) {
if ($product_variatnt = $this->products_model->getPrductVariantByPIDandName($id, trim($_POST['attr_name'][$r]))) {
$this->form_validation->set_message('required', lang("product_already_has_variant").' ('.$_POST['attr_name'][$r].')');
$this->form_validation->set_rules('new_product_variant', lang("new_product_variant"), 'required');
} else {
$product_attributes[] = array(
'name' => $_POST['attr_name'][$r],
'warehouse_id' => $_POST['attr_warehouse'][$r],
'quantity' => $_POST['attr_quantity'][$r],
'price' => $_POST['attr_price'][$r],
);
}
}
}
} else {
$product_attributes = NULL;
}
}
$s = sizeof($_POST['type_sale'])-1;
for($st = 0; $st<=$s;$st++){
$saleUnit[]=array(
'sale_unitname'=>$_POST['type_sale'][$st],
'sale_unitprice'=>$_POST['price_unit'][$st],
);
}
//
if ($this->input->post('type') == 'service') {
$data['track_quantity'] = 0;
} elseif ($this->input->post('type') == 'combo') {
$total_price = $this->input->post('price');
$c = sizeof($_POST['combo_item_code']) - 1;
for ($r = 0; $r <= $c; $r++) {
if (isset($_POST['combo_item_code'][$r]) && isset($_POST['combo_item_quantity'][$r]) && isset($_POST['combo_item_price'][$r])) {
$items[] = array(
'item_code' => $_POST['combo_item_code'][$r],
'quantity' => $_POST['combo_item_quantity'][$r],
'unit_price' => $_POST['combo_item_price'][$r],
);
}
// $total_price += $_POST['combo_item_price'][$r] * $_POST['combo_item_quantity'][$r];
}
if ($this->sma->formatDecimal($total_price) != $this->sma->formatDecimal($this->input->post('price'))) {
// $this->form_validation->set_rules('combo_price', 'combo_price', 'required');
// $this->form_validation->set_message('required', lang('pprice_not_match_ciprice'));
}
$data['track_quantity'] = 0;
} elseif ($this->input->post('type') == 'digital') {
if ($this->input->post('file_link')) {
$data['file'] = $this->input->post('file_link');
}
if ($_FILES['digital_file']['size'] > 0) {
$config['upload_path'] = $this->digital_upload_path;
$config['allowed_types'] = $this->digital_file_types;
$config['max_size'] = $this->allowed_file_size;
$config['overwrite'] = FALSE;
$config['encrypt_name'] = TRUE;
$config['max_filename'] = 25;
$this->upload->initialize($config);
if (!$this->upload->do_upload('digital_file')) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
admin_redirect("products/add");
}
$file = $this->upload->file_name;
$data['file'] = $file;
}
$config = NULL;
$data['track_quantity'] = 0;
}
if (!isset($items)) {
$items = NULL;
}
if ($_FILES['product_image']['size'] > 0) {
$config['upload_path'] = $this->upload_path;
$config['allowed_types'] = $this->image_types;
$config['max_size'] = $this->allowed_file_size;
// $config['max_width'] = $this->Settings->iwidth;
// $config['max_height'] = $this->Settings->iheight;
$config['overwrite'] = FALSE;
$config['encrypt_name'] = TRUE;
$config['max_filename'] = 25;
$this->upload->initialize($config);
if (!$this->upload->do_upload('product_image')) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
admin_redirect("products/edit/" . $id);
}
$photo = $this->upload->file_name;
$data['image'] = $photo;
$this->load->library('image_lib');
$config['image_library'] = 'gd2';
$config['source_image'] = $this->upload_path . $photo;
$data['image_url'] = 'http://'.$_SERVER['SERVER_NAME'].'/'.$this->upload_path . $photo;
$config['new_image'] = $this->thumbs_path . $photo;
$config['maintain_ratio'] = TRUE;
$config['width'] = $this->Settings->twidth;
$config['height'] = $this->Settings->theight;
$this->image_lib->clear();
$this->image_lib->initialize($config);
if (!$this->image_lib->resize()) {
echo $this->image_lib->display_errors();
}
if ($this->Settings->watermark) {
$this->image_lib->clear();
$wm['source_image'] = $this->upload_path . $photo;
$wm['wm_text'] = 'Copyright ' . date('Y') . ' - ' . $this->Settings->site_name;
$wm['wm_type'] = 'text';
$wm['wm_font_path'] = 'system/fonts/texb.ttf';
$wm['quality'] = '100';
$wm['wm_font_size'] = '16';
$wm['wm_font_color'] = '999999';
$wm['wm_shadow_color'] = 'CCCCCC';
$wm['wm_vrt_alignment'] = 'top';
$wm['wm_hor_alignment'] = 'left';
$wm['wm_padding'] = '10';
$this->image_lib->initialize($wm);
$this->image_lib->watermark();
}
$this->image_lib->clear();
$config = NULL;
}
if ($_FILES['userfile']['name'][0] != "") {
$config['upload_path'] = $this->upload_path;
$config['allowed_types'] = $this->image_types;
$config['max_size'] = $this->allowed_file_size;
// $config['max_width'] = $this->Settings->iwidth;
// $config['max_height'] = $this->Settings->iheight;
$config['overwrite'] = FALSE;
$config['encrypt_name'] = TRUE;
$config['max_filename'] = 25;
$files = $_FILES;
$cpt = count($_FILES['userfile']['name']);
for ($i = 0; $i < $cpt; $i++) {
$_FILES['userfile']['name'] = $files['userfile']['name'][$i];
$_FILES['userfile']['type'] = $files['userfile']['type'][$i];
$_FILES['userfile']['tmp_name'] = $files['userfile']['tmp_name'][$i];
$_FILES['userfile']['error'] = $files['userfile']['error'][$i];
$_FILES['userfile']['size'] = $files['userfile']['size'][$i];
$this->upload->initialize($config);
if (!$this->upload->do_upload()) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
admin_redirect("products/edit/" . $id);
} else {
$pho = $this->upload->file_name;
$photos[] = $pho;
$this->load->library('image_lib');
$config['image_library'] = 'gd2';
$config['source_image'] = $this->upload_path . $pho;
$config['new_image'] = $this->thumbs_path . $pho;
$config['maintain_ratio'] = TRUE;
$config['width'] = $this->Settings->twidth;
$config['height'] = $this->Settings->theight;
$this->image_lib->initialize($config);
if (!$this->image_lib->resize()) {
echo $this->image_lib->display_errors();
}
if ($this->Settings->watermark) {
$this->image_lib->clear();
$wm['source_image'] = $this->upload_path . $pho;
$wm['wm_text'] = 'Copyright ' . date('Y') . ' - ' . $this->Settings->site_name;
$wm['wm_type'] = 'text';
$wm['wm_font_path'] = 'system/fonts/texb.ttf';
$wm['quality'] = '100';
$wm['wm_font_size'] = '16';
$wm['wm_font_color'] = '999999';
$wm['wm_shadow_color'] = 'CCCCCC';
$wm['wm_vrt_alignment'] = 'top';
$wm['wm_hor_alignment'] = 'left';
$wm['wm_padding'] = '10';
$this->image_lib->initialize($wm);
$this->image_lib->watermark();
}
$this->image_lib->clear();
}
}
$config = NULL;
} else {
$photos = NULL;
}
$data['quantity'] = isset($wh_total_quantity) ? $wh_total_quantity : 0;
// $this->sma->print_arrays($data, $warehouse_qty, $update_variants, $product_attributes, $photos, $items);
}
if ($this->form_validation->run() == true && $this->products_model->updateProduct($id, $data, $saleUnit, $items, $warehouse_qty, $product_attributes, $photos, $update_variants,$variant_option_type,$update_variant_options)) {
$this->session->set_flashdata('message', lang("product_updated"));
admin_redirect('products');
} else {
$this->data['error'] = (validation_errors() ? validation_errors() : $this->session->flashdata('error'));
$this->data['unit'] = $this->site->getEditValueByID($id);
//var_dump($this->data['unit']);die();
$this->data['categories'] = $this->site->getAllCategories($this->data['store_id']);
$this->data['tax_rates'] = $this->site->getAllTaxRates();
$this->data['brands'] = $this->site->getAllBrands();
$this->data['location'] = $this->site->getAllLocation($this->data['store_id']);
$this->data['base_units'] = $this->site->getAllBaseUnits($this->data['store_id']);
$this->data['warehouses'] = $warehouses;
$this->data['warehouses_products'] = $warehouses_products;
$this->data['product'] = $product;
$this->data['variants'] = $this->products_model->getAllVariants();
$this->data['subunits'] = $this->site->getUnitsByBUID($product->unit);
$this->data['product_variants'] = $this->products_model->getProductOptions($id);
$this->data['product_variant_options'] = $this->db->where('product_id',$id)->get('variant_option')->result();
$this->data['model_categories'] = $this->site->getAllModelCategories();
$this->data['combo_items'] = $product->type == 'combo' ? $this->products_model->getProductComboItems($product->id) : NULL;
$this->data['product_options'] = $id ? $this->products_model->getProductOptionsWithWH($id) : NULL;
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('edit_product')));
$meta = array('page_title' => lang('edit_product'), 'bc' => $bc);
$this->page_construct('products/edit', $meta, $this->data);
}
}
/* ---------------------------------------------------------------- */
function import_csv()
{
$this->sma->checkPermissions('csv');
$this->load->helper('security');
$this->form_validation->set_rules('userfile', lang("upload_file"), 'xss_clean');
if ($this->form_validation->run() == true) {
if (isset($_FILES["userfile"])) {
$this->load->library('upload');
$config['upload_path'] = $this->digital_upload_path;
$config['allowed_types'] = 'csv';
$config['max_size'] = $this->allowed_file_size;
$config['overwrite'] = TRUE;
$config['encrypt_name'] = TRUE;
$config['max_filename'] = 25;
$this->upload->initialize($config);
if (!$this->upload->do_upload()) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
admin_redirect("products/import_csv");
}
$csv = $this->upload->file_name;
$arrResult = array();
$handle = fopen($this->digital_upload_path . $csv, "r");
if ($handle) {
while (($row = fgetcsv($handle, 5000, ",")) !== FALSE) {
$arrResult[] = $row;
}
fclose($handle);
}
$titles = array_shift($arrResult);
$keys = array('name', 'code', 'barcode_symbology', 'brand', 'location', 'category_code', 'unit', 'sale_unit', 'purchase_unit', 'cost', 'price', 'alert_quantity', 'tax_rate', 'tax_method', 'image', 'subcategory_code', 'variants', 'cf1', 'cf2', 'cf3', 'cf4', 'cf5', 'cf6','image_url');
$final = array();
foreach ($arrResult as $key => $value) {
$final[] = array_combine($keys, $value);
}
// $this->sma->print_arrays($final);
$rw = 2; $items = array();
foreach ($final as $csv_pr) {
if ( ! $this->products_model->getProductByCode(trim($this->data['store']->code.$csv_pr['code']))) {
if ($catd = $this->products_model->getCategoryByCode(trim($csv_pr['category_code']))) {
$brand = $this->products_model->getBrandByName(trim($csv_pr['brand']));
$location = $this->products_model->getLocationByName(trim($csv_pr['location']));
$warehouse = $this->products_model->getWarehouseByName(trim($csv_pr['cf1']));
if(!$warehouse)
{
$this->session->set_flashdata('error', "Check warehouse!");
admin_redirect("products/import_csv");
}
$store = $this->products_model->getStoreByCode(trim($csv_pr['cf6']));
$unit = $this->products_model->getUnitByCode(trim($csv_pr['unit']));
$base_unit = $unit ? $unit->id : NULL;
$sale_unit = $base_unit;
$purcahse_unit = $base_unit;
if ($base_unit) {
$units = $this->site->getUnitsByBUID($base_unit);
foreach ($units as $u) {
if ($u->code == trim($csv_pr['sale_unit'])) {
$sale_unit = $u->id;
}
if ($u->code == trim($csv_pr['purchase_unit'])) {
$purcahse_unit = $u->id;
}
}
} else {
$this->session->set_flashdata('error', lang("check_unit") . " (" . $csv_pr['unit'] . "). " . lang("unit_code_x_exist") . " " . lang("line_no") . " " . $rw);
admin_redirect("products/import_csv");
}
$tax_details = $this->products_model->getTaxRateByName(trim($csv_pr['tax_rate']));
$prsubcat = $this->products_model->getCategoryByCode(trim($csv_pr['subcategory_code']));
$items[] = array (
'code' => $this->data['store']->code.trim($csv_pr['code']),
'name' => trim($csv_pr['name']),
'category_id' => $catd->id,
'barcode_symbology' => mb_strtolower(trim($csv_pr['barcode_symbology']), 'UTF-8'),
'brand' => ($brand ? $brand->id : NULL),
'location' => ($location ? $location->id : NULL),
'unit' => $base_unit,
'sale_unit' => $sale_unit,
'purchase_unit' => $purcahse_unit,
'cost' => trim($csv_pr['cost']),
'price' => trim($csv_pr['price']),
'alert_quantity' => trim($csv_pr['alert_quantity']),
'tax_rate' => ($tax_details ? $tax_details->id : NULL),
'tax_method' => ($csv_pr['tax_method'] == 'exclusive' ? 1 : 0),
'subcategory_id' => ($prsubcat ? $prsubcat->id : NULL),
'variants' => trim($csv_pr['variants']),
'image' => trim($csv_pr['image']),
'warehouse' => trim($warehouse->id),
'quantity' => trim($csv_pr['cf2']),
'cf1' => trim($csv_pr['cf3']),
'cf2' => trim($csv_pr['cf4']),
'cf3' => trim($csv_pr['cf5']),
'store_id' => $this->data['store']->id,
'image_url' => trim($csv_pr['image_url']),
);
} else {
$this->session->set_flashdata('error', lang("check_category_code") . " (" . $csv_pr['category_code'] . "). " . lang("category_code_x_exist") . " " . lang("line_no") . " " . $rw);
admin_redirect("products/import_csv");
}
}else{
$this->session->set_flashdata('error', "Product existed!");
admin_redirect("products/import_csv");
}
$rw++;
}
}
// $this->sma->print_arrays($items);
}
if ($this->form_validation->run() == true && $prs = $this->products_model->add_products($items)) {
$this->session->set_flashdata('message', sprintf(lang("products_added"), $prs));
admin_redirect('products');
} else {
$this->data['error'] = (validation_errors() ? validation_errors() : $this->session->flashdata('error'));
$this->data['userfile'] = array('name' => 'userfile',
'id' => 'userfile',
'type' => 'text',
'value' => $this->form_validation->set_value('userfile')
);
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('import_products_by_csv')));
$meta = array('page_title' => lang('import_products_by_csv'), 'bc' => $bc);
$this->page_construct('products/import_csv', $meta, $this->data);
}
}
/* ------------------------------------------------------------------ */
function update_price()
{
$this->sma->checkPermissions('csv');
$this->load->helper('security');
$this->form_validation->set_rules('userfile', lang("upload_file"), 'xss_clean');
if ($this->form_validation->run() == true) {
if (DEMO) {
$this->session->set_flashdata('message', lang("disabled_in_demo"));
admin_redirect('welcome');
}
if (isset($_FILES["userfile"])) {
$this->load->library('upload');
$config['upload_path'] = $this->digital_upload_path;
$config['allowed_types'] = 'csv';
$config['max_size'] = $this->allowed_file_size;
$config['overwrite'] = TRUE;
$config['encrypt_name'] = TRUE;
$config['max_filename'] = 25;
$this->upload->initialize($config);
if (!$this->upload->do_upload()) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
admin_redirect("products");
}
$csv = $this->upload->file_name;
$arrResult = array();
$handle = fopen($this->digital_upload_path . $csv, "r");
if ($handle) {
while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {
$arrResult[] = $row;
}
fclose($handle);
}
$titles = array_shift($arrResult);
$keys = array('code', 'price');
$final = array();
foreach ($arrResult as $key => $value) {
$final[] = array_combine($keys, $value);
}
$rw = 2;
foreach ($final as $csv_pr) {
if (!$this->products_model->getProductByCode(trim($csv_pr['code']))) {
$this->session->set_flashdata('message', lang("check_product_code") . " (" . $csv_pr['code'] . "). " . lang("code_x_exist") . " " . lang("line_no") . " " . $rw);
admin_redirect("products");
}
$rw++;
}
}
} elseif ($this->input->post('update_price')) {
$this->session->set_flashdata('error', validation_errors());
admin_redirect("system_settings/group_product_prices/".$group_id);
}
if ($this->form_validation->run() == true && !empty($final)) {
$this->products_model->updatePrice($final);
$this->session->set_flashdata('message', lang("price_updated"));
admin_redirect('products');
} else {
$this->data['userfile'] = array('name' => 'userfile',
'id' => 'userfile',
'type' => 'text',
'value' => $this->form_validation->set_value('userfile')
);
$this->data['modal_js'] = $this->site->modal_js();
$this->load->view($this->theme.'products/update_price', $this->data);
}
}
/* ------------------------------------------------------------------------------- */
function delete($id = NULL)
{
$this->sma->checkPermissions(NULL, TRUE);
if ($this->input->get('id')) {
$id = $this->input->get('id');
}
//check if product has been used
if($this->db->where('product_id',$id)->get('sale_items')->row())
{
$this->sma->send_json(array('error' => 1, 'msg' => lang("this_product_has_been_used")));
}
if($this->db->where('product_id',$id)->get('adjustment_items')->row())
{
$this->sma->send_json(array('error' => 1, 'msg' => lang("this_product_has_been_used")));
}
if ($this->products_model->deleteProduct($id)) {
if($this->input->is_ajax_request()) {
$this->sma->send_json(array('error' => 0, 'msg' => lang("product_deleted")));
}
$this->session->set_flashdata('message', lang('product_deleted'));
admin_redirect('welcome');
}
}
/* ----------------------------------------------------------------------------- */
function quantity_adjustments($warehouse_id = NULL)
{
$this->sma->checkPermissions('adjustments');
if ($this->Owner || $this->Admin || !$this->session->userdata('warehouse_id')) {
$this->data['warehouses'] = $this->site->getallWarehouses($this->data['store_id']);
$this->data['warehouse'] = $warehouse_id ? $this->site->getWarehouseByID($warehouse_id) : null;
} else {
$this->data['warehouses'] = null;
$this->data['warehouse'] = $this->session->userdata('warehouse_id') ? $this->site->getWarehouseByID($this->session->userdata('warehouse_id')) : null;
}
$this->data['stores'] = $this->site->getAllStores();
$this->data['error'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('error');
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('quantity_adjustments')));
$meta = array('page_title' => lang('quantity_adjustments'), 'bc' => $bc);
$this->page_construct('products/quantity_adjustments', $meta, $this->data);
}
function getadjustments($warehouse_id = NULL)
{
$this->sma->checkPermissions('adjustments');
$delete_link = "<a href='#' class='tip po' title='<b>" . $this->lang->line("delete_adjustment") . "</b>' data-content=\"<p>"
. lang('r_u_sure') . "</p><a class='btn btn-danger po-delete' href='" . admin_url('products/delete_adjustment/$1') . "'>"
. lang('i_m_sure') . "</a> <button class='btn po-close'>" . lang('no') . "</button>\" rel='popover'><i class=\"fa fa-trash-o\"></i></a>";
$this->load->library('datatables');
$this->datatables
->select("{$this->db->dbprefix('adjustments')}.id as id, date, reference_no, warehouses.name as wh_name, CONCAT({$this->db->dbprefix('users')}.first_name, ' ', {$this->db->dbprefix('users')}.last_name) as created_by, note, attachment")
->from('adjustments')
->join('warehouses', 'warehouses.id=adjustments.warehouse_id', 'left')
->join('users', 'users.id=adjustments.created_by', 'left')
->group_by("adjustments.id");
if ($warehouse_id) {
$this->datatables->where('adjustments.warehouse_id', $warehouse_id);
}
if($this->data['store_id']!=0)
{
$this->datatables->where('adjustments.store_id',$this->data['store_id']);
}
$this->datatables->add_column("Actions", "<div class='text-center'><a href='" . admin_url('products/edit_adjustment/$1') . "' class='tip' title='" . lang("edit_adjustment") . "'><i class='fa fa-edit'></i></a> " . $delete_link . "</div>", "id");
echo $this->datatables->generate();
}
public function view_adjustment($id)
{
$this->sma->checkPermissions('adjustments', TRUE);
$adjustment = $this->products_model->getAdjustmentByID($id);
if (!$id || !$adjustment) {
$this->session->set_flashdata('error', lang('adjustment_not_found'));
$this->sma->md();
}
$this->data['inv'] = $adjustment;
$this->data['rows'] = $this->products_model->getAdjustmentItems($id);
$this->data['created_by'] = $this->site->getUser($adjustment->created_by);
$this->data['updated_by'] = $this->site->getUser($adjustment->updated_by);
$this->data['warehouse'] = $this->site->getWarehouseByID($adjustment->warehouse_id);
$this->load->view($this->theme.'products/view_adjustment', $this->data);
}
function add_adjustment($count_id = NULL)
{
$this->sma->checkPermissions('adjustments', true);
$this->form_validation->set_rules('warehouse', lang("warehouse"), 'required');
if ($this->form_validation->run() == true) {
if ($this->Owner || $this->Admin) {
$date = $this->sma->fld($this->input->post('date'));
} else {
$date = date('Y-m-d H:s:i');
}
$reference_no = $this->input->post('reference_no') ? $this->input->post('reference_no') : $this->site->getReference('qa');
$warehouse_id = $this->input->post('warehouse');
$note = $this->sma->clear_tags($this->input->post('note'));
$i = isset($_POST['product_id']) ? sizeof($_POST['product_id']) : 0;
for ($r = 0; $r < $i; $r++) {
$product_id = $_POST['product_id'][$r];
$type = $_POST['type'][$r];
$quantity = $_POST['quantity'][$r];
$serial = $_POST['serial'][$r];
$variant = isset($_POST['variant'][$r]) && !empty($_POST['variant'][$r]) ? $_POST['variant'][$r] : NULL;
if (!$this->Settings->overselling && $type == 'subtraction') {
if ($variant) {
if($op_wh_qty = $this->products_model->getProductWarehouseOptionQty($variant, $warehouse_id)) {
if ($op_wh_qty->quantity < $quantity) {
$this->session->set_flashdata('error', lang('warehouse_option_qty_is_less_than_damage'));
redirect($_SERVER["HTTP_REFERER"]);
}
} else {
$this->session->set_flashdata('error', lang('warehouse_option_qty_is_less_than_damage'));
redirect($_SERVER["HTTP_REFERER"]);
}
}
if($wh_qty = $this->products_model->getProductQuantity($product_id, $warehouse_id)) {
if ($wh_qty['quantity'] < $quantity) {
$this->session->set_flashdata('error', lang('warehouse_qty_is_less_than_damage'));
redirect($_SERVER["HTTP_REFERER"]);
}
} else {
$this->session->set_flashdata('error', lang('warehouse_qty_is_less_than_damage'));
redirect($_SERVER["HTTP_REFERER"]);
}
}
$products[] = array(
'product_id' => $product_id,
'type' => $type,
'quantity' => $quantity,
'warehouse_id' => $warehouse_id,
'option_id' => $variant,
'serial_no' => $serial,
);
}
if (empty($products)) {
$this->form_validation->set_rules('product', lang("products"), 'required');
} else {
krsort($products);
}
$data = array(
'date' => $date,
'reference_no' => $reference_no,
'warehouse_id' => $warehouse_id,
'note' => $note,
'created_by' => $this->session->userdata('user_id'),
'count_id' => $this->input->post('count_id') ? $this->input->post('count_id') : NULL,
);
if($this->data['store_id']==0)
{
$data['store_id'] = $this->input->post('store');
}else{
$data['store_id'] =$this->data['store_id'];
}
if ($_FILES['document']['size'] > 0) {
$this->load->library('upload');
$config['upload_path'] = $this->digital_upload_path;
$config['allowed_types'] = $this->digital_file_types;
$config['max_size'] = $this->allowed_file_size;
$config['overwrite'] = false;
$config['encrypt_name'] = true;
$this->upload->initialize($config);
if (!$this->upload->do_upload('document')) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
redirect($_SERVER["HTTP_REFERER"]);
}
$photo = $this->upload->file_name;
$data['attachment'] = $photo;
}
// $this->sma->print_arrays($data, $products);
}
if ($this->form_validation->run() == true && $this->products_model->addAdjustment($data, $products)) {
$this->session->set_userdata('remove_qals', 1);
$this->session->set_flashdata('message', lang("quantity_adjusted"));
admin_redirect('products/quantity_adjustments');
} else {
if ($count_id) {
$stock_count = $this->products_model->getStouckCountByID($count_id);
$items = $this->products_model->getStockCountItems($count_id);
$c = rand(100000, 9999999);
foreach ($items as $item) {
if ($item->counted != $item->expected) {
$product = $this->site->getProductByID($item->product_id);
$row = json_decode('{}');
$row->id = $item->product_id;
$row->code = $product->code;
$row->name = $product->name;
$row->qty = $item->counted-$item->expected;
$row->type = $row->qty > 0 ? 'addition' : 'subtraction';
$row->qty = $row->qty > 0 ? $row->qty : (0-$row->qty);
$options = $this->products_model->getProductOptions($product->id);
$row->option = $item->product_variant_id ? $item->product_variant_id : 0;
$row->serial = '';
$ri = $this->Settings->item_addition ? $product->id : $c;
$pr[$ri] = array('id' => str_replace(".", "", microtime(true)), 'item_id' => $row->id, 'label' => $row->name . " (" . $row->code . ")",
'row' => $row, 'options' => $options);
$c++;
}
}
}
$this->data['adjustment_items'] = $count_id ? json_encode($pr) : FALSE;
$this->data['warehouse_id'] = $count_id ? $stock_count->warehouse_id : FALSE;
$this->data['count_id'] = $count_id;
$this->data['stores'] = $this->site->getAllStores();
$this->data['error'] = (validation_errors() ? validation_errors() : $this->session->flashdata('error'));
$this->data['warehouses'] = $this->site->getallWarehouses($this->data['store_id']);
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('add_adjustment')));
$meta = array('page_title' => lang('add_adjustment'), 'bc' => $bc);
$this->page_construct('products/add_adjustment', $meta, $this->data);
}
}
function edit_adjustment($id)
{
$this->sma->checkPermissions('adjustments', true);
$adjustment = $this->products_model->getAdjustmentByID($id);
if (!$id || !$adjustment) {
$this->session->set_flashdata('error', lang('adjustment_not_found'));
$this->sma->md();
}
$this->form_validation->set_rules('warehouse', lang("warehouse"), 'required');
if ($this->form_validation->run() == true) {
if ($this->Owner || $this->Admin) {
$date = $this->sma->fld($this->input->post('date'));
} else {
$date = $adjustment->date;
}
$reference_no = $this->input->post('reference_no');
$warehouse_id = $this->input->post('warehouse');
$note = $this->sma->clear_tags($this->input->post('note'));
$i = isset($_POST['product_id']) ? sizeof($_POST['product_id']) : 0;
for ($r = 0; $r < $i; $r++) {
$product_id = $_POST['product_id'][$r];
$type = $_POST['type'][$r];
$quantity = $_POST['quantity'][$r];
$serial = $_POST['serial'][$r];
$variant = isset($_POST['variant'][$r]) && !empty($_POST['variant'][$r]) ? $_POST['variant'][$r] : null;
if (!$this->Settings->overselling && $type == 'subtraction') {
if ($variant) {
if($op_wh_qty = $this->products_model->getProductWarehouseOptionQty($variant, $warehouse_id)) {
if ($op_wh_qty->quantity < $quantity) {
$this->session->set_flashdata('error', lang('warehouse_option_qty_is_less_than_damage'));
redirect($_SERVER["HTTP_REFERER"]);
}
} else {
$this->session->set_flashdata('error', lang('warehouse_option_qty_is_less_than_damage'));
redirect($_SERVER["HTTP_REFERER"]);
}
}
if($wh_qty = $this->products_model->getProductQuantity($product_id, $warehouse_id)) {
if ($wh_qty['quantity'] < $quantity) {
$this->session->set_flashdata('error', lang('warehouse_qty_is_less_than_damage'));
redirect($_SERVER["HTTP_REFERER"]);
}
} else {
$this->session->set_flashdata('error', lang('warehouse_qty_is_less_than_damage'));
redirect($_SERVER["HTTP_REFERER"]);
}
}
$products[] = array(
'product_id' => $product_id,
'type' => $type,
'quantity' => $quantity,
'warehouse_id' => $warehouse_id,
'option_id' => $variant,
'serial_no' => $serial,
);
}
if (empty($products)) {
$this->form_validation->set_rules('product', lang("products"), 'required');
} else {
krsort($products);
}
$data = array(
'date' => $date,
'reference_no' => $reference_no,
'warehouse_id' => $warehouse_id,
'note' => $note,
'created_by' => $this->session->userdata('user_id')
);
if ($_FILES['document']['size'] > 0) {
$this->load->library('upload');
$config['upload_path'] = $this->digital_upload_path;
$config['allowed_types'] = $this->digital_file_types;
$config['max_size'] = $this->allowed_file_size;
$config['overwrite'] = false;
$config['encrypt_name'] = true;
$this->upload->initialize($config);
if (!$this->upload->do_upload('document')) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
redirect($_SERVER["HTTP_REFERER"]);
}
$photo = $this->upload->file_name;
$data['attachment'] = $photo;
}
// $this->sma->print_arrays($data, $products);
}
if ($this->form_validation->run() == true && $this->products_model->updateAdjustment($id, $data, $products)) {
$this->session->set_userdata('remove_qals', 1);
$this->session->set_flashdata('message', lang("quantity_adjusted"));
admin_redirect('products/quantity_adjustments');
} else {
$inv_items = $this->products_model->getAdjustmentItems($id);
krsort($inv_items);
$c = rand(100000, 9999999);
foreach ($inv_items as $item) {
$product = $this->site->getProductByID($item->product_id);
$row = json_decode('{}');
$row->id = $item->product_id;
$row->code = $product->code;
$row->name = $product->name;
$row->qty = $item->quantity;
$row->type = $item->type;
$options = $this->products_model->getProductOptions($product->id);
$row->option = $item->option_id ? $item->option_id : 0;
$row->serial = $item->serial_no ? $item->serial_no : '';
$ri = $this->Settings->item_addition ? $product->id : $c;
$pr[$ri] = array('id' => str_replace(".", "", microtime(true)), 'item_id' => $row->id, 'label' => $row->name . " (" . $row->code . ")",
'row' => $row, 'options' => $options);
$c++;
}
$this->data['adjustment'] = $adjustment;
$this->data['adjustment_items'] = json_encode($pr);
$this->data['error'] = (validation_errors() ? validation_errors() : $this->session->flashdata('error'));
$this->data['warehouses'] = $this->site->getallWarehouses($this->data['store_id']);
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('edit_adjustment')));
$meta = array('page_title' => lang('edit_adjustment'), 'bc' => $bc);
$this->page_construct('products/edit_adjustment', $meta, $this->data);
}
}
function add_adjustment_by_csv()
{
$this->sma->checkPermissions('adjustments', true);
$this->form_validation->set_rules('warehouse', lang("warehouse"), 'required');
if ($this->form_validation->run() == true) {
if ($this->Owner || $this->Admin) {
$date = $this->sma->fld($this->input->post('date'));
} else {
$date = date('Y-m-d H:s:i');
}
$reference_no = $this->input->post('reference_no') ? $this->input->post('reference_no') : $this->site->getReference('qa');
$warehouse_id = $this->input->post('warehouse');
$note = $this->sma->clear_tags($this->input->post('note'));
$data = array(
'date' => $date,
'reference_no' => $reference_no,
'warehouse_id' => $warehouse_id,
'note' => $note,
'created_by' => $this->session->userdata('user_id'),
'store_id' => $this->data['store_id'],
'count_id' => NULL,
);
if ($_FILES['csv_file']['size'] > 0) {
$this->load->library('upload');
$config['upload_path'] = $this->digital_upload_path;
$config['allowed_types'] = 'csv';
$config['max_size'] = $this->allowed_file_size;
$config['overwrite'] = false;
$config['encrypt_name'] = true;
$this->upload->initialize($config);
if (!$this->upload->do_upload('csv_file')) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
redirect($_SERVER["HTTP_REFERER"]);
}
$csv = $this->upload->file_name;
$data['attachment'] = $csv;
$arrResult = array();
$handle = fopen($this->digital_upload_path . $csv, "r");
if ($handle) {
while (($row = fgetcsv($handle, 5000, ",")) !== FALSE) {
$arrResult[] = $row;
}
fclose($handle);
}
$titles = array_shift($arrResult);
$keys = array('code', 'quantity', 'variant');
$final = array();
foreach ($arrResult as $key => $value) {
$final[] = array_combine($keys, $value);
}
// $this->sma->print_arrays($final);
$rw = 2;
foreach ($final as $pr) {
if ($product = $this->products_model->getProductByCode(trim($pr['code']))) {
$csv_variant = trim($pr['variant']);
$variant = !empty($csv_variant) ? $this->products_model->getProductVariantID($product->id, $csv_variant) : FALSE;
$csv_quantity = trim($pr['quantity']);
$type = $csv_quantity > 0 ? 'addition' : 'subtraction';
$quantity = $csv_quantity > 0 ? $csv_quantity : (0-$csv_quantity);
if (!$this->Settings->overselling && $type == 'subtraction') {
if ($variant) {
if($op_wh_qty = $this->products_model->getProductWarehouseOptionQty($variant, $warehouse_id)) {
if ($op_wh_qty->quantity < $quantity) {
$this->session->set_flashdata('error', lang('warehouse_option_qty_is_less_than_damage'). ' - ' . lang('line_no') . ' ' . $rw);
redirect($_SERVER["HTTP_REFERER"]);
}
} else {
$this->session->set_flashdata('error', lang('warehouse_option_qty_is_less_than_damage'). ' - ' . lang('line_no') . ' ' . $rw);
redirect($_SERVER["HTTP_REFERER"]);
}
}
if($wh_qty = $this->products_model->getProductQuantity($product->id, $warehouse_id)) {
if ($wh_qty['quantity'] < $quantity) {
$this->session->set_flashdata('error', lang('warehouse_qty_is_less_than_damage'). ' - ' . lang('line_no') . ' ' . $rw);
redirect($_SERVER["HTTP_REFERER"]);
}
} else {
$this->session->set_flashdata('error', lang('warehouse_qty_is_less_than_damage'). ' - ' . lang('line_no') . ' ' . $rw);
redirect($_SERVER["HTTP_REFERER"]);
}
}
$products[] = array(
'product_id' => $product->id,
'type' => $type,
'quantity' => $quantity,
'warehouse_id' => $warehouse_id,
'option_id' => $variant,
);
} else {
$this->session->set_flashdata('error', lang('check_product_code') . ' (' . $pr['code'] . '). ' . lang('product_code_x_exist') . ' ' . lang('line_no') . ' ' . $rw);
redirect($_SERVER["HTTP_REFERER"]);
}
$rw++;
}
} else {
$this->form_validation->set_rules('csv_file', lang("upload_file"), 'required');
}
// $this->sma->print_arrays($data, $products);
}
if ($this->form_validation->run() == true && $this->products_model->addAdjustment($data, $products)) {
$this->session->set_flashdata('message', lang("quantity_adjusted"));
admin_redirect('products/quantity_adjustments');
} else {
$this->data['error'] = (validation_errors() ? validation_errors() : $this->session->flashdata('error'));
$this->data['warehouses'] = $this->site->getallWarehouses($this->data['store_id']);
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('add_adjustment')));
$meta = array('page_title' => lang('add_adjustment_by_csv'), 'bc' => $bc);
$this->page_construct('products/add_adjustment_by_csv', $meta, $this->data);
}
}
function delete_adjustment($id = NULL)
{
$this->sma->checkPermissions('delete', TRUE);
//$this->sma->send_json(array('error' =>1 , 'msg' => lang("Can not delete adjustment that has been submitted")));
if ($this->products_model->deleteAdjustment($id)) {
$this->sma->send_json(array('error' => 0, 'msg' => lang("adjustment_deleted")));
}
}
/* --------------------------------------------------------------------------------------------- */
function modal_view($id = NULL)
{
$this->sma->checkPermissions('index', TRUE);
$pr_details = $this->site->getProductByID($id);
if (!$id || !$pr_details) {
$this->session->set_flashdata('error', lang('prduct_not_found'));
$this->sma->md();
}
$this->data['barcode'] = "<img src='" . admin_url('products/gen_barcode/' . $pr_details->code . '/' . $pr_details->barcode_symbology . '/40/0') . "' alt='" . $pr_details->code . "' class='pull-left' />";
if ($pr_details->type == 'combo') {
$this->data['combo_items'] = $this->products_model->getProductComboItems($id);
}
$this->data['product'] = $pr_details;
$this->data['unit'] = $this->site->getUnitByID($pr_details->unit);
$this->data['brand'] = $this->site->getBrandByID($pr_details->brand);
$this->data['images'] = $this->products_model->getProductPhotos($id);
$this->data['category'] = $this->site->getCategoryByID($pr_details->category_id);
$this->data['subcategory'] = $pr_details->subcategory_id ? $this->site->getCategoryByID($pr_details->subcategory_id) : NULL;
$this->data['tax_rate'] = $pr_details->tax_rate ? $this->site->getTaxRateByID($pr_details->tax_rate) : NULL;
$this->data['warehouses'] = $this->products_model->getAllWarehousesWithPQ($id);
$this->data['options'] = $this->products_model->getProductOptionsWithWH($id);
$this->data['variants'] = $this->products_model->getProductOptions($id);
$this->load->view($this->theme.'products/modal_view', $this->data);
}
function view($id = NULL)
{
$this->sma->checkPermissions('index');
$pr_details = $this->products_model->getProductByID($id);
if (!$id || !$pr_details) {
$this->session->set_flashdata('error', lang('prduct_not_found'));
redirect($_SERVER["HTTP_REFERER"]);
}
$this->data['barcode'] = "<img src='" . admin_url('products/gen_barcode/' . $pr_details->code . '/' . $pr_details->barcode_symbology . '/40/0') . "' alt='" . $pr_details->code . "' class='pull-left' />";
if ($pr_details->type == 'combo') {
$this->data['combo_items'] = $this->products_model->getProductComboItems($id);
}
$this->data['product'] = $pr_details;
$this->data['unit'] = $this->site->getUnitByID($pr_details->unit);
$this->data['brand'] = $this->site->getBrandByID($pr_details->brand);
$this->data['location'] = $this->site->getLocationByID($pr_details->location);
$this->data['images'] = $this->products_model->getProductPhotos($id);
$this->data['category'] = $this->site->getCategoryByID($pr_details->category_id);
$this->data['subcategory'] = $pr_details->subcategory_id ? $this->site->getCategoryByID($pr_details->subcategory_id) : NULL;
$this->data['tax_rate'] = $pr_details->tax_rate ? $this->site->getTaxRateByID($pr_details->tax_rate) : NULL;
$this->data['popup_attributes'] = $this->popup_attributes;
$this->data['warehouses'] = $this->products_model->getAllWarehousesWithPQ($id);
$this->data['options'] = $this->products_model->getProductOptionsWithWH($id);
$this->data['variants'] = $this->products_model->getProductOptions($id);
$this->data['sold'] = $this->products_model->getSoldQty($id);
$this->data['purchased'] = $this->products_model->getPurchasedQty($id);
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => $pr_details->name));
$meta = array('page_title' => $pr_details->name, 'bc' => $bc);
$this->page_construct('products/view', $meta, $this->data);
}
function pdf($id = NULL, $view = NULL)
{
$this->sma->checkPermissions('index');
$pr_details = $this->products_model->getProductByID($id);
if (!$id || !$pr_details) {
$this->session->set_flashdata('error', lang('prduct_not_found'));
redirect($_SERVER["HTTP_REFERER"]);
}
$this->data['barcode'] = "<img src='" . admin_url('products/gen_barcode/' . $pr_details->code . '/' . $pr_details->barcode_symbology . '/40/0') . "' alt='" . $pr_details->code . "' class='pull-left' />";
if ($pr_details->type == 'combo') {
$this->data['combo_items'] = $this->products_model->getProductComboItems($id);
}
$this->data['product'] = $pr_details;
$this->data['unit'] = $this->site->getUnitByID($pr_details->unit);
$this->data['brand'] = $this->site->getBrandByID($pr_details->brand);
$this->data['images'] = $this->products_model->getProductPhotos($id);
$this->data['category'] = $this->site->getCategoryByID($pr_details->category_id);
$this->data['subcategory'] = $pr_details->subcategory_id ? $this->site->getCategoryByID($pr_details->subcategory_id) : NULL;
$this->data['tax_rate'] = $pr_details->tax_rate ? $this->site->getTaxRateByID($pr_details->tax_rate) : NULL;
$this->data['popup_attributes'] = $this->popup_attributes;
$this->data['warehouses'] = $this->products_model->getAllWarehousesWithPQ($id);
$this->data['options'] = $this->products_model->getProductOptionsWithWH($id);
$this->data['variants'] = $this->products_model->getProductOptions($id);
$name = $pr_details->code . '_' . str_replace('/', '_', $pr_details->name) . ".pdf";
if ($view) {
$this->load->view($this->theme . 'products/pdf', $this->data);
} else {
$html = $this->load->view($this->theme . 'products/pdf', $this->data, TRUE);
if (! $this->Settings->barcode_img) {
$html = preg_replace("'\<\?xml(.*)\?\>'", '', $html);
}
$this->sma->generate_pdf($html, $name);
}
}
function getSubCategories($category_id = NULL)
{
if ($rows = $this->products_model->getSubCategories($category_id)) {
$data = json_encode($rows);
} else {
$data = false;
}
echo $data;
}
function getFeatures($model_category_id = NULL)
{
if ($rows = $this->products_model->getFeatures($model_category_id)) {
$data = json_encode($rows);
} else {
$data = false;
}
echo $data;
}
function getModelSubcategories($parent_id = NULL)
{
if ($rows = $this->products_model->getModelSubcategories($parent_id)) {
$data = json_encode($rows);
} else {
$data = false;
}
echo $data;
}
function getWarehousesByStore($store_id = Null)
{
if ($rows = $this->products_model->getWarehousesByStore($store_id)) {
$data = json_encode($rows);
} else {
$data = false;
}
echo $data;
}
function product_actions($wh = NULL)
{
if (!$this->Owner && !$this->GP['bulk_actions']) {
$this->session->set_flashdata('warning', lang('access_denied'));
redirect($_SERVER["HTTP_REFERER"]);
}
$this->form_validation->set_rules('form_action', lang("form_action"), 'required');
if ($this->form_validation->run() == true) {
if (!empty($_POST['val'])) {
if ($this->input->post('form_action') == 'sync_quantity') {
foreach ($_POST['val'] as $id) {
$this->site->syncQuantity(NULL, NULL, NULL, $id);
}
$this->session->set_flashdata('message', $this->lang->line("products_quantity_sync"));
redirect($_SERVER["HTTP_REFERER"]);
} elseif ($this->input->post('form_action') == 'delete') {
$this->sma->checkPermissions('delete');
foreach ($_POST['val'] as $id) {
if($this->db->where('product_id',$id)->get('sale_items')->row())
{
continue;
}
if($this->db->where('product_id',$id)->get('adjustment_items')->row())
{
continue;
}
$this->products_model->deleteProduct($id);
}
$this->session->set_flashdata('message', $this->lang->line("products_deleted"));
redirect($_SERVER["HTTP_REFERER"]);
} elseif ($this->input->post('form_action') == 'labels') {
foreach ($_POST['val'] as $id) {
$row = $this->products_model->getProductByID($id);
$selected_variants = false;
if ($variants = $this->products_model->getProductOptions($row->id)) {
foreach ($variants as $variant) {
$selected_variants[$variant->id] = $variant->quantity > 0 ? 1 : 0;
}
}
$pr[$row->id] = array('id' => $row->id, 'label' => $row->name . " (" . $row->code . ")", 'code' => $row->code, 'name' => $row->name, 'price' => $row->price, 'qty' => $row->quantity, 'variants' => $variants, 'selected_variants' => $selected_variants);
}
$this->data['items'] = isset($pr) ? json_encode($pr) : false;
$this->data['error'] = (validation_errors() ? validation_errors() : $this->session->flashdata('error'));
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('print_barcodes')));
$meta = array('page_title' => lang('print_barcodes'), 'bc' => $bc);
$this->page_construct('products/print_barcodes', $meta, $this->data);
} elseif ($this->input->post('form_action') == 'export_excel') {
$this->load->library('excel');
$this->excel->setActiveSheetIndex(0);
$this->excel->getActiveSheet()->setTitle('Products');
$this->excel->getActiveSheet()->SetCellValue('A1', lang('name'));
$this->excel->getActiveSheet()->SetCellValue('B1', lang('code'));
$this->excel->getActiveSheet()->SetCellValue('C1', lang('barcode_symbology'));
$this->excel->getActiveSheet()->SetCellValue('D1', lang('brand'));
$this->excel->getActiveSheet()->SetCellValue('E1', lang('category_code'));
$this->excel->getActiveSheet()->SetCellValue('F1', lang('unit_code'));
$this->excel->getActiveSheet()->SetCellValue('G1', lang('sale').' '.lang('unit_code'));
$this->excel->getActiveSheet()->SetCellValue('H1', lang('purchase').' '.lang('unit_code'));
$this->excel->getActiveSheet()->SetCellValue('I1', lang('cost'));
$this->excel->getActiveSheet()->SetCellValue('J1', lang('price'));
$this->excel->getActiveSheet()->SetCellValue('K1', lang('alert_quantity'));
$this->excel->getActiveSheet()->SetCellValue('L1', lang('tax_rate'));
$this->excel->getActiveSheet()->SetCellValue('M1', lang('tax_method'));
$this->excel->getActiveSheet()->SetCellValue('N1', lang('image'));
$this->excel->getActiveSheet()->SetCellValue('O1', lang('subcategory_code'));
$this->excel->getActiveSheet()->SetCellValue('P1', lang('product_variants'));
$this->excel->getActiveSheet()->SetCellValue('Q1', lang('pcf1'));
$this->excel->getActiveSheet()->SetCellValue('R1', lang('pcf2'));
$this->excel->getActiveSheet()->SetCellValue('S1', lang('pcf3'));
$this->excel->getActiveSheet()->SetCellValue('T1', lang('pcf4'));
$this->excel->getActiveSheet()->SetCellValue('U1', lang('pcf5'));
$this->excel->getActiveSheet()->SetCellValue('V1', lang('pcf6'));
$this->excel->getActiveSheet()->SetCellValue('W1', lang('quantity'));
$this->excel->getActiveSheet()->SetCellValue('X1', lang('location'));
$row = 2;
foreach ($_POST['val'] as $id) {
$product = $this->products_model->getProductDetail($id);
$brand = $this->site->getBrandByID($product->brand);
$base_unit = $sale_unit = $purchase_unit = '';
if($units = $this->site->getUnitsByBUID($product->unit)) {
foreach($units as $u) {
if ($u->id == $product->unit) {
$base_unit = $u->code;
}
if ($u->id == $product->sale_unit) {
$sale_unit = $u->code;
}
if ($u->id == $product->purchase_unit) {
$purchase_unit = $u->code;
}
}
}
$variants = $this->products_model->getProductOptions($id);
$product_variants = '';
if ($variants) {
foreach ($variants as $variant) {
$product_variants .= trim($variant->name) . '|';
}
}
if ($wh) {
$quantity =$this->db->select_sum('quantity')->where('warehouse_id',$wh)->where('product_id',$product->id)->get('warehouses_products')->row();
}else{
$quantity =$this->db->select_sum('quantity')->where('product_id',$product->id)->get('warehouses_products')->row();
}
$quantity = $quantity->quantity;
$this->excel->getActiveSheet()->SetCellValue('A' . $row, $product->name);
$this->excel->getActiveSheet()->SetCellValue('B' . $row, $product->code);
$this->excel->getActiveSheet()->SetCellValue('C' . $row, $product->barcode_symbology);
$this->excel->getActiveSheet()->SetCellValue('D' . $row, ($brand ? $brand->name : ''));
$this->excel->getActiveSheet()->SetCellValue('E' . $row, $product->category_code);
$this->excel->getActiveSheet()->SetCellValue('F' . $row, $base_unit);
$this->excel->getActiveSheet()->SetCellValue('G' . $row, $sale_unit);
$this->excel->getActiveSheet()->SetCellValue('H' . $row, $purchase_unit);
if ($this->Owner || $this->Admin || $this->session->userdata('show_cost')) {
$this->excel->getActiveSheet()->SetCellValue('I' . $row, $product->cost);
}
if ($this->Owner || $this->Admin || $this->session->userdata('show_price')) {
$this->excel->getActiveSheet()->SetCellValue('J' . $row, $product->price);
}
$this->excel->getActiveSheet()->SetCellValue('K' . $row, $product->alert_quantity);
$this->excel->getActiveSheet()->SetCellValue('L' . $row, $product->tax_rate_name);
$this->excel->getActiveSheet()->SetCellValue('M' . $row, $product->tax_method ? lang('exclusive') : lang('inclusive'));
$this->excel->getActiveSheet()->SetCellValue('N' . $row, $product->image);
$this->excel->getActiveSheet()->SetCellValue('O' . $row, $product->subcategory_code);
$this->excel->getActiveSheet()->SetCellValue('P' . $row, $product_variants);
$this->excel->getActiveSheet()->SetCellValue('Q' . $row, $product->cf1);
$this->excel->getActiveSheet()->SetCellValue('R' . $row, $product->cf2);
$this->excel->getActiveSheet()->SetCellValue('S' . $row, $product->cf3);
$this->excel->getActiveSheet()->SetCellValue('T' . $row, $product->cf4);
$this->excel->getActiveSheet()->SetCellValue('U' . $row, $product->cf5);
$this->excel->getActiveSheet()->SetCellValue('V' . $row, $product->cf6);
$this->excel->getActiveSheet()->SetCellValue('W' . $row, $quantity);
$this->excel->getActiveSheet()->SetCellValue('X' . $row, ($product->location ? $product->location : ''));
$row++;
}
$this->excel->getActiveSheet()->getColumnDimension('A')->setWidth(30);
$this->excel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
$this->excel->getActiveSheet()->getColumnDimension('D')->setWidth(15);
$this->excel->getActiveSheet()->getColumnDimension('E')->setWidth(20);
$this->excel->getActiveSheet()->getColumnDimension('N')->setWidth(40);
$this->excel->getActiveSheet()->getColumnDimension('O')->setWidth(30);
$this->excel->getActiveSheet()->getColumnDimension('P')->setWidth(30);
$this->excel->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$filename = 'products_' . date('Y_m_d_H_i_s');
$this->load->helper('excel');
return create_excel($this->excel, $filename);
}
} else {
$this->session->set_flashdata('error', $this->lang->line("no_product_selected"));
redirect($_SERVER["HTTP_REFERER"]);
}
} else {
$this->session->set_flashdata('error', validation_errors());
redirect(isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : 'admin/products');
}
}
public function delete_image($id = NULL)
{
$this->sma->checkPermissions('edit', true);
if ($id && $this->input->is_ajax_request()) {
header('Content-Type: application/json');
$this->db->delete('product_photos', array('id' => $id));
$this->sma->send_json(array('error' => 0, 'msg' => lang("image_deleted")));
}
$this->sma->send_json(array('error' => 1, 'msg' => lang("ajax_error")));
}
public function getSubUnits($unit_id)
{
// $unit = $this->site->getUnitByID($unit_id);
// if ($units = $this->site->getUnitsByBUID($unit_id)) {
// array_push($units, $unit);
// } else {
// $units = array($unit);
// }
$units = $this->site->getUnitsByBUID($unit_id);
// var_dump($units);die;
$this->sma->send_json($units);
}
public function qa_suggestions()
{
$term = $this->input->get('term', true);
if (strlen($term) < 1 || !$term) {
die("<script type='text/javascript'>setTimeout(function(){ window.top.location.href = '" . admin_url('welcome') . "'; }, 10);</script>");
}
$analyzed = $this->sma->analyze_term($term);
$sr = $analyzed['term'];
$option_id = $analyzed['option_id'];
$rows = $this->products_model->getQASuggestions($sr);
if ($rows) {
foreach ($rows as $row) {
$row->qty = 1;
$options = $this->products_model->getProductOptions($row->id);
$row->option = $option_id;
$row->serial = '';
$pr[] = array('id' => str_replace(".", "", microtime(true)), 'item_id' => $row->id, 'label' => $row->name . " (" . $row->code . ")",
'row' => $row, 'options' => $options);
}
$this->sma->send_json($pr);
} else {
$this->sma->send_json(array(array('id' => 0, 'label' => lang('no_match_found'), 'value' => $term)));
}
}
function adjustment_actions()
{
if (!$this->Owner && !$this->GP['bulk_actions']) {
$this->session->set_flashdata('warning', lang('access_denied'));
redirect($_SERVER["HTTP_REFERER"]);
}
$this->form_validation->set_rules('form_action', lang("form_action"), 'required');
if ($this->form_validation->run() == true) {
if (!empty($_POST['val'])) {
if ($this->input->post('form_action') == 'delete') {
$this->sma->checkPermissions('delete');
foreach ($_POST['val'] as $id) {
$this->products_model->deleteAdjustment($id);
}
$this->session->set_flashdata('error', $this->lang->line("Can not delete adjustment that has been submitted!"));
redirect($_SERVER["HTTP_REFERER"]);
} elseif ($this->input->post('form_action') == 'export_excel') {
$this->load->library('excel');
$this->excel->setActiveSheetIndex(0);
$this->excel->getActiveSheet()->setTitle('quantity_adjustments');
$this->excel->getActiveSheet()->SetCellValue('A1', lang('date'));
$this->excel->getActiveSheet()->SetCellValue('B1', lang('reference_no'));
$this->excel->getActiveSheet()->SetCellValue('C1', lang('warehouse'));
$this->excel->getActiveSheet()->SetCellValue('D1', lang('created_by'));
$this->excel->getActiveSheet()->SetCellValue('E1', lang('note'));
$this->excel->getActiveSheet()->SetCellValue('F1', lang('items'));
$row = 2;
foreach ($_POST['val'] as $id) {
$adjustment = $this->products_model->getAdjustmentByID($id);
$created_by = $this->site->getUser($adjustment->created_by);
$warehouse = $this->site->getWarehouseByID($adjustment->warehouse_id);
$items = $this->products_model->getAdjustmentItems($id);
$products = '';
if ($items) {
foreach ($items as $item) {
$products .= $item->product_name.'('.$this->sma->formatQuantity($item->type == 'subtraction' ? -$item->quantity : $item->quantity).')'."\n";
}
}
$this->excel->getActiveSheet()->SetCellValue('A' . $row, $this->sma->hrld($adjustment->date));
$this->excel->getActiveSheet()->SetCellValue('B' . $row, $adjustment->reference_no);
$this->excel->getActiveSheet()->SetCellValue('C' . $row, $warehouse->name);
$this->excel->getActiveSheet()->SetCellValue('D' . $row, $created_by->first_name.' ' .$created_by->last_name);
$this->excel->getActiveSheet()->SetCellValue('E' . $row, $this->sma->decode_html($adjustment->note));
$this->excel->getActiveSheet()->SetCellValue('F' . $row, $products);
$row++;
}
$this->excel->getActiveSheet()->getColumnDimension('A')->setWidth(20);
$this->excel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
$this->excel->getActiveSheet()->getColumnDimension('C')->setWidth(15);
$this->excel->getActiveSheet()->getColumnDimension('D')->setWidth(20);
$this->excel->getActiveSheet()->getColumnDimension('E')->setWidth(40);
$this->excel->getActiveSheet()->getColumnDimension('F')->setWidth(30);
$this->excel->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$filename = 'quantity_adjustments_' . date('Y_m_d_H_i_s');
$this->load->helper('excel');
return create_excel($this->excel, $filename);
}
} else {
$this->session->set_flashdata('error', $this->lang->line("no_record_selected"));
redirect($_SERVER["HTTP_REFERER"]);
}
} else {
$this->session->set_flashdata('error', validation_errors());
redirect($_SERVER["HTTP_REFERER"]);
}
}
function stock_counts($warehouse_id = NULL)
{
$this->sma->checkPermissions('stock_count');
$this->data['error'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('error');
if ($this->Owner || $this->Admin || !$this->session->userdata('warehouse_id')) {
$this->data['warehouses'] = $this->site->getallWarehouses($this->data['store_id']);
$this->data['warehouse_id'] = $warehouse_id;
$this->data['warehouse'] = $warehouse_id ? $this->site->getWarehouseByID($warehouse_id) : NULL;
} else {
$this->data['warehouses'] = NULL;
$this->data['warehouse_id'] = $this->session->userdata('warehouse_id');
$this->data['warehouse'] = $this->session->userdata('warehouse_id') ? $this->site->getWarehouseByID($this->session->userdata('warehouse_id')) : NULL;
}
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('stock_counts')));
$meta = array('page_title' => lang('stock_counts'), 'bc' => $bc);
$this->page_construct('products/stock_counts', $meta, $this->data);
}
function getCounts($warehouse_id = NULL)
{
$this->sma->checkPermissions('stock_count', TRUE);
if ((! $this->Owner || ! $this->Admin) && ! $warehouse_id) {
$user = $this->site->getUser();
$warehouse_id = $user->warehouse_id;
}
$detail_link = anchor('admin/products/view_count/$1', '<label class="label label-primary pointer">'.lang('details').'</label>', 'class="tip" title="'.lang('details').'" data-toggle="modal" data-target="#myModal"');
$this->load->library('datatables');
$this->datatables
->select("{$this->db->dbprefix('stock_counts')}.id as id, date, reference_no, {$this->db->dbprefix('warehouses')}.name as wh_name, type, brand_names, category_names, initial_file, final_file")
->from('stock_counts')
->where('stock_counts.store_id',$this->data['store_id'])
->join('warehouses', 'warehouses.id=stock_counts.warehouse_id', 'left');
if ($warehouse_id) {
$this->datatables->where('warehouse_id', $warehouse_id);
}
$this->datatables->add_column('Actions', '<div class="text-center">'.$detail_link.'</div>', "id");
echo $this->datatables->generate();
}
function view_count($id)
{
$this->sma->checkPermissions('stock_count', TRUE);
$stock_count = $this->products_model->getStouckCountByID($id);
if ( ! $stock_count->finalized) {
$this->sma->md('admin/products/finalize_count/'.$id);
}
$this->data['stock_count'] = $stock_count;
$this->data['stock_count_items'] = $this->products_model->getStockCountItems($id);
$this->data['warehouse'] = $this->site->getWarehouseByID($stock_count->warehouse_id);
$this->data['adjustment'] = $this->products_model->getAdjustmentByCountID($id);
$this->load->view($this->theme.'products/view_count', $this->data);
}
function count_stock($page = NULL)
{
$this->sma->checkPermissions('stock_count');
$this->form_validation->set_rules('warehouse', lang("warehouse"), 'required');
$this->form_validation->set_rules('type', lang("type"), 'required');
if ($this->form_validation->run() == true) {
$warehouse_id = $this->input->post('warehouse');
$type = $this->input->post('type');
$categories = $this->input->post('category') ? $this->input->post('category') : NULL;
$brands = $this->input->post('brand') ? $this->input->post('brand') : NULL;
$this->load->helper('string');
$name = random_string('md5').'.csv';
$products = $this->products_model->getStockCountProducts($warehouse_id, $type, $categories, $brands);
$pr = 0; $rw = 0;
foreach ($products as $product) {
if ($variants = $this->products_model->getStockCountProductVariants($warehouse_id, $product->id)) {
foreach ($variants as $variant) {
$items[] = array(
'product_code' => $product->code,
'product_name' => $product->name,
'variant' => $variant->name,
'expected' => $variant->quantity,
'counted' => ''
);
$rw++;
}
} else {
$items[] = array(
'product_code' => $product->code,
'product_name' => $product->name,
'variant' => '',
'expected' => $product->quantity,
'counted' => ''
);
$rw++;
}
$pr++;
}
if ( ! empty($items)) {
$csv_file = fopen('./files/'.$name, 'w');
fputcsv($csv_file, array(lang('product_code'), lang('product_name'), lang('variant'), lang('expected'), lang('counted')));
foreach ($items as $item) {
fputcsv($csv_file, $item);
}
// file_put_contents('./files/'.$name, $csv_file);
// fwrite($csv_file, $txt);
fclose($csv_file);
} else {
$this->session->set_flashdata('error', lang('no_product_found'));
redirect($_SERVER["HTTP_REFERER"]);
}
if ($this->Owner || $this->Admin) {
$date = $this->sma->fld($this->input->post('date'));
} else {
$date = date('Y-m-d H:s:i');
}
$category_ids = '';
$brand_ids = '';
$category_names = '';
$brand_names = '';
if ($categories) {
$r = 1; $s = sizeof($categories);
foreach ($categories as $category_id) {
$category = $this->site->getCategoryByID($category_id);
if ($r == $s) {
$category_names .= $category->name;
$category_ids .= $category->id;
} else {
$category_names .= $category->name.', ';
$category_ids .= $category->id.', ';
}
$r++;
}
}
if ($brands) {
$r = 1; $s = sizeof($brands);
foreach ($brands as $brand_id) {
$brand = $this->site->getBrandByID($brand_id);
if ($r == $s) {
$brand_names .= $brand->name;
$brand_ids .= $brand->id;
} else {
$brand_names .= $brand->name.', ';
$brand_ids .= $brand->id.', ';
}
$r++;
}
}
$data = array(
'date' => $date,
'warehouse_id' => $warehouse_id,
'reference_no' => $this->input->post('reference_no'),
'type' => $type,
'categories' => $category_ids,
'category_names' => $category_names,
'brands' => $brand_ids,
'brand_names' => $brand_names,
'initial_file' => $name,
'products' => $pr,
'rows' => $rw,
'created_by' => $this->session->userdata('user_id'),
'store_id' => $this->data['store_id']
);
}
if ($this->form_validation->run() == true && $this->products_model->addStockCount($data)) {
$this->session->set_flashdata('message', lang("stock_count_intiated"));
admin_redirect('products/stock_counts');
} else {
$this->data['error'] = (validation_errors() ? validation_errors() : $this->session->flashdata('error'));
$this->data['warehouses'] = $this->site->getallWarehouses($this->data['store_id']);
$this->data['categories'] = $this->site->getAllCategories($this->data['store_id']);
$this->data['brands'] = $this->site->getAllBrands();
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => '#', 'page' => lang('count_stock')));
$meta = array('page_title' => lang('count_stock'), 'bc' => $bc);
$this->page_construct('products/count_stock', $meta, $this->data);
}
}
function finalize_count($id)
{
$this->sma->checkPermissions('stock_count');
$stock_count = $this->products_model->getStouckCountByID($id);
if ( ! $stock_count || $stock_count->finalized) {
$this->session->set_flashdata('error', lang("stock_count_finalized"));
admin_redirect('products/stock_counts');
}
$this->form_validation->set_rules('count_id', lang("count_stock"), 'required');
if ($this->form_validation->run() == true) {
if ($_FILES['csv_file']['size'] > 0) {
$note = $this->sma->clear_tags($this->input->post('note'));
$data = array(
'updated_by' => $this->session->userdata('user_id'),
'updated_at' => date('Y-m-d H:s:i'),
'note' => $note
);
$this->load->library('upload');
$config['upload_path'] = $this->digital_upload_path;
$config['allowed_types'] = 'csv';
$config['max_size'] = $this->allowed_file_size;
$config['overwrite'] = false;
$config['encrypt_name'] = true;
$this->upload->initialize($config);
if (!$this->upload->do_upload('csv_file')) {
$error = $this->upload->display_errors();
$this->session->set_flashdata('error', $error);
redirect($_SERVER["HTTP_REFERER"]);
}
$csv = $this->upload->file_name;
$arrResult = array();
$handle = fopen($this->digital_upload_path . $csv, "r");
if ($handle) {
while (($row = fgetcsv($handle, 5000, ",")) !== FALSE) {
$arrResult[] = $row;
}
fclose($handle);
}
$titles = array_shift($arrResult);
$keys = array('product_code', 'product_name', 'product_variant', 'expected', 'counted');
$final = array();
foreach ($arrResult as $key => $value) {
$final[] = array_combine($keys, $value);
}
// $this->sma->print_arrays($final);
$rw = 2; $differences = 0; $matches = 0;
foreach ($final as $pr) {
if ($product = $this->products_model->getProductByCode(trim($pr['product_code']))) {
$pr['counted'] = !empty($pr['counted']) ? $pr['counted'] : 0;
if ($pr['expected'] == $pr['counted']) {
$matches++;
} else {
$pr['stock_count_id'] = $id;
$pr['product_id'] = $product->id;
$pr['cost'] = $product->cost;
$pr['product_variant_id'] = empty($pr['product_variant']) ? NULL : $this->products_model->getProductVariantID($pr['product_id'], $pr['product_variant']);
$products[] = $pr;
$differences++;
}
} else {
$this->session->set_flashdata('error', lang('check_product_code') . ' (' . $pr['product_code'] . '). ' . lang('product_code_x_exist') . ' ' . lang('line_no') . ' ' . $rw);
admin_redirect('products/finalize_count/'.$id);
}
$rw++;
}
$data['final_file'] = $csv;
$data['differences'] = $differences;
$data['matches'] = $matches;
$data['missing'] = $stock_count->rows-($rw-2);
$data['finalized'] = 1;
}
// $this->sma->print_arrays($data, $products);
}
if ($this->form_validation->run() == true && $this->products_model->finalizeStockCount($id, $data, $products)) {
$this->session->set_flashdata('message', lang("stock_count_finalized"));
admin_redirect('products/stock_counts');
} else {
$this->data['error'] = (validation_errors() ? validation_errors() : $this->session->flashdata('error'));
$this->data['stock_count'] = $stock_count;
$this->data['warehouse'] = $this->site->getWarehouseByID($stock_count->warehouse_id);
$bc = array(array('link' => base_url(), 'page' => lang('home')), array('link' => admin_url('products'), 'page' => lang('products')), array('link' => admin_url('products/stock_counts'), 'page' => lang('stock_counts')), array('link' => '#', 'page' => lang('finalize_count')));
$meta = array('page_title' => lang('finalize_count'), 'bc' => $bc);
$this->page_construct('products/finalize_count', $meta, $this->data);
}
}
}
Function Calls
defined | 1 |
Stats
MD5 | 48b2522b94ef739224a96a2186e63332 |
Eval Count | 0 |
Decode Time | 643 ms |