ReportManageController.php

 avatar
unknown
php_laravel_blade
2 years ago
42 kB
6
Indexable
public function getPembelian()
    {
        $supply = Supply::whereDate('created_at', Carbon::today())
        ->select('supplies.kode_pasok')
        ->where('status', 'lunas')
        ->orderBy('created_at', 'desc')
        ->get();
        $jumlah = count($supply);
        // ===============================================================================
        $array = [];
        foreach ($supply as $no => $supp) {
            array_push($array, $supp->kode_pasok);
        }
        $uniq = array_unique($array);
        $pembelian = array_values($uniq);
        // ===============================================================================

        $pasok = Supply::select('supplies.*', 'products.status_pajak')
        ->join('products', 'supplies.kode_barang', '=', 'products.kode_barang')
        ->whereDate('supplies.created_at', Carbon::today())
        ->where('supplies.status', 'lunas')
        ->orderBy('supplies.created_at', 'desc')
        ->get();
        $pasok = $pasok->sortBy('created_at');
        $pasok = $pasok->values()->all();
        
        // ===================================== Jumlah Stok ==========================================

        $dos = 0;
        $pack = 0;
        $harga_dos = 0;
        $harga_pack = 0;
        $harga_total = 0;
        foreach ($pasok as $key => $value) {
            $pp = Product::where('kode_barang', $value->kode_barang)->first();
            if(strtolower($value->jenis_kemasan) == 'pack'){
                $pack += $value->jumlah;
                $harga_pack += $value->subtotal;
            }else{
                $dos +=  $value->jumlah / $pp->pack;
                $harga_dos +=  $value->subtotal;
            }
            $harga_total += $value->subtotal;
        }
        $jumlah_dos = (int) $dos ;
        $jumlah_pack = (int) $pack ;

        // ==================================== ganti data transaksi ===========================================

        array_walk($pasok, function(&$item, $key) {
            $product = Product::where('kode_barang', $item->kode_barang)->first();
            if(strtolower($item->jenis_kemasan) == 'pack'){
                $item->jumlah = $item->jumlah .' '. $item->jenis_kemasan;
            }else{
                $item->jumlah = (int) $item->jumlah / $product->pack .' '. $item->jenis_kemasan;
            }
            $item->nama_barang = $product->nama_barang;
            $item->subtotal = number_format($item->subtotal, 0, ',', '.');
            $item->created_at = $item->created_at->format('d-m-Y H:i:s');
        });

        // ===============================================================================

        $pemasok = [];
        $jumlah_pemasok = 0;
        foreach ($pasok as $key => $value) {
            if(!in_array($value->pemasok, $pemasok)){
                array_push($pemasok, $value->pemasok);
                $jumlah_pemasok++;
            } 
        }

        // ===============================================================================
            
        $tgl = Carbon::parse(now())->isoFormat('D MMMM Y');

        return request()->json(200, [
            'tgl' => $tgl,
            'pasok' => $pasok,
            'jumlah_dos' => $jumlah_dos,
            'jumlah_pack' => $jumlah_pack,
            'harga_dos' => number_format($harga_dos, 2, ',', '.'),
            'harga_pack' => number_format($harga_pack, 2, ', ', '.'),
            'jumlah' => $jumlah,
            'pembelian' => $pembelian,
            'pemasok' => $pemasok,
            'jumlah_pemasok' => $jumlah_pemasok,
            'jumlah_harga_total' => number_format($harga_total,2,',','.')
        ]);
    }
    public function getPembelianFilter(Request $req)
    {
        // $start_date = $req->tgl_awal;
        // $end_date = $req->tgl_akhir;
        // $start_date2 = Carbon::parse($start_date)->format('Y-m-d');
        // $end_date2 = date('Y-m-d', strtotime($end_date.'+1 day'));

        $search_pembelian = $req->cari_pembelian;
        $search_pajak = $req->status_pajak;
        if($search_pajak == '1'){
            $search_pajak = 'ppn';
        }
        else if($search_pajak == '2'){
            $search_pajak = 'non_ppn';
        }
        else{
            $search_pajak = null;
        }
        if($req->tgl_awal != null || $req->tgl_akhir != null){
            $start_date = $req->tgl_awal;
            $end_date = $req->tgl_akhir;
            $start_date2 = Carbon::parse($start_date)->format('Y-m-d');
            $end_date2 = date('Y-m-d', strtotime($end_date.'+1 day'));
        }else{
            $get_start = Supply::first();
            $get_end = Supply::latest()->first();

            $start_date = $get_start->created_at->format('Y-m-d');
            $end_date = $get_end->created_at->format('Y-m-d');
            $start_date2 = Carbon::parse($start_date)->format('Y-m-d');
            $end_date2 = date('Y-m-d', strtotime($end_date.'+1 day'));
        }

        $supply = Supply::whereBetween('created_at', [$start_date2, $end_date2])
        ->select('supplies.kode_pasok')
        ->where('status', 'lunas')
        ->where(function ($query) use($search_pembelian){
            $query->where('kode_pasok', 'like', '%'.$search_pembelian.'%')
                ->orWhere('surat_jalan', 'like', '%'.$search_pembelian.'%')
                ->orWhere('no_faktur', 'like', '%'.$search_pembelian.'%')
                ->orWhere('nama_barang', 'like', '%'.$search_pembelian.'%')
                ->orWhereHas('supplier', function($query) use ($search_pembelian){
                        $query->where('nama', 'like', '%'.$search_pembelian.'%');
                });
        })
        ->orderBy('created_at', 'desc')
        ->get();
        
        // ===============================================================================
        $array = [];
        foreach ($supply as $no => $trans) {
            array_push($array, $trans->kode_pasok);
        }
        $uniq = array_unique($array);
        $pembelian = array_values($uniq);
        // ===============================================================================
        if($search_pajak){
            $data_sp = supply::select('supplies.*', 'products.status_pajak')
            ->join('products', 'supplies.kode_barang', '=', 'products.kode_barang')
            ->whereBetween('supplies.created_at', [$start_date2, $end_date2])
            ->where('products.status_pajak', $search_pajak)
            ->where('supplies.status', 'lunas')
            ->orderBy('supplies.created_at', 'desc')
            ->where(function ($query) use($search_pembelian){
                $query->where('supplies.kode_pasok', 'like', '%'.$search_pembelian.'%')
                    ->orWhere('supplies.surat_jalan', 'like', '%'.$search_pembelian.'%')
                    ->orWhere('supplies.no_faktur', 'like', '%'.$search_pembelian.'%')
                    ->orWhere('supplies.nama_barang', 'like', '%'.$search_pembelian.'%')
                    ->orWhereHas('supplier', function($query) use ($search_pembelian){
                            $query->where('nama', 'like', '%'.$search_pembelian.'%');
                    });
            })
            ->get();
        }
        else{
            $data_sp = supply::select('supplies.*', 'products.status_pajak')
            ->join('products', 'supplies.kode_barang', '=', 'products.kode_barang')
            ->whereBetween('supplies.created_at', [$start_date2, $end_date2])
            ->where('supplies.status', 'lunas')
            ->orderBy('supplies.created_at', 'desc')
            ->where(function ($query) use($search_pembelian){
                $query->where('supplies.kode_pasok', 'like', '%'.$search_pembelian.'%')
                    ->orWhere('supplies.surat_jalan', 'like', '%'.$search_pembelian.'%')
                    ->orWhere('supplies.no_faktur', 'like', '%'.$search_pembelian.'%')
                    ->orWhere('supplies.nama_barang', 'like', '%'.$search_pembelian.'%')
                    ->orWhereHas('supplier', function($query) use ($search_pembelian){
                            $query->where('nama', 'like', '%'.$search_pembelian.'%');
                    });
            })
            ->get();
        }
        $pasok = $data_sp;
        $jumlah = count($pasok);
        $pasok = $pasok->sortBy('created_at');
        $pasok = $pasok->values()->all();

        // ===================================== Jumlah Stok ==========================================

        $dos = 0;
        $pack = 0;
        $harga_dos = 0;
        $harga_pack = 0;
        $harga_total = 0;
        foreach ($pasok as $key => $value) {
            $pp = Product::where('kode_barang', $value->kode_barang)->first();
            if(strtolower($value->jenis_kemasan) == 'pack'){
                $pack += $value->jumlah;
                $harga_pack += $value->subtotal;  
            }else{
                $dos +=  $value->jumlah / $pp->pack;
                $harga_dos += $value->subtotal; 
            }
            $harga_total += $value->subtotal;
        }
        $jumlah_dos = (int) $dos ;
        $jumlah_pack = (int) $pack ;
        
        // ==================================== ganti data pasok ===========================================

        array_walk($pasok, function(&$item, $key) {
            $item->kode_pasok = $item->kode_pasok.''.$item->luar_pulau;
            $product = Product::where('kode_barang', $item->kode_barang)->first();
            if(strtolower($item->jenis_kemasan) == 'pack'){
                $item->jumlah = $item->jumlah .' '. $item->jenis_kemasan;
            }else{
                $item->jumlah = (int) $item->jumlah / $product->pack .' '. $item->jenis_kemasan;
            }
            $item->nama_barang = $product->nama_barang;
            $item->status_pajak = (strtolower($item->status_pajak) == 'ppn') ? 'PPN' : 'Non PPN'; 
            $item->subtotal = number_format($item->subtotal, 0, ',', '.');
            $item->created_at = $item->created_at->format('d-m-Y H:i:s');
        });
        // ===============================================================================
        
        $pemasok = [];
        $jumlah_pemasok = 0;
        foreach ($pasok as $key => $value) {
            if(!in_array($value->pemasok, $pemasok)){
                array_push($pemasok, $value->pemasok);
                $jumlah_pemasok++;
            } 
        }

        $tgl1 = Carbon::parse($start_date)->isoFormat('D MMMM Y');
        $tgl2 = Carbon::parse($end_date)->isoFormat('D MMMM Y');
        $tgl = $tgl1.' s/d '.$tgl2;

        return request()->json(200, [
            'tgl' => $tgl,
            'pasok' => $pasok,
            'jumlah_dos' => $jumlah_dos,
            'jumlah_pack' => $jumlah_pack,
            'harga_dos' => number_format($harga_dos, 2, ',', '.'),
            'harga_pack' => number_format($harga_pack, 2, ', ', '.'),
            'jumlah' => $jumlah,
            'pembelian' => $pembelian,
            'jumlah_pemasok' => $jumlah_pemasok,
            'jumlah_harga_total' => number_format($harga_total,2,',','.')
        ]);
    }
    public function exportPembelian(Request $req)
    {
        // $start_date = $req->tgl_awal;
        // $end_date = $req->tgl_akhir;
        // $start_date2 = Carbon::parse($start_date)->format('Y-m-d');
        // $end_date2 = date('Y-m-d', strtotime($end_date.'+1 day'));

        $search_pembelian = $req->cari_pembelian;
        $search_pajak = $req->status_pajak;
        if($search_pajak == '1'){
            $search_pajak = 'ppn';
        }
        else if($search_pajak == '2'){
            $search_pajak = 'non_ppn';
        }
        else{
            $search_pajak = null;
        }

        if($req->tgl_awal != null || $req->tgl_akhir != null){
            $start_date = $req->tgl_awal;
            $end_date = $req->tgl_akhir;
            $start_date2 = Carbon::parse($start_date)->format('Y-m-d');
            $end_date2 = date('Y-m-d', strtotime($end_date.'+1 day'));
        }else{
            $get_start = Supply::first();
            $get_end = Supply::latest()->first();

            $start_date = $get_start->created_at->format('Y-m-d');
            $end_date = $get_end->created_at->format('Y-m-d');
            $start_date2 = Carbon::parse($start_date)->format('Y-m-d');
            $end_date2 = date('Y-m-d', strtotime($end_date.'+1 day'));
        }

        $supply = Supply::whereBetween('created_at', [$start_date2, $end_date2])
        ->select('supplies.kode_pasok')
        ->where('status', 'lunas')
        ->where(function ($query) use($search_pembelian){
            $query->where('kode_pasok', 'like', '%'.$search_pembelian.'%')
                ->orWhere('surat_jalan', 'like', '%'.$search_pembelian.'%')
                ->orWhere('no_faktur', 'like', '%'.$search_pembelian.'%')
                ->orWhere('nama_barang', 'like', '%'.$search_pembelian.'%')
                ->orWhereHas('supplier', function($query) use ($search_pembelian){
                        $query->where('nama', 'like', '%'.$search_pembelian.'%');
                });
        })
        ->orderBy('created_at', 'desc')
        ->get();

        // ===============================================================================
        $array = [];
        foreach ($supply as $no => $trans) {
            array_push($array, $trans->kode_pasok);
        }
        $uniq = array_unique($array);
        $pembelian = array_values($uniq);
        // ===============================================================================

        if($search_pajak){
            $pasok = supply::select('supplies.*', 'products.status_pajak')
            ->join('products', 'supplies.kode_barang', '=', 'products.kode_barang')
            ->whereBetween('supplies.created_at', [$start_date2, $end_date2])
            ->where('products.status_pajak', $search_pajak)
            ->where('supplies.status', 'lunas')
            ->orderBy('supplies.created_at', 'desc')
            ->where(function ($query) use($search_pembelian){
                $query->where('supplies.kode_pasok', 'like', '%'.$search_pembelian.'%')
                    ->orWhere('supplies.surat_jalan', 'like', '%'.$search_pembelian.'%')
                    ->orWhere('supplies.no_faktur', 'like', '%'.$search_pembelian.'%')
                    ->orWhere('supplies.nama_barang', 'like', '%'.$search_pembelian.'%')
                    ->orWhereHas('supplier', function($query) use ($search_pembelian){
                            $query->where('nama', 'like', '%'.$search_pembelian.'%');
                    });
            })
            ->get();
        }
        else{
            $pasok = supply::select('supplies.*', 'products.status_pajak')
            ->join('products', 'supplies.kode_barang', '=', 'products.kode_barang')
            ->whereBetween('supplies.created_at', [$start_date2, $end_date2])
            ->where('supplies.status', 'lunas')
            ->orderBy('supplies.created_at', 'desc')
            ->where(function ($query) use($search_pembelian){
                $query->where('supplies.kode_pasok', 'like', '%'.$search_pembelian.'%')
                    ->orWhere('supplies.surat_jalan', 'like', '%'.$search_pembelian.'%')
                    ->orWhere('supplies.no_faktur', 'like', '%'.$search_pembelian.'%')
                    ->orWhere('supplies.nama_barang', 'like', '%'.$search_pembelian.'%')
                    ->orWhereHas('supplier', function($query) use ($search_pembelian){
                            $query->where('nama', 'like', '%'.$search_pembelian.'%');
                    });
            })
            ->get();
        }
        $jumlah = count($pasok);
        $pasok = $pasok->sortBy('created_at');
        $pasok = $pasok->values()->all();
        
        // ===================================== Jumlah Stok ==========================================

        $dos = 0;
        $pack = 0;
        $harga_dos = 0;
        $harga_pack = 0;
        $harga_total = 0;
        foreach ($pasok as $key => $value) {
            $pp = Product::where('kode_barang', $value->kode_barang)->first();
            if(strtolower($value->jenis_kemasan) == 'pack'){
                $pack += $value->jumlah;
                $harga_pack += $value->subtotal;
            }else{
                $dos +=  $value->jumlah / $pp->pack;
                $harga_dos +=  $value->subtotal;
            }
            $harga_total += $value->subtotal;
        }
        $jumlah_dos = (int) $dos ;
        $jumlah_pack = (int) $pack ;

        // ==================================== ganti data pasok ===========================================

        array_walk($pasok, function($item, $key) {
            $product = Product::where('kode_barang', $item->kode_barang)->first();
            if(strtolower($item->jenis_kemasan) == 'pack'){
                $item->jumlah = $item->jumlah;
            }else{
                $item->jumlah = (int) $item->jumlah / $product->pack;
            }
            $item->nama_barang = $product->nama_barang;
            $item->status_pajak = (strtolower($item->status_pajak) == 'ppn') ? 'PPN' : 'Non PPN'; 
            $item->id_worker = User::find($item->id_worker)->nama;
            $item->id_pemasok = Supplier::find($item->id_pemasok)->nama;
            $item->created_at = $item->created_at->format('d-m-Y H:i:s');
        });
        // ===============================================================================

        $pemasok = [];
        $jumlah_pemasok = 0;
        foreach ($pasok as $key => $value) {
            if(!in_array($value->id_pemasok, $pemasok)){
                array_push($pemasok, $value->id_pemasok);
                $jumlah_pemasok++;
            } 
        }

        // ===============================================================================
        
        $tgl1 = Carbon::parse($start_date)->isoFormat('D MMMM Y');
        $tgl2 = Carbon::parse($end_date)->isoFormat('D MMMM Y');
        $tgl = $tgl1.' s/d '.$tgl2;
 
        return Excel::download(new ExportLaporanPembelian($pasok, $pembelian, $jumlah_dos, $jumlah_pack, $harga_dos, $harga_pack, $tgl, $jumlah, $jumlah_pemasok, $harga_total), 'pembelian-'.now().'.xlsx');
    }
    public function printPembelian(Request $req)
    {
        // $start_date = $req->tgl_awal;
        // $end_date = $req->tgl_akhir;
        // $start_date2 = Carbon::parse($start_date)->format('Y-m-d');
        // $end_date2 = date('Y-m-d', strtotime($end_date.'+1 day'));
            
        $search_pembelian = $req->cari_pembelian;
        $search_pajak = $req->status_pajak;
        $filter = $req->filter;
        if($search_pajak == '1'){
            $search_pajak = 'ppn';
        }
        else if($search_pajak == '2'){
            $search_pajak = 'non_ppn';
        }
        else{
            $search_pajak = null;
        }
        
        if($req->tgl_awal != null || $req->tgl_akhir != null){
            $start_date = $req->tgl_awal;
            $end_date = $req->tgl_akhir;
            $start_date2 = Carbon::parse($start_date)->format('Y-m-d');
            $end_date2 = date('Y-m-d', strtotime($end_date.'+1 day'));
        }else{
            $get_start = Supply::first();
            $get_end = Supply::latest()->first();

            $start_date = $get_start->created_at->format('Y-m-d');
            $end_date = $get_end->created_at->format('Y-m-d');
            $start_date2 = Carbon::parse($start_date)->format('Y-m-d');
            $end_date2 = date('Y-m-d', strtotime($end_date.'+1 day'));
        }

        if($search_pajak){
            $pasok = supply::select('supplies.*', 'products.status_pajak')
            ->join('products', 'supplies.kode_barang', '=', 'products.kode_barang')
            ->whereBetween('supplies.created_at', [$start_date2, $end_date2])
            ->where('products.status_pajak', $search_pajak)
            ->where('supplies.status', 'lunas')
            ->orderBy('supplies.created_at', 'desc')
            ->where(function ($query) use($search_pembelian){
                $query->where('supplies.kode_pasok', 'like', '%'.$search_pembelian.'%')
                    ->orWhere('supplies.surat_jalan', 'like', '%'.$search_pembelian.'%')
                    ->orWhere('supplies.no_faktur', 'like', '%'.$search_pembelian.'%')
                    ->orWhere('supplies.nama_barang', 'like', '%'.$search_pembelian.'%')
                    ->orWhereHas('supplier', function($query) use ($search_pembelian){
                            $query->where('nama', 'like', '%'.$search_pembelian.'%');
                    });
            })
            ->get();
        }
        else{
            $pasok = supply::select('supplies.*', 'products.status_pajak')
            ->join('products', 'supplies.kode_barang', '=', 'products.kode_barang')
            ->whereBetween('supplies.created_at', [$start_date2, $end_date2])
            ->where('supplies.status', 'lunas')
            ->orderBy('supplies.created_at', 'desc')
            ->where(function ($query) use($search_pembelian){
                $query->where('supplies.kode_pasok', 'like', '%'.$search_pembelian.'%')
                    ->orWhere('supplies.surat_jalan', 'like', '%'.$search_pembelian.'%')
                    ->orWhere('supplies.no_faktur', 'like', '%'.$search_pembelian.'%')
                    ->orWhere('supplies.nama_barang', 'like', '%'.$search_pembelian.'%')
                    ->orWhereHas('supplier', function($query) use ($search_pembelian){
                            $query->where('nama', 'like', '%'.$search_pembelian.'%');
                    });
            })
            ->get();
        }
        $pasok = $pasok->sortBy('created_at');
        $pasok = $pasok->values()->all();
        // ===================================== Jumlah Stok ==========================================

        $dos = 0;
        $pack = 0;
        $harga_dos = 0;
        $harga_pack = 0;
        $harga_total = 0;
        foreach ($pasok as $key => $value) {
            $pp = Product::where('kode_barang', $value->kode_barang)->first();
            if(strtolower($value->jenis_kemasan) == 'pack'){
                $pack += $value->jumlah;
                $harga_pack += $value->subtotal;
            }else{
                $dos +=  $value->jumlah / $pp->pack;
                $harga_dos +=  $value->subtotal;
            }

            $harga_total += $value->subtotal;
        }
        $dos = (int) $dos ;
        $pack = (int) $pack ;

        // ==================================== ganti data pasok ===========================================

        array_walk($pasok, function(&$item, $key) {
            $product = Product::where('kode_barang', $item->kode_barang)->first();
            if(strtolower($item->jenis_kemasan) == 'pack'){
                $item->jumlah = $item->jumlah;
            }else{
                $item->jumlah = (int) $item->jumlah / $product->pack;
            }
            $item->nama_barang = $product->nama_barang;
            $item->status_pajak = (strtolower($item->status_pajak) == 'ppn') ? 'PPN' : 'Non PPN'; 
            $item->id_worker = User::find($item->id_worker)->nama;
            $item->id_pemasok = Supplier::find($item->id_pemasok)->nama;
            $item->created_at = $item->created_at->format('d-m-Y H:i:s');
        });
        // ===============================================================================
        $pemasok = [];
        $jumlah_pemasok = 0;
        foreach ($pasok as $key => $value) {
            if(!in_array($value->id_pemasok, $pemasok)){
                array_push($pemasok, $value->id_pemasok);
                $jumlah_pemasok++;
            } 
        }
        if($filter == 'pasok'){
            $supply = [];
            $kode_pasok = [];
            foreach ($pasok as $key => $value) {
                if(!in_array($value->kode_pasok, $kode_pasok)){
                    $total_harga = Supply::where('kode_pasok', $value->kode_pasok)->where('status', 'lunas')->sum('subtotal');
                    $value->subtotal = $total_harga;
                    array_push($kode_pasok, $value->kode_pasok);
                    array_push($supply, $value);
                } 
            }
            $pasok = $supply;  
        }
        $jumlah = count($pasok);
        // ===============================================================================
        
        $tgl1 = Carbon::parse($start_date)->isoFormat('D MMMM Y');
        $tgl2 = Carbon::parse($end_date)->isoFormat('D MMMM Y');
        $tgl = $tgl1.' s/d '.$tgl2;
        
        return view('report.print_laporan_pembelian', compact('pasok', 'dos', 'pack', 'harga_dos', 'harga_pack', 'tgl', 'jumlah', 'jumlah_pemasok', 'harga_total', 'filter'));
    }
public function getReturPembelian()
    {
        $retur_supply = ReturSupplier::whereDate('created_at', Carbon::today())
        ->select('retur_supplier.no_surat_keluar')
        ->orderBy('created_at', 'desc')
        ->get();
        $jumlah = count($retur_supply);
        // ===============================================================================
        $array = [];
        foreach ($retur_supply as $no => $retur_supp) {
            array_push($array, $retur_supp->no_surat_keluar);
        }
        $uniq = array_unique($array);
        $retur_pembelian = array_values($uniq);
        // ===============================================================================

        $retur_pasok = ReturSupplier::whereDate('created_at', Carbon::today())
        ->orderBy('created_at', 'desc')
        ->get();
        $retur_pasok = $retur_pasok->sortBy('created_at');
        $retur_pasok = $retur_pasok->values()->all();

        // ===================================== Jumlah Stok ==========================================

        $dos = 0;
        $pack = 0;
        $harga_total= 0;
        foreach ($retur_pasok as $key => $value) {
            $pp = Product::where('id', $value->id_product)->first();
            if(strtolower($value->jenis_kemasan) == 'pack'){
                $pack += $value->jumlah;
            }else{
                $dos +=  $value->jumlah;
            }

            $harga_total += $value->jumlah * $value->harga_modal;
        }
        $jumlah_dos = (int) $dos ;
        $jumlah_pack = (int) $pack ;

        // ==================================== ganti data transaksi ===========================================

        array_walk($retur_pasok, function(&$item, $key) {
            $product = Product::where('id', $item->id_product)->first();
            $item->nama_barang = $product->nama_barang;
            $item->created_at = $item->created_at->format('d-m-Y H:i:s');
            $item->id_product = $product->nama_barang;
        });
        // ===============================================================================

        $pemasok = [];
        $jumlah_pemasok = 0;
        foreach ($retur_pasok as $key => $value) {
            if(!in_array($value->nama_supplier, $pemasok)){
                array_push($pemasok, $value->nama_supplier);
                $jumlah_pemasok++;
            } 
        }

        // ===============================================================================
            
        $tgl = Carbon::parse(now())->isoFormat('D MMMM Y');

        return request()->json(200, [
            'tgl' => $tgl,
            'retur_pasok' => $retur_pasok,
            'jumlah_dos' => $jumlah_dos,
            'jumlah_pack' => $jumlah_pack,
            'jumlah' => $jumlah,
            'retur_pembelian' => $retur_pembelian,
            'pemasok' => $pemasok,
            'jumlah_pemasok' => $jumlah_pemasok,
            'jumlah_harga_total' => $harga_total,
        ]);
    }

    public function getReturPembelianFilter(Request $req)
    {

        $search_retur_pembelian = $req->cari_retur_pembelian;

        if($req->tgl_awal != null || $req->tgl_akhir != null){
            $start_date = $req->tgl_awal;
            $end_date = $req->tgl_akhir;
            $start_date2 = Carbon::parse($start_date)->format('Y-m-d');
            $end_date2 = date('Y-m-d', strtotime($end_date.'+1 day'));
        }else{
            $get_start = ReturSupplier::first();
            $get_end = ReturSupplier::latest()->first();

            $start_date = $get_start->created_at->format('Y-m-d');
            $end_date = $get_end->created_at->format('Y-m-d');
            $start_date2 = Carbon::parse($start_date)->format('Y-m-d');
            $end_date2 = date('Y-m-d', strtotime($end_date.'+1 day'));
        }

        $retur_supply = ReturSupplier::whereBetween('created_at', [$start_date2, $end_date2])
        ->select('retur_supplier.no_surat_keluar')
        ->where(function ($query) use($search_retur_pembelian){
            $query->where('no_surat_keluar', 'like', '%'.$search_retur_pembelian.'%')
                ->orWhere('nama_supplier', 'like', '%'.$search_retur_pembelian.'%')
                ->orWhereHas('product', function($query) use ($search_retur_pembelian){
                        $query->where('nama_barang', 'like', '%'.$search_retur_pembelian.'%');
                });
        })
        ->orderBy('created_at', 'desc')
        ->get();

        
        $jumlah = count($retur_supply);
        // ===============================================================================
        $array = [];
        foreach ($retur_supply as $no => $trans) {
            array_push($array, $trans->no_surat_keluar);
        }
        $uniq = array_unique($array);
        $retur_pembelian = array_values($uniq);
        // ===============================================================================

        $retur_pasok = ReturSupplier::whereBetween('created_at', [$start_date2, $end_date2])
        ->orderBy('created_at', 'desc')
        ->where(function ($query) use($search_retur_pembelian){
            $query->where('no_surat_keluar', 'like', '%'.$search_retur_pembelian.'%')
                ->orWhere('nama_supplier', 'like', '%'.$search_retur_pembelian.'%')
                ->orWhereHas('product', function($query) use ($search_retur_pembelian){
                        $query->where('nama_barang', 'like', '%'.$search_retur_pembelian.'%');
                });
        })
        ->get();
        
        $retur_pasok = $retur_pasok->sortBy('created_at');
        $retur_pasok = $retur_pasok->values()->all();

        // ===================================== Jumlah Stok ==========================================

        $dos = 0;
        $pack = 0;
        $harga_total = 0;
        foreach ($retur_pasok as $key => $value) {
            $pp = Product::where('id', $value->id_product)->first();
            if(strtolower($value->jenis_kemasan) == 'pack'){
                $pack += $value->jumlah;
            }else{
                $dos +=  $value->jumlah;
            }

            $harga_total += $value->jumlah * $value->harga_modal;
        }
        $jumlah_dos = (int) $dos ;
        $jumlah_pack = (int) $pack ;

        // ==================================== ganti data pasok ===========================================

        array_walk($retur_pasok, function(&$item, $key) {
            $product = Product::where('id', $item->id_product)->first();
            $item->nama_barang = $product->nama_barang;
            $item->created_at = $item->created_at->format('d-m-Y H:i:s');
            $item->id_product = $product->nama_barang;
        });
        // ===============================================================================
        
        $pemasok = [];
        $jumlah_pemasok = 0;
        foreach ($retur_pasok as $key => $value) {
            if(!in_array($value->nama_supplier, $pemasok)){
                array_push($pemasok, $value->nama_supplier);
                $jumlah_pemasok++;
            } 
        }

        // ===============================================================================

        $tgl1 = Carbon::parse($start_date)->isoFormat('D MMMM Y');
        $tgl2 = Carbon::parse($end_date)->isoFormat('D MMMM Y');
        $tgl = $tgl1.' s/d '.$tgl2;
        
        return request()->json(200, [
            'tgl' => $tgl,
            'retur_pasok' => $retur_pasok,
            'jumlah_dos' => $jumlah_dos,
            'jumlah_pack' => $jumlah_pack,
            'jumlah' => $jumlah,
            'retur_pembelian' => $retur_pembelian,
            'pemasok' => $pemasok,
            'jumlah_pemasok' => $jumlah_pemasok,
            'jumlah_harga_total' => $harga_total,
        ]);
    }

    public function exportReturPembelian(Request $req)
    {

        $search_retur_pembelian = $req->cari_retur_pembelian;

        if($req->tgl_awal != null || $req->tgl_akhir != null){
            $start_date = $req->tgl_awal;
            $end_date = $req->tgl_akhir;
            $start_date2 = Carbon::parse($start_date)->format('Y-m-d');
            $end_date2 = date('Y-m-d', strtotime($end_date.'+1 day'));
        }else{
            $get_start = ReturSupplier::first();
            $get_end = ReturSupplier::latest()->first();

            $start_date = $get_start->created_at->format('Y-m-d');
            $end_date = $get_end->created_at->format('Y-m-d');
            $start_date2 = Carbon::parse($start_date)->format('Y-m-d');
            $end_date2 = date('Y-m-d', strtotime($end_date.'+1 day'));
        }

        $retur_supply = ReturSupplier::whereBetween('created_at', [$start_date2, $end_date2])
        ->select('retur_supplier.no_surat_keluar')
        ->where(function ($query) use($search_retur_pembelian){
            $query->where('no_surat_keluar', 'like', '%'.$search_retur_pembelian.'%')
                ->orWhere('nama_supplier', 'like', '%'.$search_retur_pembelian.'%')
                ->orWhereHas('product', function($query) use ($search_retur_pembelian){
                        $query->where('nama_barang', 'like', '%'.$search_retur_pembelian.'%');
                });
        })
        ->orderBy('created_at', 'desc')
        ->get();

        $total_jumlah = count($retur_supply);
  
        // ===============================================================================
        $array = [];
        foreach ($retur_supply as $no => $trans) {
            array_push($array, $trans->no_surat_keluar);
        }
        $uniq = array_unique($array);
        $retur_pembelian = array_values($uniq);
        // ===============================================================================

        $retur_pasok = ReturSupplier::whereBetween('created_at', [$start_date2, $end_date2])
        ->orderBy('created_at', 'desc')
        ->where(function ($query) use($search_retur_pembelian){
            $query->where('no_surat_keluar', 'like', '%'.$search_retur_pembelian.'%')
                ->orWhere('nama_supplier', 'like', '%'.$search_retur_pembelian.'%')
                ->orWhereHas('product', function($query) use ($search_retur_pembelian){
                        $query->where('nama_barang', 'like', '%'.$search_retur_pembelian.'%');
                });
        })
        ->get();
        
        $retur_pasok = $retur_pasok->sortBy('created_at');
        $retur_pasok = $retur_pasok->values()->all();
        
        // ===================================== Jumlah Stok ==========================================

        $dos = 0;
        $pack = 0;
        $harga_total = 0;
        foreach ($retur_pasok as $key => $value) {
            $pp = Product::where('id', $value->id_product)->first();
            $value->nama_barang = $pp->nama_barang;
            if(strtolower($value->jenis_kemasan) == 'pack'){
                $pack += $value->jumlah;
            }else{
                $dos +=  $value->jumlah;
            }
            $harga_total += $value->jumlah * $value->harga_modal;
        }
        $jumlah_dos = (int) $dos ;
        $jumlah_pack = (int) $pack ;

        // ==================================== ganti data pasok ===========================================

        array_walk($retur_pasok, function(&$item, $key) {
            $item->created_at = $item->created_at->format('d-m-Y H:i:s');
        });
        // ===============================================================================

        $pemasok = [];
        $jumlah_pemasok = 0;
        foreach ($retur_pasok as $key => $value) {
            if(!in_array($value->nama_supplier, $pemasok)){
                array_push($pemasok, $value->nama_supplier);
                $jumlah_pemasok++;
            } 
        }

        $tgl1 = Carbon::parse($start_date)->isoFormat('D MMMM Y');
        $tgl2 = Carbon::parse($end_date)->isoFormat('D MMMM Y');
        $tgl = $tgl1.' s/d '.$tgl2;
        return Excel::download(new ExportLaporanReturPembelian($retur_pasok, $retur_pembelian, $jumlah_dos, $jumlah_pack, $tgl, $total_jumlah, $jumlah_pemasok, $harga_total), 'retur pembelian-'.now().'.xlsx');
    }

    public function printReturPembelian(Request $req)
    {
        $search_retur_pembelian = $req->cari_retur_pembelian;

        if($req->tgl_awal != null || $req->tgl_akhir != null){
            $start_date = $req->tgl_awal;
            $end_date = $req->tgl_akhir;
            $start_date2 = Carbon::parse($start_date)->format('Y-m-d');
            $end_date2 = date('Y-m-d', strtotime($end_date.'+1 day'));
        }else{
            $get_start = ReturSupplier::first();
            $get_end = ReturSupplier::latest()->first();

            $start_date = $get_start->created_at->format('Y-m-d');
            $end_date = $get_end->created_at->format('Y-m-d');
            $start_date2 = Carbon::parse($start_date)->format('Y-m-d');
            $end_date2 = date('Y-m-d', strtotime($end_date.'+1 day'));
        }

        $retur_supply = ReturSupplier::whereBetween('created_at', [$start_date2, $end_date2])
        ->select('retur_supplier.no_surat_keluar')
        ->where(function ($query) use($search_retur_pembelian){
            $query->where('no_surat_keluar', 'like', '%'.$search_retur_pembelian.'%')
                ->orWhere('nama_supplier', 'like', '%'.$search_retur_pembelian.'%')
                ->orWhereHas('product', function($query) use ($search_retur_pembelian){
                        $query->where('nama_barang', 'like', '%'.$search_retur_pembelian.'%');
                });
        })
        ->distinct()
        ->orderBy('created_at', 'desc')
        ->get();

        $jumlah = count($retur_supply);
  
        // ===============================================================================
        $array = [];
        foreach ($retur_supply as $no => $trans) {
            array_push($array, $trans->no_surat_keluar);
        }
        $uniq = array_unique($array);
        $retur_pembelian = array_values($uniq);
        // ===============================================================================

        $retur_pasok = ReturSupplier::whereBetween('created_at', [$start_date2, $end_date2])
        ->orderBy('created_at', 'desc')
        ->where(function ($query) use($search_retur_pembelian){
            $query->where('no_surat_keluar', 'like', '%'.$search_retur_pembelian.'%')
                ->orWhere('nama_supplier', 'like', '%'.$search_retur_pembelian.'%')
                ->orWhereHas('product', function($query) use ($search_retur_pembelian){
                        $query->where('nama_barang', 'like', '%'.$search_retur_pembelian.'%');
                });
        })
        ->get();
        
        $retur_pasok = $retur_pasok->sortBy('created_at');
        $retur_pasok = $retur_pasok->values()->all();
        
        // ===================================== Jumlah Stok ==========================================

        $dos = 0;
        $pack = 0;
        $harga_total = 0;
        foreach ($retur_pasok as $key => $value) {
            $pp = Product::where('id', $value->id_product)->first();
            $value->nama_barang = $pp->nama_barang;
            if(strtolower($value->jenis_kemasan) == 'pack'){
                $pack += $value->jumlah;
            }else{
                $dos +=  $value->jumlah;
            }

            $harga_total += $value->jumlah * $value->harga_modal;
        }
        $dos = (int) $dos ;
        $pack = (int) $pack ;

        // ==================================== ganti data pasok ===========================================

        array_walk($retur_pasok, function(&$item, $key) {
            $item->created_at = $item->created_at->format('d-m-Y H:i:s');
        });
        // ===============================================================================

        $pemasok = [];
        $jumlah_pemasok = 0;
        foreach ($retur_pasok as $key => $value) {
            if(!in_array($value->nama_supplier, $pemasok)){
                array_push($pemasok, $value->nama_supplier);
                $jumlah_pemasok++;
            } 
        }

        $tgl1 = Carbon::parse($start_date)->isoFormat('D MMMM Y');
        $tgl2 = Carbon::parse($end_date)->isoFormat('D MMMM Y');
        $tgl = $tgl1.' s/d '.$tgl2;
        $filter = $req->filter;
        return view('report.print_laporan_retur_pembelian', compact('retur_pasok', 'retur_pembelian', 'dos', 'pack', 'tgl', 'jumlah', 'jumlah_pemasok', 'harga_total', 'filter'));
    }
Editor is loading...