<?php
namespace App\Http\Controllers;
use App\Models\Countdown;
use App\Models\DetailPenjualan;
use App\Models\Item;
use App\Models\KategoriItem;
use App\Models\LaporanKasir;
use App\Models\PembayaranHutang;
use App\Models\PembayaranPiutang;
use App\Models\Pembelian;
use App\Models\Pengguna;
use App\Models\Penjualan;
use App\Models\refund;
use App\Models\ReturPembelian;
use App\Models\ReturPenjualan;
use App\Models\Service;
use App\Models\TransaksiGudang;
use Carbon\Carbon;
use DateInterval;
use DatePeriod;
use DateTime;
use Illuminate\Http\Request;
class DashboardController extends Controller
{
public function index(Request $request)
{
if (str_contains(request()->getHost(), "fixmate")){
$countdown = Countdown::latest()->first()->countdown ?? env("COUNTDOWN");
$countdown = $countdown ? date("Y-m-d H:i:s", strtotime($countdown)) : null;
if ($countdown && now()->isAfter($countdown)) {
return redirect()->route('invalid');
}
}
if (!auth()->guard('penggunas')->check()) {
return view('dashboard.user');
}
$omsetPenjualan = 0;
$pengembalian = 0;
$service = 0;
$omsetKotor = 0;
$diskon = 0;
$penjualanBersih = 0;
$labaKotor = 0;
$t_laporan_kasir = 0;
// this will default to a time of 00:00:00
$begin = new DateTime('-1 month');
$end = new DateTime();
$periode = [
$begin->format('d/m/Y'),
$end->format('d/m/Y'),
];
if (request()->periode) {
$periode = explode(" - ", request()->periode);
$begin = DateTime::createFromFormat('d/m/Y', $periode[0]);
$end = DateTime::createFromFormat('d/m/Y', $periode[1]);
}
$end->modify('+1 day');
$interval = new DateInterval('P1D');
$daterange = new DatePeriod($begin, $interval, $end);
$periodeTanggals = [];
foreach ($daterange as $date) {
$periodeTanggals[] = strftime("%d-%m", strtotime($date->format("Y-m-d")));
}
$end = $end->modify('-1 day');
$start = $begin->format('Y-m-d');
$finish = $end->format('Y-m-d');
$queryServicesSelesai = Service::query();
$queryServices = Service::query();
if ($start == $finish) {
$data_service = Service::filterToko()->with('detail','sparepart_luar')->whereDate("tanggal", $begin->format('Y-m-d'))->latest()->get();
$data_service_selesai = Service::where('status_transaksi', 'success')->filterToko()->with('detail','sparepart_luar')->whereDate("tanggal_selesai", $begin->format('Y-m-d'))->latest()->get();
//$data_lapraon_kasir = LaporanKasir::whereDate("tanggal", $begin->format('Y-m-d'))->latest()->get();
$penjualans = Penjualan::with('detail_penjualan.detail_pengembalians')->whereDate('jam_selesai', $begin)->where('status_pembayaran', 'lunas')->whereNull('status_lanjutan')->filterToko();
$queryServicesSelesai = $queryServicesSelesai->whereDate('tanggal_selesai', $begin)->filterToko();
$queryServices = $queryServices->whereDate('tanggal', $begin)->filterToko();
$queryPenjualans = Penjualan::with('detail_penjualan.detail_pengembalians')->whereDate('jam_selesai', $begin)->filterToko();
} else {
$data_service = Service::filterToko()->with('detail','sparepart_luar')->tanggal($begin, $end)->latest()->get();
$data_service_selesai = Service::where('status_transaksi', 'success')->filterToko()->with('detail','sparepart_luar')->selesai($begin, $end)->latest()->get();
// $data_lapraon_kasir = LaporanKasir::whereBetween("tanggal", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->latest()->get();
$penjualans = Penjualan::with('detail_penjualan.detail_pengembalians')->where('status_pembayaran', 'lunas')->whereNull('status_lanjutan')->whereDateBetween("jam_selesai", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->filterToko();
$queryServicesSelesai = $queryServicesSelesai->selesai($begin, $end)->filterToko();
$queryServices = $queryServices->tanggal($begin, $end)->filterToko();
$queryPenjualans = Penjualan::with('detail_penjualan.detail_pengembalians')->whereDateBetween("jam_selesai", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->filterToko();
}
if (isset($request->pengguna_id) && $request->pengguna_id != "") {
$penggunaId = $request->pengguna_id;
$penjualans = $penjualans->where('pengguna_id', $penggunaId);
$queryServicesSelesai = $queryServicesSelesai->where('pengguna_id', $penggunaId);
$queryServices = $queryServices->where('pengguna_id', $penggunaId);
$queryPenjualans = $queryPenjualans->where('pengguna_id', $penggunaId);
}
$service_lunas = (clone $queryServicesSelesai)->where('status_transaksi', 'success')->where('status_pembayaran', 'lunas');
$dp_total_service = (clone $queryServices)->where('status_pembayaran', '!=', 'lunas')->where('status_transaksi', '!=', 'cancel')->where('uang_bayar','>',0)->sum('uang_bayar');
$lunas_total_service = (clone $queryServices)->where('status_pembayaran', '!=', 'lunas')->where('status_transaksi', '!=', 'cancel')->where('uang_bayar','>',0)->get()->sum('grand_total');
$dp_total_penjualan = $queryPenjualans->where('status_pembayaran', 'belum lunas')->sum('uang_bayar');
$omsetPenjualan = $penjualans->get()->sum('total');
$penjualan_o = $penjualans->get();
foreach ($penjualan_o as $penjualans) {
foreach ($penjualans->detail_penjualan as $dp) {
$hargaBeli = $dp->item->biaya_item ?? 0;
$total = ($dp->harga_item * $dp->qty);
$totalDiskon = 0;
$pengembalian += $dp->detail_pengembalians->sum('total');
$diskon += $totalDiskon;
$penjualanBersih += $total - $totalDiskon - $dp->detail_pengembalians->sum('total');
$labaKotor += ($total - $totalDiskon - $dp->detail_pengembalians->sum('total')) - ($hargaBeli * $dp->qty);
}
}
$service = $service_lunas->get()->sum('grand_total');
$omsetKotor = $omsetPenjualan + $service;
$charts = [
'omsetPenjualan' => [],
'pengembalian' => [],
'service' => [],
'omsetKotor' => [],
'diskon' => [],
'penjualanBersih' => [],
'hargaPokok' => [],
'labaKotor' => []
];
foreach ($daterange as $key => $date) {
$time = Carbon::createFromTime(8, 0, 0);
$g_omsetPenjualan = Penjualan::whereDate('jam_selesai', $date->format('Y-m-d'))->where('status_pembayaran', 'lunas')->whereNull('status_lanjutan')->filterToko()->sum('uang_masuk');
$g_service = 0;
$g_diskon = 0;
$g_penjualanBersih = 0;
$g_hargaPokok = 0;
$g_labaKotor = 0;
$detail_penjualans = DetailPenjualan::with('detail_pengembalians')->whereDate('created_at', $date->format('Y-m-d'))->whereHas('penjualan', function ($w) {
$w->filterToko();
})->get();
foreach ($detail_penjualans as $dp) {
$hargaBeli = $dp->item->biaya_item ?? 0;
$total = ($dp->harga_item * $dp->qty);
$totalDiskon = 0;
$g_diskon += $totalDiskon;
$g_penjualanBersih += $total - $totalDiskon - $dp->detail_pengembalians->sum('total');
$g_hargaPokok += ($hargaBeli * $dp->qty);
$g_labaKotor += ($total - $totalDiskon - $dp->detail_pengembalians->sum('total')) - ($hargaBeli * $dp->qty);
}
$service_lunas = Service::whereDate('tanggal_selesai', $date->format('Y-m-d'))->filterToko()->get();
if (isset($service_lunas)) {
foreach ($service_lunas as $ds) {
$g_service += $ds->grand_total;
}
}
$charts['omsetPenjualan'][] = $g_omsetPenjualan;
$charts['service'][] = $g_service;
$charts['diskon'][] = $g_diskon;
$charts['penjualanBersih'][] = $g_penjualanBersih;
$charts['hargaPokok'][] = $g_hargaPokok;
$charts['labaKotor'][] = $g_labaKotor;
}
// data perjam
$omset_penjualan_perjam = 0;
$omset_service_perjam = 0;
$jam = [];
for ($hour = 0; $hour < 24; $hour++) {
$startTime = $hour . ':00:00';
$endTime = $hour . ':59:59';
$jam[] = $hour;
if ($start == $finish) {
$service_jam = Service::whereDate('jam_selesai', $begin)->where('status_pembayaran', 'lunas')->whereTime('jam_selesai', '>=', $startTime)
->whereTime('jam_selesai', '<=', $endTime)
->filterToko()
->get();
$penjualan_jam = Penjualan::whereDate('jam_selesai', $begin)->where('status_pembayaran', 'lunas')->whereNull('status_lanjutan')->whereTime('jam_selesai', '>=', $startTime)
->whereTime('jam_selesai', '<=', $endTime)
->filterToko()
->get();
} else {
$service_jam = Service::selesai($begin, $end)->where('status_pembayaran', 'lunas')->whereTime('jam_selesai', '>=', $startTime)
->whereTime('jam_selesai', '<=', $endTime)
->filterToko()
->get();
$penjualan_jam = Penjualan::whereDateBetween("jam_selesai", [$begin->format('Y-m-d'), $end->format('Y-m-d')])->where('status_pembayaran', 'lunas')->whereNull('status_lanjutan')->whereTime('jam_selesai', '>=', $startTime)
->whereTime('jam_selesai', '<=', $endTime)
->filterToko()
->get();
}
$omset_penjualan_perjam = 0;
foreach ($penjualan_jam as $penjualan) {
$omset_penjualan_perjam += $penjualan->uang_masuk;
}
$omset_service_perjam = 0;
foreach ($service_jam as $s) {
$omset_service_perjam += $s->grand_total;
}
$charts_perjam['penjualanPerjam'][] = $omset_penjualan_perjam;
$charts_perjam['servicePerjam'][] = $omset_service_perjam;
}
$karyawans = Pengguna::get();
$kategoris = KategoriItem::get();
if ($start == $finish) {
$t_service = Service::whereDate('tanggal', $begin)->filterToko();
$t_refund = refund::whereDate('created_at', $begin);
$t_penjualan = Penjualan::whereDate('created_at', $begin)->filterToko();
$t_pembelian = Pembelian::whereDate('created_at', $begin)->filterToko();
$t_retur_pembelian = ReturPembelian::whereDate('created_at', $begin)->filterToko();
$t_retur_penjualan = ReturPenjualan::whereDate('created_at', $begin)->filterToko();
$t_pembayaran_piutang = PembayaranPiutang::whereDate('created_at', $begin);
$t_pembayaran_hutang = PembayaranHutang::whereDate('created_at', $begin);
$t_transaksi_gudang = TransaksiGudang::whereDate('created_at', $begin);
$laporan_kasir = LaporanKasir::whereDate('tanggal', $begin->format('Y-m-d'))->filterToko();
} else {
$t_service = Service::whereDateBetween('tanggal', [$begin, $end])->filterToko();
$t_refund = refund::whereBetween('created_at', [$begin, $end]);
$t_penjualan = Penjualan::whereBetween('created_at', [$begin, $end])->filterToko();
$t_pembelian = Pembelian::whereBetween('created_at', [$begin, $end])->filterToko();
$t_retur_pembelian = ReturPembelian::whereBetween('created_at', [$begin, $end])->filterToko();
$t_retur_penjualan = ReturPenjualan::whereBetween('created_at', [$begin, $end])->filterToko();
$t_pembayaran_piutang = PembayaranPiutang::whereBetween('created_at', [$begin, $end]);
$t_pembayaran_hutang = PembayaranHutang::whereBetween('created_at', [$begin, $end]);
$t_transaksi_gudang = TransaksiGudang::whereBetween('created_at', [$begin, $end]);
$laporan_kasir = LaporanKasir::whereBetween('tanggal', [$begin->format('Y-m-d'), $end->format('Y-m-d')])->filterToko();
}
// dd($laporan_kasir->get());
if (isset($request->pengguna_id)) {
$t_service->where('pengguna_id', $request->pengguna_id);
$t_penjualan->where('pengguna_id', $request->pengguna_id);
$t_pembelian->where('pengguna_id', $request->pengguna_id);
$t_retur_pembelian->where('pengguna_id', $request->pengguna_id);
$t_retur_penjualan->where('pengguna_id', $request->pengguna_id);
$t_transaksi_gudang->where('pengguna_id', $request->pengguna_id);
$laporan_kasir->where('pengguna_id', $request->pengguna_id);
}
$dp_service_lunas = Service::where(function ($w) {
$w->where('status_transaksi', 'success')->where('status_pembayaran', 'lunas');
})->filterToko();
$dp_service_lunas = $dp_service_lunas->selesai($begin, $end)->get();
$dp_total_service_lunas = $dp_service_lunas->sum('uang_bayar');
$laporan_kasir = $laporan_kasir->get();
$t_laporan_kasir = $laporan_kasir->sum('omset_cash') + $laporan_kasir->sum('omset_transfer');
$t_laporan_uang_muka = 0;
$t_refund = $t_refund->get();
$refund = $t_refund->sum('uang_refund');
if (isset($refund)) {
$refund = $refund;
} else {
$refund = 0;
}
$t_laporan_uang_muka +=$laporan_kasir->sum('uang_muka_cash') + $laporan_kasir->sum('uang_muka_transfer');
$t_laporan_kasir = $t_laporan_kasir + $dp_total_service_lunas;
// Transaksi
$pengguna = Pengguna::all();
$t_service_proses = (clone $t_service)->where('status_transaksi', 'proses')->count();
// status
$pending = (clone $t_service)->where('status', 'pending')->where('status_transaksi', 'proses')->count();
$indent = (clone $t_service)->where('status', 'indent')->where('status_transaksi', 'proses')->count();
$pengecekan = (clone $t_service)->where('status', 'pengecekan')->where('status_transaksi', 'proses')->count();
$konfirmasi = (clone $t_service)->where('status', 'konfirmasi')->where('status_transaksi', 'proses')->count();
$hp_bisa_diperbaiki = (clone $t_service)->where('status', 'hp_bisa_diperbaiki')->where('status_transaksi', 'proses')->count();
$hp_normal = (clone $t_service)->where('status', 'hp_normal')->where('status_transaksi', 'proses')->count();
$pending_perbaikan = (clone $t_service)->where('status', 'pending_perbaikan')->where('status_transaksi', 'proses')->count();
$proses_perbaikan = (clone $t_service)->where('status', 'proses_perbaikan')->where('status_transaksi', 'proses')->count();
$selesai = (clone $t_service)->where('status', 'selesai')->where('status_transaksi', 'proses')->count();
$batal = (clone $t_service)->where('status', 'batal')->where('status_transaksi', 'proses')->count();
$tidak_bisa_diperbaiki = (clone $t_service)->where('status', 'tidak_bisa_diperbaiki')->where('status_transaksi', 'proses')->count();
$gagal_perbaikan = (clone $t_service)->where('status', 'gagal_perbaikan')->where('status_transaksi', 'proses')->count();
$tidak_deal = (clone $t_service)->where('status', 'tidak_deal')->where('status_transaksi', 'proses')->count();
$countdown = Countdown::get();
$uang_bayar_penjualan = Penjualan::tanggal($begin, $end)->filterToko()->sum('uang_bayar');
$uang_bayar_service = Service::tanggal($begin, $end)->filterToko()->sum('uang_bayar');
$uang_bayar_penjualan_lunas = Penjualan::selesai($begin, $end)->where('status_pembayaran', 'lunas')->whereNull('status_lanjutan')->filterToko()->sum('uang_bayar');
$uang_bayar_service_lunas = Service::tanggal($begin, $end)->where('status_pembayaran', 'lunas')->where('status_transaksi', 'success')->filterToko()->sum('uang_bayar');
$data = [
'uang_bayar_penjualan' => $uang_bayar_penjualan,
'uang_bayar_service' => $uang_bayar_service,
'uang_bayar_penjualan_lunas' => $uang_bayar_penjualan_lunas,
'uang_bayar_service_lunas' => $uang_bayar_service_lunas,
't_service' => $t_service->count(),
't_penjualan' => $t_penjualan->count(),
't_pembelian' => $t_pembelian->count(),
'countdown' => $countdown,
't_retur_penjualan' => $t_retur_penjualan->count(),
't_retur_pembelian' => $t_retur_pembelian->count(),
't_transaksi_gudang' => $t_transaksi_gudang->count(),
't_pembayaran_hutang' => $t_pembayaran_hutang->count(),
't_pembayaran_piutang' => $t_pembayaran_piutang->count(),
't_laporan_kasir' => $t_laporan_kasir,
't_laporan_uang_muka' => $t_laporan_uang_muka,
't_service_proses' => $t_service_proses,
'pending' => $pending,
'indent' => $indent,
'pengecekan' => $pengecekan,
'konfirmasi' => $konfirmasi,
'hp_bisa_diperbaiki' => $hp_bisa_diperbaiki,
'hp_normal' => $hp_normal,
'pending_perbaikan' => $pending_perbaikan,
'proses_perbaikan' => $proses_perbaikan,
'selesai' => $selesai,
'batal' => $batal,
'tidak_bisa_diperbaiki' => $tidak_bisa_diperbaiki,
'gagal_perbaikan' => $gagal_perbaikan,
'tidak_deal' => $tidak_deal,
'omsetPenjualan' => $omsetPenjualan,
'omsetKotor' => $omsetKotor,
'dp_total_penjualan' => $dp_total_penjualan,
'dp_total_service' => $dp_total_service,
'pengembalian' => $pengembalian,
'service' => $service,
'diskon' => $diskon,
'penjualanBersih' => $penjualanBersih,
'labaKotor' => $labaKotor,
'periodeTanggals' => $periodeTanggals,
'charts' => $charts,
'charts_perjam' => $charts_perjam,
'periode' => $periode,
'jam' => $jam,
'karyawans' => $karyawans,
'kategoris' => $kategoris,
'pengguna' => $pengguna,
'request' => $request,
'data_service' => $data_service,
'data_service_selesai' => $data_service_selesai,
'data_laporan_kasir' => $laporan_kasir,
'lunas_total_service' => $lunas_total_service
];
return view('dashboard.pengguna', $data);
}
}
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]