Anons79 Mini Shell

Directory : /home/aplikasiposinfo/www/myhpcenter.fixmate.id/app/Http/Controllers/
Upload File :
Current File : /home/aplikasiposinfo/www/myhpcenter.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\DetailTransaksiBarangRusak;
use App\Models\Item;
use App\Models\KirimSupplier;
use App\Models\Profil;
use App\Models\Supplier;
use App\Models\Toko;
use App\Models\TransaksiBarangRusak;
use Barryvdh\DomPDF\Facade\Pdf;
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([
                'detail_garansi_id' => $detail->id,
                'item_id' => $detail->item_id,
                'nama_item' => $detail->nama_item,
                'qty' => $detail->qty,
                'biaya_item' => $detail->item->biaya_item,
                'garansi' => $detail->garansi
            ]);
        }

        foreach ($detail_retur_pembelians as $detail) {
            $items[] = collect([
                'detail_retur_pembelian_id' => $detail->id,
                'item_id' => $detail->item_id,
                'nama_item' => $detail->nama_item,
                'qty' => $detail->qty,
                'biaya_item' => $detail->item->biaya_item,
                'retur_pembelian' => $detail->retur_pembelian,
                'supplier' => $detail->retur_pembelian->supplier
            ]);
        }

        foreach ($detail_retur_penjualans as $detail) {
            $items[] = collect([
                'detail_retur_penjualan_id' => $detail->id,
                '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' => 'tertunda',
                'jenis_kompensasi' => 'menunggu-konfirmasi',
                '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->biaya_item[$key] ?? $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'
                            ]);
                        }
                    }

                    if (isset($request->detail_retur_pembelian_id[$key]) && @$request->detail_retur_pembelian_id[$key] != null) {
                        $detailRetur = DetailReturPembelian::find($request->detail_retur_pembelian_id[$key]);
                        if ($detailRetur) {
                            $detailRetur->update([
                                'status_item' => 'pending'
                            ]);
                        }
                    }

                    if (isset($request->detail_retur_penjualan_id[$key]) && @$request->detail_retur_penjualan_id[$key] != null) {
                        $detailRetur = DetailReturPenjualan::find($request->detail_retur_penjualan_id[$key]);
                        if ($detailRetur) {
                            $detailRetur->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->biaya_item[$key] ?? $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" && $kirimSupplier->jenis_kompensasi != "menunggu-konfirmasi") {
                foreach ($kirimSupplier->detail_kirim_supplier as $detail) {
                    $item = Item::with('stok_item_tokos')->find($detail->item_id);
                    $item->update([
                        "stok" => max(0,$item->stok - $detail->qty),
                    ]);

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

                    if($kirimSupplier->jenis_kompensasi == "gagal-retur"){
                        if (isset($detail->detail_retur_pembelian)) {
                            $transaksi_barang_rusak = TransaksiBarangRusak::create([
                                "tanggal" => $request->tanggal,
                                "no_pencatatan" => 'TBR-' . date('Ymdhis'),
                                "sale_id" => 0,
                                "deskripsi" => "Gagal Retur suplier",
                                "pengguna_id" => auth()->user()->id,
                                "retur_id" => $detail->detail_retur_pembelian->retur_pembelian_id
                            ]);

                            DetailTransaksiBarangRusak::create([
                                "transaksi_barang_rusak_id" => $transaksi_barang_rusak->id,
                                "item_id" => $item->id,
                                "nama_item" => $item->nama_item,
                                "harga_item" => $item->biaya_item,
                                "qty" => $detail->qty,
                            ]);
                        } else if (isset($detail->detail_retur_penjualan)) {
                            $transaksi_barang_rusak = TransaksiBarangRusak::create([
                                "tanggal" => $request->tanggal,
                                "no_pencatatan" => 'TBR-' . date('Ymdhis'),
                                "sale_id" => $detail->detail_retur_penjualan->retur_penjualan_id,
                                "deskripsi" => "Gagal Retur suplier",
                                "pengguna_id" => auth()->user()->id,
                                "retur_id" => 0
                            ]);

                            DetailTransaksiBarangRusak::create([
                                "transaksi_barang_rusak_id" => $transaksi_barang_rusak->id,
                                "item_id" => $item->id,
                                "nama_item" => $item->nama_item,
                                "harga_item" => $item->biaya_item,
                                "qty" => $detail->qty,
                            ]);
                        } else {
                            $transaksi_barang_rusak = TransaksiBarangRusak::create([
                                "tanggal" => $request->tanggal,
                                "no_pencatatan" => 'TBR-' . date('Ymdhis'),
                                "sale_id" => 0,
                                "deskripsi" => "Gagal Retur suplier",
                                "pengguna_id" => auth()->user()->id,
                                "retur_id" => 0
                            ]);

                            DetailTransaksiBarangRusak::create([
                                "transaksi_barang_rusak_id" => $transaksi_barang_rusak->id,
                                "item_id" => $item->id,
                                "nama_item" => $item->nama_item,
                                "harga_item" => $item->biaya_item,
                                "qty" => $detail->qty,
                            ]);
                        }

                        
                    }
                }
            }

            if ($kirimSupplier->status_kirim == "selesai" && $request->status_kirim != "selesai" && $kirimSupplier->jenis_kompensasi != "tukar-barang" && $kirimSupplier->jenis_kompensasi != "menunggu-konfirmasi") {
                foreach ($kirimSupplier->detail_kirim_supplier 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 Pengiriman berhasil diubah');
        } catch (\Throwable $th) {
            DB::rollback();
            Log::error($th);
            return redirect()->back()->with('error', 'Status Pengiriman gagal diubah');
        }
    }

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

        DB::beginTransaction();
        try {
            $kirimSupplier = KirimSupplier::findOrFail($id);
            $kirimSupplier->update([
                'jenis_kompensasi' => $request->jenis_kompensasi
            ]);

            foreach ($kirimSupplier->detail_kirim_supplier as $detail) {
               
                if ($detail->detail_garansi_id != null) {
                    $detailGaransi = DetailGaransi::find($detail->detail_garansi_id);
                    if ($detailGaransi) {
                        $detailGaransi->update([
                            'status_item' => $request->jenis_kompensasi
                        ]);
                    }
                }

                if ($detail->detail_retur_pembelian_id != null) {
                    $detailRetur = DetailReturPembelian::find($detail->detail_retur_pembelian_id);
                    if ($detailRetur) {
                        $detailRetur->update([
                            'status_item' => $request->jenis_kompensasi
                        ]);
                    }
                }

                if ($detail->detail_retur_penjualan_id != null) {
                    $detailRetur = DetailReturPenjualan::find($detail->detail_retur_penjualan_id);
                    if ($detailRetur) {
                        $detailRetur->update([
                            'status_item' => $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');
        }
    }

    public function nota($id)
    {
        $data = KirimSupplier::with('detail_kirim_supplier.item','supplier')->find($id);
        $profil = Profil::first();

        $data = [
            'data' => $data,
            'profil' => $profil,
        ];

        $pdf = Pdf::loadView('kirim-supplier.nota', $data);
        $fileName = 'NotaKirimSupplier-' . $data['data']->supplier->telp_supplier . date('his') . '.pdf';
        $pdf->setPaper('A4', 'landscape');
        $pdf->render();
        $path = public_path('pdf/Kirim-Supplier/' . $fileName);

        return $pdf->stream($path, array("Attachment" => false));
    }
}

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