Anons79 Mini Shell

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

<?php

namespace App\Http\Controllers;

use App\Helpers\Helper;
use App\Models\Pengguna;
use App\Models\ReturPenjualan;
use App\Models\DetailReturPenjualan;
use App\Models\Sale;
use App\Models\Item;
use App\Models\Penjualan;
use App\Models\Pelanggan;
use App\Models\Toko;
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;

class ReturPenjualanController 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[] = $date->format('d-M');
        }


        $datas = ReturPenjualan::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_penjualan.index", $data);
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create(): Response
    {
        $penjualans = Penjualan::with('pelanggan','detail_penjualan')->orderBy('tanggal_penjualan','DESC')->get();
        $penjualan = null;
        if(request()->penjualan_id != null){
            $penjualan = Penjualan::with('pelanggan','detail_penjualan')->find(request()->penjualan_id);
        }
        $pelanggan = Pelanggan::all();
        $sales = Sale::all();
        $tokos = auth()->user()->role->tokos;
        $pengguna = Pengguna::all();
        $data = [
            "penjualans" => $penjualans,
            "pelanggans" => $pelanggan,
            "sales" => $sales,
            "tokos" => $tokos,
            "pengguna" => $pengguna,
            "penjualan" => $penjualan
        ];
        return response()->view("retur_penjualan.create", $data);
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request): RedirectResponse
    {   
        $request->validate([
            'nama' => 'required',
            'kontak' => 'required',
            'kecamatan_pelanggan' => 'required',
            'alamat' => 'required',
        ]);

        DB::beginTransaction();
        try {
            if($request->penjualan_id != null){
                $penjualan = Penjualan::with('pelanggan')->find($request->penjualan_id);
               
                $penjualan->update([
                    'status_lanjutan'=>'retur'
                ]);
            }
            $findPelanggan = Pelanggan::where('telp_pelanggan', $request->kontak)->first();
            if ($findPelanggan) {
                
                $update = $findPelanggan->update([
                    'nama_pelanggan' => $request->nama,
                    'telp_pelanggan' => $request->kontak,
                    'kecamatan_pelanggan' => $request->kecamatan_pelanggan,
                    'alamat_pelanggan' => $request->alamat,
                    'pengguna_id' => 0

                ]);
                $pelanggan_id = $findPelanggan->id;
            } else {
                
                $pelanggan = Pelanggan::create([
                    'nama_pelanggan' => $request->nama,
                    'telp_pelanggan' => $request->kontak,
                    'kecamatan_pelanggan' => $request->kecamatan_pelanggan,
                    'alamat_pelanggan' => $request->alamat,
                    'pengguna_id' => 0
                ]);
                $pelanggan->save();
                $pelanggan_id = $pelanggan->id;
            }
            $retur_penjualan = ReturPenjualan::create([
                "no_retur" => $request->no_retur,
                "pelanggan_id" => $pelanggan_id,
                "sale_id" => $request->sale_id,
                "tanggal_penjualan" => $request->tanggal,
                "keterangan" => $request->keterangan,
                "no_penjualan" => @$penjualan->nomor_nota,
                "penjualan_id" => @$penjualan->id,
                "pengguna_id" => auth()->user()->id
            ]);

            $retur_penjualan->save();

            $retur_penjualan->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]);

                    DetailReturPenjualan::create([
                        "retur_penjualan_id" => $retur_penjualan->id,
                        "item_id" => $request->id[$i],
                        "nama_item" => $item->nama_item,
                        "qty" => $request->jumlah[$i],
                    ]);

                    // $item->update([
                    //     "stok" => $item->stok + $request->jumlah[$i],
                    // ]);

                    // if ($item->stok_item_tokos->count() > 0) {
                    //     if ($item->stok_item_tokos->where("toko_id", $request->toko_id)->count() > 0) {
                    //         $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],
                    //         ]);
                    //     }
                    // }
                }
            }
            Helper::addUserLog("Menambahkan Retur Penjualan : ".$retur_penjualan->no_penjualan, $retur_penjualan->toArray());
            DB::commit();
            if(request()->penjualan_id != null){
                return redirect()->route('penjualan.index')->with('success', 'Penjualan '.$penjualan->nomor_nota.' berhasil diretur');
            }
            return redirect(route("retur_penjualan.index"))->with('success', 'Retur Penjualan berhasil ditambahkan.');
        } catch (\Throwable $th) {
            //throw $th;
            DB::rollBack();
            Log::error($th);
            return redirect()->back()->with('error', 'Retur Penjualan gagal ditambahkan. ' . $th->getMessage())->withInput($request->all());
        }
    }

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

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(string $id): Response
    {   
        $penjualans = Penjualan::with('pelanggan','detail_penjualan')->orderBy('tanggal_penjualan','DESC')->get();
        $datas = ReturPenjualan::with('pelanggan')->find($id);
        $pelanggan = Pelanggan::all();
        $pengguna = Pengguna::all();
        $sales = Sale::all();
        $tokos = auth()->user()->role->tokos;
        $data = [
            "penjualans" => $penjualans,
            "datas" => $datas,
            "pelanggans" => $pelanggan,
            "pengguna" => $pengguna,
            "sales" => $sales,
            "tokos" => $tokos
        ];
        return response()->view("retur_penjualan.edit", $data);
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, string $id): RedirectResponse
    {   

        $request->validate([
            'nama' => 'required',
            'kontak' => 'required',
            'kecamatan_pelanggan' => 'required',
            'alamat' => 'required',
        ]);
        
        DB::beginTransaction();
        try {
            $retur_penjualan = ReturPenjualan::find($id);
            $old_detail = DetailReturPenjualan::where("retur_penjualan_id", $retur_penjualan->id);

            $findPelanggan = Pelanggan::where('telp_pelanggan', $request->kontak)->first();
            if ($findPelanggan) {
                $update = $findPelanggan->update([
                    'nama_pelanggan' => $request->nama,
                    'telp_pelanggan' => $request->kontak,
                    'kecamatan_pelanggan' => $request->kecamatan_pelanggan,
                    'alamat_pelanggan' => $request->alamat,
                    'pengguna_id' => 0

                ]);
                $pelanggan_id = $findPelanggan->id;
            } else {
                $pelanggan = Pelanggan::create([
                    'nama_pelanggan' => $request->nama,
                    'telp_pelanggan' => $request->kontak,
                    'kecamatan_pelanggan' => $request->kecamatan_pelanggan,
                    'alamat_pelanggan' => $request->alamat,
                    'pengguna_id' => 0
                ]);
                $pelanggan->save();
                $pelanggan_id = $pelanggan->id;
            }

            if($request->penjualan_id != null){
                $penjualan = Penjualan::with('pelanggan')->find($request->penjualan_id);
               
                $penjualan->update([
                    'status_lanjutan'=>'retur'
                ]);
            }
            $retur_penjualan->update([
                "pelanggan_id" => $pelanggan_id,
                "sale_id" => $request->sale_id,
                "tanggal_penjualan" => $request->tanggal,
                "keterangan" => $request->keterangan,
                // "no_penjualan" => $request->no_penjualan,
                 "no_penjualan" => @$penjualan->nomor_nota,
                "penjualan_id" => @$penjualan->id,
                "pengguna_id" => auth()->user()->id
            ]);

            $retur_penjualan->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)) {
                        $item_old->update([
                            'stok' => $item_old->stok - $detail->qty
                        ]);

                        if ($item_old->stok_item_tokos->count() > 0) {
                            if ($item_old->stok_item_tokos->where("toko_id", $request->toko_id)->count() > 0) {
                                $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_detail->delete();

                for ($i = 0; $i < count($request->jumlah); $i++) {
                    $item = Item::with('stok_item_tokos')->find($request->id[$i]);
                    if (isset($item)) {
                        DetailReturPenjualan::create([
                            "retur_penjualan_id" => $retur_penjualan->id,
                            "item_id" => $request->id[$i],
                            "nama_item" => $item->nama_item,
                            "qty" => $request->jumlah[$i],
                        ]);

                        // $item->update([
                        //     "stok" => $item->stok + $request->jumlah[$i],
                        // ]);

                        // if ($item->stok_item_tokos->count() > 0) {
                        //     if ($item->stok_item_tokos->where("toko_id", $request->toko_id)->count() > 0) {
                        //         $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],
                        //         ]);
                        //     }
                        // }
                    }
                }
            }
            Helper::addUserLog("Mengubah Retur Penjualan : ".$retur_penjualan->no_penjualan, $retur_penjualan->toArray());
            DB::commit();
            return redirect(request()->back ? route(request()->back) : route("retur_penjualan.index"))->with('success', 'Retur Penjualan berhasil diubah.');
                
        } catch (\Throwable $th) {
            //throw $th;
            DB::rollBack();
            Log::error($th);
            return redirect()->back()->with('error', 'Retur Penjualan gagal diubah. ' . $th->getMessage())->withInput($request->all());
        }
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(string $id): RedirectResponse
    {
        DB::beginTransaction();
        try {
            $data = ReturPenjualan::find($id);
            $detail = DetailReturPenjualan::where("retur_penjualan_id", $data->id);
            foreach ($detail->get() as $detail) {
                $item_old = Item::with('stok_item_tokos')->find($detail->item_id);

                // $item_old->update([
                //     'stok' => $item_old->stok + $detail->qty
                // ]);

                // if ($item_old->stok_item_tokos->count() > 0 && $data->tokos->count() > 0) {
                //     if ($item_old->stok_item_tokos->where("toko_id", $data->tokos->first()->id)->count() > 0) {
                //         $item_old->stok_item_tokos()->updateOrCreate(['toko_id',  $data->tokos->first()->id],[
                //             "stok" => $item_old->stok_item_tokos->where("toko_id", $data->tokos->first()->id)->first()->stok + $detail->qty,
                //         ]);
                //     }
                // }
            }
            $data->tokos()->detach();;
            $detail->delete();
            $data->delete();
            Helper::addUserLog("Menghapus Retur Penjualan : ".$data->no_penjualan, $data->toArray());
            DB::commit();
            return redirect(request()->back ? route(request()->back) : route('retur_penjualan.index'))->with('success', 'Retur Penjualan berhasil dihapus');
        } catch (\Throwable $th) {
            DB::rollback();
            Log::error($th);
            return redirect()->back()->with('error', 'Penjualan gagal dihapus');
        }
    }
}

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