8889841crole_id);
if($role->hasPermissionTo('products-index')){
$permissions = Role::findByName($role->name)->permissions;
foreach ($permissions as $permission)
$all_permission[] = $permission->name;
if(empty($all_permission))
$all_permission[] = 'dummy text';
$role_id = $role->id;
$numberOfProduct = Product::where('is_active', true)->count();
return view('backend.product.index', compact('all_permission', 'role_id', 'numberOfProduct'));
}
else
return redirect()->back()->with('not_permitted', 'Sorry! You are not allowed to access this module');
}
public function productData(Request $request)
{
$columns = array(
2 => 'name',
3 => 'code',
4 => 'brand_id',
5 => 'category_id',
6 => 'qty',
7 => 'unit_id',
8 => 'price',
9 => 'cost',
10 => 'stock_worth'
);
$totalData = Product::where('is_active', true)->count();
$totalFiltered = $totalData;
if($request->input('length') != -1)
$limit = $request->input('length');
else
$limit = $totalData;
$start = $request->input('start');
$order = 'products.'.$columns[$request->input('order.0.column')];
$dir = $request->input('order.0.dir');
if(empty($request->input('search.value'))){
$products = Product::with('category', 'brand', 'unit')->offset($start)
->where('is_active', true)
->limit($limit)
->orderBy($order,$dir)
->get();
}
else
{
$search = $request->input('search.value');
$products = Product::select('products.*')
->with('category', 'brand', 'unit')
->join('categories', 'products.category_id', '=', 'categories.id')
->leftjoin('brands', 'products.brand_id', '=', 'brands.id')
->where([
['products.name', 'LIKE', "%{$search}%"],
['products.is_active', true]
])
->orWhere([
['products.code', 'LIKE', "%{$search}%"],
['products.is_active', true]
])
->orWhere([
['categories.name', 'LIKE', "%{$search}%"],
['categories.is_active', true],
['products.is_active', true]
])
->orWhere([
['brands.title', 'LIKE', "%{$search}%"],
['brands.is_active', true],
['products.is_active', true]
])
->offset($start)
->limit($limit)
->orderBy($order,$dir)->get();
$totalFiltered = Product::
join('categories', 'products.category_id', '=', 'categories.id')
->leftjoin('brands', 'products.brand_id', '=', 'brands.id')
->where([
['products.name','LIKE',"%{$search}%"],
['products.is_active', true]
])
->orWhere([
['products.code', 'LIKE', "%{$search}%"],
['products.is_active', true]
])
->orWhere([
['categories.name', 'LIKE', "%{$search}%"],
['categories.is_active', true],
['products.is_active', true]
])
->orWhere([
['brands.title', 'LIKE', "%{$search}%"],
['brands.is_active', true],
['products.is_active', true]
])
->count();
}
$data = array();
if(!empty($products))
{
foreach ($products as $key=>$product)
{
$nestedData['id'] = $product->id;
$nestedData['key'] = $key;
$product_image = explode(",", $product->image);
$product_image = htmlspecialchars($product_image[0]);
if($product_image)
$nestedData['image'] = '
';
else
$nestedData['image'] = '
';
$nestedData['name'] = $product->name;
$nestedData['code'] = $product->code;
if($product->brand)
$nestedData['brand'] = $product->brand->title;
else
$nestedData['brand'] = "N/A";
$nestedData['category'] = $product->category->name;
if(Auth::user()->role_id > 2 && $product->type == 'standard') {
$nestedData['qty'] = Product_Warehouse::where([
['product_id', $product->id],
['warehouse_id', Auth::user()->warehouse_id]
])->sum('qty');
}
else
$nestedData['qty'] = $product->qty;
if($product->unit_id)
$nestedData['unit'] = $product->unit->unit_name;
else
$nestedData['unit'] = 'N/A';
$nestedData['price'] = $product->price;
$nestedData['cost'] = $product->cost;
if(config('currency_position') == 'prefix')
$nestedData['stock_worth'] = config('currency').' '.($nestedData['qty'] * $product->price).' / '.config('currency').' '.($nestedData['qty'] * $product->cost);
else
$nestedData['stock_worth'] = ($nestedData['qty'] * $product->price).' '.config('currency').' / '.($nestedData['qty'] * $product->cost).' '.config('currency');
$nestedData['options'] = '
';
// data for product details by one click
if($product->tax_id)
$tax = Tax::find($product->tax_id)->name;
else
$tax = "N/A";
if($product->tax_method == 1)
$tax_method = trans('file.Exclusive');
else
$tax_method = trans('file.Inclusive');
$nestedData['product'] = array( '[ "'.$product->type.'"', ' "'.$product->name.'"', ' "'.$product->code.'"', ' "'.$nestedData['brand'].'"', ' "'.$nestedData['category'].'"', ' "'.$nestedData['unit'].'"', ' "'.$product->cost.'"', ' "'.$product->price.'"', ' "'.$tax.'"', ' "'.$tax_method.'"', ' "'.$product->alert_quantity.'"', ' "'.preg_replace('/\s+/S', " ", $product->product_details).'"', ' "'.$product->id.'"', ' "'.$product->product_list.'"', ' "'.$product->variant_list.'"', ' "'.$product->qty_list.'"', ' "'.$product->price_list.'"', ' "'.$nestedData['qty'].'"', ' "'.$product->image.'"', ' "'.$product->is_variant.'"]'
);
//$nestedData['imagedata'] = DNS1D::getBarcodePNG($product->code, $product->barcode_symbology);
$data[] = $nestedData;
}
}
$json_data = array(
"draw" => intval($request->input('draw')),
"recordsTotal" => intval($totalData),
"recordsFiltered" => intval($totalFiltered),
"data" => $data
);
echo json_encode($json_data);
}
public function create()
{
$role = Role::firstOrCreate(['id' => Auth::user()->role_id]);
if ($role->hasPermissionTo('products-add')){
$lims_product_list_without_variant = $this->productWithoutVariant();
$lims_product_list_with_variant = $this->productWithVariant();
$lims_brand_list = Brand::where('is_active', true)->get();
$lims_category_list = Category::where('is_active', true)->get();
$lims_unit_list = Unit::where('is_active', true)->get();
$lims_tax_list = Tax::where('is_active', true)->get();
$lims_warehouse_list = Warehouse::where('is_active', true)->get();
$numberOfProduct = Product::where('is_active', true)->count();
return view('backend.product.create',compact('lims_product_list_without_variant', 'lims_product_list_with_variant', 'lims_brand_list', 'lims_category_list', 'lims_unit_list', 'lims_tax_list', 'lims_warehouse_list', 'numberOfProduct'));
}
else
return redirect()->back()->with('not_permitted', 'Sorry! You are not allowed to access this module');
}
public function store(Request $request)
{
$this->validate($request, [
'code' => [
'max:255',
Rule::unique('products')->where(function ($query) {
return $query->where('is_active', 1);
}),
],
'name' => [
'max:255',
Rule::unique('products')->where(function ($query) {
return $query->where('is_active', 1);
}),
]
]);
$data = $request->except('image', 'file');
if(isset($data['is_variant'])) {
$data['variant_option'] = json_encode($data['variant_option']);
$data['variant_value'] = json_encode($data['variant_value']);
}
else {
$data['variant_option'] = $data['variant_value'] = null;
}
$data['name'] = preg_replace('/[\n\r]/', "
", htmlspecialchars(trim($data['name'])));
if($data['type'] == 'combo') {
$data['product_list'] = implode(",", $data['product_id']);
$data['variant_list'] = implode(",", $data['variant_id']);
$data['qty_list'] = implode(",", $data['product_qty']);
$data['price_list'] = implode(",", $data['unit_price']);
$data['cost'] = $data['unit_id'] = $data['purchase_unit_id'] = $data['sale_unit_id'] = 0;
}
elseif($data['type'] == 'digital' || $data['type'] == 'service')
$data['cost'] = $data['unit_id'] = $data['purchase_unit_id'] = $data['sale_unit_id'] = 0;
$data['product_details'] = str_replace('"', '@', $data['product_details']);
if($data['starting_date'])
$data['starting_date'] = date('Y-m-d', strtotime($data['starting_date']));
if($data['last_date'])
$data['last_date'] = date('Y-m-d', strtotime($data['last_date']));
$data['is_active'] = true;
$images = $request->image;
$image_names = [];
if($images) {
foreach ($images as $key => $image) {
$ext = pathinfo($image->getClientOriginalName(), PATHINFO_EXTENSION);
$imageName = date("Ymdhis") . ($key+1);
if(!config('database.connections.saleprosaas_landlord')) {
$imageName = $imageName . '.' . $ext;
$image->move('public/images/product', $imageName);
}
else {
$imageName = $this->getTenantId() . '_' . $imageName . '.' . $ext;
$image->move('public/images/product', $imageName);
}
$image_names[] = $imageName;
}
$data['image'] = implode(",", $image_names);
}
else {
$data['image'] = 'zummXD2dvAtI.png';
}
$file = $request->file;
if ($file) {
$ext = pathinfo($file->getClientOriginalName(), PATHINFO_EXTENSION);
$fileName = strtotime(date('Y-m-d H:i:s'));
$fileName = $fileName . '.' . $ext;
$file->move('public/product/files', $fileName);
$data['file'] = $fileName;
}
//return $data;
$lims_product_data = Product::create($data);
//dealing with initial stock and auto purchase
$initial_stock = 0;
if(isset($data['is_initial_stock']) && !isset($data['is_variant']) && !isset($data['is_batch'])) {
foreach ($data['stock_warehouse_id'] as $key => $warehouse_id) {
$stock = $data['stock'][$key];
if($stock > 0) {
$this->autoPurchase($lims_product_data, $warehouse_id, $stock);
$initial_stock += $stock;
}
}
}
if($initial_stock > 0) {
$lims_product_data->qty += $initial_stock;
$lims_product_data->save();
}
//dealing with product variant
if(!isset($data['is_batch']))
$data['is_batch'] = null;
if(isset($data['is_variant'])) {
foreach ($data['variant_name'] as $key => $variant_name) {
$lims_variant_data = Variant::firstOrCreate(['name' => $data['variant_name'][$key]]);
$lims_variant_data->name = $data['variant_name'][$key];
$lims_variant_data->save();
$lims_product_variant_data = new ProductVariant;
$lims_product_variant_data->product_id = $lims_product_data->id;
$lims_product_variant_data->variant_id = $lims_variant_data->id;
$lims_product_variant_data->position = $key + 1;
$lims_product_variant_data->item_code = $data['item_code'][$key];
$lims_product_variant_data->additional_cost = $data['additional_cost'][$key];
$lims_product_variant_data->additional_price = $data['additional_price'][$key];
$lims_product_variant_data->qty = 0;
$lims_product_variant_data->save();
}
}
if(isset($data['is_diffPrice'])) {
foreach ($data['diff_price'] as $key => $diff_price) {
if($diff_price) {
Product_Warehouse::create([
"product_id" => $lims_product_data->id,
"warehouse_id" => $data["warehouse_id"][$key],
"qty" => 0,
"price" => $diff_price
]);
}
}
}
$this->cacheForget('product_list');
$this->cacheForget('product_list_with_variant');
\Session::flash('create_message', 'Product created successfully');
}
public function autoPurchase($product_data, $warehouse_id, $stock)
{
$data['reference_no'] = 'pr-' . date("Ymd") . '-'. date("his");
$data['user_id'] = Auth::id();
$data['warehouse_id'] = $warehouse_id;
$data['item'] = 1;
$data['total_qty'] = $stock;
$data['total_discount'] = 0;
$data['status'] = 1;
$data['payment_status'] = 2;
if($product_data->tax_id) {
$tax_data = DB::table('taxes')->select('rate')->find($product_data->tax_id);
if($product_data->tax_method == 1) {
$net_unit_cost = number_format($product_data->cost, 2, '.', '');
$tax = number_format($product_data->cost * $stock * ($tax_data->rate / 100), 2, '.', '');
$cost = number_format(($product_data->cost * $stock) + $tax, 2, '.', '');
}
else {
$net_unit_cost = number_format((100 / (100 + $tax_data->rate)) * $product_data->cost, 2, '.', '');
$tax = number_format(($product_data->cost - $net_unit_cost) * $stock, 2, '.', '');
$cost = number_format($product_data->cost * $stock, 2, '.', '');
}
$tax_rate = $tax_data->rate;
$data['total_tax'] = $tax;
$data['total_cost'] = $cost;
}
else {
$data['total_tax'] = 0.00;
$data['total_cost'] = number_format($product_data->cost * $stock, 2, '.', '');
$net_unit_cost = number_format($product_data->cost, 2, '.', '');
$tax_rate = 0.00;
$tax = 0.00;
$cost = number_format($product_data->cost * $stock, 2, '.', '');
}
$product_warehouse_data = Product_Warehouse::select('id', 'qty')
->where([
['product_id', $product_data->id],
['warehouse_id', $warehouse_id]
])->first();
if($product_warehouse_data) {
$product_warehouse_data->qty += $stock;
$product_warehouse_data->save();
}
else {
$lims_product_warehouse_data = new Product_Warehouse();
$lims_product_warehouse_data->product_id = $product_data->id;
$lims_product_warehouse_data->warehouse_id = $warehouse_id;
$lims_product_warehouse_data->qty = $stock;
$lims_product_warehouse_data->save();
}
$data['order_tax'] = 0;
$data['grand_total'] = $data['total_cost'];
$data['paid_amount'] = $data['grand_total'];
//insetting data to purchase table
$purchase_data = Purchase::create($data);
//inserting data to product_purchases table
ProductPurchase::create([
'purchase_id' => $purchase_data->id,
'product_id' => $product_data->id,
'qty' => $stock,
'recieved' => $stock,
'purchase_unit_id' => $product_data->unit_id,
'net_unit_cost' => $net_unit_cost,
'discount' => 0,
'tax_rate' => $tax_rate,
'tax' => $tax,
'total' => $cost
]);
//inserting data to payments table
Payment::create([
'payment_reference' => 'ppr-' . date("Ymd") . '-'. date("his"),
'user_id' => Auth::id(),
'purchase_id' => $purchase_data->id,
'account_id' => 0,
'amount' => $data['grand_total'],
'change' => 0,
'paying_method' => 'Cash'
]);
}
public function history(Request $request)
{
$role = Role::find(Auth::user()->role_id);
if($role->hasPermissionTo('product_history')) {
if($request->input('warehouse_id'))
$warehouse_id = $request->input('warehouse_id');
else
$warehouse_id = 0;
if($request->input('starting_date')) {
$starting_date = $request->input('starting_date');
$ending_date = $request->input('ending_date');
}
else {
$starting_date = date("Y-m-d", strtotime(date('Y-m-d', strtotime('-1 year', strtotime(date('Y-m-d') )))));
$ending_date = date("Y-m-d");
}
$product_id = $request->input('product_id');
$product_data = Product::select('name', 'code')->find($product_id);
$lims_warehouse_list = Warehouse::where('is_active', true)->get();
return view('backend.product.history',compact('starting_date', 'ending_date', 'warehouse_id', 'product_id', 'product_data', 'lims_warehouse_list'));
}
else
return redirect()->back()->with('not_permitted', 'Sorry! You are not allowed to access this module');
}
public function saleHistoryData(Request $request)
{
$columns = array(
1 => 'created_at',
2 => 'reference_no',
);
$product_id = $request->input('product_id');
$warehouse_id = $request->input('warehouse_id');
$q = DB::table('sales')
->join('product_sales', 'sales.id', '=', 'product_sales.sale_id')
->where('product_sales.product_id', $product_id)
->whereDate('sales.created_at', '>=' ,$request->input('starting_date'))
->whereDate('sales.created_at', '<=' ,$request->input('ending_date'));
if($warehouse_id)
$q = $q->where('warehouse_id', $warehouse_id);
if(Auth::user()->role_id > 2 && config('staff_access') == 'own')
$q = $q->where('sales.user_id', Auth::id());
$totalData = $q->count();
$totalFiltered = $totalData;
if($request->input('length') != -1)
$limit = $request->input('length');
else
$limit = $totalData;
$start = $request->input('start');
$order = 'sales.'.$columns[$request->input('order.0.column')];
$dir = $request->input('order.0.dir');
$q = $q->join('customers', 'sales.customer_id', '=', 'customers.id')
->join('warehouses', 'sales.warehouse_id', '=', 'warehouses.id')
->select('sales.id', 'sales.reference_no', 'sales.created_at', 'customers.name as customer_name', 'customers.phone_number as customer_number', 'warehouses.name as warehouse_name', 'product_sales.qty', 'product_sales.sale_unit_id', 'product_sales.total')
->offset($start)
->limit($limit)
->orderBy($order, $dir);
if(empty($request->input('search.value'))) {
$sales = $q->get();
}
else
{
$search = $request->input('search.value');
$q = $q->whereDate('sales.created_at', '=' , date('Y-m-d', strtotime(str_replace('/', '-', $search))));
if(Auth::user()->role_id > 2 && config('staff_access') == 'own') {
$sales = $q->orwhere([
['sales.reference_no', 'LIKE', "%{$search}%"],
['sales.user_id', Auth::id()]
])
->get();
$totalFiltered = $q->orwhere([
['sales.reference_no', 'LIKE', "%{$search}%"],
['sales.user_id', Auth::id()]
])
->count();
}
else {
$sales = $q->orwhere('sales.reference_no', 'LIKE', "%{$search}%")->get();
$totalFiltered = $q->orwhere('sales.reference_no', 'LIKE', "%{$search}%")->count();
}
}
$data = array();
if(!empty($sales))
{
foreach ($sales as $key => $sale)
{
$nestedData['id'] = $sale->id;
$nestedData['key'] = $key;
$nestedData['date'] = date(config('date_format'), strtotime($sale->created_at));
$nestedData['reference_no'] = $sale->reference_no;
$nestedData['warehouse'] = $sale->warehouse_name;
$nestedData['customer'] = $sale->customer_name.' ['.($sale->customer_number).']';
$nestedData['qty'] = number_format($sale->qty, config('decimal'));
if($sale->sale_unit_id) {
$unit_data = DB::table('units')->select('unit_code')->find($sale->sale_unit_id);
$nestedData['qty'] .= ' '.$unit_data->unit_code;
}
$nestedData['unit_price'] = number_format(($sale->total / $sale->qty), config('decimal'));
$nestedData['sub_total'] = number_format($sale->total, config('decimal'));
$data[] = $nestedData;
}
}
$json_data = array(
"draw" => intval($request->input('draw')),
"recordsTotal" => intval($totalData),
"recordsFiltered" => intval($totalFiltered),
"data" => $data
);
echo json_encode($json_data);
}
public function purchaseHistoryData(Request $request)
{
$columns = array(
1 => 'created_at',
2 => 'reference_no',
);
$product_id = $request->input('product_id');
$warehouse_id = $request->input('warehouse_id');
$q = DB::table('purchases')
->join('product_purchases', 'purchases.id', '=', 'product_purchases.purchase_id')
->where('product_purchases.product_id', $product_id)
->whereDate('purchases.created_at', '>=' ,$request->input('starting_date'))
->whereDate('purchases.created_at', '<=' ,$request->input('ending_date'));
if($warehouse_id)
$q = $q->where('warehouse_id', $warehouse_id);
if(Auth::user()->role_id > 2 && config('staff_access') == 'own')
$q = $q->where('purchases.user_id', Auth::id());
$totalData = $q->count();
$totalFiltered = $totalData;
if($request->input('length') != -1)
$limit = $request->input('length');
else
$limit = $totalData;
$start = $request->input('start');
$order = 'purchases.'.$columns[$request->input('order.0.column')];
$dir = $request->input('order.0.dir');
$q = $q->leftJoin('suppliers', 'purchases.supplier_id', '=', 'suppliers.id')
->join('warehouses', 'purchases.warehouse_id', '=', 'warehouses.id')
->offset($start)
->limit($limit)
->orderBy($order, $dir);
if(empty($request->input('search.value'))) {
$purchases = $q->select('purchases.id', 'purchases.reference_no', 'purchases.created_at', 'purchases.supplier_id', 'suppliers.name as supplier_name', 'suppliers.phone_number as supplier_number', 'warehouses.name as warehouse_name', 'product_purchases.qty', 'product_purchases.purchase_unit_id', 'product_purchases.total')->get();
}
else
{
$search = $request->input('search.value');
$q = $q->whereDate('purchases.created_at', '=' , date('Y-m-d', strtotime(str_replace('/', '-', $search))));
if(Auth::user()->role_id > 2 && config('staff_access') == 'own') {
$purchases = $q->select('purchases.id', 'purchases.reference_no', 'purchases.created_at', 'purchases.supplier_id', 'suppliers.name as supplier_name', 'suppliers.phone_number as supplier_number', 'warehouses.name as warehouse_name', 'product_purchases.qty', 'product_purchases.purchase_unit_id', 'product_purchases.total')
->orwhere([
['purchases.reference_no', 'LIKE', "%{$search}%"],
['purchases.user_id', Auth::id()]
])->get();
$totalFiltered = $q->orwhere([
['purchases.reference_no', 'LIKE', "%{$search}%"],
['purchases.user_id', Auth::id()]
])->count();
}
else {
$purchases = $q->select('purchases.id', 'purchases.reference_no', 'purchases.created_at', 'purchases.supplier_id', 'suppliers.name as supplier_name', 'suppliers.phone_number as supplier_number', 'warehouses.name as warehouse_name', 'product_purchases.qty', 'product_purchases.purchase_unit_id', 'product_purchases.total')
->orwhere('purchases.reference_no', 'LIKE', "%{$search}%")
->get();
$totalFiltered = $q->orwhere('purchases.reference_no', 'LIKE', "%{$search}%")->count();
}
}
$data = array();
if(!empty($purchases))
{
foreach ($purchases as $key => $purchase)
{
$nestedData['id'] = $purchase->id;
$nestedData['key'] = $key;
$nestedData['date'] = date(config('date_format'), strtotime($purchase->created_at));
$nestedData['reference_no'] = $purchase->reference_no;
$nestedData['warehouse'] = $purchase->warehouse_name;
if($purchase->supplier_id)
$nestedData['supplier'] = $purchase->supplier_name.' ['.($purchase->supplier_number).']';
else
$nestedData['supplier'] = 'N/A';
$nestedData['qty'] = number_format($purchase->qty, config('decimal'));
if($purchase->purchase_unit_id) {
$unit_data = DB::table('units')->select('unit_code')->find($purchase->purchase_unit_id);
$nestedData['qty'] .= ' '.$unit_data->unit_code;
}
$nestedData['unit_cost'] = number_format(($purchase->total / $purchase->qty), config('decimal'));
$nestedData['sub_total'] = number_format($purchase->total, config('decimal'));
$data[] = $nestedData;
}
}
$json_data = array(
"draw" => intval($request->input('draw')),
"recordsTotal" => intval($totalData),
"recordsFiltered" => intval($totalFiltered),
"data" => $data
);
echo json_encode($json_data);
}
public function saleReturnHistoryData(Request $request)
{
$columns = array(
1 => 'created_at',
2 => 'reference_no',
);
$product_id = $request->input('product_id');
$warehouse_id = $request->input('warehouse_id');
$q = DB::table('returns')
->join('product_returns', 'returns.id', '=', 'product_returns.return_id')
->where('product_returns.product_id', $product_id)
->whereDate('returns.created_at', '>=' ,$request->input('starting_date'))
->whereDate('returns.created_at', '<=' ,$request->input('ending_date'));
if($warehouse_id)
$q = $q->where('warehouse_id', $warehouse_id);
if(Auth::user()->role_id > 2 && config('staff_access') == 'own')
$q = $q->where('returns.user_id', Auth::id());
$totalData = $q->count();
$totalFiltered = $totalData;
if($request->input('length') != -1)
$limit = $request->input('length');
else
$limit = $totalData;
$start = $request->input('start');
$order = 'returns.'.$columns[$request->input('order.0.column')];
$dir = $request->input('order.0.dir');
$q = $q->join('customers', 'returns.customer_id', '=', 'customers.id')
->join('warehouses', 'returns.warehouse_id', '=', 'warehouses.id')
->offset($start)
->limit($limit)
->orderBy($order, $dir);
if(empty($request->input('search.value'))) {
$returnss = $q->select('returns.id', 'returns.reference_no', 'returns.created_at', 'customers.name as customer_name', 'customers.phone_number as customer_number', 'warehouses.name as warehouse_name', 'product_returns.qty', 'product_returns.sale_unit_id', 'product_returns.total')->get();
}
else
{
$search = $request->input('search.value');
$q = $q->whereDate('returns.created_at', '=' , date('Y-m-d', strtotime(str_replace('/', '-', $search))));
if(Auth::user()->role_id > 2 && config('staff_access') == 'own') {
$returnss = $q->select('returns.id', 'returns.reference_no', 'returns.created_at', 'customers.name as customer_name', 'customers.phone_number as customer_number', 'warehouses.name as warehouse_name', 'product_returns.qty', 'product_returns.sale_unit_id', 'product_returns.total')
->orwhere([
['returns.reference_no', 'LIKE', "%{$search}%"],
['returns.user_id', Auth::id()]
])
->get();
$totalFiltered = $q->orwhere([
['returns.reference_no', 'LIKE', "%{$search}%"],
['returns.user_id', Auth::id()]
])
->count();
}
else {
$returnss = $q->select('returns.id', 'returns.reference_no', 'returns.created_at', 'customers.name as customer_name', 'customers.phone_number as customer_number', 'warehouses.name as warehouse_name', 'product_returns.qty', 'product_returns.sale_unit_id', 'product_returns.total')
->orwhere('returns.reference_no', 'LIKE', "%{$search}%")
->get();
$totalFiltered = $q->orwhere('returns.reference_no', 'LIKE', "%{$search}%")->count();
}
}
$data = array();
if(!empty($returnss))
{
foreach ($returnss as $key => $returns)
{
$nestedData['id'] = $returns->id;
$nestedData['key'] = $key;
$nestedData['date'] = date(config('date_format'), strtotime($returns->created_at));
$nestedData['reference_no'] = $returns->reference_no;
$nestedData['warehouse'] = $returns->warehouse_name;
$nestedData['customer'] = $returns->customer_name.' ['.($returns->customer_number).']';
$nestedData['qty'] = number_format($returns->qty, config('decimal'));
if($returns->sale_unit_id) {
$unit_data = DB::table('units')->select('unit_code')->find($returns->sale_unit_id);
$nestedData['qty'] .= ' '.$unit_data->unit_code;
}
$nestedData['unit_price'] = number_format(($returns->total / $returns->qty), config('decimal'));
$nestedData['sub_total'] = number_format($returns->total, config('decimal'));
$data[] = $nestedData;
}
}
$json_data = array(
"draw" => intval($request->input('draw')),
"recordsTotal" => intval($totalData),
"recordsFiltered" => intval($totalFiltered),
"data" => $data
);
echo json_encode($json_data);
}
public function purchaseReturnHistoryData(Request $request)
{
$columns = array(
1 => 'created_at',
2 => 'reference_no',
);
$product_id = $request->input('product_id');
$warehouse_id = $request->input('warehouse_id');
$q = DB::table('return_purchases')
->join('purchase_product_return', 'return_purchases.id', '=', 'purchase_product_return.return_id')
->where('purchase_product_return.product_id', $product_id)
->whereDate('return_purchases.created_at', '>=' ,$request->input('starting_date'))
->whereDate('return_purchases.created_at', '<=' ,$request->input('ending_date'));
if($warehouse_id)
$q = $q->where('warehouse_id', $warehouse_id);
if(Auth::user()->role_id > 2 && config('staff_access') == 'own')
$q = $q->where('return_purchases.user_id', Auth::id());
$totalData = $q->count();
$totalFiltered = $totalData;
if($request->input('length') != -1)
$limit = $request->input('length');
else
$limit = $totalData;
$start = $request->input('start');
$order = 'return_purchases.'.$columns[$request->input('order.0.column')];
$dir = $request->input('order.0.dir');
$q = $q->leftJoin('suppliers', 'return_purchases.supplier_id', '=', 'suppliers.id')
->join('warehouses', 'return_purchases.warehouse_id', '=', 'warehouses.id')
->select('return_purchases.id', 'return_purchases.reference_no', 'return_purchases.created_at', 'return_purchases.supplier_id', 'suppliers.name as supplier_name', 'suppliers.phone_number as supplier_number', 'warehouses.name as warehouse_name', 'purchase_product_return.qty', 'purchase_product_return.purchase_unit_id', 'purchase_product_return.total')
->offset($start)
->limit($limit)
->orderBy($order, $dir);
if(empty($request->input('search.value'))) {
$return_purchases = $q->get();
}
else
{
$search = $request->input('search.value');
$q = $q->whereDate('return_purchases.created_at', '=' , date('Y-m-d', strtotime(str_replace('/', '-', $search))));
if(Auth::user()->role_id > 2 && config('staff_access') == 'own') {
$return_purchases = $q->orwhere([
['return_purchases.reference_no', 'LIKE', "%{$search}%"],
['return_purchases.user_id', Auth::id()]
])
->get();
$totalFiltered = $q->orwhere([
['return_purchases.reference_no', 'LIKE', "%{$search}%"],
['return_purchases.user_id', Auth::id()]
])
->count();
}
else {
$return_purchases = $q->orwhere('return_purchases.reference_no', 'LIKE', "%{$search}%")->get();
$totalFiltered = $q->orwhere('return_purchases.reference_no', 'LIKE', "%{$search}%")->count();
}
}
$data = array();
if(!empty($return_purchases))
{
foreach ($return_purchases as $key => $return_purchase)
{
$nestedData['id'] = $return_purchase->id;
$nestedData['key'] = $key;
$nestedData['date'] = date(config('date_format'), strtotime($return_purchase->created_at));
$nestedData['reference_no'] = $return_purchase->reference_no;
$nestedData['warehouse'] = $return_purchase->warehouse_name;
if($return_purchase->supplier_id)
$nestedData['supplier'] = $return_purchase->supplier_name.' ['.($return_purchase->supplier_number).']';
else
$nestedData['supplier'] = 'N/A';
$nestedData['qty'] = number_format($return_purchase->qty, config('decimal'));
if($return_purchase->purchase_unit_id) {
$unit_data = DB::table('units')->select('unit_code')->find($return_purchase->purchase_unit_id);
$nestedData['qty'] .= ' '.$unit_data->unit_code;
}
$nestedData['unit_cost'] = number_format(($return_purchase->total / $return_purchase->qty), config('decimal'));
$nestedData['sub_total'] = number_format($return_purchase->total, config('decimal'));
$data[] = $nestedData;
}
}
$json_data = array(
"draw" => intval($request->input('draw')),
"recordsTotal" => intval($totalData),
"recordsFiltered" => intval($totalFiltered),
"data" => $data
);
echo json_encode($json_data);
}
public function variantData($id)
{
if(Auth::user()->role_id > 2) {
return ProductVariant::join('variants', 'product_variants.variant_id', '=', 'variants.id')
->join('product_warehouse', function($join) {
$join->on('product_variants.product_id', '=', 'product_warehouse.product_id');
$join->on('product_variants.variant_id', '=', 'product_warehouse.variant_id');
})
->select('variants.name', 'product_variants.item_code', 'product_variants.additional_cost', 'product_variants.additional_price', 'product_warehouse.qty')
->where([
['product_warehouse.product_id', $id],
['product_warehouse.warehouse_id', Auth::user()->warehouse_id]
])
->orderBy('product_variants.position')
->get();
}
else {
return ProductVariant::join('variants', 'product_variants.variant_id', '=', 'variants.id')
->select('variants.name', 'product_variants.item_code', 'product_variants.additional_cost', 'product_variants.additional_price', 'product_variants.qty')
->orderBy('product_variants.position')
->where('product_id', $id)
->get();
}
}
public function edit($id)
{
$role = Role::firstOrCreate(['id' => Auth::user()->role_id]);
if ($role->hasPermissionTo('products-edit')) {
$lims_product_list_without_variant = $this->productWithoutVariant();
$lims_product_list_with_variant = $this->productWithVariant();
$lims_brand_list = Brand::where('is_active', true)->get();
$lims_category_list = Category::where('is_active', true)->get();
$lims_unit_list = Unit::where('is_active', true)->get();
$lims_tax_list = Tax::where('is_active', true)->get();
$lims_product_data = Product::where('id', $id)->first();
if($lims_product_data->variant_option) {
$lims_product_data->variant_option = json_decode($lims_product_data->variant_option);
$lims_product_data->variant_value = json_decode($lims_product_data->variant_value);
}
$lims_product_variant_data = $lims_product_data->variant()->orderBy('position')->get();
$lims_warehouse_list = Warehouse::where('is_active', true)->get();
$noOfVariantValue = 0;
return view('backend.product.edit',compact('lims_product_list_without_variant', 'lims_product_list_with_variant', 'lims_brand_list', 'lims_category_list', 'lims_unit_list', 'lims_tax_list', 'lims_product_data', 'lims_product_variant_data', 'lims_warehouse_list', 'noOfVariantValue'));
}
else
return redirect()->back()->with('not_permitted', 'Sorry! You are not allowed to access this module');
}
public function updateProduct(Request $request)
{
if(!env('USER_VERIFIED')) {
return redirect()->back()->with('not_permitted', 'This feature is disable for demo!');
}
else {
$this->validate($request, [
'name' => [
'max:255',
Rule::unique('products')->ignore($request->input('id'))->where(function ($query) {
return $query->where('is_active', 1);
}),
],
'code' => [
'max:255',
Rule::unique('products')->ignore($request->input('id'))->where(function ($query) {
return $query->where('is_active', 1);
}),
]
]);
$lims_product_data = Product::findOrFail($request->input('id'));
$data = $request->except('image', 'file', 'prev_img');
$data['name'] = htmlspecialchars(trim($data['name']));
if($data['type'] == 'combo') {
$data['product_list'] = implode(",", $data['product_id']);
$data['variant_list'] = implode(",", $data['variant_id']);
$data['qty_list'] = implode(",", $data['product_qty']);
$data['price_list'] = implode(",", $data['unit_price']);
$data['cost'] = $data['unit_id'] = $data['purchase_unit_id'] = $data['sale_unit_id'] = 0;
}
elseif($data['type'] == 'digital' || $data['type'] == 'service')
$data['cost'] = $data['unit_id'] = $data['purchase_unit_id'] = $data['sale_unit_id'] = 0;
if(!isset($data['featured']))
$data['featured'] = 0;
if(!isset($data['is_embeded']))
$data['is_embeded'] = 0;
if(!isset($data['promotion']))
$data['promotion'] = null;
if(!isset($data['is_batch']))
$data['is_batch'] = null;
if(!isset($data['is_imei']))
$data['is_imei'] = null;
if(!isset($data['is_sync_disable']) && \Schema::hasColumn('products', 'is_sync_disable'))
$data['is_sync_disable'] = null;
$data['product_details'] = str_replace('"', '@', $data['product_details']);
$data['product_details'] = $data['product_details'];
if($data['starting_date'])
$data['starting_date'] = date('Y-m-d', strtotime($data['starting_date']));
if($data['last_date'])
$data['last_date'] = date('Y-m-d', strtotime($data['last_date']));
$previous_images = [];
//dealing with previous images
if($request->prev_img) {
foreach ($request->prev_img as $key => $prev_img) {
if(!in_array($prev_img, $previous_images))
$previous_images[] = $prev_img;
}
$lims_product_data->image = implode(",", $previous_images);
$lims_product_data->save();
}
else {
$lims_product_data->image = null;
$lims_product_data->save();
}
//dealing with new images
if($request->image) {
$images = $request->image;
$image_names = [];
$length = count(explode(",", $lims_product_data->image));
foreach ($images as $key => $image) {
$ext = pathinfo($image->getClientOriginalName(), PATHINFO_EXTENSION);
/*$image = Image::make($image)->resize(512, 512);*/
$imageName = date("Ymdhis") . ($length + $key+1) . '.' . $ext;
$image->move('public/images/product', $imageName);
$image_names[] = $imageName;
}
if($lims_product_data->image)
$data['image'] = $lims_product_data->image. ',' . implode(",", $image_names);
else
$data['image'] = implode(",", $image_names);
}
else
$data['image'] = $lims_product_data->image;
$file = $request->file;
if ($file) {
$ext = pathinfo($file->getClientOriginalName(), PATHINFO_EXTENSION);
$fileName = strtotime(date('Y-m-d H:i:s'));
$fileName = $fileName . '.' . $ext;
$file->move('public/product/files', $fileName);
$data['file'] = $fileName;
}
$old_product_variant_ids = ProductVariant::where('product_id', $request->input('id'))->pluck('id')->toArray();
$new_product_variant_ids = [];
//dealing with product variant
if(isset($data['is_variant'])) {
if(isset($data['variant_option']) && isset($data['variant_value'])) {
$data['variant_option'] = json_encode($data['variant_option']);
$data['variant_value'] = json_encode($data['variant_value']);
}
foreach ($data['variant_name'] as $key => $variant_name) {
$lims_variant_data = Variant::firstOrCreate(['name' => $data['variant_name'][$key]]);
$lims_product_variant_data = ProductVariant::where([
['product_id', $lims_product_data->id],
['variant_id', $lims_variant_data->id]
])->first();
if($lims_product_variant_data) {
$lims_product_variant_data->update([
'position' => $key+1,
'item_code' => $data['item_code'][$key],
'additional_cost' => $data['additional_cost'][$key],
'additional_price' => $data['additional_price'][$key]
]);
}
else {
$lims_product_variant_data = new ProductVariant();
$lims_product_variant_data->product_id = $lims_product_data->id;
$lims_product_variant_data->variant_id = $lims_variant_data->id;
$lims_product_variant_data->position = $key + 1;
$lims_product_variant_data->item_code = $data['item_code'][$key];
$lims_product_variant_data->additional_cost = $data['additional_cost'][$key];
$lims_product_variant_data->additional_price = $data['additional_price'][$key];
$lims_product_variant_data->qty = 0;
$lims_product_variant_data->save();
}
$new_product_variant_ids[] = $lims_product_variant_data->id;
}
}
else {
$data['is_variant'] = null;
$data['variant_option'] = null;
$data['variant_value'] = null;
}
//deleting old product variant if not exist
foreach ($old_product_variant_ids as $key => $product_variant_id) {
if (!in_array($product_variant_id, $new_product_variant_ids))
ProductVariant::find($product_variant_id)->delete();
}
if(isset($data['is_diffPrice'])) {
foreach ($data['diff_price'] as $key => $diff_price) {
if($diff_price) {
$lims_product_warehouse_data = Product_Warehouse::FindProductWithoutVariant($lims_product_data->id, $data['warehouse_id'][$key])->first();
if($lims_product_warehouse_data) {
$lims_product_warehouse_data->price = $diff_price;
$lims_product_warehouse_data->save();
}
else {
Product_Warehouse::create([
"product_id" => $lims_product_data->id,
"warehouse_id" => $data["warehouse_id"][$key],
"qty" => 0,
"price" => $diff_price
]);
}
}
}
}
else {
$data['is_diffPrice'] = false;
foreach ($data['warehouse_id'] as $key => $warehouse_id) {
$lims_product_warehouse_data = Product_Warehouse::FindProductWithoutVariant($lims_product_data->id, $warehouse_id)->first();
if($lims_product_warehouse_data) {
$lims_product_warehouse_data->price = null;
$lims_product_warehouse_data->save();
}
}
}
$lims_product_data->update($data);
$this->cacheForget('product_list');
$this->cacheForget('product_list_with_variant');
\Session::flash('edit_message', 'Product updated successfully');
}
}
public function generateCode()
{
$id = Keygen::numeric(8)->generate();
return $id;
}
public function search(Request $request)
{
$product_code = explode(" ", $request['data']);
$lims_product_data = Product::where('code', $product_code[0])->first();
$product[] = $lims_product_data->name;
$product[] = $lims_product_data->code;
$product[] = $lims_product_data->qty;
$product[] = $lims_product_data->price;
$product[] = $lims_product_data->id;
return $product;
}
public function saleUnit($id)
{
$unit = Unit::where("base_unit", $id)->orWhere('id', $id)->pluck('unit_name','id');
return json_encode($unit);
}
public function getData($id, $variant_id)
{
if($variant_id) {
$data = Product::join('product_variants', 'products.id', 'product_variants.product_id')
->select('products.name', 'product_variants.item_code')
->where([
['products.id', $id],
['product_variants.variant_id', $variant_id]
])->first();
$data->code = $data->item_code;
}
else
$data = Product::select('name', 'code')->find($id);
return $data;
}
public function productWarehouseData($id)
{
$warehouse = [];
$qty = [];
$batch = [];
$expired_date = [];
$imei_number = [];
$warehouse_name = [];
$variant_name = [];
$variant_qty = [];
$product_warehouse = [];
$product_variant_warehouse = [];
$lims_product_data = Product::select('id', 'is_variant')->find($id);
if($lims_product_data->is_variant) {
$lims_product_variant_warehouse_data = Product_Warehouse::where('product_id', $lims_product_data->id)->orderBy('warehouse_id')->get();
$lims_product_warehouse_data = Product_Warehouse::select('warehouse_id', DB::raw('sum(qty) as qty'))->where('product_id', $id)->groupBy('warehouse_id')->get();
foreach ($lims_product_variant_warehouse_data as $key => $product_variant_warehouse_data) {
$lims_warehouse_data = Warehouse::find($product_variant_warehouse_data->warehouse_id);
$lims_variant_data = Variant::find($product_variant_warehouse_data->variant_id);
$warehouse_name[] = $lims_warehouse_data->name;
$variant_name[] = $lims_variant_data->name;
$variant_qty[] = $product_variant_warehouse_data->qty;
}
}
else {
$lims_product_warehouse_data = Product_Warehouse::where('product_id', $id)->orderBy('warehouse_id', 'asc')->get();
}
foreach ($lims_product_warehouse_data as $key => $product_warehouse_data) {
$lims_warehouse_data = Warehouse::find($product_warehouse_data->warehouse_id);
if($product_warehouse_data->product_batch_id) {
$product_batch_data = ProductBatch::select('batch_no', 'expired_date')->find($product_warehouse_data->product_batch_id);
$batch_no = $product_batch_data->batch_no;
$expiredDate = date(config('date_format'), strtotime($product_batch_data->expired_date));
}
else {
$batch_no = 'N/A';
$expiredDate = 'N/A';
}
$warehouse[] = $lims_warehouse_data->name;
$batch[] = $batch_no;
$expired_date[] = $expiredDate;
$qty[] = $product_warehouse_data->qty;
if($product_warehouse_data->imei_number)
$imei_number[] = $product_warehouse_data->imei_number;
else
$imei_number[] = 'N/A';
}
$product_warehouse = [$warehouse, $qty, $batch, $expired_date, $imei_number];
$product_variant_warehouse = [$warehouse_name, $variant_name, $variant_qty];
return ['product_warehouse' => $product_warehouse, 'product_variant_warehouse' => $product_variant_warehouse];
}
public function printBarcode(Request $request)
{
if($request->input('data'))
$preLoadedproduct = $this->limsProductSearch($request);
else
$preLoadedproduct = null;
$lims_product_list_without_variant = $this->productWithoutVariant();
$lims_product_list_with_variant = $this->productWithVariant();
return view('backend.product.print_barcode', compact('lims_product_list_without_variant', 'lims_product_list_with_variant', 'preLoadedproduct'));
}
public function productWithoutVariant()
{
return Product::ActiveStandard()->select('id', 'name', 'code')
->whereNull('is_variant')->get();
}
public function productWithVariant()
{
return Product::join('product_variants', 'products.id', 'product_variants.product_id')
->ActiveStandard()
->whereNotNull('is_variant')
->select('products.id', 'products.name', 'product_variants.item_code')
->orderBy('position')->get();
}
public function limsProductSearch(Request $request)
{
$product_code = explode("(", $request['data']);
$product_code[0] = rtrim($product_code[0], " ");
$lims_product_data = Product::where([
['code', $product_code[0] ],
['is_active', true]
])->first();
if(!$lims_product_data) {
$lims_product_data = Product::join('product_variants', 'products.id', 'product_variants.product_id')
->select('products.*', 'product_variants.item_code', 'product_variants.variant_id', 'product_variants.additional_price')
->where('product_variants.item_code', $product_code[0])
->first();
$variant_id = $lims_product_data->variant_id;
$additional_price = $lims_product_data->additional_price;
}
else {
$variant_id = '';
$additional_price = 0;
}
$product[] = $lims_product_data->name;
if($lims_product_data->is_variant)
$product[] = $lims_product_data->item_code;
else
$product[] = $lims_product_data->code;
$product[] = $lims_product_data->price + $additional_price;
$product[] = DNS1D::getBarcodePNG($lims_product_data->code, $lims_product_data->barcode_symbology);
$product[] = $lims_product_data->promotion_price;
$product[] = config('currency');
$product[] = config('currency_position');
$product[] = $lims_product_data->qty;
$product[] = $lims_product_data->id;
$product[] = $variant_id;
return $product;
}
/*public function getBarcode()
{
return DNS1D::getBarcodePNG('72782608', 'C128');
}*/
public function checkBatchAvailability($product_id, $batch_no, $warehouse_id)
{
$product_batch_data = ProductBatch::where([
['product_id', $product_id],
['batch_no', $batch_no]
])->first();
if($product_batch_data) {
$product_warehouse_data = Product_Warehouse::select('qty')
->where([
['product_batch_id', $product_batch_data->id],
['warehouse_id', $warehouse_id]
])->first();
if($product_warehouse_data) {
$data['qty'] = $product_warehouse_data->qty;
$data['product_batch_id'] = $product_batch_data->id;
$data['expired_date'] = date(config('date_format'), strtotime($product_batch_data->expired_date));
$data['message'] = 'ok';
}
else {
$data['qty'] = 0;
$data['message'] = 'This Batch does not exist in the selected warehouse!';
}
}
else {
$data['message'] = 'Wrong Batch Number!';
}
return $data;
}
public function importProduct(Request $request)
{
//get file
$upload=$request->file('file');
$ext = pathinfo($upload->getClientOriginalName(), PATHINFO_EXTENSION);
if($ext != 'csv')
return redirect()->back()->with('message', 'Please upload a CSV file');
$filePath=$upload->getRealPath();
//open and read
$file=fopen($filePath, 'r');
$header= fgetcsv($file);
$escapedHeader=[];
//validate
foreach ($header as $key => $value) {
$lheader=strtolower($value);
$escapedItem=preg_replace('/[^a-z]/', '', $lheader);
array_push($escapedHeader, $escapedItem);
}
//looping through other columns
while($columns=fgetcsv($file))
{
foreach ($columns as $key => $value) {
$value=preg_replace('/\D/','',$value);
}
$data= array_combine($escapedHeader, $columns);
if($data['brand'] != 'N/A' && $data['brand'] != ''){
$lims_brand_data = Brand::firstOrCreate(['title' => $data['brand'], 'is_active' => true]);
$brand_id = $lims_brand_data->id;
}
else
$brand_id = null;
$lims_category_data = Category::firstOrCreate(['name' => $data['category'], 'is_active' => true]);
$lims_unit_data = Unit::where('unit_code', $data['unitcode'])->first();
if(!$lims_unit_data)
return redirect()->back()->with('not_permitted', 'Unit code does not exist in the database.');
$product = Product::firstOrNew([ 'name'=>$data['name'], 'is_active'=>true ]);
if($data['image'])
$product->image = $data['image'];
else
$product->image = 'zummXD2dvAtI.png';
$product->name = htmlspecialchars(trim($data['name']));
$product->code = $data['code'];
$product->type = strtolower($data['type']);
$product->barcode_symbology = 'C128';
$product->brand_id = $brand_id;
$product->category_id = $lims_category_data->id;
$product->unit_id = $lims_unit_data->id;
$product->purchase_unit_id = $lims_unit_data->id;
$product->sale_unit_id = $lims_unit_data->id;
$product->cost = str_replace(",","",$data['cost']);
$product->price = str_replace(",","",$data['price']);
$product->tax_method = 1;
$product->qty = 0;
$product->product_details = $data['productdetails'];
$product->is_active = true;
$product->save();
//dealing with variants
if($data['variantvalue'] && $data['variantname']) {
$variantInfo = explode(",", $data['variantvalue']);
foreach ($variantInfo as $key => $info) {
$variant_option[] = strtok($info, "[");
$variant_value[] = str_replace("/", ",", substr($info, strpos($info, "[")+1, (strpos($info, "]") - strpos($info, "[") - 1)));
}
$product->variant_option = json_encode($variant_option);
$product->variant_value = json_encode($variant_value);
$product->is_variant = true;
$product->save();
$variant_names = explode(",", $data['variantname']);
$item_codes = explode(",", $data['itemcode']);
$additional_costs = explode(",", $data['additionalcost']);
$additional_prices = explode(",", $data['additionalprice']);
foreach ($variant_names as $key => $variant_name) {
$variant = Variant::firstOrCreate(['name' => $variant_name]);
if($data['itemcode'])
$item_code = $item_codes[$key];
else
$item_code = $variant_name . '-' . $data['code'];
if($data['additionalcost'])
$additional_cost = $additional_costs[$key];
else
$additional_cost = 0;
if($data['additionalprice'])
$additional_price = $additional_prices[$key];
else
$additional_price = 0;
ProductVariant::create([
'product_id' => $product->id,
'variant_id' => $variant->id,
'position' => $key + 1,
'item_code' => $item_code,
'additional_cost' => $additional_cost,
'additional_price' => $additional_price,
'qty' => 0
]);
}
}
}
$this->cacheForget('product_list');
$this->cacheForget('product_list_with_variant');
return redirect('products')->with('import_message', 'Product imported successfully');
}
public function deleteBySelection(Request $request)
{
$product_id = $request['productIdArray'];
foreach ($product_id as $id) {
$lims_product_data = Product::findOrFail($id);
$lims_product_data->is_active = false;
$lims_product_data->save();
}
$this->cacheForget('product_list');
$this->cacheForget('product_list_with_variant');
return 'Product deleted successfully!';
}
public function destroy($id)
{
if(!env('USER_VERIFIED')) {
return redirect()->back()->with('not_permitted', 'This feature is disable for demo!');
}
else {
$lims_product_data = Product::findOrFail($id);
$lims_product_data->is_active = false;
if($lims_product_data->image != 'zummXD2dvAtI.png') {
$images = explode(",", $lims_product_data->image);
foreach ($images as $key => $image) {
if(file_exists('public/images/product/'.$image))
unlink('public/images/product/'.$image);
}
}
$lims_product_data->save();
$this->cacheForget('product_list');
$this->cacheForget('product_list_with_variant');
return redirect('products')->with('message', 'Product deleted successfully');
}
}
}