Viewing file: ProductsController.php (46.64 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\Http\Controllers; use App\Models\User; use App\Models\UserWarehouse; use App\Exports\ProductsExport; use App\Models\Brand; use App\Models\Category; use App\Models\Product; use App\Models\ProductVariant; use App\Models\product_warehouse; use App\Models\Unit; use App\Models\Warehouse; use App\utils\helpers; use Carbon\Carbon; use DB; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\Paginator; use Illuminate\Validation\Rule; use Illuminate\Validation\ValidationException; use Maatwebsite\Excel\Facades\Excel; use \Gumlet\ImageResize;
class ProductsController extends BaseController {
//------------ Get ALL Products --------------\\
public function index(request $request) { $this->authorizeForUser($request->user('api'), 'view', Product::class); // How many items do you want to display. $perPage = $request->limit; $pageStart = \Request::get('page', 1); // Start displaying items from this number; $offSet = ($pageStart * $perPage) - $perPage; $order = $request->SortField; $dir = $request->SortType; $helpers = new helpers(); // Filter fields With Params to retrieve $columns = array(0 => 'name', 1 => 'category_id', 2 => 'brand_id', 3 => 'code'); $param = array(0 => 'like', 1 => '=', 2 => '=', 3 => 'like'); $data = array();
$products = Product::with('unit', 'category', 'brand') ->where('deleted_at', '=', null);
//Multiple Filter $Filtred = $helpers->filter($products, $columns, $param, $request) // Search With Multiple Param ->where(function ($query) use ($request) { return $query->when($request->filled('search'), function ($query) use ($request) { return $query->where('products.name', 'LIKE', "%{$request->search}%") ->orWhere('products.code', 'LIKE', "%{$request->search}%") ->orWhere(function ($query) use ($request) { return $query->whereHas('category', function ($q) use ($request) { $q->where('name', 'LIKE', "%{$request->search}%"); }); }) ->orWhere(function ($query) use ($request) { return $query->whereHas('brand', function ($q) use ($request) { $q->where('name', 'LIKE', "%{$request->search}%"); }); }); }); }); $totalRows = $Filtred->count(); if($perPage == "-1"){ $perPage = $totalRows; } $products = $Filtred->offset($offSet) ->limit($perPage) ->orderBy($order, $dir) ->get();
foreach ($products as $product) { $item['id'] = $product->id; $item['code'] = $product->code; $item['name'] = $product->name; $item['category'] = $product['category']->name; $item['brand'] = $product['brand'] ? $product['brand']->name : 'N/D'; $item['unit'] = $product['unit']->ShortName; $item['price'] = $product->price;
$product_warehouse_data = product_warehouse::where('product_id', $product->id) ->where('deleted_at', '=', null) ->get(); $total_qty = 0; foreach ($product_warehouse_data as $product_warehouse) { $total_qty += $product_warehouse->qte; $item['quantity'] = $total_qty; }
$firstimage = explode(',', $product->image); $item['image'] = $firstimage[0];
$data[] = $item; }
//get warehouses assigned to user $user_auth = auth()->user(); if($user_auth->is_all_warehouses){ $warehouses = Warehouse::where('deleted_at', '=', null)->get(['id', 'name']); }else{ $warehouses_id = UserWarehouse::where('user_id', $user_auth->id)->pluck('warehouse_id')->toArray(); $warehouses = Warehouse::where('deleted_at', '=', null)->whereIn('id', $warehouses_id)->get(['id', 'name']); }
$categories = Category::where('deleted_at', null)->get(['id', 'name']); $brands = Brand::where('deleted_at', null)->get(['id', 'name']); $units = Unit::where('deleted_at', null)->where('base_unit', null)->get(); return response()->json([ 'warehouses' => $warehouses, 'categories' => $categories, 'brands' => $brands, 'units' => $units, 'products' => $data, 'totalRows' => $totalRows, ]); }
//-------------- Store new Product ---------------\\
public function store(Request $request) { $this->authorizeForUser($request->user('api'), 'create', Product::class);
try { $this->validate($request, [ 'code' => 'required|unique:products', 'code' => Rule::unique('products')->where(function ($query) { return $query->where('deleted_at', '=', null); }), 'name' => 'required', 'Type_barcode' => 'required', 'price' => 'required', 'category_id' => 'required', 'cost' => 'required', 'unit_id' => 'required', ], [ 'code.unique' => 'This code already used. Generate Now', 'code.required' => 'This field is required', ]);
\DB::transaction(function () use ($request) {
//-- Create New Product $Product = new Product;
//-- Field Required $Product->name = $request['name']; $Product->code = $request['code']; $Product->Type_barcode = $request['Type_barcode']; $Product->price = $request['price']; $Product->category_id = $request['category_id']; $Product->brand_id = $request['brand_id']; $Product->TaxNet = $request['TaxNet'] ? $request['TaxNet'] : 0; $Product->tax_method = $request['tax_method']; $Product->note = $request['note']; $Product->cost = $request['cost']; $Product->unit_id = $request['unit_id']; $Product->unit_sale_id = $request['unit_sale_id']; $Product->unit_purchase_id = $request['unit_purchase_id']; $Product->stock_alert = $request['stock_alert'] ? $request['stock_alert'] : 0; $Product->is_variant = $request['is_variant'] == 'true' ? 1 : 0; $Product->is_imei = $request['is_imei'] == 'true' ? 1 : 0;
if ($request['images']) { $files = $request['images']; foreach ($files as $file) { $fileData = ImageResize::createFromString(base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $file['path']))); $fileData->resize(200, 200); $name = rand(11111111, 99999999) . $file['name']; $path = public_path() . '/images/products/'; $success = file_put_contents($path . $name, $fileData); $images[] = $name; } $filename = implode(",", $images); } else { $filename = 'no-image.png'; }
$Product->image = $filename; $Product->save();
// Store Variants Product if ($request['is_variant'] == 'true') { foreach ($request['variants'] as $variant) { $Product_variants_data[] = [ 'product_id' => $Product->id, 'name' => $variant, ]; } ProductVariant::insert($Product_variants_data); }
//--Store Product Warehouse $warehouses = Warehouse::where('deleted_at', null)->pluck('id')->toArray(); if ($warehouses) { $Product_variants = ProductVariant::where('product_id', $Product->id) ->where('deleted_at', null) ->get(); foreach ($warehouses as $warehouse) { if ($request['is_variant'] == 'true') { foreach ($Product_variants as $product_variant) {
$product_warehouse[] = [ 'product_id' => $Product->id, 'warehouse_id' => $warehouse, 'product_variant_id' => $product_variant->id, ]; } } else { $product_warehouse[] = [ 'product_id' => $Product->id, 'warehouse_id' => $warehouse, ]; } } product_warehouse::insert($product_warehouse); }
}, 10);
return response()->json(['success' => true]);
} catch (ValidationException $e) { return response()->json([ 'status' => 422, 'msg' => 'error', 'errors' => $e->errors(), ], 422); }
}
//-------------- Update Product ---------------\\ //-----------------------------------------------\\
public function update(Request $request, $id) { $this->authorizeForUser($request->user('api'), 'update', Product::class); try { $this->validate($request, [ 'code' => 'required|unique:products', 'code' => Rule::unique('products')->ignore($id)->where(function ($query) { return $query->where('deleted_at', '=', null); }), 'name' => 'required', 'Type_barcode' => 'required', 'price' => 'required', 'category_id' => 'required', 'cost' => 'required', 'unit_id' => 'required', ], [ 'code.unique' => 'This code already used. Generate Now', 'code.required' => 'This field is required', ]);
\DB::transaction(function () use ($request, $id) {
$Product = Product::where('id', $id) ->where('deleted_at', '=', null) ->first();
//-- Update Product $Product->name = $request['name']; $Product->code = $request['code']; $Product->Type_barcode = $request['Type_barcode']; $Product->price = $request['price']; $Product->category_id = $request['category_id']; $Product->brand_id = $request['brand_id'] == 'null' ?Null: $request['brand_id']; $Product->TaxNet = $request['TaxNet']; $Product->tax_method = $request['tax_method']; $Product->note = $request['note']; $Product->cost = $request['cost']; $Product->unit_id = $request['unit_id']; $Product->unit_sale_id = $request['unit_sale_id'] ? $request['unit_sale_id'] : $request['unit_id']; $Product->unit_purchase_id = $request['unit_purchase_id'] ? $request['unit_purchase_id'] : $request['unit_id']; $Product->stock_alert = $request['stock_alert']; $Product->is_variant = $request['is_variant'] == 'true' ? 1 : 0; $Product->is_imei = $request['is_imei'] == 'true' ? 1 : 0;
// Store Variants Product $oldVariants = ProductVariant::where('product_id', $id) ->where('deleted_at', null) ->get();
$warehouses = Warehouse::where('deleted_at', null) ->pluck('id') ->toArray();
if ($request['is_variant'] == 'true') {
if ($oldVariants->isNotEmpty()) { $new_variants_id = []; $var = 'id';
foreach ($request['variants'] as $new_id) { if (array_key_exists($var, $new_id)) { $new_variants_id[] = $new_id['id']; } else { $new_variants_id[] = 0; } }
foreach ($oldVariants as $key => $value) { $old_variants_id[] = $value->id;
// Delete Variant if (!in_array($old_variants_id[$key], $new_variants_id)) { $ProductVariant = ProductVariant::findOrFail($value->id); $ProductVariant->deleted_at = Carbon::now(); $ProductVariant->save();
$ProductWarehouse = product_warehouse::where('product_variant_id', $value->id) ->update(['deleted_at' => Carbon::now()]); } }
foreach ($request['variants'] as $key => $variant) { if (array_key_exists($var, $variant)) {
$ProductVariantDT = new ProductVariant;
//-- Field Required $ProductVariantDT->product_id = $variant['product_id']; $ProductVariantDT->name = $variant['text']; $ProductVariantDT->qty = $variant['qty']; $ProductVariantUP['product_id'] = $variant['product_id']; $ProductVariantUP['name'] = $variant['text']; $ProductVariantUP['qty'] = $variant['qty'];
} else { $ProductVariantDT = new ProductVariant;
//-- Field Required $ProductVariantDT->product_id = $id; $ProductVariantDT->name = $variant['text']; $ProductVariantDT->qty = 0.00; $ProductVariantUP['product_id'] = $id; $ProductVariantUP['name'] = $variant['text']; $ProductVariantUP['qty'] = 0.00; }
if (!in_array($new_variants_id[$key], $old_variants_id)) { $ProductVariantDT->save();
//--Store Product warehouse if ($warehouses) { $product_warehouse= []; foreach ($warehouses as $warehouse) {
$product_warehouse[] = [ 'product_id' => $id, 'warehouse_id' => $warehouse, 'product_variant_id' => $ProductVariantDT->id, ];
} product_warehouse::insert($product_warehouse); } } else { ProductVariant::where('id', $variant['id'])->update($ProductVariantUP); } }
} else { $ProducttWarehouse = product_warehouse::where('product_id', $id) ->update([ 'deleted_at' => Carbon::now(), ]);
foreach ($request['variants'] as $variant) { $product_warehouse_DT = []; $ProductVarDT = new ProductVariant;
//-- Field Required $ProductVarDT->product_id = $id; $ProductVarDT->name = $variant['text']; $ProductVarDT->save();
//-- Store Product warehouse if ($warehouses) { foreach ($warehouses as $warehouse) {
$product_warehouse_DT[] = [ 'product_id' => $id, 'warehouse_id' => $warehouse, 'product_variant_id' => $ProductVarDT->id, ]; }
product_warehouse::insert($product_warehouse_DT); } }
} } else { if ($oldVariants->isNotEmpty()) { foreach ($oldVariants as $old_var) { $var_old = ProductVariant::where('product_id', $old_var['product_id']) ->where('deleted_at', null) ->first(); $var_old->deleted_at = Carbon::now(); $var_old->save();
$ProducttWarehouse = product_warehouse::where('product_variant_id', $old_var['id']) ->update([ 'deleted_at' => Carbon::now(), ]); }
if ($warehouses) { foreach ($warehouses as $warehouse) {
$product_warehouse[] = [ 'product_id' => $id, 'warehouse_id' => $warehouse, 'product_variant_id' => null, ];
} product_warehouse::insert($product_warehouse); } } }
if ($request['images'] === null) {
if ($Product->image !== null) { foreach (explode(',', $Product->image) as $img) { $pathIMG = public_path() . '/images/products/' . $img; if (file_exists($pathIMG)) { if ($img != 'no-image.png') { @unlink($pathIMG); } } } } $filename = 'no-image.png'; } else { if ($Product->image !== null) { foreach (explode(',', $Product->image) as $img) { $pathIMG = public_path() . '/images/products/' . $img; if (file_exists($pathIMG)) { if ($img != 'no-image.png') { @unlink($pathIMG); } } } } $files = $request['images']; foreach ($files as $file) { $fileData = ImageResize::createFromString(base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $file['path']))); $fileData->resize(200, 200); $name = rand(11111111, 99999999) . $file['name']; $path = public_path() . '/images/products/'; $success = file_put_contents($path . $name, $fileData); $images[] = $name; } $filename = implode(",", $images); }
$Product->image = $filename; $Product->save();
}, 10);
return response()->json(['success' => true]);
} catch (ValidationException $e) { return response()->json([ 'status' => 422, 'msg' => 'error', 'errors' => $e->errors(), ], 422); }
}
//-------------- Remove Product ---------------\\ //-----------------------------------------------\\
public function destroy(Request $request, $id) { $this->authorizeForUser($request->user('api'), 'delete', Product::class);
\DB::transaction(function () use ($id) {
$Product = Product::findOrFail($id); $Product->deleted_at = Carbon::now(); $Product->save();
foreach (explode(',', $Product->image) as $img) { $pathIMG = public_path() . '/images/products/' . $img; if (file_exists($pathIMG)) { if ($img != 'no-image.png') { @unlink($pathIMG); } } }
product_warehouse::where('product_id', $id)->update([ 'deleted_at' => Carbon::now(), ]);
ProductVariant::where('product_id', $id)->update([ 'deleted_at' => Carbon::now(), ]);
}, 10);
return response()->json(['success' => true]);
}
//-------------- Delete by selection ---------------\\
public function delete_by_selection(Request $request) { $this->authorizeForUser($request->user('api'), 'delete', Product::class);
\DB::transaction(function () use ($request) { $selectedIds = $request->selectedIds; foreach ($selectedIds as $product_id) {
$Product = Product::findOrFail($product_id); $Product->deleted_at = Carbon::now(); $Product->save();
foreach (explode(',', $Product->image) as $img) { $pathIMG = public_path() . '/images/products/' . $img; if (file_exists($pathIMG)) { if ($img != 'no-image.png') { @unlink($pathIMG); } } }
product_warehouse::where('product_id', $product_id)->update([ 'deleted_at' => Carbon::now(), ]);
ProductVariant::where('product_id', $product_id)->update([ 'deleted_at' => Carbon::now(), ]); }
}, 10);
return response()->json(['success' => true]);
}
//-------------- Export All Product to EXCEL ---------------\\
public function export_Excel(Request $request) { $this->authorizeForUser($request->user('api'), 'view', Product::class);
return Excel::download(new ProductsExport, 'List_Products.xlsx'); }
//-------------- Show Product Details ---------------\\
public function Get_Products_Details(Request $request, $id) {
$this->authorizeForUser($request->user('api'), 'view', Product::class);
$Product = Product::where('deleted_at', '=', null)->findOrFail($id); //get warehouses assigned to user $user_auth = auth()->user(); if($user_auth->is_all_warehouses){ $warehouses = Warehouse::where('deleted_at', '=', null)->get(['id', 'name']); }else{ $warehouses_id = UserWarehouse::where('user_id', $user_auth->id)->pluck('warehouse_id')->toArray(); $warehouses = Warehouse::where('deleted_at', '=', null)->whereIn('id', $warehouses_id)->get(['id', 'name']); }
$item['id'] = $Product->id; $item['code'] = $Product->code; $item['Type_barcode'] = $Product->Type_barcode; $item['name'] = $Product->name; $item['note'] = $Product->note; $item['category'] = $Product['category']->name; $item['brand'] = $Product['brand'] ? $Product['brand']->name : 'N/D'; $item['unit'] = $Product['unit']->ShortName; $item['price'] = $Product->price; $item['cost'] = $Product->cost; $item['stock_alert'] = $Product->stock_alert; $item['taxe'] = $Product->TaxNet; $item['tax_method'] = $Product->tax_method == '1' ? 'Exclusive' : 'Inclusive';
if ($Product->is_variant) { $item['is_variant'] = 'yes'; $productsVariants = ProductVariant::where('product_id', $id) ->where('deleted_at', null) ->get(); foreach ($productsVariants as $variant) { $item['ProductVariant'][] = $variant->name;
foreach ($warehouses as $warehouse) { $product_warehouse = DB::table('product_warehouse') ->where('product_id', $id) ->where('deleted_at', '=', null) ->where('warehouse_id', $warehouse->id) ->where('product_variant_id', $variant->id) ->select(DB::raw('SUM(product_warehouse.qte) AS sum')) ->first();
$war_var['mag'] = $warehouse->name; $war_var['variant'] = $variant->name; $war_var['qte'] = $product_warehouse->sum; $item['CountQTY_variants'][] = $war_var; }
} } else { $item['is_variant'] = 'no'; $item['CountQTY_variants'] = []; }
foreach ($warehouses as $warehouse) { $product_warehouse_data = DB::table('product_warehouse') ->where('deleted_at', '=', null) ->where('product_id', $id) ->where('warehouse_id', $warehouse->id) ->select(DB::raw('SUM(product_warehouse.qte) AS sum')) ->first();
$war['mag'] = $warehouse->name; $war['qte'] = $product_warehouse_data->sum; $item['CountQTY'][] = $war; }
if ($Product->image != '') { foreach (explode(',', $Product->image) as $img) { $item['images'][] = $img; } }
$data[] = $item;
return response()->json($data[0]);
}
//------------ Get products By Warehouse -----------------\\
public function Products_by_Warehouse(request $request, $id) { $data = []; $product_warehouse_data = product_warehouse::with('warehouse', 'product', 'productVariant') ->where('warehouse_id', $id) ->where('deleted_at', '=', null) ->where(function ($query) use ($request) { if ($request->stock == '1') { return $query->where('qte', '>', 0); } })->get();
foreach ($product_warehouse_data as $product_warehouse) {
if ($product_warehouse->product_variant_id) { $item['product_variant_id'] = $product_warehouse->product_variant_id; $item['code'] = $product_warehouse['productVariant']->name . '-' . $product_warehouse['product']->code; $item['Variant'] = $product_warehouse['productVariant']->name; } else { $item['product_variant_id'] = null; $item['Variant'] = null; $item['code'] = $product_warehouse['product']->code; }
$item['id'] = $product_warehouse->product_id; $item['name'] = $product_warehouse['product']->name; $item['barcode'] = $product_warehouse['product']->code; $item['Type_barcode'] = $product_warehouse['product']->Type_barcode; $firstimage = explode(',', $product_warehouse['product']->image); $item['image'] = $firstimage[0];
if ($product_warehouse['product']['unitSale']->operator == '/') { $item['qte_sale'] = $product_warehouse->qte * $product_warehouse['product']['unitSale']->operator_value; $price = $product_warehouse['product']->price / $product_warehouse['product']['unitSale']->operator_value; } else { $item['qte_sale'] = $product_warehouse->qte / $product_warehouse['product']['unitSale']->operator_value; $price = $product_warehouse['product']->price * $product_warehouse['product']['unitSale']->operator_value; }
if ($product_warehouse['product']['unitPurchase']->operator == '/') { $item['qte_purchase'] = round($product_warehouse->qte * $product_warehouse['product']['unitPurchase']->operator_value, 5); } else { $item['qte_purchase'] = round($product_warehouse->qte / $product_warehouse['product']['unitPurchase']->operator_value, 5); }
$item['qte'] = $product_warehouse->qte; $item['unitSale'] = $product_warehouse['product']['unitSale']->ShortName; $item['unitPurchase'] = $product_warehouse['product']['unitPurchase']->ShortName;
if ($product_warehouse['product']->TaxNet !== 0.0) { //Exclusive if ($product_warehouse['product']->tax_method == '1') { $tax_price = $price * $product_warehouse['product']->TaxNet / 100; $item['Net_price'] = $price + $tax_price; // Inxclusive } else { $item['Net_price'] = $price; } } else { $item['Net_price'] = $price; }
$data[] = $item; }
return response()->json($data); }
//------------ Get product By ID -----------------\\
public function show($id) {
$Product_data = Product::with('unit') ->where('id', $id) ->where('deleted_at', '=', null) ->with('unsoldSerials') ->first();
$data = []; $item['id'] = $Product_data['id']; $item['name'] = $Product_data['name']; $item['Type_barcode'] = $Product_data['Type_barcode']; $item['unit_id'] = $Product_data['unit']->id; $item['unit'] = $Product_data['unit']->ShortName; $item['purchase_unit_id'] = $Product_data['unitPurchase']->id; $item['unitPurchase'] = $Product_data['unitPurchase']->ShortName; $item['sale_unit_id'] = $Product_data['unitSale']->id; $item['unitSale'] = $Product_data['unitSale']->ShortName; $item['tax_method'] = $Product_data['tax_method']; $item['tax_percent'] = $Product_data['TaxNet'];
$item['is_imei'] = $Product_data['is_imei'];
if ($Product_data['unitSale']->operator == '/') { $price = $Product_data['price'] / $Product_data['unitSale']->operator_value;
} else { $price = $Product_data['price'] * $Product_data['unitSale']->operator_value; }
if ($Product_data['unitPurchase']->operator == '/') { $cost = $Product_data['cost'] / $Product_data['unitPurchase']->operator_value; } else { $cost = $Product_data['cost'] * $Product_data['unitPurchase']->operator_value; }
$item['Unit_cost'] = $cost; $item['fix_cost'] = $Product_data['cost']; $item['Unit_price'] = $price; $item['fix_price'] = $Product_data['price'];
if ($Product_data->TaxNet !== 0.0) { //Exclusive if ($Product_data['tax_method'] == '1') { $tax_price = $price * $Product_data['TaxNet'] / 100; $tax_cost = $cost * $Product_data['TaxNet'] / 100;
$item['Total_cost'] = $cost + $tax_cost; $item['Total_price'] = $price + $tax_price; $item['Net_cost'] = $cost; $item['Net_price'] = $price; $item['tax_price'] = $tax_price; $item['tax_cost'] = $tax_cost;
// Inxclusive } else { $item['Total_cost'] = $cost; $item['Total_price'] = $price; $item['Net_cost'] = $cost / (($Product_data['TaxNet'] / 100) + 1); $item['Net_price'] = $price / (($Product_data['TaxNet'] / 100) + 1); $item['tax_cost'] = $item['Total_cost'] - $item['Net_cost']; $item['tax_price'] = $item['Total_price'] - $item['Net_price']; } } else { $item['Total_cost'] = $cost; $item['Total_price'] = $price; $item['Net_cost'] = $cost; $item['Net_price'] = $price; $item['tax_price'] = 0; $item['tax_cost'] = 0; }
$unsoldSerials=[]; foreach ($Product_data->unsoldSerials as $serial){ $unsoldSerials[]=[ 'id'=>$serial->id, 'serial'=>$serial->serial, 'expiry'=>$serial->expiry ]; } $item['serial_expires']=$unsoldSerials;
$data[] = $item;
return response()->json($data[0]); }
//-------------- Product Quantity Alerts ---------------\\
public function Products_Alert(request $request) { $this->authorizeForUser($request->user('api'), 'Stock_Alerts', Product::class);
$product_warehouse_data = product_warehouse::with('warehouse', 'product', 'productVariant') ->join('products', 'product_warehouse.product_id', '=', 'products.id') ->whereRaw('qte <= stock_alert') ->where(function ($query) use ($request) { return $query->when($request->filled('warehouse'), function ($query) use ($request) { return $query->where('warehouse_id', $request->warehouse); }); })->where('product_warehouse.deleted_at', null)->get();
$data = [];
if ($product_warehouse_data->isNotEmpty()) {
foreach ($product_warehouse_data as $product_warehouse) { if ($product_warehouse->qte <= $product_warehouse['product']->stock_alert) { if ($product_warehouse->product_variant_id !== null) { $item['code'] = $product_warehouse['productVariant']->name . '-' . $product_warehouse['product']->code; } else { $item['code'] = $product_warehouse['product']->code; } $item['quantity'] = $product_warehouse->qte; $item['name'] = $product_warehouse['product']->name; $item['warehouse'] = $product_warehouse['warehouse']->name; $item['stock_alert'] = $product_warehouse['product']->stock_alert; $data[] = $item; } } }
$perPage = $request->limit; // How many items do you want to display. $pageStart = \Request::get('page', 1); // Start displaying items from this number; $offSet = ($pageStart * $perPage) - $perPage; $collection = collect($data); // Get only the items you need using array_slice $data_collection = $collection->slice($offSet, $perPage)->values();
$products = new LengthAwarePaginator($data_collection, count($data), $perPage, Paginator::resolveCurrentPage(), array('path' => Paginator::resolveCurrentPath()));
//get warehouses assigned to user $user_auth = auth()->user(); if($user_auth->is_all_warehouses){ $warehouses = Warehouse::where('deleted_at', '=', null)->get(['id', 'name']); }else{ $warehouses_id = UserWarehouse::where('user_id', $user_auth->id)->pluck('warehouse_id')->toArray(); $warehouses = Warehouse::where('deleted_at', '=', null)->whereIn('id', $warehouses_id)->get(['id', 'name']); }
return response()->json([ 'products' => $products, 'warehouses' => $warehouses, ]); }
//---------------- Show Form Create Product ---------------\\
public function create(Request $request) {
$this->authorizeForUser($request->user('api'), 'create', Product::class);
$categories = Category::where('deleted_at', null)->get(['id', 'name']); $brands = Brand::where('deleted_at', null)->get(['id', 'name']); $units = Unit::where('deleted_at', null)->where('base_unit', null)->get(); return response()->json([ 'categories' => $categories, 'brands' => $brands, 'units' => $units, ]);
}
//---------------- Show Elements Barcode ---------------\\
public function Get_element_barcode(Request $request) { $this->authorizeForUser($request->user('api'), 'barcode', Product::class);
//get warehouses assigned to user $user_auth = auth()->user(); if($user_auth->is_all_warehouses){ $warehouses = Warehouse::where('deleted_at', '=', null)->get(['id', 'name']); }else{ $warehouses_id = UserWarehouse::where('user_id', $user_auth->id)->pluck('warehouse_id')->toArray(); $warehouses = Warehouse::where('deleted_at', '=', null)->whereIn('id', $warehouses_id)->get(['id', 'name']); }
return response()->json(['warehouses' => $warehouses]);
}
//---------------- Show Form Edit Product ---------------\\
public function edit(Request $request, $id) {
$this->authorizeForUser($request->user('api'), 'update', Product::class);
$Product = Product::where('deleted_at', '=', null)->findOrFail($id);
$item['id'] = $Product->id; $item['code'] = $Product->code; $item['Type_barcode'] = $Product->Type_barcode; $item['name'] = $Product->name; if ($Product->category_id) { if (Category::where('id', $Product->category_id) ->where('deleted_at', '=', null) ->first()) { $item['category_id'] = $Product->category_id; } else { $item['category_id'] = ''; } } else { $item['category_id'] = ''; }
if ($Product->brand_id) { if (Brand::where('id', $Product->brand_id) ->where('deleted_at', '=', null) ->first()) { $item['brand_id'] = $Product->brand_id; } else { $item['brand_id'] = ''; } } else { $item['brand_id'] = ''; }
if ($Product->unit_id) { if (Unit::where('id', $Product->unit_id) ->where('deleted_at', '=', null) ->first()) { $item['unit_id'] = $Product->unit_id; } else { $item['unit_id'] = ''; }
if (Unit::where('id', $Product->unit_sale_id) ->where('deleted_at', '=', null) ->first()) { $item['unit_sale_id'] = $Product->unit_sale_id; } else { $item['unit_sale_id'] = ''; }
if (Unit::where('id', $Product->unit_purchase_id) ->where('deleted_at', '=', null) ->first()) { $item['unit_purchase_id'] = $Product->unit_purchase_id; } else { $item['unit_purchase_id'] = ''; }
} else { $item['unit_id'] = ''; }
$item['tax_method'] = $Product->tax_method; $item['price'] = $Product->price; $item['cost'] = $Product->cost; $item['stock_alert'] = $Product->stock_alert; $item['TaxNet'] = $Product->TaxNet; $item['note'] = $Product->note ? $Product->note : ''; $item['images'] = []; if ($Product->image != '' && $Product->image != 'no-image.png') { foreach (explode(',', $Product->image) as $img) { $path = public_path() . '/images/products/' . $img; if (file_exists($path)) { $itemImg['name'] = $img; $type = pathinfo($path, PATHINFO_EXTENSION); $data = file_get_contents($path); $itemImg['path'] = 'data:image/' . $type . ';base64,' . base64_encode($data);
$item['images'][] = $itemImg; } } } else { $item['images'] = []; } if ($Product->is_variant) { $item['is_variant'] = true; $productsVariants = ProductVariant::where('product_id', $id) ->where('deleted_at', null) ->get(); foreach ($productsVariants as $variant) { $variant_item['id'] = $variant->id; $variant_item['text'] = $variant->name; $variant_item['qty'] = $variant->qty; $variant_item['product_id'] = $variant->product_id; $item['ProductVariant'][] = $variant_item; } } else { $item['is_variant'] = false; $item['ProductVariant'] = []; }
$item['is_imei'] = $Product->is_imei?true:false;
$data = $item; $categories = Category::where('deleted_at', null)->get(['id', 'name']); $brands = Brand::where('deleted_at', null)->get(['id', 'name']);
$product_units = Unit::where('id', $Product->unit_id) ->orWhere('base_unit', $Product->unit_id) ->where('deleted_at', null) ->get();
$units = Unit::where('deleted_at', null) ->where('base_unit', null) ->get();
return response()->json([ 'product' => $data, 'categories' => $categories, 'brands' => $brands, 'units' => $units, 'units_sub' => $product_units, ]);
}
// import Products public function import_products(Request $request) { try { \DB::transaction(function () use ($request) { $file_upload = $request->file('products'); $ext = pathinfo($file_upload->getClientOriginalName(), PATHINFO_EXTENSION); if ($ext != 'csv') { return response()->json([ 'msg' => 'must be in csv format', 'status' => false, ]); } else { $data = array(); $rowcount = 0; if (($handle = fopen($file_upload, "r")) !== false) {
$max_line_length = defined('MAX_LINE_LENGTH') ? MAX_LINE_LENGTH : 10000; $header = fgetcsv($handle, $max_line_length); $header_colcount = count($header); while (($row = fgetcsv($handle, $max_line_length)) !== false) { $row_colcount = count($row); if ($row_colcount == $header_colcount) { $entry = array_combine($header, $row); $data[] = $entry; } else { return null; } $rowcount++; } fclose($handle); } else { return null; }
$warehouses = Warehouse::where('deleted_at', null)->pluck('id')->toArray();
//-- Create New Product foreach ($data as $key => $value) { $category = Category::firstOrCreate(['name' => $value['category']]); $category_id = $category->id;
$unit = Unit::where(['ShortName' => $value['unit']]) ->orWhere(['name' => $value['unit']])->first(); $unit_id = $unit->id;
if ($value['brand'] != 'N/A' && $value['brand'] != '') { $brand = Brand::firstOrCreate(['name' => $value['brand']]); $brand_id = $brand->id; } else { $brand_id = null; } $Product = new Product; $Product->name = $value['name'] == '' ? null : $value['name']; $Product->code = $value['code'] == '' ? '11111111' : $value['code']; $Product->Type_barcode = 'CODE128'; $Product->price = $value['price']; $Product->cost = $value['cost']; $Product->category_id = $category_id; $Product->brand_id = $brand_id; $Product->TaxNet = 0; $Product->tax_method = 1; $Product->note = $value['note'] ? $value['note'] : ''; $Product->unit_id = $unit_id; $Product->unit_sale_id = $unit_id; $Product->unit_purchase_id = $unit_id; $Product->stock_alert = $value['stock_alert'] ? $value['stock_alert'] : 0; $Product->is_variant = 0; $Product->image = 'no-image.png'; $Product->save();
if ($warehouses) { foreach ($warehouses as $warehouse) { $product_warehouse[] = [ 'product_id' => $Product->id, 'warehouse_id' => $warehouse, ]; } } } if ($warehouses) { product_warehouse::insert($product_warehouse); } } }, 10); return response()->json([ 'status' => true, ], 200);
} catch (ValidationException $e) { return response()->json([ 'status' => false, 'msg' => 'error', 'errors' => $e->errors(), ]); }
}
// Generate_random_code public function generate_random_code($value_code) { if($value_code == ''){ $gen_code = substr(number_format(time() * mt_rand(), 0, '', ''), 0, 8); $this->check_code_exist($gen_code); }else{ $this->check_code_exist($value_code); } }
// check_code_exist public function check_code_exist($code) { $check_code = Product::where('code', $code)->first(); if ($check_code) { $this->generate_random_code($code); } else { return $code; }
}
}
|