Anons79 Mini Shell

Directory : /home/aplikasiposinfo/www/coba.fixmate.id/app/Http/Controllers/Api/
Upload File :
Current File : /home/aplikasiposinfo/www/coba.fixmate.id/app/Http/Controllers/Api/ApiPenjualanController.php

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\Item;
use App\Models\Pembayaran;
use App\Models\Penjualan;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;

class ApiPenjualanController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index(): JsonResponse
    {   
        $datas = Penjualan::where('pengguna_id',auth()->user()->id)->get();
        $datas = $datas->map(function($data){
            $data->total = $data->detail_penjualan->sum('total');
            return $data;
        });
        return response()->json([
            'data'=>$datas
        ]);
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create(): JsonResponse
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request): JsonResponse
    {
        if($request->json()){
            $validator = Validator::make($request->all(), [
                "detail_penjualan.*"  => "required|array",
                
            ]);
        } else {
            $validator = Validator::make($request->all(), [
                "item_id.*"  => "required|integer",
                "qty.*"  => "required|integer",
            ]);
        }

        if ($validator->fails()) {
            return response()->json([
                'message'=>'invalid',
                'data'=>$validator->getMessageBag()
            ],422);
        }

        DB::beginTransaction();
        try {
            $last_penjualan = Penjualan::where('pengguna_id',$request->user()->id)->latest()->first();
            $nomor_nota = 1;
            if($last_penjualan){
                $nomor_nota = explode("-",$last_penjualan->nomor_nota)[1]+1;
            }
            $penjualan = Penjualan::create([
                'pengguna_id' => $request->user()->id,
                'tanggal_penjualan' => date("Y-m-d"),
                'nomor_nota' => date("Ymd-").$nomor_nota,
            ]);

            if($request->json()){
                $json = $request->json()->all();
                foreach ($json['detail_penjualan'] as $key => $detail) {
                    $item = Item::find($detail['item_id']);
                    if($item->lacak_stok){
                        $item->stok = $item->stok - $detail['qty'];
                        $item->save();
                    }
                    $detailPenjualan = $penjualan->detail_penjualan()->create([
                        'item_id' => $item->id,
                        'qty' => $detail['qty'],
                        'harga_item'=> $detail['harga_item'],
                        'nama_item'=> $item->nama_item,
                    ]);
                    foreach ($detail['diskons'] ?? [] as $diskons) {
                        $detailPenjualan->diskons()->attach($diskons['id'],[
                            'nilai_diskon' => $diskons['nilai_diskon'] ?? null,
                        ]);
                    }
                }
                Pembayaran::create([
                    'pengguna_id' => $request->user()->id,
                    'penjualan_id' => $penjualan->id,
                    'jumlah_bayar' => $json['pembayaran']['jumlah_bayar'],
                    'jenis_bayar' => $json['pembayaran']['jenis_bayar'],
                    'tanggal_bayar' => date("Y-m-d"),
                ]);
            } else {
                foreach ($request->item_id as $key => $item_id) {
                    $item = Item::find($item_id);
                    $penjualan->detail_penjualan()->create([
                        'item_id' => $item_id,
                        'qty' => $request->qty[$key],
                        'harga_item'=> $item->harga_item,
                        'nama_item'=> $item->nama_item,
                    ]);
                }
            }

            DB::commit();
            return response()->json([
                'message'=>'success',
                'data'=>$penjualan
            ]);
        } catch (\Throwable $th) {
            DB::rollback();
            Log::error($th);
            return response()->json([
                'message'=>'failed',
                'data'=>$th->getMessage()
            ],500);
        }
    }

    /**
     * Display the specified resource.
     */
    public function show(Penjualan $penjualan): JsonResponse
    {
        if($penjualan->pengguna_id != auth()->user()->id) return response()->json([
            'message'=>'unauthorized'
        ],401);
        return response()->json([
            'data'=>$penjualan
        ]);
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(Penjualan $penjualan): JsonResponse
    {
        //
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, Penjualan $penjualan): JsonResponse
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(Penjualan $penjualan): JsonResponse
    {
        //
    }
}

Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]