ReportManageController.php

 avatar
unknown
php_laravel_blade
2 years ago
38 kB
2
Indexable
public function exportPenjualan(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'));
        $filter = $req->filter;
        $search_penjualan = $req->cari_penjualan;
        $search_pajak = $req->status_pajak;
        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_start1 = Transaction::first();
            $get_start2 = TransactionNonPPN::first();
            if ($get_start1->created_at < $get_start2->created_at) {
                $get_start = $get_start1->created_at;
            }else{
                $get_start = $get_start2->created_at;
            }

            $get_end1 = Transaction::latest()->first();
            $get_end2 = TransactionNonPPN::latest()->first();
            if ($get_end1->created_at > $get_end2->created_at) {
                $get_end = $get_end1->created_at;
            }else{
                $get_end = $get_end2->created_at;
            }

            $start_date = $get_start->format('Y-m-d');
            $end_date = $get_end->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'));
        }

        $transaction = Transaction::whereBetween('created_at', [$start_date2, $end_date2])
        ->select('transactions.kode_transaksi')
        ->where('status', 'lunas')
        ->where(function ($query) use($search_penjualan){
            $query->where('kode_transaksi', 'like', '%' . $search_penjualan . '%')
                ->orWhere('nama_barang', 'like', '%' . $search_penjualan . '%')
                ->orWhereHas('customer', function($query) use ($search_penjualan){
                    $query->where('nama', 'like', '%'.$search_penjualan.'%');
                });
        })
        ->orderBy('created_at', 'desc')
        ->get();
        $transactionNonPPN = TransactionNonPPN::whereBetween('created_at', [$start_date2, $end_date2])
        ->select('transaction_non_ppn.kode_transaksi')
        ->where('status', 'lunas')
        ->where(function ($query) use($search_penjualan){
            $query->where('kode_transaksi', 'like', '%' . $search_penjualan . '%')
                ->orWhere('nama_barang', 'like', '%' . $search_penjualan . '%')
                ->orWhereHas('customer', function($query) use ($search_penjualan){
                    $query->where('nama', 'like', '%'.$search_penjualan.'%');
                });
        })
        ->orderBy('created_at', 'desc')
        ->get();
        $transaction = $transaction->concat($transactionNonPPN);
        $jumlah = count($transaction);
        // ===============================================================================
        $array = [];
        foreach ($transaction as $no => $trans) {
            array_push($array, $trans->kode_transaksi);
        }
        $uniq = array_unique($array);
        $penjualan = array_values($uniq);

        $per_transaksi = [];
        foreach ($penjualan as $i => $v) {
            $cc = Transaction::where('kode_transaksi', $v)->where('status','lunas')->first();
            if(!$cc){
                $cc = TransactionNonPPN::where('kode_transaksi', $v)->where('status','lunas')->first();
            }

            $bb = Customer::where('id', $cc->id_customer)->first();

            $ttl = Transaction::where('kode_transaksi', $v)->where('status','lunas')->sum('total_barang');
            $ttl1 = TransactionNonPPN::where('kode_Transaksi', $v)->where('status','lunas')->sum('total_barang');
            
            $jumlahBesarPpn = Transaction::join('products', 'transactions.kode_barang', '=', 'products.kode_barang')
                                        ->where('transactions.kode_transaksi', $v)
                                        ->where('transactions.status','lunas')
                                        ->where('transactions.jenis_kemasan', '!=', 'Pack')
                                        ->select(DB::raw('products.*,(transactions.jumlah / products.pack) as total_jumlah'))->get();
            $jumlahBesarNonPpn = TransactionNonPPN::join('products', 'transaction_non_ppn.kode_barang', '=', 'products.kode_barang')
                                        ->where('transaction_non_ppn.kode_transaksi', $v)
                                        ->where('transaction_non_ppn.status','lunas')
                                        ->where('transaction_non_ppn.jenis_kemasan', '!=', 'Pack')
                                        ->select(DB::raw('products.*,(transaction_non_ppn.jumlah / products.pack) as total_jumlah'))->get();
            $jumlahKecilPpn = Transaction::where('kode_Transaksi', $v)->where('status','lunas')->where('jenis_kemasan', 'Pack')->sum('jumlah');
            $jumlahKecilNonPpn = TransactionNonPPN::where('kode_Transaksi', $v)->where('status','lunas')->where('jenis_kemasan', 'Pack')->sum('jumlah');

            array_push($per_transaksi, [
                'kode_transaksi' => $v,
                'nama_customer' => ($bb != null) ? $bb->nama : 'Customer dihapus',
                'jumlah_besar' => ($jumlahBesarPpn->sum('total_jumlah') + $jumlahBesarNonPpn->sum('total_jumlah')),
                'jumlah_kecil' => ($jumlahKecilPpn + $jumlahKecilNonPpn),
                'total' => 'Rp '.number_format($ttl + $ttl1,2,',','.'),
                'kasir' => $cc->kasir,
                'created_at' => $cc->created_at->format('d/M/Y H:i:s'),
                'updated_at' => $cc->updated_at->format('d/M/Y H:i:s'),
            ]);
        }
        if($filter == 'penjualan'){
            $jumlah = count($penjualan);
        }
        // ===============================================================================

        $data_tr = Transaction::whereBetween('created_at', [$start_date2, $end_date2])
        ->where('status', 'lunas')
        ->orderBy('created_at', 'desc')
        ->where(function ($query) use($search_penjualan){
            $query->where('kode_transaksi', 'like', '%' . $search_penjualan . '%')
                ->orWhere('nama_barang', 'like', '%' . $search_penjualan . '%')
                ->orWhereHas('customer', function($query) use ($search_penjualan){
                    $query->where('nama', 'like', '%'.$search_penjualan.'%');
                });
        })
        ->get();
        $data_trr = TransactionNonPPN::whereBetween('created_at',[$start_date2, $end_date2])
        ->where('status', 'lunas')
        ->orderBy('created_at', 'desc')
        ->where(function ($query) use($search_penjualan){
            $query->where('kode_transaksi', 'like', '%' . $search_penjualan . '%')
                ->orWhere('nama_barang', 'like', '%' . $search_penjualan . '%')
                ->orWhereHas('customer', function($query) use ($search_penjualan){
                    $query->where('nama', 'like', '%'.$search_penjualan.'%');
                });
        })
        ->get();
        if($search_pajak == '1'){
            $transaksi = $data_tr;
        }
        else if($search_pajak == '2'){
            $transaksi = $data_trr;
        }
        else{
            $transaksi = $data_tr->merge($data_trr);
        }
        $transaksi = $transaksi->sortBy('created_at');
        $transaksi = $transaksi->values()->all();

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

        $dos = 0;
        $pack = 0;
        $total_harga = 0;
        $total_dos = 0;
        $total_pack = 0;
        foreach ($transaksi as $key => $value) {
            $pp = Product::where('kode_barang', $value->kode_barang)->first();
            if($pp != null){
                if(strtolower($value->jenis_kemasan) == 'pack'){
                    $pack += $value->jumlah;
                    $total_dos += $value->total_barang;
                }else{
                    $dos +=  $value->jumlah / $pp->pack;
                    $total_pack += $value->total_barang;
                }
            }

            $total_harga += $value->total_barang;
        }
        $jumlah_dos = (int) $dos ;
        $jumlah_pack = (int) $pack ;

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

        array_walk($transaksi, function(&$item, $key) {
            $item->kode_transaksi = $item->kode_transaksi.''.$item->luar_pulau;
            $product = Product::where('kode_barang', $item->kode_barang)->first();
            if($product != null){
                if(strtolower($item->jenis_kemasan) == 'pack'){
                    $item->jumlah = $item->jumlah;
                }else{
                    $item->jumlah = (int) $item->jumlah / $product->pack;
                }
            }else{
                 $item->jumlah = $item->jumlah;
            }
            $item->id_kasir = User::find($item->id_kasir)->nama;
            $item->id_customer = (Customer::find($item->id_customer) != null) ? Customer::find($item->id_customer)->nama : 'Customer dihapus';
            $item->created_at = $item->created_at->format('d-m-Y H:i:s');
        });
        // ===============================================================================

        $pelanggan = [];
        $jumlah_pelanggan = 0;
        foreach ($transaksi as $key => $value) {
            if(!in_array($value->id_customer, $pelanggan)){
                array_push($pelanggan, $value->id_customer);
                $jumlah_pelanggan++;
            } 
        }

        // ===============================================================================
        
        $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 ExportLaporanPenjualan($transaksi, $per_transaksi, $filter, $penjualan, $jumlah_dos, $jumlah_pack, $tgl, $jumlah, $jumlah_pelanggan, $total_harga, $total_dos, $total_pack), 'penjualan-'.now().'.xlsx');
    }
    public function printPenjualan(Request $req)
    {
        $filter = $req->filter;
        $search_penjualan = $req->cari_penjualan;
        $search_pajak = $req->status_pajak;
        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_start1 = Transaction::first();
            $get_start2 = TransactionNonPPN::first();
            if ($get_start1->created_at < $get_start2->created_at) {
                $get_start = $get_start1->created_at;
            }else{
                $get_start = $get_start2->created_at;
            }

            $get_end1 = Transaction::latest()->first();
            $get_end2 = TransactionNonPPN::latest()->first();
            if ($get_end1->created_at > $get_end2->created_at) {
                $get_end = $get_end1->created_at;
            }else{
                $get_end = $get_end2->created_at;
            }

            $start_date = $get_start->format('Y-m-d');
            $end_date = $get_end->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'));
        }

        $transaction = Transaction::whereBetween('created_at', [$start_date2, $end_date2])
        ->select('transactions.kode_transaksi')
        ->where('status', 'lunas')
        ->where(function ($query) use($search_penjualan){
            $query->where('kode_transaksi', 'like', '%' . $search_penjualan . '%')
                ->orWhere('nama_barang', 'like', '%' . $search_penjualan . '%')
                ->orWhereHas('customer', function($query) use ($search_penjualan){
                    $query->where('nama', 'like', '%'.$search_penjualan.'%');
                });
        })
        ->orderBy('created_at', 'desc')
        ->get();
        $transactionNonPPN = TransactionNonPPN::whereBetween('created_at', [$start_date2, $end_date2])
        ->select('transaction_non_ppn.kode_transaksi')
        ->where('status', 'lunas')
        ->where(function ($query) use($search_penjualan){
            $query->where('kode_transaksi', 'like', '%' . $search_penjualan . '%')
                ->orWhere('nama_barang', 'like', '%' . $search_penjualan . '%')
                ->orWhereHas('customer', function($query) use ($search_penjualan){
                    $query->where('nama', 'like', '%'.$search_penjualan.'%');
                });
        })
        ->orderBy('created_at', 'desc')
        ->get();
        $transaction = $transaction->concat($transactionNonPPN);
        $jumlah = count($transaction);
        // ===============================================================================
        $array = [];
        foreach ($transaction as $no => $trans) {
            array_push($array, $trans->kode_transaksi);
        }
        $uniq = array_unique($array);
        $penjualan = array_values($uniq);

        $per_transaksi = [];
        foreach ($penjualan as $i => $v) {
            $cc = Transaction::where('kode_transaksi', $v)->where('status','lunas')->first();
            if(!$cc){
                $cc = TransactionNonPPN::where('kode_transaksi', $v)->where('status','lunas')->first();
            }

            $bb = Customer::where('id', $cc->id_customer)->first();
            
            $ttl = Transaction::where('kode_transaksi', $v)->where('status','lunas')->sum('total_barang');
            $ttl1 = TransactionNonPPN::where('kode_Transaksi', $v)->where('status','lunas')->sum('total_barang');
            
            $jumlahBesarPpn = Transaction::join('products', 'transactions.kode_barang', '=', 'products.kode_barang')
                                        ->where('transactions.kode_transaksi', $v)
                                        ->where('transactions.status','lunas')
                                        ->where('transactions.jenis_kemasan', '!=', 'Pack')
                                        ->select(DB::raw('products.*,(transactions.jumlah / products.pack) as total_jumlah'))->get();
            $jumlahBesarNonPpn = TransactionNonPPN::join('products', 'transaction_non_ppn.kode_barang', '=', 'products.kode_barang')
                                        ->where('transaction_non_ppn.kode_transaksi', $v)
                                        ->where('transaction_non_ppn.status','lunas')
                                        ->where('transaction_non_ppn.jenis_kemasan', '!=', 'Pack')
                                        ->select(DB::raw('products.*,(transaction_non_ppn.jumlah / products.pack) as total_jumlah'))->get();
            $jumlahKecilPpn = Transaction::where('kode_Transaksi', $v)->where('status','lunas')->where('jenis_kemasan', 'Pack')->sum('jumlah');
            $jumlahKecilNonPpn = TransactionNonPPN::where('kode_Transaksi', $v)->where('status','lunas')->where('jenis_kemasan', 'Pack')->sum('jumlah');
            
            array_push($per_transaksi, [
                'kode_transaksi' => $v,
                'nama_customer' => ($bb != null) ? $bb->nama : 'Customer dihapus',
                'jumlah_besar' => ($jumlahBesarPpn->sum('total_jumlah') + $jumlahBesarNonPpn->sum('total_jumlah')),
                'jumlah_kecil' => ($jumlahKecilPpn + $jumlahKecilNonPpn),
                'total' => 'Rp '.number_format($ttl + $ttl1,2,',','.'),
                'kasir' => $cc->kasir,
                'created_at' => $cc->created_at->format('d/M/Y H:i:s'),
                'updated_at' => $cc->updated_at->format('d/M/Y H:i:s'),
            ]);
        }
        if($filter == 'penjualan'){
            $jumlah = count($penjualan);
        }
        // ===============================================================================

        $data_tr = Transaction::whereBetween('created_at', [$start_date2, $end_date2])
        ->where('status', 'lunas')
        ->orderBy('created_at', 'desc')
        ->where(function ($query) use($search_penjualan){
            $query->where('kode_transaksi', 'like', '%' . $search_penjualan . '%')
                ->orWhere('nama_barang', 'like', '%' . $search_penjualan . '%')
                ->orWhereHas('customer', function($query) use ($search_penjualan){
                    $query->where('nama', 'like', '%'.$search_penjualan.'%');
                });
        })
        ->get();
        $data_trr = TransactionNonPPN::whereBetween('created_at',[$start_date2, $end_date2])
        ->where('status', 'lunas')
        ->orderBy('created_at', 'desc')
        ->where(function ($query) use($search_penjualan){
            $query->where('kode_transaksi', 'like', '%' . $search_penjualan . '%')
                ->orWhere('nama_barang', 'like', '%' . $search_penjualan . '%')
                ->orWhereHas('customer', function($query) use ($search_penjualan){
                    $query->where('nama', 'like', '%'.$search_penjualan.'%');
                });
        })
        ->get();
        if($search_pajak == '1'){
            $transaksi = $data_tr;
        }
        else if($search_pajak == '2'){
            $transaksi = $data_trr;
        }
        else{
            $transaksi = $data_tr->merge($data_trr);
        }
        $transaksi = $transaksi->sortBy('created_at');
        $transaksi = $transaksi->values()->all();

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

        $dos = 0;
        $pack = 0;
        $total_harga = 0;
        $total_dos = 0;
        $total_pack = 0;
        foreach ($transaksi as $key => $value) {
            $pp = Product::where('kode_barang', $value->kode_barang)->first();
            if($pp != null){
                if(strtolower($value->jenis_kemasan) == 'pack'){
                    $pack += $value->jumlah;
                    $total_dos += $value->total_barang;
                }else{
                    $dos +=  $value->jumlah / $pp->pack;
                    $total_pack += $value->total_barang;
                }
            }
            $total_harga += $value->total_barang;
        }
        $dos = (int) $dos ;
        $pack = (int) $pack ;

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

        array_walk($transaksi, function(&$item, $key) {
            $item->kode_transaksi = $item->kode_transaksi.''.$item->luar_pulau;
            $product = Product::where('kode_barang', $item->kode_barang)->first();
            if($product != null){
                if(strtolower($item->jenis_kemasan) == 'pack'){
                    $item->jumlah = $item->jumlah;
                }else{
                    $item->jumlah = (int) $item->jumlah / $product->pack;
                }
            }else{
                 $item->jumlah = $item->jumlah;
            }
            $item->id_kasir = User::find($item->id_kasir)->nama;
            $item->id_customer = (Customer::find($item->id_customer) != null) ? Customer::find($item->id_customer)->nama : 'Customer dihapus';
            $item->created_at = $item->created_at->format('d-m-Y H:i:s');
        });
        // ===============================================================================

        $pelanggan = [];
        $jumlah_pelanggan = 0;
        foreach ($transaksi as $key => $value) {
            if(!in_array($value->id_customer, $pelanggan)){
                array_push($pelanggan, $value->id_customer);
                $jumlah_pelanggan++;
            } 
        }

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

        $sum_transaction = Transaction::whereBetween('created_at', [$start_date2, $end_date2])
        ->where('status', 'lunas')
        ->where(function ($query) use($search_penjualan){
            $query->where('kode_transaksi', 'like', '%' . $search_penjualan . '%')
                ->orWhere('nama_barang', 'like', '%' . $search_penjualan . '%')
                ->orWhereHas('customer', function($query) use ($search_penjualan){
                    $query->where('nama', 'like', '%'.$search_penjualan.'%');
                });
        })
        ->sum('total_barang');
        $sum_transactionNonPPN = TransactionNonPPN::whereBetween('created_at', [$start_date2, $end_date2])
        ->where('status', 'lunas')
        ->where(function ($query) use($search_penjualan){
            $query->where('kode_transaksi', 'like', '%' . $search_penjualan . '%')
                ->orWhere('nama_barang', 'like', '%' . $search_penjualan . '%')
                ->orWhereHas('customer', function($query) use ($search_penjualan){
                    $query->where('nama', 'like', '%'.$search_penjualan.'%');
                });
        })
        ->sum('total_barang');
        $total = $sum_transaction + $sum_transactionNonPPN;
        $total = number_format($total, 0, ',', '.');
        // ===============================================================================
        
        $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_penjualan', compact('transaksi','per_transaksi','filter','penjualan', 'dos', 'pack', 'total', 'tgl', 'jumlah', 'jumlah_pelanggan', 'total_harga', 'total_dos', 'total_pack'));
    }
public function exportPembelian(Request $req)
    {
        $filter = $req->filter;
        $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();
        }
  
        $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++;
            } 
        }
        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;
                    $jumlahBesar = Supply::join('products', 'supplies.kode_barang', '=', 'products.kode_barang')
                                                ->where('supplies.kode_pasok', $value->kode_pasok)
                                                ->where('supplies.status','lunas')
                                                ->where('supplies.jenis_kemasan', '!=', 'Pack')
                                                ->select(DB::raw('products.*,(supplies.jumlah / products.pack) as total_jumlah'))->get();
                    $value->jumlah_besar = $jumlahBesar->sum('total_jumlah');
                    $value->jumlah_kecil = Supply::where('kode_pasok', $value->kode_pasok)->where('status', 'lunas')->where('jenis_kemasan', 'pack')->sum('jumlah');
                    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 Excel::download(new ExportLaporanPembelian($pasok, $filter, $pembelian, $jumlah_dos, $jumlah_pack, $harga_dos, $harga_pack, $tgl, $jumlah, $jumlah_pemasok, $harga_total), 'pembelian-'.now().'.xlsx');
    }
    public function printPembelian(Request $req)
    {
            
        $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->status_pajak = (strtolower($item->status_pajak) == 'ppn') ? 'PPN' : 'Non PPN';
            $item->nama_barang = $product->nama_barang; 
            $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;
                    $jumlahBesar = Supply::join('products', 'supplies.kode_barang', '=', 'products.kode_barang')
                                                ->where('supplies.kode_pasok', $value->kode_pasok)
                                                ->where('supplies.status','lunas')
                                                ->where('supplies.jenis_kemasan', '!=', 'Pack')
                                                ->select(DB::raw('products.*,(supplies.jumlah / products.pack) as total_jumlah'))->get();
                    $value->jumlah_besar = $jumlahBesar->sum('total_jumlah');
                    $value->jumlah_kecil = Supply::where('kode_pasok', $value->kode_pasok)->where('status', 'lunas')->where('jenis_kemasan', 'pack')->sum('jumlah');
                    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'));
    }
Editor is loading...