Anons79 Mini Shell

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

<?php

namespace App\Http\Controllers;

use App\Helpers\Helper;
use App\Models\ReturPembelian;
use App\Models\DetailReturPembelian;
use App\Models\DetailTransaksiBarangRusak;
use App\Models\Item;
use App\Models\Pengguna;
use App\Models\Supplier;
use App\Models\Toko;
use App\Models\TransaksiBarangRusak;
use DateInterval;
use DatePeriod;
use DateTime;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;

class ReturPembelianController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index(): Response
    {
        $begin = new DateTime('-1 month');
        $end = new DateTime();
        $periode = [
            $begin->format('d/m/Y'),
            $end->format('d/m/Y'),
        ];

        if (request()->periode) {
            $periode = explode(" - ", request()->periode);
            $begin = DateTime::createFromFormat('d/m/Y', $periode[0]);
            $end = DateTime::createFromFormat('d/m/Y', $periode[1]);
        }
        $end->modify('+1 day');

        $interval = new DateInterval('P1D');
        $daterange = new DatePeriod($begin, $interval, $end);
        $periodeTanggals = [];
        foreach ($daterange as $date) {

            $periodeTanggals[] = strftime("%d-%b", strtotime($date->format("Y-m-d")));
        }


        $datas = ReturPembelian::whereBetween("created_at", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->latest()->get();

        $data = [
            'datas' => $datas,
            'periode' => $periode,
            'periodeTanggals' => $periodeTanggals,

        ];

        return response()->view("retur_pembelian.index", $data);
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create(): Response
    {
        $supplier = Supplier::all();
        $tokos = auth()->user()->role->tokos;
        $data = [
            'supplier' => $supplier,
            'tokos' => $tokos,
        ];
        return response()->view("retur_pembelian.create", $data);
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request): RedirectResponse
    {   
        $request->validate([
            "bukti_retur" => 'nullable|file|mimes:jpg,jpeg,png,pdf,tiff,webp',
        ]);
        DB::beginTransaction();
        try {
            $bukti_retur = null;
            if ($request->hasFile('bukti_retur')) {
                $request->validate([
                    'bukti_retur' => 'image'
                ]);
                $bukti_retur = $request->file('bukti_retur');
                $photo_ekstensi = $bukti_retur->extension();
                $photo_baru = "bukti-retur-" . \Str::slug($request->no_pembelian) . ".$photo_ekstensi";
                $bukti_retur = $bukti_retur->storeAs('bukti_retur', $photo_baru);
            }
            $retur_pembelian = ReturPembelian::create([
                "tanggal" => $request->tanggal,
                "keterangan" => $request->keterangan,
                "no_pembelian" => $request->no_pembelian,
                "ket_tambahan" => $request->ket_tambahan,
                "supplier_id" => $request->supplier_id,
                "pengguna_id" => auth()->user()->id,
                "bukti_retur" => $bukti_retur
            ]);

            $retur_pembelian->save();

            $retur_pembelian->tokos()->sync($request->toko_id);

            if (isset($request->jumlah)) {
                for ($i = 0; $i < count($request->jumlah); $i++) {
                    $item = Item::with('stok_item_tokos')->find($request->id[$i]);

                    DetailReturPembelian::create([
                        "retur_pembelian_id" => $retur_pembelian->id,
                        "item_id" => $request->id[$i],
                        "nama_item" => $item->nama_item,
                        "qty" => $request->jumlah[$i],
                        "status_retur" => 1,
                    ]);



                    if ($request->ket_tambahan != "Tukar Barang") {
                        $item->update([
                            "stok" => $item->stok - $request->jumlah[$i],
                        ]);

                        $item->stok_item_tokos()->updateOrCreate(['toko_id'=>$request->toko_id], [
                            "stok" => (@$item->stok_item_tokos->where("toko_id", $request->toko_id)->first()->stok ?? 0) - $request->jumlah[$i],
                        ]);
                        
                    } elseif ($request->ket_tambahan == "Gagal Retur") {
                        if (!isset($transaksi_barang_rusak)) {
                            $transaksi_barang_rusak = TransaksiBarangRusak::create([
                                "tanggal" => $request->tanggal,
                                "no_pencatatan" => 'TBR-' . date('Y') . '' . date('m') . '' . date('d') . '' . date('his'),
                                "sale_id" => 0,
                                "deskripsi" => "Gagal Retur suplier",
                                "pengguna_id" => auth()->user()->id,
                                "retur_id" => $retur_pembelian->id
                            ]);
                        }

                        DetailTransaksiBarangRusak::create([
                            "transaksi_barang_rusak_id" => $transaksi_barang_rusak->id,
                            "item_id" => $request->id[$i],
                            "nama_item" => $item->nama_item,
                            "harga_item" => $item->biaya_item,
                            "qty" => $request->jumlah[$i],
                        ]);
                       
                    } 
                }
            }
            Helper::addUserLog("Menambahkan Retur Pembelian : ".$retur_pembelian->no_pembelian, $retur_pembelian->toArray());
            DB::commit();
            return redirect(route("retur_pembelian.index"))->with('success', 'Retur Penjualan berhasil ditambahkan.');
        } catch (\Throwable $th) {
            //throw $th;
            DB::rollback();
            Log::error($th);
            return redirect(route("retur_pembelian.index"))->with('error', 'Retur Penjualan gagal ditambahkan. ' . $th->getMessage())->withInput($request->all());
        }
    }

    /**
     * Display the specified resource.
     */
    public function show(string $id): Response
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(string $id): Response
    {
        $datas = ReturPembelian::find($id);
        $supplier = Supplier::all();
        $tokos = auth()->user()->role->tokos;
        $data = [
            "datas" => $datas,
            "supplier" => $supplier,
            "tokos" => $tokos,
        ];
        return response()->view("retur_pembelian.edit", $data);
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, string $id): RedirectResponse
    {   
        $request->validate([
            "bukti_retur" => 'nullable|file|mimes:jpg,jpeg,png,pdf,tiff,webp',
        ]);
        DB::beginTransaction();
        try {

            $retur_pembelian = ReturPembelian::find($id);
            $old_detail = DetailReturPembelian::where("retur_pembelian_id", $id);


            $old_barang_rusak = TransaksiBarangRusak::where("retur_id", $id);

            $bukti_retur = $retur_pembelian->bukti_retur;
            $bukti_retur_lama = $retur_pembelian->bukti_retur;
            if ($request->hasFile('bukti_retur')) {
                $request->validate([
                    'bukti_retur' => 'image'
                ]);
                $bukti_retur = $request->file('bukti_retur');
                $photo_ekstensi = $bukti_retur->extension();
                $photo_baru = "bukti-retur-" . \Str::slug($request->no_pembelian) . ".$photo_ekstensi";
                $bukti_retur = $bukti_retur->storeAs('bukti_retur', $photo_baru);
            }
            $retur_pembelian->update([
                "tanggal_pembelian" => $request->tanggal,
                "keterangan" => $request->keterangan,
                "no_pembelian" => $request->no_pembelian,
                "ket_tambahan" => $request->ket_tambahan,
                "supplier_id" => $request->supplier_id,
                "pengguna_id" => auth()->user()->id,
                "bukti_retur" => $bukti_retur
            ]);

            $retur_pembelian->tokos()->sync($request->toko_id);

            if (isset($request->jumlah)) {

                foreach ($old_detail->get() as $detail) {

                    $item_old = Item::with('stok_item_tokos')->find($detail->item_id);
                    if (isset($item_old)) {
                        // if ($request->ket_tambahan == "Tukar Barang") {
                        //     $item_old->update([
                        //         'stok' => $item_old->stok - $detail->qty
                        //     ]);

                        //     $item_old->stok_item_tokos()->updateOrCreate(['toko_id'=>$request->toko_id], [
                        //         "stok" => (@$item_old->stok_item_tokos->where("toko_id", $request->toko_id)->first()->stok ?? 0) - $detail->qty,
                        //     ]);
                        // }

                        if ($request->ket_tambahan != "Tukar Barang") {
                            $item_old->update([
                                'stok' => $item_old->stok + $detail->qty
                            ]);

                            $item_old->stok_item_tokos()->updateOrCreate(['toko_id'=>$request->toko_id], [
                                "stok" => (@$item_old->stok_item_tokos->where("toko_id", $request->toko_id)->first()->stok ?? 0) + $detail->qty,
                            ]);
                        }
                    }
                }
                $old_barang_rusak->delete();

                $old_detail->delete();




                for ($i = 0; $i < count($request->jumlah); $i++) {
                    $item = Item::with('stok_item_tokos')->find($request->id[$i]);
                    if (isset($item)) {
                        DetailReturPembelian::create([
                            "retur_pembelian_id" => $retur_pembelian->id,
                            "item_id" => $request->id[$i],
                            "nama_item" => $item->nama_item,
                            "qty" => $request->jumlah[$i],
                            "status_retur" => 1,
                        ]);
                    }



                    if ($request->ket_tambahan != "Tukar Barang") {
                        // $item->update([
                        //     "stok" => $item->stok + $request->jumlah[$i],
                        // ]);

                        // $item->stok_item_tokos()->updateOrCreate(['toko_id'=>$request->toko_id], [
                        //     "stok" => (@$item->stok_item_tokos->where("toko_id", $request->toko_id)->first()->stok ?? 0) + $request->jumlah[$i],
                        // ]);
                        $item->update([
                            "stok" => $item->stok - $request->jumlah[$i],
                        ]);

                        $item->stok_item_tokos()->updateOrCreate(['toko_id'=>$request->toko_id], [
                            "stok" => (@$item->stok_item_tokos->where("toko_id", $request->toko_id)->first()->stok ?? 0) - $request->jumlah[$i],
                        ]);
                    } elseif ($request->ket_tambahan == "Gagal Retur") {
                        if (!isset($transaksi_barang_rusak)) {
                            $transaksi_barang_rusak = TransaksiBarangRusak::create([
                                "tanggal" => $request->tanggal,
                                "no_pencatatan" => 'TBR-' . date('Y') . '' . date('m') . '' . date('d') . '' . date('his'),
                                "sale_id" => 0,
                                "deskripsi" => "Gagal Retur suplier",
                                "pengguna_id" => auth()->user()->id,
                                "retur_id" => $retur_pembelian->id
                            ]);
                        }

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













                    // if ($request->status_retur[$i] == 1) {

                    //     $item->update([
                    //         "stok" => $item->stok + $request->jumlah[$i],
                    //     ]);
                    // } else {
                    //     if (!isset($transaksi_barang_rusak)) {
                    //         $transaksi_barang_rusak = TransaksiBarangRusak::create([
                    //             "tanggal" => $request->tanggal,
                    //             "no_pencatatan" => 'TBR-' . date('Y') . '' . date('m') . '' . date('d') . '' . date('his'),
                    //             "sale_id" => 0,
                    //             "deskripsi" => "Gagal Retur suplier",
                    //             "pengguna_id" => auth()->user()->id,
                    //             "retur_id" => $retur_pembelian->id
                    //         ]);
                    //     }

                    //     DetailTransaksiBarangRusak::create([
                    //         "transaksi_barang_rusak_id" => $transaksi_barang_rusak->id,
                    //         "item_id" => $request->id[$i],
                    //         "nama_item" => $item->nama_item,
                    //         "harga_item" => 0,
                    //         "qty" => $request->jumlah[$i],
                    //     ]);
                    // }
                }
            }
            if ($bukti_retur_lama != null && $bukti_retur_lama != $bukti_retur) {
                Storage::delete($bukti_retur_lama);
            }
            Helper::addUserLog("Mengubah Retur Pembelian : ".$retur_pembelian->no_pembelian, $retur_pembelian->toArray());
            DB::commit();
            return redirect(route("retur_pembelian.index"))->with('success', 'Retur Penjualan berhasil diubah.');
        } catch (\Throwable $th) {
            DB::rollback();
            Log::error($th);
            return redirect(route("retur_pembelian.index"))->with('error', 'Retur Penjualan gagal diubah.');
        }
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(string $id): RedirectResponse
    {
        DB::beginTransaction();
        try {
            $data = ReturPembelian::with('tokos')->find($id);
            $detail = DetailReturPembelian::where("retur_pembelian_id", $data->id);
            $barang_rusak = TransaksiBarangRusak::where("retur_id", $id);

            if (isset($detail)) {
                foreach ($detail->get() as $detail) {

                    $item_old = Item::with('stok_item_tokos')->find($detail->item_id);
                    if (isset($item_old)) {
                        if ($data->ket_tambahan != "Tukar Barang") {
                            $item_old->update([
                                'stok' => $item_old->stok + $detail->qty
                            ]);

                            $toko_id = @$data->tokos->first()->id ?? 0;
                            if ($toko_id) {
                                $item_old->stok_item_tokos()->updateOrCreate(['toko_id'=>$toko_id], [
                                    "stok" => (@$item_old->stok_item_tokos->where("toko_id", $toko_id)->first()->stok ?? 0) + $detail->qty,
                                ]);
                            }
                        }
                    }
                }
                $barang_rusak->delete();
                $detail->delete();
            }
            $data->tokos()->detach();
            $data->delete();
            if ($data->bukti_retur != null) {
                Storage::delete($data->bukti_retur);
            }
            Helper::addUserLog("Menghapus Retur Pembelian : ".$data->no_pembelian, $data->toArray());
            DB::commit();
            return redirect()->route('retur_pembelian.index')->with('success', 'Retur Pembelian berhasil dihapus');
        } catch (\Throwable $th) {

            DB::rollback();
            Log::error($th);
            return redirect()->route('retur_pembelian.index')->with('error', 'Pembelian gagal dihapus');
        }
    }
}

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