KUJUNTI.ID MINISH3LL
Path : /var/www/html/jewelry-pos/app/Http/Controllers/
(S)h3ll Cr3at0r :
F!le Upl0ad :

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;
        if($product->for_sale!=1){
            if($sale->weight < $product->weight){
                $accessory = Product::where('for_sale' , 0)->where('product_category_id' , $product->product_category_id)->first();
    //            $weight = $product->weight - $sale->weight;
    //            $accessory->weight = $accessory->weight - $weight;
                $accessory->weight = $accessory->weight + $sale->weight;
    //            $accessory->description = $accessory->description . ' | ' . $product->part_number . ' : ' . $sale->weight;
                $accessory->save();
            }
        }else{
            $product->qty = $product->qty+$sale->qty;
            $product->save();
        }

        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();
            }
            $name_for_accessory = $product->productCategory->name . ' គីឡូ';
            $weight_to_cut = $product->weight - $sale->weight;
            if($weight_to_cut>0){
               $accessory_product = Product::where('name' , $name_for_accessory)->where('is_active',true)->first();
                if($accessory_product){
                    $accessory_product->weight = $accessory_product->weight - $weight_to_cut;
                    $accessory_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');
    }
}

© KUJUNTI.ID