Path : /var/www/html/jewelry-pos/app/Http/Controllers/ |
B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H |
Current File : /var/www/html/jewelry-pos/app/Http/Controllers/ProductController.php |
<?php namespace App\Http\Controllers; use App\Exports\ProductExport; use App\Exports\MemberExport; use App\Exports\SampleProductExport; use App\Imports\ProductImport; use App\Models\BuildStockDate; use App\Models\BuildStockProduct; use App\Models\BuildStockProductAttribute; use App\Models\Product; use App\Models\ProductCategory; use App\Models\ProductReady; use App\Models\QtyHistory; use App\Models\Setting; use App\Models\Supplier; use App\Models\User; use Carbon\Carbon; use Faker\Core\File; use http\Exception; use Illuminate\Support\Arr; use Illuminate\Http\Request; use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\DB; use App\Http\Controllers\Controller; use App\Models\ProductAttribute; use Illuminate\Support\Str; use Intervention\Image\Facades\Image; use Illuminate\Support\Facades\Auth; //use Maatwebsite\Excel\Excel; use Maatwebsite\Excel\Facades\Excel; use Illuminate\Http\Client\Response; use function Symfony\Component\Translation\t; class ProductController extends Controller { function __construct() { set_time_limit(500000); $this->middleware('permission:product-list', ['only' => ['index', 'show']]); $this->middleware('permission:product-create', ['only' => ['create', 'store']]); $this->middleware('permission:product-edit', ['only' => ['edit', 'update']]); $this->middleware('permission:product-delete', ['only' => ['destroy']]); } public function build_stock($id=null) { Artisan::call('build:stock', ['id' => $id]); return redirect()->back()->with('success' , __('message.stock build successfully')); } /** * Display a listing of the resource. * * @return \Symfony\Component\HttpFoundation\BinaryFileResponse */ public function exportProduct(Request $request) { return Excel::download(new ProductExport($request->get('q'), $request->get('for_sale'), $request->get('category'), $request->get('paginate')), 'Product.xlsx'); } public function sample() { return Excel::download(new SampleProductExport(), 'Product Sample.xlsx'); } public function import(Request $request) { $request->validate([ 'browFile' => 'required|file|mimes:xlsx,xls|max:2048', ]); if (empty($request->file('browFile')->getRealPath())) { return back()->with('success', 'No file selected'); } else { $import = new ProductImport(); $array = Excel::toCollection($import, $request->file('browFile')); foreach ($array as $i => $row) { foreach ($row as $s => $val) { if ($s > 0) { $for_sale = 1; $productCategory = ProductCategory::where('name', $val[1]??'')->first(); $gold=ProductCategory::whereIn('name',['មាស','Gold','ทอง'])->first(); if($productCategory->name == 'ផ្លាកទីន' || $productCategory->name == 'Platinum' || $productCategory->name == 'แพลตตินัม') { if (!$val[9]) { $product_category = ProductCategory::whereIn('name', ['ផ្លាកទីនអ៊ីតាលី', 'អ៊ីតាលី', 'Platinum Italy', 'Italy', 'แพลตตินั่มอิตาลี', 'อิตาลี'])->first(); } else { $product_category = ProductCategory::where('name', 'like', 'ផ្លាកទីន%')->where('purity_level', $val[9])->first(); } if(!$product_category && $val[32]){ $product_category = ProductCategory::where('name' , 'like' , 'ផ្លាកទីន%')->where('purity_level', $val[32])->first(); } } $purity_level = $val[9]??''; if($productCategory->name === $gold->name){ if($val[7] == 'មាសថៃ'){ $product_category = ProductCategory::whereIn('name' , ['មាសថៃ' , 'Thai Gold' , 'ทองไทย' ,])->first(); }elseif($val[7] == 'មាសដុំ'){ $product_category = ProductCategory::whereIn('name' , ['មាសដុំ'])->first(); $for_sale = 0; }else{ $product_category = $productCategory; } } if($val[12]){ $original_wages = ($val[12] * $val[16]) / 1000; $original_wages_in_weight = $val[12]??0; }else{ $original_wages = $val[13]??0; // $original_wages_in_weight = ($val[13]*$val[16])/1000; $val16 = $val[16]??0; $val13 = $val[13]??0; $original_wages_in_weight = $val13 / ($val16 * 1000); } if($productCategory->fixed_price == false){ $wages_in_weight = $val[24]??0; $selling_wages = ($val[24] * $val[16]) / 1000; }else{ $selling_wages = $val[24]??0; $wages_in_weight = $val[24]/($val[16]*1000); } $product_category_id = $product_category->id??$productCategory->id; try { $price = $val[25]??0; $cost = $val[22]??0; }catch (Exception $e){ echo 'Caught exception: ', $e->getMessage(), "\n"; } $weight_description = ''; if($productCategory->fixed_price){ $weight_description = $val[9]??''; } if($val[4]){ $supplier = Supplier::where('name' , $val[4])->first(); if(!$supplier){ $supplier = Supplier::create([ 'name' => $val[4]??'', 'phone' => '', 'note' => '', ]); } } $supplier_id = $supplier->id??0; $fixed_price = false; $selling_price = 0; $sellPrice = $val[28]??0; if($sellPrice){ $selling_price = $val[28]??0; $fixed_price = true; } if($fixed_price == true){ $cost_invoice = $val[23] - $cost - $original_wages; }else{ $cost_invoice = $val[23] - $cost; } $qty = $val[5]??1; $products = Product::create([ 'fixed_price' => $fixed_price, 'supplier_id' => $supplier_id, 'supplier_rate' => $val[16]??'', 'gia_number' => $val[18], 'part_number' => $val[6], 'name' => $val[7]??'', 'weight' => $val[8]??0, 'original_wages' => $original_wages??0, 'wages' => $selling_wages, 'diamond_size' => $val[17]??'', 'weight_description' => $weight_description, 'cost' => $cost_invoice??0, 'price' => $selling_price??0, 'product_category_id' => $product_category_id, 'description' => $val[29]??'', 'qty' => $qty, 'user_id' => Auth::user()->id, 'for_sale' => $for_sale, 'purity_level' => $purity_level??'', 'original_wages_in_weight' => $original_wages_in_weight??0, 'wages_in_weight' => $wages_in_weight??0, 'purity_upgrade_to' => $val[30]??0, 'selling_purity' => $val[31]??0, 'old_code' => $val[33]??'', 'original_invoice' => $val[34]??'', ]); if($price != 0 && $price != ''){ ProductAttribute::create([ 'name' => $val[20]??'', 'cost' => $cost??0, 'price' => $price??0, 'qty' => $val[21]??'', 'product_id' => $products->id, ]); } QtyHistory::create([ 'qty' => $products->qty, 'qty_after_transaction' => $products->qty, 'qty_before_transaction' => 0, 'product_id' => $products->id, 'product_category_id' => $products->product_category_id, 'user_id' => Auth::user()->id, 'note' => '', 'grn' => $val[30]??'', ]); } } } } return redirect()->route('products.index')->with('__("message.sussfully")'); } public function index(Request $request) { $product_category_id = $request->get('product_category_id'); $productCategories = ProductCategory::get(); $paginate = $request->get('paginate') ?? 25; $for_sale = $request->get('for_sale') ?? 1; $q = $request->get('q'); $products = Product::query(); if ($for_sale >= 0 && $for_sale != null) { $products = $products->where('for_sale', $for_sale); } if ($q) { $products = $products->where(function ($query) use ($q) { $query->where('part_number', 'like', '%' . $q . '%'); }); } if ($product_category_id) { $productCategory = ProductCategory::findOrFail($product_category_id); $products = $products->whereIn('product_category_id' , $productCategory->IdvsAllSubCategories()); } $productCategories1 = clone $productCategories; $main_categories = $productCategories1->where('parent_id' , null); $productCategories2 = clone $productCategories; $child_categories = $productCategories2->where('parent_id' , '<>' , ''); $products = $products->orderBy('id', 'desc')->paginate($paginate); return view('products.index', compact('products', 'q', 'paginate', 'for_sale', 'productCategories' , 'main_categories' , 'child_categories', 'product_category_id')); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { $productCategories = ProductCategory::whereNotIn('name',['Platinum','ផ្លាកទីន','แพลตตินัม'])->get(); $suppliers = Supplier::all(); return view('products.create', compact('productCategories','suppliers')); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $request->validate( [ 'name' => 'required', 'cost' => 'required', 'weight' => 'required', 'part_number' => 'required', ] ); // dd($request->all()); $save_url = ''; if ($request->hasFile('image')) { $image = $request->file('image'); $name_gen = hexdec(uniqid()) . '.' . $image->getClientOriginalExtension(); //hexdec generate image Image::make($image)->resize(800, 800, function ($constraint) { $constraint->aspectRatio(); })->save('images/' . $name_gen); $save_url = 'images/' . $name_gen; } do { $part_number = $request->get('part_number'); $invoice = random_int(000000000, 999999999); } while (DB::table('products')->where('part_number', $part_number)->exists()); // dd($request->all()); price $fixed_price = $request->fixed_price === 'true'?true:false; $product = Product::create([ 'image' => $save_url??'', 'part_number' => $part_number??'', 'invoice' => $invoice??'', 'name' => $request->name??'', 'cost' => $request->cost??0, 'price' => $request->price ?? 0, 'weight' => $request->weight??0, 'description' => $request->description??'', 'diamond_size' => $request->diamond_size ?? '', 'user_id' => Auth::user()->id, 'product_category_id' => $request->product_category_id, 'is_active' => $request->is_active ?? true, 'wages' => $request->wages??0, 'original_wages' => $request->original_wages??0, 'wages_in_weight' => $request->wages_in_weight??0, 'original_wages_in_weight' => $request->original_wages_in_weight??0, 'qty' => 1, // 'grn' => $request->grn, 'for_sale' => $request->for_sale, 'supplier_id'=>$request->supplier_id, 'supplier_rate' => $request->supplier_rate??0, 'gia_number' => $request->gia_number??'', 'fixed_price' => $fixed_price??false, 'purity_upgrade_to' => $request->purity_upgrade_to??0, 'selling_purity' => $request->selling_purity??0, 'purity_level' => $request->purity_level??0, 'original_invoice' => $request->original_invoice??'', ]); foreach ($request->qty_ as $index => $qty) { if (isset($request->name_[$index])&&isset($request->price_[$index])&&isset($request->cost_[$index])&&isset($request->qty_[$index]) && $request->name_[$index]!='' &&$request->price_[$index]!=''&& $request->cost_[$index]!='' && $request->qty_[$index]!='') { ProductAttribute::create([ 'product_id' => $product->id ?? 0, 'name' => $request->name_[$index]??'', 'price' => $request->price_[$index]??0, 'cost' => $request->cost_[$index]??0, 'qty' => $request->qty_[$index]??0, ]); } } return redirect()->route('products.index')->with('success', __('message.products') . " " . __('message.create successfully')); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function list(Request $request) { $cashie = Auth::user()->name; $cate = $request->get('category'); $ProductCategories = ProductCategory::get(); $paginate = $request->get('paginate') ?? 25; $for_sale = $request->get('for_sale')??1; $q = $request->get('q'); $products = Product::query(); if ($q) { $products = $products->where(function ($query) use ($q) { $query->where('part_number', 'like', '%' . $q . '%'); }); } if ($for_sale >= 0 && $for_sale != null) { $products = $products->where('for_sale', $for_sale); } if ($cate) { $products = $products->where('product_category_id', $cate); } $products = $products->orderBy('id', 'desc')->get(); return view('products.list', compact('products', 'q', 'paginate', 'for_sale', 'ProductCategories', 'cate', 'cashie')); } public function show(Request $request, $id) { $cate = $request->get('category'); $for_sale = $request->get('for_sale')??1; $paginate = $request->get('paginate') ?? 25; $q = $request->get('q'); $product = Product::find($id); return view('products.barcode', compact('product', 'q', 'for_sale', 'paginate', 'cate', 'for_sale')); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id, Request $request) { $for_sale = $request->get('for_sale')??1; $product = Product::find($id); $productCategories = ProductCategory::whereNotIn('name',['Platinum','ផ្លាកទីន','แพลตตินัม'])->get(); $suppliers = Supplier::all(); return view('products.edit', compact('product', 'productCategories', 'for_sale','suppliers')); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { $request->validate( [ 'name' => 'required', 'cost' => 'required', 'price' => 'required', 'weight' => 'required', 'part_number' => 'required', ] ); $product = Product::find($id); $save_url = $product->image; if ($request->hasFile('image')) { $image = $request->file('image'); $name_gen = hexdec(uniqid()) . '.' . $image->getClientOriginalExtension(); //hexdec generate image Image::make($image)->resize(800, 800, function ($constraint) { $constraint->aspectRatio(); })->save('images/' . $name_gen); $save_url = 'images/' . $name_gen; } // $product['image'] = $save_url; $part_number = $request->part_number; $invoice = $product->invoice; $fixed_price = $request->fixed_price === 'true'?true:false; $product->update([ 'for_sale' => $request->for_sale, 'image' => $save_url??'', 'part_number' => $part_number, 'name' => $request->name??'', 'cost' => $request->cost??0, 'price' => $request->price??0, 'weight' => $request->weight??0, 'description' => $request->description??'', 'user_id' => Auth::user()->id, 'product_category_id' => $request->product_category_id, 'is_active' => $request->is_active ?? true, 'invoice' => $invoice??'', 'wages' => $request->wages??0, 'original_wages' => $request->original_wages??0, // 'qty' => $request->qty??1, 'diamond_size' => $request->diamond_size ?? '', 'supplier_id' => $request->supplier_id, 'supplier_rate' => $request->supplier_rate??0, 'gia_number' => $request->gia_number??'', 'fixed_price' => $fixed_price, 'wages_in_weight' => $request->wages_in_weight??0, 'original_wages_in_weight' => $request->original_wages_in_weight??0, 'purity_upgrade_to' => $request->purity_upgrade_to??0, 'selling_purity' => $request->selling_purity??0, 'purity_level' => $request->purity_level??0, 'original_invoice' => $request->original_invoice??'', ]); // update ProductAttribute // if (!empty($product->id)) { // foreach ($request->qty_ as $index => $pro_attr_Id_) { // // dd($request->pro_attr_Id); // if ($request->pro_attr_Id_) { // ProductAttribute::where('id', $pro_attr_Id_)->update([ // // 'product_id' => $product->id ?? 0, // 'name' => $request->name_[$index], // 'price' => $request->price_[$index], // 'cost' => $request->cost_[$index], // 'qty' => $request->qty_[$index], // ]); // } else { // ProductAttribute::create([ // 'product_id' => $product->id ?? 0, // 'name' => $request->name_[$index], // 'price' => $request->price_[$index], // 'cost' => $request->cost_[$index], // 'qty' => $request->qty_[$index], // ]); // } // } // } // update ProductAttribute if (!empty($product->id)) { foreach ($request->qty_ as $index => $qty) { // dd($request->pro_attr_Id); if (isset($request->pro_attr_Id[$index])) { ProductAttribute::where('id', $request->pro_attr_Id[$index])->update([ 'name' => $request->name_[$index], 'price' => $request->price_[$index], 'cost' => $request->cost_[$index], 'qty' => $request->qty_[$index], ]); } else { if (!empty($request->name_[$index])) { ProductAttribute::create([ 'product_id' => $product->id ?? 0, 'name' => $request->name_[$index], 'price' => $request->price_[$index], 'cost' => $request->cost_[$index], 'qty' => $request->qty_[$index], ]); } } } } return redirect()->route('products.index') ->with('success', __('message.product') . " " . __('message.updated successfully')); } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { $sales = \App\Models\Sale::get(); $product = Product::find($id); $product_id = $product->id; foreach ($sales as $sale){ if($sale->part_number == $product->part_number){ return redirect()->route('products.index')->with('fail', __('message.product') . ' ' . __('message.already sale cannot delete')); } } $product->delete(); $qty_history = QtyHistory::where('product_id' , $product_id)->delete(); return redirect()->route('products.index') ->with('success', __('message.product') . " " . __('message.deleted successfully')); } // ProductInactive public function inactive($id) { Product::findOrFail($id)->update(['is_active' => 0]); return redirect()->route('products.index') ->with('success', __('message.product') . " " . __('message.is deactivated')); } // ProductActive public function active($id) { Product::findOrFail($id)->update(['is_active' => 1]); return redirect()->route('products.index') ->with('success', __('message.product') . " " . __('message.is activated')); } public function print_barcode(Request $request) { $cate = $request->get('category'); $paginate = $request->get('paginate') ?? 25; $for_sale = $request->get('for_sale')??1; $q = $request->get('q'); $products = Product::query(); if ($q) { $products = $products->where(function ($query) use ($q) { $query->where('part_number', 'like', '%' . $q . '%'); }); } if ($for_sale >= 0 && $for_sale != null) { $products = $products->where('for_sale', $for_sale); } if ($cate) { $products = $products->where('product_category_id', $cate); } $products = $products->orderBy('id', 'desc')->get(); return view('products.print_barcode', compact('products', 'q', 'paginate', 'for_sale', 'cate')); } public function product_attribute_destroy($id, Request $request) { $productAttribute = ProductAttribute::find($id); if ($productAttribute) { $productAttribute->delete(); } return redirect()->route('products.index')->with('success', __('message.product attribute') . ' ' . __('message.deleted successfully')); } // delete in edit public function product_attribute_delete($id) { $productAttribute = ProductAttribute::findOrFail($id); // dd($productAttribute); if ($productAttribute) { $productAttribute->delete(); } return redirect()->back()->with('success', __('message.product attribute') . ' ' . __('message.deleted successfully')); } public function adjustment() { $products = Product::all(); foreach($products as $product){ $product->cost = $product->cost - $product->costAttributes(); $product->save(); } } public function response(Request $request) { $product_category_id = $request->get('product_category_id'); $productCategories = ProductCategory::query(); $productCategory1 = clone $productCategories; $productCategory = $productCategory1->where('id' , $product_category_id)->first(); $gold1 = clone $productCategories; $gold = $gold1->whereIn('name',['មាស','Gold','ทอง'])->first(); $platinum1 = clone $productCategories; return response()->json([$productCategory , 'gold' => $gold]); } public function createProductAccessory(){ $productCategories = ProductCategory::get(); foreach($productCategories as $index => $productCategory){ $products = Product::get(); $name = $productCategory->name . ' គីឡូ'; if($products->contains('name' , $name)){ }else{ if($productCategory->name != 'ផ្លាកទីន'){ $products = Product::create([ 'image' => '', 'part_number' => '', 'invoice' => '', 'name' => $productCategory->name . ' គីឡូ', 'cost' => 0, 'price' => 0, 'weight' => 0, 'description' => '', 'diamond_size' => '', 'user_id' => Auth::user()->id, 'product_category_id' => $productCategory->id, 'is_active' => true, 'wages' => 0, 'original_wages' => 0, 'wages_in_weight' => 0, 'original_wages_in_weight' => 0, 'qty' => 1, 'for_sale' => 0, 'supplier_id'=> 0, 'supplier_rate' => 0, 'gia_number' => '', 'fixed_price' => false, 'purity_upgrade_to' => 0, 'selling_purity' => 0, 'purity_level' => $productCategory->purity_level??0, 'original_invoice' =>'', ]); } } } return redirect()->route('products.index')->with('success' , 'create accessory success'); } }