| 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/SaleController.php |
<?php
namespace App\Http\Controllers;
use App\Models\ProductCategory;
use App\Models\Sale;
use App\Models\Member;
use App\Models\Product;
use App\Models\Setting;
use App\Models\Currency;
use App\Exports\SaleExport;
use Illuminate\Http\Request;
use App\Models\ProductAttribute;
use App\Models\QtyHistory;
use App\Models\SellProductAttribute;
use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Facades\Excel;
use Intervention\Image\Facades\Image;
class SaleController extends Controller
{
/**
* Display a listing of the resource.
*/
public function __construct()
{
// CHANGE DATE
$this->middleware('permission:sale-list' , ['only' => ['index' , 'list','changeDate']]);
$this->middleware('permission:sale-edit' , ['only' => ['edit' , 'update','changeDate']]);
$this->middleware('permission:sale-delete' , ['only' => ['destroy']]);
}
public function index(Request $request)
{
$paginate = $request->paginate??25;
$productCategories = ProductCategory::get();
$start_date = $request->get('start_date') ?? date('Y-m-d');
$end_date = $request->get('end_date') ?? date('Y-m-d');
$dates = explode(' - ', $request->date);
if ($request->date) {
$start_date = $dates[0];
$end_date = $dates[1];
}
$search = $request->get('search');
if($search){
$sales = Sale::where('part_number' , 'like' , '%' . $search . '%');
}else{
$sales = Sale::query();
}
if($start_date){
$sales =$sales->whereBetween('created_at', [$start_date . " 00:00:00", $end_date . " 23:59:59"]);
}
$product_category_id = $request->get('product_category_id');
if($product_category_id != 0){
$productCategory = ProductCategory::findOrFail($product_category_id);
$sales = $sales->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' , '<>' , '');
$sales = $sales->orderBy('id' , 'desc')->paginate($paginate);
return view('sales.index' , compact('sales', 'product_category_id' , 'productCategories' , 'main_categories' , 'child_categories' , 'start_date' , 'end_date' , 'search' , 'paginate'));
}
public function print(Request $request)
{
$paginate = $request->paginate??25;
$productCategories = ProductCategory::get();
$start_date = $request->get('start_date') ?? date('Y-m-d');
$end_date = $request->get('end_date') ?? date('Y-m-d');
$dates = explode(' - ', $request->date);
if ($request->date) {
$start_date = $dates[0];
$end_date = $dates[1];
}
$search = $request->get('search');
if($search){
$sales = Sale::where('part_number' , 'like' , '%' . $search . '%');
}else{
$sales = Sale::query();
}
if($start_date){
$sales =$sales->whereBetween('created_at', [$start_date . " 00:00:00", $end_date . " 23:59:59"]);
}
$product_category_id = $request->get('product_category_id');
if($product_category_id != 0){
$productCategory = ProductCategory::findOrFail($product_category_id);
$sales = $sales->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' , '<>' , '');
$sales = $sales->orderBy('id' , 'desc')->get();
$cashie = Auth::user()->name;
return view('sales.list' , compact('sales' , 'cashie' , 'start_date' , 'end_date' , 'search'));
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
$sales = Sale::all();
return view('sales.create' , compact('sales'));
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
$this->validate($request, [
'cost' => 'required',
'name' => 'required',
'weight' => 'required'
]);
$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;
}
$part_number = random_int(000000000 , 99999999);
$invoice_no = random_int(000000000,999999990);
Sale::create([
'product_id' => $request->product_id,
'image' => $save_url,
'part_number' => $part_number,
'name' => $request->name,
'cost' => $request->cost,
'weight' => $request->weight,
'user_id' => Auth::user()->id,
'product_category_id' => $request->product_category_id,
'invoice_no' => $invoice_no,
'wages' => $request->wages,
'qty' => $request->qty,
'diamond_size' => $request->diamond_size??'',
]);
return redirect()->route('sales.index')->with('success', __('message.sales') . " " . __('message.create successfully'));
}
/**
* Display the specified resource.
*/
public function show(string $id , Request $request)
{
$search = $request->get('search');
$start_date = $request->get('start_date') ?? date('Y-m-d');
$end_date = $request->get('end_date') ?? date('Y-m-d');
$dates = explode(' - ', $request->date);
if ($request->date) {
$start_date = $dates[0];
$end_date = $dates[1];
}
$sale = Sale::find($id);
if(!$sale->purity_upgrade_to){
$productCategory = ProductCategory::query();
$productCategory->name = $sale->productCategory->name;
}else{
$productCategory = ProductCategory::where('purity_level' , $sale->purity_upgrade_to)->first();
}
if($sale->selling_purity){
$productCategory->name = $sale->productCategoryNameSelling();
}
if(!$sale->wages_in_weight || !$sale->original_wages_in_weight){
if($sale->original_wages){
$sale->original_wages_in_weight = $sale->original_wages / ($sale->productCategory->price());
}
if($sale->wages){
$sale->wages_in_weight = $sale->wages / ($sale->productCategory->sellingPrice());
}
$sale->save();
}
if(!$sale->wages || !$sale->original_wages){
if($sale->original_wages_in_weight){
$sale->original_wages = $sale->original_wages_in_weight * ($sale->productCategory->price());
}
if($sale->wages_in_weight){
$sale->wages = $sale->wages_in_weight * ($sale->productCategory->sellingPrice());
}
$sale->save();
}
$cashie = $sale->user??'';
if(!$cashie || !$sale){
abort(404);
}
return view('sales.show' , compact('sale' , 'cashie' , 'search' , 'start_date' , 'end_date' , 'productCategory'));
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id , Request $request)
{
$sale = Sale::find($id);
$product = $sale->product;
$name_for_accessory = $sale->productCategory->name . ' គីឡូ';
$accessory_product = Product::where('name' , $name_for_accessory)->where('for_sale' , 0)->where('is_active',true)->first();
if($sale){
if($sale->sellProductAttributes){
$sale->sellProductAttributes()->delete();
}
$checkQtyHistory = QtyHistory::where('note','like','%#sale_id='.$sale->id)->orderBy('id','desc')->first();
if($checkQtyHistory){
$checkQtyHistory->delete();
}
if($sale->member){
$sale->member()->delete();
}
if($product->for_sale!=1){
if($product){
$product->weight = $product->weight + $sale->weight;
$product->save();
}
}else{
if($product->weight > $sale->weight){
$accessory_product->weight = $accessory_product->weight - ($product->weight - $sale->weight);
$accessory_product->save();
}
$product->qty = $product->qty+$sale->qty;
$product->save();
}
$sale->delete();
}
return redirect()->route('sales.index')->with('success' , __('message.sales') . " " . __('message.deleted successfully'));
}
public function inactive($id)
{
Sale::findOrFail($id)->update(['is_active' => 0]);
return redirect()->route('sales.index')
->with('success', __('message.sales') . " " . __('message.is deactivated'));
}
public function active($id)
{
Sale::findOrFail($id)->update(['is_active' => 1]);
return redirect()->route('sales.index')
->with('success', __('message.sales') . " " . __('message.is activated'));
}
public function export(Request $request)
{
return Excel::download(new SaleExport($request->get('search'),$request->get('start_date'),$request->get('end_date'),$request->get('paginate')),'Sale.xlsx');
}
// public function invoice(Request $request)
// {
// if(!$request->scan){
// abort(404);
// }
// $sales = Sale::where('part_number' ,$request->scan)->firstOrfail();
// if($sales){
// return view('pointToSale.scan' , compact('sales'));
// }
// }
public function invoice(Request $request)
{
$discount = $request->get('discount');
$sale = Sale::findOrFail($request->sale_id);
return view('pointToSale.print-invoice' , compact('sale' , 'discount'));
}
public function buy_back(Request $request , $id)
{
$sale = Sale::find($id);
if($sale){
$request->validate([
'buy_back_price' => 'required',
]);
$sale->update([
'buy_back_price' => $request->buy_back_price,
'buy_back_note' => $request->note,
'already_buy_back' => true,
'buy_by_user' => Auth::user()->id,
'date_buy_back' => now()->toDateTimeString(),
]);
}else{
abort(404);
}
return redirect()->route('sales.index')->with('success' , __('updated successfully'));
}
// CHANGE DATE
public function changeDate(Request $request){
// dd($request->all());
$sale = Sale::findOrFail($request->sale_id);
$datas = explode('-',$request->date);
$sale_dates = explode(' ',$sale->created_at);
$sale->created_at = $datas[2].'-'.$datas[1].'-'.$datas[0].' '.$sale_dates[1];
$sale->save();
return redirect()->back()->with('success' , __('updated successfully'));
}
public function updateSaleOriginalInvoice(){
$products = Product::get();
foreach($products as $i => $product){
if($product->original_invoice){
$sale = Sale::where('product_id' , $product->id)->first();
if($sale){
$sale->original_invoice = $product->original_invoice;
$sale->save();
}
}
}
return redirect()->route('sales.index')->with('success' , 'sale original invoice updated successfully');
}
}