MIELICIUS / app / Http / Controllers / SalesController.php
SalesController.php
Raw
<?php

namespace App\Http\Controllers;

use App\Models\Bahan;
use App\Models\Bom;
use App\Models\bomsementara;
use App\Models\Customer;
use App\Models\Manufacturingorder;
use App\Models\manufacturingorderisi;
use App\Models\Produk;
use App\Models\Sales;
use App\Models\Salesisi;
use App\Models\SalesOrder;
use App\Models\SO;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class SalesController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $sq = Sales::all();
        $cust = Customer::all();
        return view('dashboards.sales.index', [
            'sq' => $sq,
            'cust' => $cust,
        ]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $code = 'SQ' . date('Y') . rand(1111, 9999);
        $customer = Customer::all();
        $status = "Quotation";
        return view('dashboards.sales.create', [
            'code' => $code,
            'customer' => $customer,
            'status' => $status,
        ]);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $request->validate([
            'kodesq' => 'required',
            'kodecust' => 'required',
            'tglpembelian' => 'required',
        ]);

        Sales::create($request->all());

        return redirect()->route('adminIndexSalesQuotation')
            ->with('success', 'Data Telah Ditambahkan. Silahkan buka isi dari SQ');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    public function isi(Sales $sales)
    {
        $prod = Produk::all();
        $sisi = Sales::get()->where('idsqnya', $sales->idsq);
        $sisi2 = Salesisi::get()->where('idsqnya', $sales->idsq);

        //dibuat karena manufacturingisi index tidak dimulai dari nol dan kita cuma butuh banyak qty
        foreach ($sisi2 as $value) {
            $quantiti[] = [
                'banyakqty' => $value->banyakqty
            ];
        }


        // buat cari bahan apa yg dipake di manufacturingisi
        $kodbahan = DB::table('salesisis')
            ->select('kodeprod')
            ->orderBy('idsqnya', 'asc') //berarti kriteria wajib urut
            ->where('idsqnya', $sales->idsq)
            ->get(); //nanti berupa objek

        if ($kodbahan->isEmpty()) {
            return view('dashboards.sales.isi', [
                'sales' => $sales,
                'prod' => $prod,
                'sisi' => $sisi,
                'sisi2' => $sisi2,
                'hargabaru' => 0,
                'statbol' => 1,
            ]);
        } else {
            $prod = Produk::all();
            $sisi = Sales::get()->where('idsqnya', $sales->idsq);
            $sisi2 = Salesisi::get()->where('idsqnya', $sales->idsq);

            //dibuat karena manufacturingisi index tidak dimulai dari nol dan kita cuma butuh banyak qty
            foreach ($sisi2 as $value) {
                $quantiti[] = [
                    'banyakqty' => $value->banyakqty
                ];
            }
            $kodbahan = DB::table('salesisis')
                ->select('kodeprod')
                ->orderBy('idsqnya', 'asc') //berarti kriteria wajib urut
                ->where('idsqnya', $sales->idsq)
                ->get(); //nanti berupa objek

            //buat hitung total
            //CARI HARGA DASAR PRODUK
            foreach ($kodbahan as $key) {
                // dd($key->kodeprod);
                $bahanbaku[] = Produk::select('hargaproduk')
                    ->where('kodeproduk', $key->kodeprod)
                    ->get();
            }



            foreach ($bahanbaku as $key) {
                foreach ($key as $val) {
                    $produkbaru[] = $val->hargaproduk;
                }
            }
            // dd($quantiti[0]['banyakqty']);
            //untuk mengkalikan
            for ($i = 0; $i < $kodbahan->count(); $i++) {
                $hargaakhir[] = $quantiti[$i]['banyakqty'] * $produkbaru[$i];
            }
            //tambah perkaliannya
            $hargabaru = 0;
            foreach ($hargaakhir as $key) {
                $hargabaru += $key;
            }
            // dd($hargabaru);

            //setelahnya ambil data dari tabel bahan untuk ambil bahan yg dipake di materialorder
            $bahann = array();
            for ($i = 0; $i < $kodbahan->count(); $i++) {
                $bahann[] = Produk::select('kodeproduk', 'stockproduk', 'hargaproduk')->where('kodeproduk', $kodbahan[$i]->kodeprod)->get();
            }

            //buat cek banyak nya bahan aman atau tidaknya.. kalau bahan aman semua berarti statol harus 0
            $statbol = 0;
            for ($i = 0; $i < $kodbahan->count(); $i++) {
                if ($quantiti[$i]['banyakqty'] <= $bahann[$i][0]->stockproduk) {
                    // Bahan Aman
                    $statbol += 0;
                } else {
                    // Bahan tidak aman
                    $statbol += 1;
                }
            }
            // dd($statbol);

            return view('dashboards.sales.isi', [
                'sales' => $sales,
                'prod' => $prod,
                'sisi' => $sisi,
                'sisi2' => $sisi2,
                'statbol' => $statbol,
                'hargabaru' => $hargabaru,

            ]);
        }
    }

    public function storeisi(Request $request)
    {
        $request->validate([
            'idsqnya' => 'required',
            'idprod' => 'required',
            'kodeprod' => 'required',
            'banyakqty' => 'required',
        ]);

        $bahanbaku = Produk::select('hargaproduk')
            ->where('kodeproduk', $request->kodeprod)
            ->get();

        $materialnya = Produk::get()->where('kodeproduk', $request->kodeprod);
        //dibuat karena matrialnya index tidak dimulai dari nol
        foreach ($materialnya as $item) {
            $stockproduk = $item->stockproduk;
            $idproduk = $item->idproduk;
        }

        $statbol = 0;
        if ($request->banyakqty <= $stockproduk) {
            $statusproduk = "Produk Aman";
            $statbol += 0;
        } else {
            $statusproduk = "Produk Kurang";
            $statbol += 1;
        }

        Salesisi::create([
            'idsqnya' => $request->idsqnya,
            'idprod' => $idproduk,
            'kodeprod' => $request->kodeprod,
            'banyakqty' => $request->banyakqty,
            'statbol' => $statbol,
            'statusproduk' => $statusproduk,
        ]);

        return redirect()->back()
            ->with('success', 'Data Telah Ditambahkan. Silahkan Isi Bahan Baku Yang Dibutuhkan Di Isi SQ');
    }
    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $sq = Sales::find($id);
        $customer = Customer::all();
        return view('dashboards.sales.edit', [
            'sq' => $sq,
            'customer' => $customer,
        ]);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Sales $datasales)
    {
        $request->validate([
            'kodesq' => 'required',
            'kodecust' => 'required',
            'tglpembelian' => 'required',
            'status' => 'required',
        ]);

        $datasales->update($request->all());

        return redirect()->route('adminIndexSalesQuotation')
            ->with('success', 'Data Telah DiUbah. Silahkan buka isi dari SQ');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        $sq = Sales::find($id);
        $sq->delete();
        return redirect()->route('adminIndexSalesQuotation')
            ->with('success', 'Data Telah DiHapus');
    }

    public function destroyisi($sales)
    {
        $salesisi = Salesisi::find($sales);
        $salesisi->delete();

        return redirect()->back()
            ->with('success', 'Data Telah Dihapus.');
    }

    public function checkout(Request $request, Sales $sales)
    {
        $request->validate([
            'idsqnya' => 'required',
        ]);

        $datadarisq = Sales::get()->where('idsq', $request->idsqnya);

        //dibuat karena manufacturingisi index tidak dimulai dari nol dan kita cuma butuh banyak qty
        foreach ($datadarisq as $value) {
            $datadarisqbaru[] = [
                "idsq" => $value->idsq,
                "kodesq" => $value->kodesq,
                "kodecust" => $value->kodecust,
                "tglpembelian" => $value->tglpembelian,
                "status" => $value->status,
            ];
        }
        // dd($datadarisqbaru[0]['status']);

        Sales::where('idsq', $request->idsqnya)->update([
            'status' => 'Checkout'
        ]);

        DB::table('salesorders')->insert([
            'idso' => $datadarisqbaru[0]['idsq'],
            'kodesq2' => $datadarisqbaru[0]['kodesq'],
            'kodecust' => $datadarisqbaru[0]['kodecust'],
            'tglpembelian' => $datadarisqbaru[0]['tglpembelian'],
            'status' => 'Checkout',
        ]);
        // dd('sampai sini');

        return redirect()->route('adminIndexSalesQuotation')
            ->with('success', 'Data Telah Diperbaharui.');
    }
}