session = session(); $this->ProductModel = new ProductModel(); $this->BikemakeModel = new BikemakeModel(); $this->BikemodelsModel = new BikemodelsModel(); $this->VendorModel = new VendorModel(); $this->ManufacturerModel = new ManufacturerModel(); $this->ProductCategoryModel = new ProductCategoryModel(); $this->additionalProductNameModal = new AdditionalProductNameModal(); $this->ComplaintModel = new ComplaintModel(); } public function product_categories() { $ProductCategoryModel = new ProductCategoryModel(); $productcategory = $ProductCategoryModel->orderBy('product_category_id')->findAll(); // print_r($productcategory); foreach ($productcategory as &$category) { $sub_query_result = $this->ProductModel ->select('count(product_category) as total_product') ->where('product_category', $category['product_category_name']) ->first(); $category['total_product'] = $sub_query_result['total_product'] ?? 0; } $data['productcategory'] = $productcategory; return view('product_categories',$data); } public function product_index($manufacturer_id = null) { if(!$this->session->has('logged_user')) { return redirect()->to(base_url()); } $category = $this->request->getGet('category'); if ($manufacturer_id) { $data['products'] = $this->ProductModel->where('manufacturer_id',$manufacturer_id)->orderBy('product_name')->findAll(); $manufacturer = $this->ManufacturerModel->where('manufacturer_id',$manufacturer_id)->select('manufacturer_name')->first(); // print_r($manufacturer);die; $data['manufacturer_id'] = $manufacturer_id; $data['manufacturer_name'] = $manufacturer['manufacturer_name']; return view('product_list',$data); } else if(isset($category)) { $data['products'] = $this->ProductModel->get_products($this->session->get('logged_user_branch_id'),$category); $data['manufacturer_id'] = $manufacturer_id; return view('product_list',$data); }else { $data['products'] = $this->ProductModel->get_products($this->session->get('logged_user_branch_id')); $data['manufacturer_id'] = $manufacturer_id; return view('product_list',$data); } } public function add_new_product() { if(!$this->session->has('logged_user')) { return redirect()->to(base_url()); } $tax = $this->ProductModel->getTax(); $data['tax']=$tax; $data['make'] = $this->BikemakeModel->where('business_id', $this->session->get('logged_user_business_id'))->orderBy('make')->findAll(); $data['capacity'] = $this->ComplaintModel->getCubicCapacityName(); $data['vendors'] = $this->VendorModel->orderBy('vendor_name')->findAll(); $data['manufacturers'] = $this->ManufacturerModel->where('business_id', $this->session->get('logged_user_business_id'))->orderBy('manufacturer_name')->findAll(); $data['page_name']="Add Product"; $productcategory = $this->ProductCategoryModel->orderBy('product_category_id')->findAll(); $data['productcategory']=$productcategory; $data['vendorsProduct'] =[]; $productcategory = $this->ProductCategoryModel->orderBy('product_category_id')->findAll(); $data['product_id'] = 0; $data['products'] = []; $data['additionalProdutName'] = []; echo view('product_form',$data); } public function edit_product($product_id) { if(!$this->session->has('logged_user')) { return redirect()->to(base_url()); } $data['page_name'] = "Edit Product"; $products = $this->ProductModel->where('product_id', $product_id)->get()->getRowArray(); // $products['make_id'] = json_decode($products['make_id'], true); // $products['models_id'] = json_decode($products['models_id'], true); $data['products'] = $products; // $data['make'] = $this->BikemakeModel->where('business_id', $this->session->get('logged_user_business_id'))->orderBy('make')->findAll(); // $make_id = $products['make_id']; // $models = []; // if( $products['make_id'] != null) { // foreach ($products['make_id'] as $make_id) { // $models[] = $this->BikemodelsModel->where('make_id', $make_id)->orderBy('model_name')->findAll(); // } // } // $data['models'] = $models; $tax = $this->ProductModel->getTax(); $data['tax']=$tax; $data['vendors'] = $this->VendorModel->orderBy('vendor_name')->findAll(); $data['manufacturers'] = $this->ManufacturerModel->where('business_id', $this->session->get('logged_user_business_id'))->orderBy('manufacturer_name', 'ASC')->findAll(); // dd($data['vendors']); $vendorIds = json_decode($products['vendor'], true); $vendors = []; if($vendorIds){ foreach ($vendorIds as $vendorId) { $vendor = $this->VendorModel->find($vendorId); if ($vendor) { $vendors[] = ['id' => $vendor['vendor_id'], 'name' => $vendor['vendor_name']]; } }} $data['vendorsProduct'] = $vendors; $preferredVendorId = $products['prefered_vendor']; $data['preferredVendorId'] = $preferredVendorId; $data['product_id'] = $product_id; $productcategory = $this->ProductCategoryModel->orderBy('product_category_id')->findAll(); $additionalProdutName = $this->additionalProductNameModal ->where('product_id', $product_id) ->where('isactive', 1) ->orderBy('product_names_id', 'asc') ->findAll(); $data['productcategory'] = $productcategory; $data['additionalProdutName'] = $additionalProdutName; $data['capacity'] = $this->ComplaintModel->getCubicCapacityName(); echo view('product_form',$data); } public function add_product() { if(!$this->session->has('logged_user')) { return redirect()->to(base_url()); } $tax= $this->request->getPost('tax')/2; $ml = 0; $box = 0; $qty_per_box = 0; $barrel = 0; $ltr_per_barrel = 0; if ($this->request->getPost('per') == 'ml') { $ml = $this->request->getPost('ml'); }else if ($this->request->getPost('per') == 'box'){ $box = $this->request->getPost('box'); $qty_per_box = $this->request->getPost('qty_per_box'); }else if ($this->request->getPost('per') == 'barrel'){ $barrel = $this->request->getPost('barrel'); $ltr_per_barrel = $this->request->getPost('ltr_per_barrel'); } $data = [ 'product_name' => $this->request->getPost('productname'), 'product_category' => $this->request->getPost('hiddenproductcategory'), 'mfr_part_no' => $this->request->getPost('mfr_part_no'), 'unit_price' => $this->request->getPost('unit_price'), // 'commision_rate' => $this->request->getPost('commision_rate'), 'sgst' => $tax, 'cgst' => $tax, 'purchase_cost' => $this->request->getPost('purchase_cost'), 'qty_stock'=> $this->request->getPost('qty_in_stock'), 'description' => $this->request->getPost('description'), 'vendor' =>json_encode( $this->request->getPost('vendor')), 'purchase_order_level' => $this->request->getPost('purchase_order_level'), 'reorder_level' => $this->request->getPost('reorder_level'), 'quality' => $this->request->getPost('quality'), // 'make_id' => json_encode($this->request->getPost('make')), // 'models_id' => json_encode($this->request->getPost('model')), 'rack_number' => $this->request->getPost('rack_number'), 'manufacturer_id' => $this->request->getPost('manufacturer'), 'prefered_vendor' => $this->request->getPost('prefered_vendor'), 'specification' => $this->request->getPost('specification'), 'hsn_sac' => $this->request->getPost('hsn_sac'), 'isactive' => 1 , 'branch_id' => $this->session->get('logged_user_branch_id'), 'total_amount' => $this->request->getPost('total_amount'), 'per' => $this->request->getPost('per'), 'ml' => $ml, 'box' => $box, 'qty_per_box' => $qty_per_box, 'barrel' => $barrel, 'ltr_per_barrel' => $ltr_per_barrel, 'cubic_centimeter_id' => json_encode($this->request->getPost('cubic_centimeter_id')), ]; $product_id = $this->request->getPost('product_id'); // $additional_product_name = $this->request->getPost('additional_product_name'); // $product_names_id = $this->request->getPost('product_names_id'); $model_ids = $this->request->getPost('fk_model_id'); // print_r($data);die; if (!empty($product_id)) { $this->ProductModel->update($product_id, $data); } else { $this->ProductModel->insert($data); $product_id = $this->ProductModel->getInsertID(); } //for insert or update Additional Product Names // $this->insertOrUpdateAdditionalProductName($additional_product_name, $product_names_id, $model_ids, $product_id, $data['product_name']); $orderNumber = 'TM' . str_pad($product_id, 8, '0', STR_PAD_LEFT); // Update sales order with generated order number $this->ProductModel->update($product_id, ['sku_id' => $orderNumber]); return redirect()->to('product_index'); } public function delete_product($product_id) { if(!$this->session->has('logged_user')) { return redirect()->to(base_url()); } $where = ['product_id' => $product_id, 'isactive' => 1 , 'branch_id' => $this->session->get('logged_user_branch_id')]; // Assuming 'isactive' is a column in your database $existingProduct = $this->ProductModel->where($where)->first(); if ($existingProduct) { $data['isactive'] = 0; if ($this->ProductModel->update($product_id, $data)) { session()->setFlashdata('success', 'Deleted successfully.'); $this->logger->info("Users: has been Inactivated successfully. Inactivated ID = ".$product_id); } } return redirect()->to('product_index'); } // Retrieve the make_id from the AJAX request public function get_vendors_by_model() { $model_ids = $this->request->getPost('model_ids'); $make_id = $this->request->getPost('make_id'); $Vendors = $this->VendorModel->where('branch_id',$this->session->get('logged_user_branch_id'))->findAll(); if($Vendors){ $data = []; foreach ($model_ids as $modelKey => $modelValue) { foreach ($Vendors as $vendorsKey => $vendorsValue) { print_r($vendorsValue);die; $modelsArray = json_decode($vendorsValue['model'], true); if (is_array($modelsArray)) { $findIfModelExist = array_search($modelValue, $modelsArray); if ($findIfModelExist !== false) { array_push($data,$vendorsValue); } } } } if (count($data)) { $arrayOfArrays = array_map(function($obj) { return (array) $obj; }, $data); // Remove duplicates based on string representation of each object $uniqueArray = array_map('unserialize', array_unique(array_map('serialize', $arrayOfArrays))); // Convert the unique array of associative arrays back to an array of objects $uniqueObjectsArray = array_map(function($arr) { return (object) $arr; }, $uniqueArray); return $this->response->setJSON($uniqueArray); } else { return $this->response->setJSON([]); } }else { return $this->response->setJSON([]); } } public function get_models() { $make_ids = $this->request->getPost('make_id'); $formatted_models = []; // Iterate over each selected make ID if ($make_ids) { foreach ($make_ids as $make_id) { // Fetch models based on the selected make ID $models = $this->BikemodelsModel->where('make_id', $make_id)->where('business_id', $this->session->get('logged_user_business_id'))->orderBy('model_name')->findAll(); // Iterate over each fetched model and format it as needed foreach ($models as $model) { // Create an associative array with 'model_id' and 'model_name' properties $formatted_model = [ 'make_id' => $model['make_id'], 'model_id' => $model['model_id'], 'model_name' => $model['model_name'] // Add other properties if needed ]; // Push the formatted model into the array $formatted_models[] = $formatted_model; } } } return $this->response->setJSON($formatted_models); } public function save_make() { $response = []; // Initialize an empty array to hold the response data $make = $this->request->getPost('make'); $model = $this->request->getPost('model'); // Check if both make and model are provided if (!empty($make) && !empty($model)) { $data = [ 'make' => $make, 'business_id' => $this->session->get('logged_user_business_id'), ]; // Insert the make into the database $this->BikemakeModel->insert($data); $make_id = $this->BikemakeModel->getInsertID(); $modelData = [ 'model_name' => $model, 'make_id' => $make_id, 'business_id' => $this->session->get('logged_user_business_id'), ]; // Insert the model into the database $this->BikemodelsModel->insert($modelData); // Set success status in the response $response['success'] = true; } else { // If make or model is empty, set success status to false $response['success'] = false; } // Send JSON response back to the client return $this->response->setJSON($response); } public function get_makes() { $makes = $this->BikemakeModel->findAll(); return $this->response->setJSON($makes); } public function save_model() { $response = []; $make_id = $this->request->getPost('make_id'); $model = $this->request->getPost('modelvalue'); if (!empty($make_id) && !empty($model)) { $modelData = [ 'model_name' => $model, 'make_id' => $make_id, 'business_id' => $this->session->get('logged_user_business_id'), ]; $model_id = $this->BikemodelsModel->insert($modelData); $modelData = $this->BikemodelsModel->where('make_id',$make_id)->findAll(); $response['success'] = true; $response['model_id'] = $model_id; $response['model_value'] = $model; } else { $response['success'] = false; } return $this->response->setJSON($response); } public function save_manufacturer() { $response = []; $manufacturer_name = $this->request->getPost('manufacturer_name'); $quality = $this->request->getPost('quality'); if (!empty($manufacturer_name) && !empty($quality)) { $modelData = [ 'manufacturer_name' => $manufacturer_name, 'quality' => $quality, 'business_id'=> $this->session->get('logged_user_business_id') ]; $manufacturer_id = $this->ManufacturerModel->insert($modelData); $modelData = $this->ManufacturerModel->where('business_id', $this->session->get('logged_user_business_id'))->orderBy('manufacturer_name')->findAll(); $response['success'] = true; $response['manufacturer_id'] = $manufacturer_id; $response['quality'] = $quality; $response['modelData'] = $modelData; } else { $response['success'] = false; } return $this->response->setJSON($response); } public function product_list_for_service() { // Assuming you have a model for products and one for manufacturers $products = $this->ProductModel->select('products.*, manufacturer.manufacturer_name') ->join('manufacturer', 'manufacturer.manufacturer_id = products.manufacturer_id','left') ->where('products.isactive', 1) ->findAll(); return $this->response->setJSON($products); } public function status_product() { try { $product_id = $this->request->getPost('product_id'); $isactive = $this->request->getPost('isactive'); $data = [ 'isactive' => $isactive ]; $updated = $this->ProductModel->update($product_id, $data); if ($updated) { $result = $data; return $this->respond(['status' => 'success','code' => 200],200); } else { $result = "No Match's"; return $this->respond(['status' => 'failed','code' => 404],404); } } catch (\Exception $exception) { return $this->respond(['status' => 'failed','code' => 500,'data' => $exception],500); } } //----VENKAT------------------------------------------------------------------------------------------------ public function insertOrUpdateAdditionalProductName($product_names, $product_name_id,$model_ids, $product_id, $first_product_name) { // Fetch existing product names for the given product ID $product_name_data = $this->additionalProductNameModal->where('product_id', $product_id) ->orderBy('product_names_id', 'asc') ->findAll(); $product_name_count = count($product_name_data); // Check if there are no existing product names and insert the first product name // if ($product_name_count == 0 && !empty($first_product_name)) { // $firstProductNameData = [ // 'product_id' => $product_id, // 'additional_product_name' => $first_product_name, // 'model_id' => 0 // ]; // // Insert the first product name // $this->additionalProductNameModal->insert($firstProductNameData); // } else { // // Update the first product name if it has changed // if ($product_name_data[0]['additional_product_name'] != $first_product_name) { // $firstProductNameUpdateData = [ // 'additional_product_name' => $first_product_name, // ]; // $this->additionalProductNameModal // ->where('product_names_id', $product_name_data[0]['product_names_id']) // ->set($firstProductNameUpdateData) // ->update(); // } // } $productNameData = []; if (!empty($product_names) && count($product_names) > 0) { foreach ($product_names as $index => $name) { if (!empty($name)) { $productNameData[] = [ 'product_id' => $product_id, 'additional_product_name' => $name, 'product_names_id' => $product_name_id[$index] ?? null, 'model_id' => $model_ids[$index] ?? null ]; } } // Filter data for inserts and updates $insertData = array_filter($productNameData, function ($detail) { return empty($detail['product_names_id']); // Insert new records only }); $updateData = array_filter($productNameData, function ($detail) { return !empty($detail['product_names_id']); // Update existing records }); // Insert new product names if (!empty($insertData)) { $this->additionalProductNameModal->insertBatch($insertData); } // Update existing product names if (!empty($updateData)) { $this->additionalProductNameModal->updateBatch($updateData, 'product_names_id'); } if (!empty($product_name_id)) { $filtering_ids = []; for ($y = 0; $y < count($product_name_data); $y++) { $filtering_ids[$y] = $product_name_data[$y]['product_names_id']; } if (!empty($filtering_ids)) { $A = $filtering_ids; $B = $product_name_id; $missing_ids = array_diff($A, $B); if (!empty($missing_ids)) { $this->additionalProductNameModal ->whereIn('product_names_id', $missing_ids) ->delete(); } } } } return true; } public function delete_product_name($product_id, $product_names_id) { if(!empty($product_id) && !empty($product_names_id)){ $this->additionalProductNameModal->where('product_names_id', $product_names_id)->set('isactive', 0)->update(); } return redirect()->to('new_product/' . $product_id); } public function get_product_addtional_details($product_id) { $products = $this->ProductModel->where('product_id', $product_id)->get()->getRowArray(); $products['models_id'] = json_decode($products['models_id'], true); $models = []; if( $products['models_id'] != null) { foreach ($products['models_id'] as $model_id) { $model = $this->BikemodelsModel->select('model_name')->where('model_id', $model_id)->get()->getRow(); array_push($models,$model); } } $data['modelNames'] = $models; $data['additionalNames'] = $this->additionalProductNameModal->select('additional_product_name')->where('product_id', $product_id)->findAll(); return json_encode($data); } public function quick_add() { $tax = floatval($this->request->getPost('product_tax')) / 2; $bid = $this->session->get('logged_user_branch_id'); $ml = 0; $box = 0; $qty_per_box = 0; $barrel = 0; $ltr_per_barrel = 0; $per = $this->request->getPost('product_per'); if ($per === 'ml') { $ml = floatval($this->request->getPost('product_ml') ?? 0); } elseif ($per === 'box') { $box = floatval($this->request->getPost('product_box') ?? 0); $qty_per_box = floatval($this->request->getPost('product_qty_per_box') ?? 0); } elseif ($per === 'barrel') { $barrel = floatval($this->request->getPost('product_barrel') ?? 0); $ltr_per_barrel = floatval($this->request->getPost('product_ltr_per_barrel') ?? 0); } $qty_in_stock = floatval($this->request->getPost('product_qty_stock') ?: 0); // Get qty_stock from POST $purchase_order_level = floor($qty_in_stock / 2); // Calculate purchase reorder level (half of qty in stock) $purchase_order_level = is_nan($purchase_order_level) ? '' : $purchase_order_level; // Safely assign values (handle invalid numbers) $reorder_level = is_nan($qty_in_stock) ? '' : $qty_in_stock; $ccIds = $this->request->getPost('cubic_centimeter_id'); $data = [ 'cubic_centimeter_id' => !empty($ccIds) ? json_encode($ccIds) : null, 'product_name' => $this->request->getPost('product_name'), 'product_category' => $this->request->getPost('product_category'), 'total_amount' => $this->request->getPost('product_total_amount'), 'unit_price' => $this->request->getPost('product_unit_price'), 'qty_stock' => $qty_in_stock, 'sgst' => $tax, 'cgst' => $tax, 'per' => $per, 'ml' => $ml, 'box' => $box, 'qty_per_box' => $qty_per_box, 'barrel' => $barrel, 'ltr_per_barrel' => $ltr_per_barrel, 'isactive' => 1, 'branch_id' => $bid, 'purchase_order_level'=> $purchase_order_level, 'reorder_level' => $reorder_level, 'manufacturer_id' => $this->request->getPost('product_manufacturer'), ]; $insertID = $this->ProductModel->insert($data); if ($insertID) { $orderNumber = 'TM' . str_pad($insertID, 8, '0', STR_PAD_LEFT); $this->ProductModel->update($insertID, ['sku_id' => $orderNumber]); $pD = $this->ProductModel ->select('products.*') ->where('products.product_id', $insertID) ->where('products.branch_id', $bid) ->where('products.isactive', 1) ->first(); return $this->response->setJSON([ 'status' => 'success', 'message' => 'Product added successfully!', 'data' => $pD ]); } else { return $this->response->setJSON([ 'status' => 'error', 'message' => 'Failed to add product.', ]); } } }