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

<?php

namespace App\Http\Controllers;

use App\Models\TransaksiGudang;
use App\Models\DetailTransaksiGudang;
use App\Models\Item;
use App\Models\Pengguna;
use DateInterval;
use DatePeriod;
use DateTime;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;

class TransaksiGudangController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index(Request $request)
    {
        $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 = TransaksiGudang::filterToko()->latest()->get();


        $data = [
            'datas' => $datas,
        ];
        if (isset($request->arah_transaksi)) {

            $data['datas'] = TransaksiGudang::cari($request->arah_transaksi)->filterToko()->latest()->get();
            return response()->view('transaksi_gudang.index', $data);
        }
        if (isset($begin) && isset($end)) {
            $data['datas'] = TransaksiGudang::tanggal($begin, $end)->filterToko()->latest()->get();
            return response()->view('transaksi_gudang.index', $data);
        }

        return response()->view('transaksi_gudang.index', $data);
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create(): Response
    {
        $barang = DetailTransaksiGudang::with('item')->get();
        $tokos = auth()->user()->role->tokos;
        $data = [
            'detail' => $barang,
            'tokos' => $tokos
        ];


        return response()->view('transaksi_gudang.create', $data);
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request): RedirectResponse
    {
        try {
            DB::beginTransaction();
            $request->validate([
                'arah_transaksi' => 'required',
                'no_transaksi' => 'required',
                'keterangan' => 'required',
                'jumlah' => 'required',
            ], ['arah_transaksi.required' => 'pilih arah transaksi terlebih dahulu!', 'jumlah.required' => 'Pastikan untuk memilih barang!']);
            $transaksi_gudang = TransaksiGudang::create([
                "tanggal" => $request->tanggal,
                "no_transaksi" => $request->no_transaksi,
                "arah_transaksi" => $request->arah_transaksi,
                "keterangan" => $request->keterangan,
                "pengguna_id" => auth()->user()->id
            ]);

            $transaksi_gudang->save();
            $transaksi_gudang->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]);

                    DetailTransaksiGudang::create([
                        "transaksi_gudang_id" => $transaksi_gudang->id,
                        "item_id" => $request->id[$i],
                        "nama_item" => $item->nama_item,
                        "qty" => $request->jumlah[$i],
                    ]);

                    if ($request->arah_transaksi == "gudang->toko") {
                        if ($item->stok_gudang < $request->jumlah[$i]) {
                            DB::rollBack();
                            return redirect()->back()->with('error', 'Jumlah barang yang ingin dipindahkan terlalu banyak dari stok di gudang!');
                        }
                        $item->update([
                            "stok" => $item->stok + $request->jumlah[$i],
                            "stok_gudang" => $item->stok_gudang - $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],
                        ]);
                    } else {
                        if ($item->stok < $request->jumlah[$i]) {
                            DB::rollBack();
                            return redirect()->back()->with('error', 'Jumlah barang yang ingin dipindahkan terlalu banyak dari stok di toko!');
                        }
                        $item->update([
                            "stok" => $item->stok - $request->jumlah[$i],
                            "stok_gudang" => $item->stok_gudang + $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],
                        ]);
                    }
                }
            }
            DB::commit();
            return redirect(route("transaksi_gudang.index"))->with('success', 'transaksi perpindahan berhasil dicatat.');
        } catch (\Exception $e) {
            DB::rollBack();
            return redirect()->back()->with('error', $e->getMessage());
        }
    }

    /**
     * Display the specified resource.
     */
    public function show(TransaksiGudang $transaksiGudang)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(string $id): Response
    {
        $transaksi_gudang = TransaksiGudang::find($id);
        $tokos = auth()->user()->role->tokos;
        $data = [
            'datas' => $transaksi_gudang,
            'tokos' => $tokos
        ];


        return response()->view('transaksi_gudang.edit', $data);
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, string $id): RedirectResponse
    {
        try {
            $data = TransaksiGudang::find($id);

            DB::beginTransaction();

            if (isset($request->jumlah)) {
                $data->tokos()->sync($request->toko_id);
                $old_detail = DetailTransaksiGudang::where('transaksi_gudang_id', $data->id);


                if ($data->arah_transaksi == "gudang->toko") {
                    foreach ($old_detail->get() as $detail) {
                        $item_old = Item::with('stok_item_tokos')->find($detail->item_id);
                        if (isset($item_old)) {
                            $item_old->update([
                                'stok_gudang' => $item_old->stok_gudang + $detail->qty,
                                '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,
                            ]);
                        } else {
                            DB::rollBack();
                            return redirect()->back()->with('error', 'Terdapat item yang tidak tercatat di data master!');
                        }
                    }
                } else {
                    foreach ($old_detail->get() as $detail) {

                        $item_old = Item::with('stok_item_tokos')->find($detail->item_id);
                        if (isset($item_old)) {
                            $item_old->update([
                                'stok_gudang' => $item_old->stok_gudang - $detail->qty,
                                '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,
                            ]);
                        } else {
                            DB::rollBack();
                            return redirect()->back()->with('error', 'Terdapat item yang tidak tercatat di data master!');
                        }
                    }
                }

                $old_detail->delete();

                for ($i = 0; $i < count($request->jumlah); $i++) {
                    $item = Item::with('stok_item_tokos')->find($request->id[$i]);
                    if (isset($item)) {
                        DetailTransaksiGudang::create([
                            "transaksi_gudang_id" => $data->id,
                            "item_id" => $request->id[$i],
                            "nama_item" => $item->nama_item,
                            "qty" => $request->jumlah[$i],
                        ]);
                        if ($request->arah_transaksi == "gudang->toko") {
                            if ($item->stok_gudang < $request->jumlah[$i]) {
                                DB::rollBack();
                                return redirect()->back()->with('error', 'Jumlah barang yang ingin dipindahkan terlalu banyak dari stok di gudang!');
                            }
                            $item->update([
                                "stok" => $item->stok + $request->jumlah[$i],
                                "stok_gudang" => $item->stok_gudang - $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],
                            ]);
                        } else {
                            if ($item->stok < $request->jumlah[$i]) {
                                DB::rollBack();
                                return redirect()->back()->with('error', 'Jumlah barang yang ingin dipindahkan terlalu banyak dari stok di toko!');
                            }
                            $item->update([
                                "stok" => $item->stok - $request->jumlah[$i],
                                "stok_gudang" => $item->stok_gudang + $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],
                            ]);
                        }
                    }
                }
            }

            $request->validate([
                'arah_transaksi' => 'required',
                'keterangan' => 'required',
                'jumlah' => 'required',
            ], ['arah_transaksi.required' => 'pilih arah transaksi terlebih dahulu!', 'jumlah.required' => 'Pastikan untuk memilih barang!']);
            $data->update([
                "arah_transaksi" => $request->arah_transaksi,
                "keterangan" => $request->keterangan,
            ]);
            DB::commit();
            return redirect(route("transaksi_gudang.index"))->with('success', 'transaksi perpindahan berhasil dicatat.');
        } catch (\Exception $e) {
            DB::rollBack();
            return redirect()->back()->with('error', $e->getMessage());
        }
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy($id): RedirectResponse
    {
        DB::beginTransaction();
        try {
            $data = TransaksiGudang::with('tokos')->find($id);
            $detail = DetailTransaksiGudang::where("transaksi_gudang_id", $data->id);

            if (isset($detail)) {
                if ($data->arah_transaksi == "gudang->toko") {
                    foreach ($detail->get() as $detail) {
                        $item_old = Item::with('stok_item_tokos')->find($detail->item_id);
                        if (isset($item_old)) {
                            $item_old->update([
                                'stok_gudang' => $item_old->stok_gudang + $detail->qty,
                                '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,
                                ]);
                            }
                        }
                    }

                    $detail->delete();
                } else {
                    foreach ($detail->get() as $detail) {

                        $item_old = Item::with('stok_item_tokos')->find($detail->item_id);
                        if (isset($item_old)) {
                            $item_old->update([
                                'stok_gudang' => $item_old->stok_gudang - $detail->qty,
                                '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,
                                ]);
                            }
                        }
                    }
                    $detail->delete();
                }
            }


            $data->tokos()->detach();;
            $data->delete();
            DB::commit();
            return redirect()->route('transaksi_gudang.index')->with('success', 'Transaksi Gudang berhasil dihapus');
        } catch (\Throwable $th) {
            DB::rollback();
            return redirect()->route('transaksi_gudang.index')->with('error', 'Transaksi Gudang gagal dihapus');
        }
    }
}

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