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/ApiController.php


<?php

namespace App\Http\Controllers;

use App\Imports\ProductImport;
use App\Models\ProductCategory;
use App\Models\QtyHistory;
use Carbon\Carbon;
use App\Models\Sale;
use App\Models\Member;
use App\Models\Product;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Models\SellProductAttribute;
use Illuminate\Support\Facades\Auth;
use Intervention\Image\Facades\Image;
use Maatwebsite\Excel\Facades\Excel;

class ApiController extends Controller
{

    public function scan(Request $request)
    {
        $sale  = Sale::where('invoice_no', $request->scan)->first();
        return response()->json($sale);
    }

    public function updateImage(Request $request)
    {
        $product = Product::findOrFail($request->product_id);
        $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;
        }
        $product->update([
            'image' => $save_url
        ]);
        return response()->json(['message' => __('message.updated successfully')]);
    }

    public function search(Request $request)
    {
        if(strlen($request->q) >= 5){
            $products  = Product::with('productCategory')->where('part_number', 'like','%'.$request->q.'%')
                ->where('qty','>',0)->where('is_active' , true)->get();
        }
//        else{
//            $products  = Product::with('productCategory')->where('id' , $request->q)
//                ->where('qty','>',0)->whereIn('for_sale' , [1,2])->where('is_active' , true)->get();
//        }
        foreach($products as $product){
            if($product->fixed_price || $product->productCategory->fixed_price){
                $product['sellingPrice']=$product->price;
                $product['upgradeSellingPrice']=$product->price;
            }else{
                if($product->purity_upgrade_to){
                    $product['upgradeSellingPrice'] = $product->upgradeSellingPrice();
                }else{
                    $product['upgradeSellingPrice'] = $product->sellingPrice();
                }
                $product['sellingPrice']=$product->sellingPrice();
//                dd($product['upgradeSellingPrice']);
            }
            if(!$product->weight){
                $product->weight = 0;
            }
            $product->productCategory['selling_rate'] = $product->productCategory->sellingPrice($product->selling_purity);
            $product->productCategory['goldRate'] = $product->productCategory->sellingPrice(1);
            $product->productCategory['supplier_price'] = $product->productCategory->price();
            $product->productCategory['upgrade_selling_rate'] = $product->productCategory->upgradeSellingRate($product->selling_purity);
            if($product->purity_upgrade_to){
                $productCategoryName = ProductCategory::where('purity_level' , $product->purity_upgrade_to)->first();
            }else{
                $productCategoryName = ProductCategory::where('id' , $product->id)->first();
            }
            $product->productCategory['name'] = $productCategoryName->name??$product->productCategory->name;
//            dd($product->productCategory->name);
            $product['productCategoryName'] = $product->productCategoryNameSelling();
        }
        return response()->json($products);
    }

    public function searchDiamond(Request $request)
    {
        $q = $request->q;
        $products = Product::where('part_number' , 'like' , '%' . $q . '%')->where('is_active' , true)->where('qty' , '>' , 0)->where('for_sale' , false)->get();
        return response()->json($products);
    }

    public function modify(Request $request)
    {
        $modify = $request->get('modify');
        $products = Product::where('part_number', 'like' , '%' . $modify . '%')->get();
        return response()->json($products);
    }
    public function store(Request $request)
    {
//        if($request->product_id){
            if(($request->usd_amount!=null || $request->thb_amount!=null || $request->khr_amount!=null)){
                $product = Product::findOrFail($request->product_id);
                if($product->image){
                    $image = $product->image;
                }else{
                    $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;
                    }
                    $image = $save_url??'';
                }
                if($product->qty>=$request->qty) {
//                    $productAccessories = Product::where('for_sale' , false)->where('weight' , '!=' , 0)->where('product_category_id' , $product->product_category_id)->first();
                    if ($request->phone) {
                        $customer = Member::create([
                            'name' => $request->customer_name??'',
                            'phone' => $request->phone??'',
                            'note' => $request->note??'',
                        ]);
                    }
                    $fixed_price = false;
                    if($product->fixed_price){
                        if($product->price != $request->sales_price){
                            $fixed_price = false;
                        }else{
                            $fixed_price = true;
                        }
                    }
//                    if($product->weight < $request->weight??0){
//                        $w = $request->weight - $product->weight;
//                        dd('request X = ' . $w);
//                    }

                    $wages = 0;
                    $original_wages = $product->original_wages;
                    $wages_in_weight = 0;
                    $original_wages_in_weight = $product->original_wages_in_weight;
                    $selling_purity = $product->selling_purity;
                    if(!$request->upgrade_purity){
//                        if($product->productCategory->fixed_price == true || $product->fixed_price == true){
//                            $wages = $request->wages??0;
//                            $original_wages = $request->original_wages??0;
//                            $wages_in_weight = $request->wages / ($product->supplier_rate / 1000);
//                            $original_wages_in_weight = $request->original_wages / ($product->supplier_rate / 1000);
//                        }else{
//                            $wages = $request->wages * ($product->productCategory->sellingPrice());
////                            $original_wages = $request->original_wages * ($product->productCategory->price());
//                            $original_wages = $request->original_wages * ($product->productCategory->price(null,$product->purity_level));
//                            $wages_in_weight = $request->wages??0;
//                            $original_wages_in_weight = $request->original_wages??0;
//                        }
                        $wages = number_format($product->selling_wagesInWeight() , 2);
                        $original_wages = number_format($product->cost_wagesInWeight(),2);
                        $wages_in_weight = number_format($request->wages , 2);
                        $original_wages_in_weight = number_format($request->original_wages , 2);
                        $selling_purity = 0;
                    }
                    $selling_cost = $product->sellingCost($product->weight , null)??0;
                    $cost_product = $product->cost??0;
                    $rate_for_sale = 0;
                    if($product->productCategory->fixed_price == true){
                            $rate_for_sale = $product->productCategory->sellingPrice(floatval($product->weight_description));
                    }else{
                        $rate_for_sale = $product->productCategory->sellingPrice($product->selling_purity);
                    }
                    if($request->weight < $product->weight){
                        $wasts_weight = $product->weight - floatval($request->weight);
                        $name_for_accessory = $product->productCategory->name . ' គីឡូ';


                        $accessory_product = Product::where('name' , $name_for_accessory)->where('is_active',true)->first();
                        // if($accessory_product && $request->cut_weight == 1){
                        if($request->cut_weight == 1){
//                            $accessory_product->description = $accessory_product->description . ' | ' . $product->part_number . ' : -' . $wasts_weight;
                            $qtyHistory_note = $product->part_number . ' : -' . number_format($request->weight , 2);
                            if($product->for_sale != 0 && $accessory_product){
                                $accessory_product->weight = $accessory_product->weight + $wasts_weight;
                                $accessory_product->save();
                            }
                            $selling_cost = $product->sellingCost($request->weight , null)??0;
                            $cost_product = $request->weight * ($product->supplier_rate / 1000 )??0;

                            $weights = -$request->weight;
                            $weight_after_transaction = $wasts_weight;
                            $qtyHistory = QtyHistory::create([
                                'qty' => $product->qty,
                                'qty_after_transaction' => $product->qty,
                                'qty_before_transaction' => $product->qty,
                                'product_id' => $product->id,
                                'product_category_id' => $product->product_category_id,
                                'user_id' => $request->user_id??Auth::user()->id,
                                'note' => $qtyHistory_note,
                                'grn' => '',
                                'weight' => $weights,
                                'weight_before_transaction' => $product->weight,
                                'weight_after_transaction' => $weight_after_transaction,
                                'product_cost' => $product->sellingCost($weights),
                            ]);

                        }
                    }
                    if($product->for_sale == 0){
                        if($product->weight > $request->weight){
                            $product->weight = $product->weight - $request->weight;
                            $product->save();
                        }
                    }
                    $gain_lose_amount = ($product->weight * $request->rate)-$cost_product??0;
                    $not_use_rate = false;
                    if($request->not_use_rate == '1'){
                        $selling_cost = $cost_product;
                        $wages = $original_wages;
                        $wages_in_weight = $original_wages_in_weight;
                        $not_use_rate = true;
                    }

                    $sale = Sale::create([
                        // 'selling_to_usd_exchange_rate' => $request->selling_to_usd_exchange_rate ?? 0,
//                        'for_sale' => $product->for_sale,
//                        'note' => $request->note_not_for_sale,
                        'member_id' => $customer->id ?? '',
                        'product_id' => $request->product_id??0,
                        'part_number' => $product->part_number??'',
                        'sales_price' => $request->sales_price??0,
                        'name' => $request->name??'',
                        'discount' => $request->discount??0,
                        'cost' => $cost_product,
                        'is_active' => true,
                        'description' => $request->description??'',
//                        'image' => $product->image,
                        'weight' => $request->weight??0,
                        'product_category_id' => $product->product_category_id,
                        'user_id' => $request->user_id??Auth::user()->id,
                        'wages' => $wages,
                        'wages_in_weight' => $wages_in_weight,
                        'original_wages_in_weight' => $original_wages_in_weight,
                        'invoice_no' => random_int(000000000, 999999999),
                        'diamond_size' => $request->diamond_size ?? '',
                        'usd_amount' => $request->usd_amount ?? 0,
                        'khr_amount' => $request->khr_amount ?? 0,
                        'thb_amount' => $request->thb_amount ?? 0,
                        'qty' => $request->qty ?? 1,
                        'original_wages' => $original_wages,
                        // 'selling_cost'=>$product->sellingCost($request->weight)??0,
                        'selling_cost'=> $selling_cost,
                        'selling_rate'=> $rate_for_sale??0,
                        'image' => $image??'',
                        'fixed_price' => $fixed_price,
                        'weight_description'=>$product->weight_description??'',
                        'purity_upgrade_to' => $product->purity_upgrade_to??0,
                        'selling_purity' => $selling_purity??0,
                        'supplier_rate' => $product->supplier_rate??0,
                        'old_code' => $product->old_code??'',
                        'purity_level' => $product->purity_level??0,
                        'original_invoice' => $product->original_invoice??'',
                        'not_use_rate' => $not_use_rate,
                        'gain_lose_amount' => $gain_lose_amount,
                        'rate' => $request->rate??0,
                    ]);
                    
                    if(isset($qtyHistory)){
                        $qtyHistory->note = $qtyHistory->note." : #sale_id=".$sale->id;
                        $qtyHistory->save();
                    }

                    if($request->for_sale == 1){
                        $product->qty = $product->qty - ($request->qty ?? 1);
                    }
                    $product->save();
                    $product = Product::find($request->product_id);
                    if (is_array($product->productAttributes) || is_object($product->productAttributes)){
                        foreach($product->productAttributes as $index => $productAttribute){
                            SellProductAttribute::create([
                                'name'=>$productAttribute->name??'',
                                'qty'=>$productAttribute->qty??0,
                                'cost'=>$productAttribute->cost??0,
                                'price'=>$productAttribute->price??0,
                                'sell_id'=>$sale->id
                            ]);
                        }
                    }
                    return response()->json(["status"=>'success','sale_id'=>$sale->id,'message'=>__('message.created successfully')]);
                }
                else{
                    return response()->json(['status'=>'error','message'=>__('message.invalid qty')]);
                }
            }
            else{
                return response()->json(['status'=>'error','message'=>__('message.empty price')]);
            }
       // }
       // else{
       //     return response()->json(['message'=>'empty product id']);
       // }
    }

    public function update_price()
    {

    }

    public function saleChart()
    {

        $days = [];
        $values = [];

//        $daysInMonth = now()->daysInMonth;
          $today = now()->day;
          $thisMonth = now()->format('M');
          $thisYear = now()->year;

        for ($i = 1; $i <= $today; $i++) {

            if($i == $today){
                $days[] = "{$i}/{$thisMonth} (today)";
            }else{
                $days[] = "{$i}/{$thisMonth}";
            }

            $date = now()->startOfMonth()->addDays($i - 1)->toDateString();

            $sales = Sale::whereBetween('created_at' , [$date . ' 00:00:00' , $date . ' 23:59:59'])->count('id');

            $values[] = $sales;
        }

        return response()->json([
            'categories' => $days,
            'series' => $values
        ]);

    }

}

© KUJUNTI.ID