| 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;
use Illuminate\Validation\Rule;
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] == 10 ? 1 : $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{
if($productCategory->name == $val[1]){
$product_category = $productCategory;
}else{
$productCategoryOther = ProductCategory::where('name' , $val[1])->first();
if($productCategoryOther){
$product_category = $productCategoryOther;
}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;
$purity_upgrade_to = $val[31] == 10 ? 1 : $val[31];
$selling_purity = $val[32] == 10 ? 1 : $val[32];
$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,
'grn' => $val[30]??'',
'wages_in_weight' => $wages_in_weight??0,
'purity_upgrade_to' => $purity_upgrade_to??0,
'selling_purity' => $selling_purity??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|unique:products,part_number',
]
);
$request->purity_upgrade_to = $request->purity_upgrade_to == 10 ? 1 : $request->purity_upgrade_to;
$request->selling_purity = $request->selling_purity == 10 ? 1 : $request->selling_purity;
$request->purity_level = $request->purity_level == 10 ? 1 : $request->purity_level;
// 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',
Rule::unique('products', 'part_number')->ignore($id),
],
]
);
$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');
}
}