/
home
/
techb158
/
dev.balacoffee.com
/
app
/
Http
/
Controllers
/
/home/techb158/dev.balacoffee.com/app/Http/Controllers
mkdir
upload
Name
Size
Mode
Actions
Auth/
-
0755
rm
hrm/
-
0755
rm
AdjustmentController.php
31935
0644
edit
dl
rm
AuthController.php
1761
0644
edit
dl
rm
BaseController.php
3183
0644
edit
dl
rm
BrandsController.php
5804
0644
edit
dl
rm
CategorieController.php
3625
0644
edit
dl
rm
CategoryExpenseController.php
5449
0644
edit
dl
rm
ClientController.php
8467
0644
edit
dl
rm
Controller.php
374
0644
edit
dl
rm
CurrencyController.php
4035
0644
edit
dl
rm
ExpensesController.php
12670
0644
edit
dl
rm
HomeController.php
495
0644
edit
dl
rm
PasswordResetController.php
3895
0644
edit
dl
rm
PaymentPurchaseReturnsController.php
14650
0644
edit
dl
rm
PaymentPurchasesController.php
14138
0644
edit
dl
rm
PaymentSaleReturnsController.php
14303
0644
edit
dl
rm
PaymentSalesController.php
21799
0644
edit
dl
rm
PermissionsController.php
6531
0644
edit
dl
rm
PosController.php
16651
0644
edit
dl
rm
ProductsController.php
48520
0644
edit
dl
rm
ProvidersController.php
7279
0644
edit
dl
rm
PurchasesController.php
47279
0644
edit
dl
rm
PurchasesReturnController.php
48366
0644
edit
dl
rm
QuotationsController.php
31462
0644
edit
dl
rm
ReportController.php
149323
0644
edit
dl
rm
SalesController.php
64420
0644
edit
dl
rm
SalesReturnController.php
47094
0644
edit
dl
rm
SettingsController.php
12354
0644
edit
dl
rm
SetupController.php
8770
0644
edit
dl
rm
ShipmentController.php
7633
0644
edit
dl
rm
TestDbController.php
3156
0644
edit
dl
rm
TransferController.php
54574
0644
edit
dl
rm
UnitsController.php
6162
0644
edit
dl
rm
UpdateController.php
2064
0644
edit
dl
rm
UserController.php
13167
0644
edit
dl
rm
WarehouseController.php
6427
0644
edit
dl
rm
Edit:
/home/techb158/dev.balacoffee.com/app/Http/Controllers/ProductsController.php
(48520B)
<?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']); return response()->json([ 'warehouses' => $warehouses, 'categories' => $categories, 'brands' => $brands, '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.000; $ProductVariantUP['product_id'] = $id; $ProductVariantUP['name'] = $variant['text']; $ProductVariantUP['qty'] = 0.000; } 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) ->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; } $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; } } }
Save
cmd:
run