Anons79 Mini Shell

Directory : /home/aplikasiposinfo/www/demo2.fixmate.id/app/Http/Controllers/
Upload File :
Current File : /home/aplikasiposinfo/www/demo2.fixmate.id/app/Http/Controllers/KirimSupplierController.php

<?php

namespace App\Http\Controllers;

use App\Helpers\Helper;
use App\Models\DetailGaransi;
use App\Models\DetailKirimSupplier;
use App\Models\DetailPenjualan;
use App\Models\DetailReturPembelian;
use App\Models\DetailReturPenjualan;
use App\Models\Item;
use App\Models\KirimSupplier;
use App\Models\Supplier;
use App\Models\Toko;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Str;

class KirimSupplierController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        //
    }

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


        $detail_garansis = DetailGaransi::with('garansi', 'item')->has('garansi')->get();
        $detail_retur_pembelians = DetailReturPembelian::with('retur_pembelian', 'item')->has('retur_pembelian')->get();
        $detail_retur_penjualans = DetailReturPenjualan::with('retur_penjualan', 'item')->has('retur_penjualan')->get();


        $items = [];
        foreach ($detail_garansis as $detail) {
            $items[] = collect([
                'item_id' => $detail->item_id,
                'nama_item' => $detail->nama_item,
                'qty' => $detail->qty,
                'biaya_item' => $detail->harga_item > 0 ? $detail->harga_item : $detail->item->biaya_item,
                'garansi' => $detail->garansi
            ]);
        }

        foreach ($detail_retur_pembelians as $detail) {
            $items[] = collect([
                'item_id' => $detail->item_id,
                'nama_item' => $detail->nama_item,
                'qty' => $detail->qty,
                'biaya_item' => $detail->harga_item > 0 ? $detail->harga_item : $detail->item->biaya_item,
                'retur_pembelian' => $detail->retur_pembelian
            ]);
        }

        foreach ($detail_retur_penjualans as $detail) {
            $items[] = collect([
                'item_id' => $detail->item_id,
                'nama_item' => $detail->nama_item,
                'qty' => $detail->qty,
                'biaya_item' => $detail->item->biaya_item,
                'retur_penjualan' => $detail->retur_penjualan
            ]);
        }

        $suppliers = Supplier::with('pembelian.detail_pembelian', 'retur_pembelian.detail')->get();
        return view('kirim-supplier.create', compact('items', 'suppliers'));
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        $request->validate([
            'supplier_id' => 'required',
            "file_bukti" => 'nullable|file|mimes:jpg,jpeg,png,pdf,tiff,webp',
        ]);

        if (!$request->has('jumlah')) {
            return redirect()->back()->with('error', 'Silahkan pilih item terlebih dahulu')->withInput($request->all());
        }

        DB::beginTransaction();
        try {
            $file_bukti = null;
            if ($request->hasFile('file_bukti')) {
                $request->validate([
                    'file_bukti' => 'image'
                ]);
                $file_bukti = $request->file('file_bukti');
                $photo_ekstensi = $file_bukti->extension();
                $photo_baru = "bukti-kirim-" . Str::slug($request->no_retur) . ".$photo_ekstensi";
                $file_bukti = $file_bukti->storeAs('file_bukti', $photo_baru);
            }
            $kirimSupplier = KirimSupplier::create([
                'pengguna_id' => auth()->user()->id,
                'supplier_id' => $request->supplier_id,
                'no_kirim' => $request->no_kirim,
                'tanggal_kirim' => $request->tanggal,
                'status_kirim' => 'pending',
                'jenis_kompensasi' => 'pending',
                'file_bukti'=>$file_bukti,
                'keterangan'=>$request->keterangan
            ]);

            foreach ($request->jumlah as $key => $jumlah) {
                $item = Item::find($request->id[$key]);
                if ($item) {
                    $detail = DetailKirimSupplier::create([
                        'kirim_supplier_id' => $kirimSupplier->id,
                        'item_id' => $request->id[$key],
                        'nama_item' => $item->nama_item,
                        'biaya_item' => $request->harga[$key],
                        'qty' => $jumlah,
                        'detail_garansi_id' => @$request->detail_garansi_id[$key] ?? null,
                        'detail_retur_pembelian_id' => @$request->detail_retur_pembelian_id[$key] ?? null,
                        'detail_retur_penjualan_id' => @$request->detail_retur_penjualan_id[$key] ?? null,
                    ]);

                    if (isset($request->detail_garansi_id[$key]) && @$request->detail_garansi_id[$key] != null) {
                        $detailGaransi = DetailGaransi::find($request->detail_garansi_id[$key]);
                        if ($detailGaransi) {
                            $detailGaransi->update([
                                'status_item' => 'pending'
                            ]);
                        }
                    }
                }
            }
            Helper::addUserLog("Menambah pengiriman supplier : " . $kirimSupplier->no_kirim, $kirimSupplier->toArray());
            DB::commit();
            return redirect()->route('retur-dan-garansi.index')->with('success', 'Berhasil menambah pengirimaan supplier');
        } catch (\Throwable $th) {
            //throw $th;
            DB::rollBack();
            Log::error($th);
            return redirect()->back()->with('error', 'Gagal menambah pengirimaan supplier')->withInput($request->all());
        }
    }

    /**
     * Display the specified resource.
     */
    public function show(KirimSupplier $kirimSupplier)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit($id)
    {
        $kirimSupplier = KirimSupplier::with('detail_kirim_supplier.item')->findOrFail($id);
        $detail_garansis = DetailGaransi::with('garansi', 'item')->has('garansi')->get();
        $detail_retur_pembelians = DetailReturPembelian::with('retur_pembelian', 'item')->has('retur_pembelian')->get();
        $detail_retur_penjualans = DetailReturPenjualan::with('retur_penjualan', 'item')->has('retur_penjualan')->get();


        $items = [];
        foreach ($detail_garansis as $detail) {
            $items[] = collect([
                'item_id' => $detail->item_id,
                'nama_item' => $detail->nama_item,
                'qty' => $detail->qty,
                'biaya_item' => $detail->harga_item > 0 ? $detail->harga_item : $detail->item->biaya_item,
                'garansi' => $detail->garansi
            ]);
        }

        foreach ($detail_retur_pembelians as $detail) {
            $items[] = collect([
                'item_id' => $detail->item_id,
                'nama_item' => $detail->nama_item,
                'qty' => $detail->qty,
                'biaya_item' => $detail->harga_item > 0 ? $detail->harga_item : $detail->item->biaya_item,
                'retur_pembelian' => $detail->retur_pembelian
            ]);
        }

        foreach ($detail_retur_penjualans as $detail) {
            $items[] = collect([
                'item_id' => $detail->item_id,
                'nama_item' => $detail->nama_item,
                'qty' => $detail->qty,
                'biaya_item' => $detail->item->biaya_item,
                'retur_penjualan' => $detail->retur_penjualan
            ]);
        }

        $suppliers = Supplier::with('pembelian.detail_pembelian', 'retur_pembelian.detail')->get();
        return view('kirim-supplier.edit', ['data' => $kirimSupplier, 'suppliers' => $suppliers, 'items' => $items]);
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, KirimSupplier $kirimSupplier)
    {
        $request->validate([
            'supplier_id' => 'required',
            "file_bukti" => 'nullable|file|mimes:jpg,jpeg,png,pdf,tiff,webp',
        ]);

        if (!$request->has('jumlah')) {
            return redirect()->back()->with('error', 'Silahkan pilih item terlebih dahulu')->withInput($request->all());
        }

        DB::beginTransaction();
        try {
            $file_bukti = null;
            if ($request->hasFile('file_bukti')) {
                $request->validate([
                    'file_bukti' => 'image'
                ]);
                $file_bukti = $request->file('file_bukti');
                $photo_ekstensi = $file_bukti->extension();
                $photo_baru = "bukti-kirim-" . Str::slug($request->no_retur) . ".$photo_ekstensi";
                $file_bukti = $file_bukti->storeAs('file_bukti', $photo_baru);
            }
            $kirimSupplier->update([
                'supplier_id' => $request->supplier_id,
                'tanggal_kirim' => $request->tanggal,
                'file_bukti'=>$file_bukti,
                'keterangan'=>$request->keterangan
            ]);

            foreach ($request->jumlah as $key => $jumlah) {
                $item = Item::find($request->id[$key]);
                if ($item) {
                    DetailKirimSupplier::updateOrCreate([
                        'kirim_supplier_id' => $kirimSupplier->id,
                        'item_id' => $request->id[$key],
                    ], [
                        'nama_item' => $item->nama_item,
                        'biaya_item' => $request->harga[$key],
                        'qty' => $jumlah,
                        'detail_garansi_id' => @$request->detail_garansi_id[$key] ?? null,
                        'detail_retur_pembelian_id' => @$request->detail_retur_pembelian_id[$key] ?? null,
                        'detail_retur_penjualan_id' => @$request->detail_retur_penjualan_id[$key] ?? null,
                    ]);
                }
            }
            Helper::addUserLog("Mengubah pengiriman supplier : " . $kirimSupplier->no_kirim, $kirimSupplier->toArray());
            DB::commit();
            return redirect()->route('retur-dan-garansi.index')->with('success', 'Berhasil Mengubah pengirimaan supplier');
        } catch (\Throwable $th) {
            //throw $th;
            DB::rollBack();
            Log::error($th);
            return redirect()->back()->with('error', 'Gagal Mengubah pengirimaan supplier')->withInput($request->all());
        }
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(KirimSupplier $kirimSupplier)
    {   
        $toko_id = Toko::first()->id ?? 0;
        DB::beginTransaction();
        try {

            foreach ($kirimSupplier->detail_kirim_supplier as $detail) {

                    $item_old = Item::with('stok_item_tokos')->find($detail->item_id);
                    if (isset($item_old) && $kirimSupplier->status_kirim == "selesai") {
                        if ($kirimSupplier->jenis_kompensasi != "tukar-barang") {
                            $item_old->update([
                                'stok' => $item_old->stok + $detail->qty
                            ]);

                            $item_old->stok_item_tokos()->updateOrCreate(['toko_id'=>$toko_id], [
                                "stok" => (@$item_old->stok_item_tokos->first()->stok ?? 0) + $detail->qty,
                            ]);
                        }
                    }
                }
            $kirimSupplier->detail_kirim_supplier()->delete();
            $kirimSupplier->delete();
            Helper::addUserLog("Menghapus pengiriman supplier : " . $kirimSupplier->no_kirim, $kirimSupplier->toArray());
            DB::commit();
            return redirect()->route('retur-dan-garansi.index')->with('success', 'Berhasil menghapus pengirimaan supplier');
        } catch (\Throwable $th) {
            //throw $th;
            DB::rollBack();
            Log::error($th);
            return redirect()->back()->with('error', 'Gagal menghapus pengirimaan supplier');
        }
    }

    public function status(Request $request, $id)
    {

        DB::beginTransaction();
        try {
            $kirimSupplier = KirimSupplier::findOrFail($id);

            if ($kirimSupplier->status_kirim != "selesai" && $request->status_kirim == "selesai" && $kirimSupplier->jenis_kompensasi != "tukar-barang") {
                foreach ($kirimSupplier->detail as $detail) {
                    $item = Item::with('stok_item_tokos')->find($detail->item_id);
                    $item->update([
                        "stok" => $item->stok - $detail->qty,
                    ]);

                    $item->stok_item_tokos()->first()->update(["stok" => (@$item->stok_item_tokos->first()->stok ?? 0) - $detail->qty]);
                }
            }

            if ($kirimSupplier->status_kirim == "selesai" && $request->status_kirim != "selesai" && $kirimSupplier->jenis_kompensasi != "tukar-barang") {
                foreach ($kirimSupplier->detail as $detail) {
                    $item = Item::with('stok_item_tokos')->find($detail->item_id);
                    $item->update([
                        "stok" => $item->stok + $detail->qty,
                    ]);

                    $item->stok_item_tokos()->first()->update(["stok" => (@$item->stok_item_tokos->first()->stok ?? 0) + $detail->qty]);
                }
            }

            $kirimSupplier->update([
                'status_kirim' => $request->status_kirim
            ]);
            DB::commit();
            return redirect()->route('retur-dan-garansi.index')->with('success', 'Status Retur berhasil diubah');
        } catch (\Throwable $th) {
            DB::rollback();
            Log::error($th);
            return redirect()->back()->with('error', 'Status Retur gagal diubah');
        }
    }

    public function kompensasi(Request $request, $id)
    {

        DB::beginTransaction();
        try {
            $kirimSupplier = KirimSupplier::findOrFail($id);
            $kirimSupplier->update([
                'jenis_kompensasi' => $request->jenis_kompensasi
            ]);
            DB::commit();
            return redirect()->route('retur-dan-garansi.index')->with('success', 'Jenis Kompensasi berhasil diubah');
        } catch (\Throwable $th) {
            DB::rollback();
            Log::error($th);
            return redirect()->back()->with('error', 'Jenis Kompensasi gagal diubah');
        }
    }
}

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